Small fixes to add account flow

When creating a new instance of the AuthenticatorHelper, ensure that we
unregister and reregister the listeners to point to the same listener.
Otherwise we would leak an intent filter.

Also, there are some issues when processing activity results which
involve navigation, if we perform such action while Settings app is
stopped

Bug: 139442223
Test: manual, existing robolectric tests
Change-Id: Ia2be4d22b07518d694594b924da2f04753c5de1e
Merged-In: I3d0e4d366834fb6968a82dbc1693e88ef709a2f6
diff --git a/src/com/android/car/settings/accounts/AccountListPreferenceController.java b/src/com/android/car/settings/accounts/AccountListPreferenceController.java
index 0f98700..99955b2 100644
--- a/src/com/android/car/settings/accounts/AccountListPreferenceController.java
+++ b/src/com/android/car/settings/accounts/AccountListPreferenceController.java
@@ -58,6 +58,7 @@
     private final ArrayMap<String, Preference> mPreferences = new ArrayMap<>();
     private AuthenticatorHelper mAuthenticatorHelper;
     private String[] mAuthorities;
+    private boolean mListenerRegistered = false;
 
     public AccountListPreferenceController(Context context, String preferenceKey,
             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
@@ -96,6 +97,7 @@
     protected void onStartInternal() {
         mAuthenticatorHelper.listenToAccountUpdates();
         mCarUserManagerHelper.registerOnUsersUpdateListener(this);
+        mListenerRegistered = true;
     }
 
     /**
@@ -105,6 +107,7 @@
     protected void onStopInternal() {
         mAuthenticatorHelper.stopListeningToAccountUpdates();
         mCarUserManagerHelper.unregisterOnUsersUpdateListener(this);
+        mListenerRegistered = false;
     }
 
     @Override
@@ -133,8 +136,12 @@
                 getContext().getString(R.string.account_list_title, mUserInfo.name));
 
         // Recreate the authentication helper to refresh the list of enabled accounts
+        mAuthenticatorHelper.stopListeningToAccountUpdates();
         mAuthenticatorHelper = new AuthenticatorHelper(getContext(), mUserInfo.getUserHandle(),
                 this);
+        if (mListenerRegistered) {
+            mAuthenticatorHelper.listenToAccountUpdates();
+        }
 
         Set<String> preferencesToRemove = new HashSet<>(mPreferences.keySet());
         List<? extends Preference> preferences = getAccountPreferences(preferencesToRemove);