From: Andy Scherzinger Date: Thu, 6 Aug 2015 15:23:02 +0000 (+0200) Subject: Merge branch 'develop' of https://github.com/owncloud/android into material_toolbar X-Git-Tag: oc-android-1.8~42^2~27 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/9d9efd1c1ded9c225c16be80f4b648018839f3ef?hp=-c Merge branch 'develop' of https://github.com/owncloud/android into material_toolbar Conflicts: owncloud-android-library --- 9d9efd1c1ded9c225c16be80f4b648018839f3ef diff --combined res/values-de-rDE/strings.xml index 88ee94db,6e2552c5..b529426e --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@@ -202,7 -202,7 +202,7 @@@ Nur lokal Nur lokale Inhalte Vom Server entfernen - Lokal und auf dem Server + Lokal und auf Server Erfolgreich gelöscht Der Löschvorgang konnte nicht beendet werden Geben Sie einen neuen Namen ein @@@ -254,11 -254,7 +254,7 @@@ Fotos nur über WiFi hochladen Videos nur über WiFi hochladen /SofortUpload - Konflikt beim Update - Serverdatei %s ist nicht synchronisiert mit der lokalen Datei. Weitermachen bedeutet, dass der Inhalt der Datei auf dem Server ersetzt wird. Beide behalten - Überschreiben - Nicht hochladen Bildvorschau Dieses Bild kann nicht angezeigt werden %1$s konnte nicht in den lokalen %2$s Ordner kopiert werden diff --combined res/values-de/strings.xml index 3ce2b69d,eb59c5a6..8c39ba5f --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@@ -202,7 -202,7 +202,7 @@@ Nur lokal Nur lokale Inhalte Vom Server entfernen - Lokal und auf dem Server + Lokal und auf Server Erfolgreich gelöscht Der Löschvorgang konnte nicht beendet werden Gib einen neuen Namen ein @@@ -254,11 -254,7 +254,7 @@@ Fotos nur über WiFi hochladen Videos nur über WiFi hochladen /SofortUpload - Konflikt beim Update - Serverdatei %s ist nicht synchronisiert mit der lokalen Datei. Weitermachen bedeutet, dass der Inhalt der Datei auf dem Server ersetzt wird. Beide behalten - Überschreiben - Nicht hochladen Bildvorschau Dieses Bild kann nicht angezeigt werden %1$s konnte nicht in den lokalen %2$s Ordner kopiert werden diff --combined res/values/strings.xml index 44346d38,dd8ce04f..2de204d5 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@@ -28,7 -28,6 +28,7 @@@ Settings Logs Close + Open General More Accounts @@@ -266,11 -265,11 +266,11 @@@ Upload pictures via WiFi only Upload videos via WiFi only /InstantUpload - Update conflict - Remote file %s is not synchronized with local file. Continuing will replace content of file on server. + File conflict + Which files do you want to keep? If you select both versions, the local file will have a number added to its name. Keep both - Overwrite - Don\'t upload + Use local version + Use server version Image preview This image cannot be shown @@@ -342,6 -341,7 +342,7 @@@ with you %1$s shared \"%2$s\" with you + \"%1$s\" has been shared with you Refresh connection Server address diff --combined src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java index aef1de1d,601ec4fd..9b7050e8 --- a/src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java +++ b/src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java @@@ -22,15 -22,18 +22,16 @@@ package com.owncloud.android.ui.activity; +import android.content.Intent; +import android.os.Bundle; + import com.owncloud.android.datamodel.OCFile; + import com.owncloud.android.files.services.FileDownloader; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.dialog.ConflictsResolveDialog; import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision; import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener; -import com.owncloud.android.utils.DisplayUtils; - -import android.app.ActionBar; -import android.content.Intent; -import android.os.Bundle; /** * Wrapper activity which will be launched if keep-in-sync file will be modified by external @@@ -43,6 -46,8 +44,6 @@@ public class ConflictsResolveActivity e @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - ActionBar actionBar = getActionBar(); - actionBar.setIcon(DisplayUtils.getSeasonalIconId()); } @Override @@@ -54,11 -59,20 +55,20 @@@ finish(); return; case OVERWRITE: + // use local version -> overwrite on server i.putExtra(FileUploader.KEY_FORCE_OVERWRITE, true); break; case KEEP_BOTH: i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE); break; + case SERVER: + // use server version -> delete local, request download + Intent intent = new Intent(this, FileDownloader.class); + intent.putExtra(FileDownloader.EXTRA_ACCOUNT, getAccount()); + intent.putExtra(FileDownloader.EXTRA_FILE, getFile()); + startService(intent); + finish(); + return; default: Log_OC.wtf(TAG, "Unhandled conflict decision " + decision); return; diff --combined src/com/owncloud/android/ui/activity/FileActivity.java index 064f3fd2,4e38c523..14a65f5d --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@@ -35,20 -35,18 +35,20 @@@ import android.content.res.Configuratio import android.os.Bundle; import android.os.Handler; import android.os.IBinder; -import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; -import android.support.v7.app.ActionBarActivity; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.View; import android.widget.AdapterView; -import android.widget.LinearLayout; import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; import android.widget.Toast; import com.owncloud.android.BuildConfig; @@@ -78,6 -76,8 +78,6 @@@ import com.owncloud.android.ui.Navigati import com.owncloud.android.ui.adapter.NavigationDrawerListAdapter; import com.owncloud.android.ui.dialog.LoadingDialog; import com.owncloud.android.ui.dialog.SharePasswordDialogFragment; -import com.owncloud.android.ui.fragment.FileDetailFragment; -import com.owncloud.android.ui.fragment.FileFragment; import com.owncloud.android.utils.ErrorMessageAdapter; import java.util.ArrayList; @@@ -87,7 -87,7 +87,7 @@@ * Activity with common behaviour for activities handling {@link OCFile}s in ownCloud * {@link Account}s . */ -public class FileActivity extends ActionBarActivity +public class FileActivity extends AppCompatActivity implements OnRemoteOperationListener, ComponentsGetter { public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE"; @@@ -291,7 -291,7 +291,7 @@@ // Sync the toggle state after onRestoreInstanceState has occurred. if (mDrawerToggle != null) { mDrawerToggle.syncState(); - if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { + if (isDrawerOpen()) { getSupportActionBar().setTitle(R.string.app_name); mDrawerToggle.setDrawerIndicatorEnabled(true); } @@@ -306,23 -306,6 +306,23 @@@ } } + @Override + public void onBackPressed() { + if (isDrawerOpen()) { + closeNavDrawer(); + return; + } + super.onBackPressed(); + } + + public boolean isDrawerOpen() { + return mDrawerLayout.isDrawerOpen(GravityCompat.START); + } + + public void closeNavDrawer() { + mDrawerLayout.closeDrawer(GravityCompat.START); + } + protected void initDrawer(){ // constant settings for action bar when navigation drawer is inited getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); @@@ -330,7 -313,7 +330,7 @@@ mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); // Notification Drawer - LinearLayout navigationDrawerLayout = (LinearLayout) findViewById(R.id.left_drawer); + RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer); mDrawerList = (ListView) navigationDrawerLayout.findViewById(R.id.drawer_list); // TODO re-enable when "Accounts" is available in Navigation Drawer @@@ -348,14 -331,6 +348,14 @@@ // username.setText(account.name.substring(0, lastAtPos)); // } + // Display username in drawer + Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext()); + if (account != null) { + TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username); + int lastAtPos = account.name.lastIndexOf("@"); + username.setText(account.name.substring(0, lastAtPos)); + } + // load slide menu items mDrawerTitles = getResources().getStringArray(R.array.drawer_items); @@@ -371,8 -346,7 +371,8 @@@ // mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], // mDrawerContentDescriptions[0])); // All Files - mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0])); + mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0], + R.drawable.ic_folder_open)); // TODO Enable when "On Device" is recovered // On Device @@@ -380,12 -354,11 +380,12 @@@ // mDrawerContentDescriptions[2])); // Settings - mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1])); + mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1], + R.drawable.ic_settings)); // Logs if (BuildConfig.DEBUG) { mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2], - mDrawerContentDescriptions[2])); + mDrawerContentDescriptions[2],R.drawable.ic_log)); } // setting the nav drawer list adapter @@@ -393,8 -366,12 +393,8 @@@ mDrawerItems); mDrawerList.setAdapter(mNavigationDrawerAdapter); - mDrawerToggle = new ActionBarDrawerToggle( - this, - mDrawerLayout, - R.drawable.ic_drawer, - R.string.app_name, - R.string.drawer_close) { + + mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.string.drawer_open,R.string.drawer_close) { /** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { @@@ -411,13 -388,13 +411,13 @@@ invalidateOptionsMenu(); } }; - - //mDrawerToggle.setDrawerIndicatorEnabled(true); + // Set the list's click listener mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); // Set the drawer toggle as the DrawerListener mDrawerLayout.setDrawerListener(mDrawerToggle); + mDrawerToggle.setDrawerIndicatorEnabled(false); } /** @@@ -537,11 -514,7 +537,11 @@@ outState.putBoolean(FileActivity.EXTRA_FROM_NOTIFICATION, mFromNotification); outState.putLong(KEY_WAITING_FOR_OP_ID, mFileOperationsHelper.getOpIdWaitingFor()); outState.putBoolean(KEY_TRY_SHARE_AGAIN, mTryShareAgain); - outState.putString(KEY_ACTION_BAR_TITLE, getSupportActionBar().getTitle().toString()); + if(getSupportActionBar().getTitle() != null) { + // Null check in case the actionbar is used in ActionBar.NAVIGATION_MODE_LIST + // since it doesn't have a title then + outState.putString(KEY_ACTION_BAR_TITLE, getSupportActionBar().getTitle().toString()); + } } @@@ -806,14 -779,15 +806,15 @@@ i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile); i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount()); startActivity(i); - } + } else { if (!operation.transferWasRequested()) { Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), Toast.LENGTH_LONG); msg.show(); } + invalidateOptionsMenu(); } } diff --combined src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 949ddc39,a3d9b104..6d7481e0 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@@ -48,15 -48,12 +48,15 @@@ import android.provider.OpenableColumns import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; +import android.support.v4.content.ContextCompat; import android.support.v4.view.GravityCompat; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.Window; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; import android.widget.Toast; import com.owncloud.android.MainApp; @@@ -123,7 -120,6 +123,7 @@@ public class FileDisplayActivity extend private boolean mDualPane; private View mLeftFragmentContainer; private View mRightFragmentContainer; + private ProgressBar mProgressBar; private static final String KEY_WAITING_TO_PREVIEW = "WAITING_TO_PREVIEW"; private static final String KEY_SYNC_IN_PROGRESS = "SYNC_IN_PROGRESS"; @@@ -155,6 -151,7 +155,6 @@@ @Override protected void onCreate(Bundle savedInstanceState) { Log_OC.v(TAG, "onCreate() start"); - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account // is valid @@@ -187,11 -184,6 +187,11 @@@ // Navigation Drawer initDrawer(); + mProgressBar = (ProgressBar) findViewById(R.id.progressBar); + mProgressBar.setIndeterminateDrawable( + ContextCompat.getDrawable(this, + R.drawable.actionbar_progress_indeterminate_horizontal)); + mDualPane = getResources().getBoolean(R.bool.large_land_layout); mLeftFragmentContainer = findViewById(R.id.left_fragment_container); mRightFragmentContainer = findViewById(R.id.right_fragment_container); @@@ -204,11 -196,8 +204,11 @@@ // according to the official // documentation - setSupportProgressBarIndeterminateVisibility(mSyncInProgress - /*|| mRefreshSharesInProgress*/); + // enable ActionBar app icon to behave as action to toggle nav drawer + //getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + + mProgressBar.setIndeterminate(mSyncInProgress); // always AFTER setContentView(...) ; to work around bug in its implementation setBackgroundText(); @@@ -220,6 -209,7 +220,6 @@@ protected void onStart() { Log_OC.v(TAG, "onStart() start"); super.onStart(); - getSupportActionBar().setIcon(DisplayUtils.getSeasonalIconId()); Log_OC.v(TAG, "onStart() end"); } @@@ -260,16 -250,7 +260,16 @@@ file = getStorageManager().getFileByPath(OCFile.ROOT_PATH); // never returns null } setFile(file); - + + if (mAccountWasSet) { + RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer); + if (navigationDrawerLayout != null && getAccount() != null) { + TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username); + int lastAtPos = getAccount().name.lastIndexOf("@"); + username.setText(getAccount().name.substring(0, lastAtPos)); + } + } + if (!stateWasRecovered) { Log_OC.d(TAG, "Initializing Fragments in onAccountChanged.."); initFragmentsWithFile(); @@@ -747,25 -728,22 +747,25 @@@ @Override public void onBackPressed() { - OCFileListFragment listOfFiles = getListOfFilesFragment(); - if (mDualPane || getSecondFragment() == null) { - OCFile currentDir = getCurrentDir(); - if (currentDir == null || currentDir.getParentId() == FileDataStorageManager.ROOT_PARENT_ID) { - finish(); - return; + if (!isDrawerOpen()){ + OCFileListFragment listOfFiles = getListOfFilesFragment(); + if (mDualPane || getSecondFragment() == null) { + OCFile currentDir = getCurrentDir(); + if (currentDir == null || currentDir.getParentId() == FileDataStorageManager.ROOT_PARENT_ID) { + finish(); + return; + } + if (listOfFiles != null) { // should never be null, indeed + listOfFiles.onBrowseUp(); + } } if (listOfFiles != null) { // should never be null, indeed - listOfFiles.onBrowseUp(); + setFile(listOfFiles.getCurrentFile()); } + cleanSecondFragment(); + } else { + super.onBackPressed(); } - if (listOfFiles != null) { // should never be null, indeed - setFile(listOfFiles.getCurrentFile()); - } - cleanSecondFragment(); - } @Override @@@ -953,10 -931,8 +953,10 @@@ } removeStickyBroadcast(intent); Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress); - setSupportProgressBarIndeterminateVisibility(mSyncInProgress - /*|| mRefreshSharesInProgress*/); + mProgressBar.setIndeterminate(mSyncInProgress); + //mProgressBar.setVisibility((mSyncInProgress) ? View.VISIBLE : View.INVISIBLE); + //setSupportProgressBarIndeterminateVisibility(mSyncInProgress + /*|| mRefreshSharesInProgress*/ //); setBackgroundText(); @@@ -1052,8 -1028,7 +1052,8 @@@ startImagePreview(getFile()); } // TODO what about other kind of previews? } - + + mProgressBar.setIndeterminate(false); } finally { if (intent != null) { removeStickyBroadcast(intent); @@@ -1191,6 -1166,7 +1191,6 @@@ } - @Override protected ServiceConnection newTransferenceServiceConnection() { return new ListServiceConnection(); @@@ -1283,7 -1259,7 +1283,7 @@@ super.onRemoteOperationFinish(operation, result); if (operation instanceof RemoveFileOperation) { - onRemoveFileOperationFinish((RemoveFileOperation)operation, result); + onRemoveFileOperationFinish((RemoveFileOperation) operation, result); } else if (operation instanceof RenameFileOperation) { onRenameFileOperationFinish((RenameFileOperation)operation, result); @@@ -1461,27 -1437,12 +1461,12 @@@ private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation, RemoteOperationResult result) { - dismissLoadingDialog(); - OCFile syncedFile = operation.getLocalFile(); - if (!result.isSuccess()) { - if (result.getCode() == ResultCode.SYNC_CONFLICT) { - Intent i = new Intent(this, ConflictsResolveActivity.class); - i.putExtra(ConflictsResolveActivity.EXTRA_FILE, syncedFile); - i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, getAccount()); - startActivity(i); - - } - - } else { + if (result.isSuccess()) { if (operation.transferWasRequested()) { + OCFile syncedFile = operation.getLocalFile(); onTransferStateChanged(syncedFile, true, true); - - } else { - Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, - operation, getResources()), Toast.LENGTH_LONG); - msg.show(); + invalidateOptionsMenu(); } - invalidateOptionsMenu(); } } @@@ -1577,7 -1538,8 +1562,7 @@@ getApplicationContext() ); synchFolderOp.execute(getAccount(), MainApp.getAppContext(), this, null, null); - - setSupportProgressBarIndeterminateVisibility(true); + mProgressBar.setIndeterminate(true); setBackgroundText(); } diff --combined src/com/owncloud/android/ui/dialog/ConflictsResolveDialog.java index 6ddc0e20,163197c5..7c5f2b28 --- a/src/com/owncloud/android/ui/dialog/ConflictsResolveDialog.java +++ b/src/com/owncloud/android/ui/dialog/ConflictsResolveDialog.java @@@ -28,7 -28,7 +28,7 @@@ import android.os.Bundle import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.ActionBarActivity; +import android.support.v7.app.AppCompatActivity; import com.owncloud.android.R; import com.owncloud.android.utils.DisplayUtils; @@@ -42,7 -42,8 +42,8 @@@ public class ConflictsResolveDialog ext public static enum Decision { CANCEL, KEEP_BOTH, - OVERWRITE + OVERWRITE, + SERVER } OnConflictDecisionMadeListener mListener; @@@ -63,7 -64,7 +64,7 @@@ .setIcon(DisplayUtils.getSeasonalIconId()) .setTitle(R.string.conflict_title) .setMessage(String.format(getString(R.string.conflict_message), remotepath)) - .setPositiveButton(R.string.conflict_overwrite, + .setPositiveButton(R.string.conflict_use_local_version, new DialogInterface.OnClickListener() { @Override @@@ -80,18 -81,18 +81,18 @@@ mListener.conflictDecisionMade(Decision.KEEP_BOTH); } }) - .setNegativeButton(R.string.conflict_dont_upload, + .setNegativeButton(R.string.conflict_use_server_version, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (mListener != null) - mListener.conflictDecisionMade(Decision.CANCEL); + mListener.conflictDecisionMade(Decision.SERVER); } }) .create(); } - public void showDialog(ActionBarActivity activity) { + public void showDialog(AppCompatActivity activity) { Fragment prev = activity.getSupportFragmentManager().findFragmentByTag("dialog"); FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); if (prev != null) { @@@ -102,7 -103,7 +103,7 @@@ this.show(ft, "dialog"); } - public void dismissDialog(ActionBarActivity activity) { + public void dismissDialog(AppCompatActivity activity) { Fragment prev = activity.getSupportFragmentManager().findFragmentByTag(getTag()); if (prev != null) { FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();