فهرست منبع

Fixed CRASH due to NullPointerException when a details actitivity is brough to foreground and the OC icon is pressed, after removing accounts in system settings

David A. Velasco 12 سال پیش
والد
کامیت
d19d985c0a
2فایلهای تغییر یافته به همراه27 افزوده شده و 10 حذف شده
  1. 23 6
      src/com/owncloud/android/AccountUtils.java
  2. 4 4
      src/com/owncloud/android/ui/activity/FileDisplayActivity.java

+ 23 - 6
src/com/owncloud/android/AccountUtils.java

@@ -61,7 +61,9 @@ public class AccountUtils {
                     break;
                 }
             }
-        } else if (ocAccounts.length != 0) {
+        }
+        
+        if (defaultAccount == null && ocAccounts.length != 0) {
             // we at least need to take first account as fallback
             defaultAccount = ocAccounts[0];
         }
@@ -84,11 +86,26 @@ public class AccountUtils {
     }
     
     
-    public static void setCurrentOwnCloudAccount(Context context, String name) {
-        SharedPreferences.Editor appPrefs = PreferenceManager
-                .getDefaultSharedPreferences(context).edit();
-        appPrefs.putString("select_oc_account", name);
-        appPrefs.commit();
+    public static boolean setCurrentOwnCloudAccount(Context context, String accountName) {
+        boolean result = false;
+        if (accountName != null) {
+            Account[] ocAccounts = AccountManager.get(context).getAccountsByType(
+                    AccountAuthenticator.ACCOUNT_TYPE);
+            boolean found = false;
+            for (Account account : ocAccounts) {
+                found = (account.name.equals(accountName));
+                if (found) {
+                    SharedPreferences.Editor appPrefs = PreferenceManager
+                            .getDefaultSharedPreferences(context).edit();
+                    appPrefs.putString("select_oc_account", accountName);
+    
+                    appPrefs.commit();
+                    result = true;
+                    break;
+                }
+            }
+        }
+        return result;
     }
 
     /**

+ 4 - 4
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -143,10 +143,10 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         super.onCreate(savedInstanceState);
 
         /// Load of parameters from received intent
-        mCurrentDir = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE); // no check necessary, mCurrenDir == null if the parameter is not in the intent
         Account account = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);
-        if (account != null)
-            AccountUtils.setCurrentOwnCloudAccount(this, account.name);
+        if (account != null && AccountUtils.setCurrentOwnCloudAccount(this, account.name)) {
+            mCurrentDir = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_FILE); 
+        }
         
         /// Load of saved instance state: keep this always before initDataFromCurrentAccount()
         if(savedInstanceState != null) {
@@ -187,7 +187,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         // Drop-down navigation 
         mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);
         OCFile currFile = mCurrentDir;
-        while(currFile != null && currFile.getFileName() != OCFile.PATH_SEPARATOR) {
+        while(mStorageManager != null && currFile != null && currFile.getFileName() != OCFile.PATH_SEPARATOR) {
             mDirectories.add(currFile.getFileName());
             currFile = mStorageManager.getFileById(currFile.getParentId());
         }