From: masensio Date: Fri, 20 Mar 2015 14:12:33 +0000 (+0100) Subject: Fix bug: Folder is created in the wrong account X-Git-Tag: oc-android-1.7.1_signed^2~9^2~4 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/d6701bf8d5ef4b8900b4396276a9b2254826d418?hp=--cc Fix bug: Folder is created in the wrong account --- d6701bf8d5ef4b8900b4396276a9b2254826d418 diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index 7f48b9e6..a566ccdb 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -98,10 +98,10 @@ public class FileActivity extends SherlockFragmentActivity private boolean mRedirectingToSetupAccount = false; /** Flag to signal when the value of mAccount was set */ - private boolean mAccountWasSet; + protected boolean mAccountWasSet; /** Flag to signal when the value of mAccount was restored from a saved state */ - private boolean mAccountWasRestored; + protected boolean mAccountWasRestored; /** Flag to signal if the activity is launched by a notification */ private boolean mFromNotification; @@ -243,7 +243,7 @@ public class FileActivity extends SherlockFragmentActivity * @param account New {@link Account} to set. * @param savedAccount When 'true', account was retrieved from a saved instance state. */ - private void setAccount(Account account, boolean savedAccount) { + protected void setAccount(Account account, boolean savedAccount) { Account oldAccount = mAccount; boolean validAccount = (account != null && AccountUtils.setCurrentOwnCloudAccount(getApplicationContext(), account.name)); if (validAccount) { @@ -341,6 +341,10 @@ public class FileActivity extends SherlockFragmentActivity return mAccount; } + protected void setAccount(Account account) { + mAccount = account; + } + /** * @return Value of mFromNotification: True if the Activity is launched by a notification */ diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java index edd2f5db..452647d3 100644 --- a/src/com/owncloud/android/ui/activity/Uploader.java +++ b/src/com/owncloud/android/ui/activity/Uploader.java @@ -64,7 +64,6 @@ import com.actionbarsherlock.view.MenuItem; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountAuthenticator; -import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.lib.common.operations.RemoteOperation; @@ -84,13 +83,13 @@ public class Uploader extends FileActivity private static final String TAG = Uploader.class.getSimpleName(); - private Account mAccount; + //private Account mAccount; private AccountManager mAccountManager; private Stack mParents; private ArrayList mStreamsToUpload; private boolean mCreateDir; private String mUploadPath; - private FileDataStorageManager mStorageManager; + //private FileDataStorageManager mStorageManager; private OCFile mFile; private boolean mAccountSelected = false; @@ -108,22 +107,52 @@ public class Uploader extends FileActivity @Override protected void onCreate(Bundle savedInstanceState) { + prepareStreamsToUpload(); + super.onCreate(savedInstanceState); if (savedInstanceState == null) { mParents = new Stack(); } else { mParents = (Stack) savedInstanceState.getSerializable(KEY_PARENTS); - mAccount = savedInstanceState.getParcelable(KEY_ACCOUNT); +// mAccount = savedInstanceState.getParcelable(KEY_ACCOUNT); mFile = savedInstanceState.getParcelable(KEY_FILE); - mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); +// mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); mAccountSelected = savedInstanceState.getBoolean(KEY_ACCOUNT_SELECTED); } ActionBar actionBar = getSupportActionBar(); actionBar.setIcon(DisplayUtils.getSeasonalIconId()); - if (prepareStreamsToUpload()) { + +// if (somethingToUpload()) { +// mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE); +// Account[] accounts = mAccountManager.getAccountsByType(MainApp.getAccountType()); +// if (accounts.length == 0) { +// Log_OC.i(TAG, "No ownCloud account is available"); +// showDialog(DIALOG_NO_ACCOUNT); +// } else if (accounts.length > 1 && !mAccountSelected) { +// Log_OC.i(TAG, "More than one ownCloud is available"); +// showDialog(DIALOG_MULTIPLE_ACCOUNT); +// } else { +// if (savedInstanceState == null) { +// mAccount = accounts[0]; +// mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); +// } +// initTargetFolder(); +// populateDirectoryList(); +// +// } +// +// } else { +// showDialog(DIALOG_NO_STREAM); +// } + + } + + @Override + protected void setAccount(Account account, boolean savedAccount) { + if (somethingToUpload()) { mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE); Account[] accounts = mAccountManager.getAccountsByType(MainApp.getAccountType()); if (accounts.length == 0) { @@ -133,19 +162,47 @@ public class Uploader extends FileActivity Log_OC.i(TAG, "More than one ownCloud is available"); showDialog(DIALOG_MULTIPLE_ACCOUNT); } else { - if (savedInstanceState == null) { - mAccount = accounts[0]; - mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); + if (!savedAccount) { + //mAccount = accounts[0]; + //mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); + setAccount(accounts[0]); } - initTargetFolder(); - populateDirectoryList(); - + // Part in onAccountSet +// initTargetFolder(); +// populateDirectoryList(); + } - + } else { showDialog(DIALOG_NO_STREAM); } + super.setAccount(account, savedAccount); + +// Account oldAccount = mAccount; +// boolean validAccount = (account != null && +// AccountUtils.setCurrentOwnCloudAccount(getApplicationContext(), account.name)); +// if (validAccount) { +// mAccount = account; +// mAccountWasSet = true; +// mAccountWasRestored = (savedAccount || mAccount.equals(oldAccount)); +// +// } else { +// swapToDefaultAccount(); +// } + } + + @Override + protected void onAccountSet(boolean stateWasRecovered) { + super.onAccountSet(mAccountWasRestored); + initTargetFolder(); + populateDirectoryList(); +// if (getAccount() != null) { +// mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver()); +// +// } else { +// Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!"); +// } } @Override @@ -153,7 +210,7 @@ public class Uploader extends FileActivity Log_OC.d(TAG, "onSaveInstanceState() start"); super.onSaveInstanceState(outState); outState.putSerializable(KEY_PARENTS, mParents); - outState.putParcelable(KEY_ACCOUNT, mAccount); + //outState.putParcelable(KEY_ACCOUNT, mAccount); outState.putParcelable(KEY_FILE, mFile); outState.putBoolean(KEY_ACCOUNT_SELECTED, mAccountSelected); @@ -217,10 +274,11 @@ public class Uploader extends FileActivity builder.setItems(ac, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - mAccount = mAccountManager.getAccountsByType(MainApp.getAccountType())[which]; - mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); - initTargetFolder(); - populateDirectoryList(); + setAccount(mAccountManager.getAccountsByType(MainApp.getAccountType())[which]); + onAccountSet(mAccountWasRestored); +// mStorageManager = new FileDataStorageManager(mAccount, getContentResolver()); +// initTargetFolder(); +// populateDirectoryList(); dialog.dismiss(); mAccountSelected = true; } @@ -284,7 +342,7 @@ public class Uploader extends FileActivity public void onItemClick(AdapterView parent, View view, int position, long id) { // click on folder in the list Log_OC.d(TAG, "on item click"); - Vector tmpfiles = mStorageManager.getFolderContent(mFile); + Vector tmpfiles = getStorageManager().getFolderContent(mFile); if (tmpfiles.size() <= 0) return; // filter on dirtype Vector files = new Vector(); @@ -339,7 +397,7 @@ public class Uploader extends FileActivity // there is no need for checking for is there more then one // account at this point // since account setup can set only one account at time - mAccount = accounts[0]; + setAccount(accounts[0]); populateDirectoryList(); } } @@ -366,9 +424,9 @@ public class Uploader extends FileActivity Log_OC.d(TAG, "Populating view with content of : " + full_path); - mFile = mStorageManager.getFileByPath(full_path); + mFile = getStorageManager().getFileByPath(full_path); if (mFile != null) { - Vector files = mStorageManager.getFolderContent(mFile); + Vector files = getStorageManager().getFolderContent(mFile); List> data = new LinkedList>(); for (OCFile f : files) { HashMap h = new HashMap(); @@ -402,13 +460,16 @@ public class Uploader extends FileActivity return full_path; } - private boolean prepareStreamsToUpload() { + private void prepareStreamsToUpload() { if (getIntent().getAction().equals(Intent.ACTION_SEND)) { mStreamsToUpload = new ArrayList(); mStreamsToUpload.add(getIntent().getParcelableExtra(Intent.EXTRA_STREAM)); } else if (getIntent().getAction().equals(Intent.ACTION_SEND_MULTIPLE)) { mStreamsToUpload = getIntent().getParcelableArrayListExtra(Intent.EXTRA_STREAM); } + } + + private boolean somethingToUpload() { return (mStreamsToUpload != null && mStreamsToUpload.get(0) != null); } @@ -507,7 +568,7 @@ public class Uploader extends FileActivity intent.putExtra(FileUploader.KEY_LOCAL_FILE, local.toArray(new String[local.size()])); intent.putExtra(FileUploader.KEY_REMOTE_FILE, remote.toArray(new String[remote.size()])); - intent.putExtra(FileUploader.KEY_ACCOUNT, mAccount); + intent.putExtra(FileUploader.KEY_ACCOUNT, getAccount()); startService(intent); //Save the path to shared preferences @@ -570,7 +631,7 @@ public class Uploader extends FileActivity * The target account has to be chosen before this method is called. */ private void initTargetFolder() { - if (mStorageManager == null) { + if (getStorageManager() == null) { throw new IllegalStateException("Do not call this method before " + "initializing mStorageManager"); } @@ -589,7 +650,7 @@ public class Uploader extends FileActivity mParents.add(dir); } //Make sure that path still exists, if it doesn't pop the stack and try the previous path - while(!mStorageManager.fileExists(generatePath(mParents)) && mParents.size() > 1){ + while(!getStorageManager().fileExists(generatePath(mParents)) && mParents.size() > 1){ mParents.pop(); } }