OSDN Git Service

Fix account picker crash when there is no account before.
authorjackqdyulei <jackqdyulei@google.com>
Sun, 11 Dec 2016 20:32:35 +0000 (12:32 -0800)
committerjackqdyulei <jackqdyulei@google.com>
Sun, 11 Dec 2016 20:37:26 +0000 (12:37 -0800)
Bug: 33497222
Test: make RunSettingsRoboTests
Change-Id: I06adb4e0a4afcb359a4f7e8b15f13f67c28d5b46

src/com/android/settings/dashboard/SupportItemAdapter.java
tests/robotests/src/com/android/settings/dashboard/SupportItemAdapterTest.java

index 4e1ae78..b125fff 100644 (file)
@@ -170,8 +170,13 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd
 
     public void setAccounts(Account accounts[]) {
         if (!Arrays.equals(mAccounts, accounts)) {
-            int index = ArrayUtils.indexOf(accounts, mAccounts[mSelectedAccountIndex]);
-            mSelectedAccountIndex = index != -1 ? index : 0;
+            if (mAccounts.length == 0) {
+                mSelectedAccountIndex = 0;
+            } else {
+                final int index = ArrayUtils.indexOf(accounts, mAccounts[mSelectedAccountIndex]);
+                mSelectedAccountIndex = index != -1 ? index : 0;
+            }
+
             mAccounts = accounts;
             mSupportFeatureProvider.refreshOperationRules();
             refreshEscalationCards();
index 71bb4f6..e3d4c94 100644 (file)
@@ -51,6 +51,7 @@ public class SupportItemAdapterTest {
     private final Account USER_2 = new Account("user2", ACCOUNT_TYPE);
     private final Account TWO_ACCOUNTS[] = {USER_1, USER_2};
     private final Account ONE_ACCOUNT[] = {USER_1};
+    private final Account ZERO_ACCOUNT[] = {};
 
     private ShadowActivity mShadowActivity;
     private Activity mActivity;
@@ -98,6 +99,18 @@ public class SupportItemAdapterTest {
         verify(mSupportFeatureProvider).getAccountLoginIntent();
     }
 
+    @Test
+    public void testSetAccount_AccountEmpty_NotCrash() {
+        when(mSupportFeatureProvider.getSupportEligibleAccounts(mActivity)).thenReturn(ZERO_ACCOUNT);
+        mSupportItemAdapter = new SupportItemAdapter(mActivity, null, mSupportFeatureProvider,
+            mMetricsFeatureProvider, null);
+
+        // Should not crash in this method
+        mSupportItemAdapter.setAccounts(ONE_ACCOUNT);
+
+        verify(mSupportFeatureProvider).getSupportEligibleAccounts(mActivity);
+    }
+
     /**
      * Check after {@link SupportItemAdapter#bindAccountPicker(SupportItemAdapter.ViewHolder)} is
      * invoked, whether the spinner in {@paramref viewHolder} has all the data from {@paramref