OSDN Git Service

Fix NPE caused by status update outside activity lifecycle
authorAlexandra Gherghina <alexgherghina@google.com>
Fri, 14 Nov 2014 12:29:28 +0000 (12:29 +0000)
committerAlexandra Gherghina <alexgherghina@google.com>
Mon, 17 Nov 2014 12:12:11 +0000 (12:12 +0000)
Bug: 18373656
Change-Id: I3c7db15df7c47b65a42a13fc7a3a077c3ad48f77

src/com/android/settings/accounts/AccountSyncSettings.java
src/com/android/settings/accounts/ManageAccountsSettings.java

index 12a63e6..fe45299 100644 (file)
@@ -24,6 +24,7 @@ import android.accounts.AccountManagerCallback;
 import android.accounts.AccountManagerFuture;
 import android.accounts.AuthenticatorException;
 import android.accounts.OperationCanceledException;
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.ContentResolver;
@@ -313,12 +314,18 @@ public class AccountSyncSettings extends AccountPreferenceBase {
 
     private void startSyncForEnabledProviders() {
         requestOrCancelSyncForEnabledProviders(true /* start them */);
-        getActivity().invalidateOptionsMenu();
+        final Activity activity = getActivity();
+        if (activity != null) {
+            activity.invalidateOptionsMenu();
+        }
     }
 
     private void cancelSyncForEnabledProviders() {
         requestOrCancelSyncForEnabledProviders(false /* cancel them */);
-        getActivity().invalidateOptionsMenu();
+        final Activity activity = getActivity();
+        if (activity != null) {
+            activity.invalidateOptionsMenu();
+        }
     }
 
     private void requestOrCancelSyncForEnabledProviders(boolean startSync) {
@@ -367,7 +374,10 @@ public class AccountSyncSettings extends AccountPreferenceBase {
     protected void onSyncStateUpdated() {
         if (!isResumed()) return;
         setFeedsState();
-        getActivity().invalidateOptionsMenu();
+        final Activity activity = getActivity();
+        if (activity != null) {
+            activity.invalidateOptionsMenu();
+        }
     }
 
     private void setFeedsState() {
@@ -440,7 +450,6 @@ public class AccountSyncSettings extends AccountPreferenceBase {
             syncPref.setChecked(oneTimeSyncMode || syncEnabled);
         }
         mErrorInfoView.setVisibility(syncIsFailing ? View.VISIBLE : View.GONE);
-        getActivity().invalidateOptionsMenu();
     }
 
     @Override
index ef3e40b..85ecd90 100644 (file)
@@ -231,7 +231,11 @@ public class ManageAccountsSettings extends AccountPreferenceBase
     @Override
     protected void onSyncStateUpdated() {
         showSyncState();
-        getActivity().invalidateOptionsMenu();
+        // Catch any delayed delivery of update messages
+        final Activity activity = getActivity();
+        if (activity != null) {
+            activity.invalidateOptionsMenu();
+        }
     }
 
     /**