OSDN Git Service

Refresh support screen more often
authorSalvador Martinez <dehboxturtle@google.com>
Mon, 19 Dec 2016 19:35:34 +0000 (11:35 -0800)
committerSalvador Martinez <dehboxturtle@google.com>
Mon, 19 Dec 2016 23:03:08 +0000 (15:03 -0800)
Support screen is now refreshed in the onResume.
This will prevent the situation where you open the
support tab and then you cross a hours of operation
boundary and the button is not updated.

Test: make RunSettingsRoboTests
Bug: 33272736
Change-Id: I9312b3b6f711eda91d5d60b3ff30e5ac12bf89c1

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

index b1e19fe..8a1a79b 100644 (file)
@@ -119,6 +119,7 @@ public final class SupportFragment extends InstrumentedFragment implements View.
                         .build(),
                 mNetworkCallback);
         mSupportItemAdapter.setHasInternet(hasInternet());
+        mSupportItemAdapter.refreshData();
     }
 
     @Override
index b125fff..54c5ae6 100644 (file)
@@ -192,7 +192,7 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd
      * Create data for the adapter. If there is already data in the adapter, they will be
      * destroyed and recreated.
      */
-    private void refreshData() {
+    void refreshData() {
         mSupportData.clear();
         addEscalationCards();
         addMoreHelpItems();
@@ -601,7 +601,8 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd
     /**
      * Data for a single support item.
      */
-    private static class SupportData {
+    @VisibleForTesting
+    static class SupportData {
 
         final Intent intent;
         final int metricsEvent;
@@ -688,7 +689,8 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd
     /**
      * Data model for escalation cards.
      */
-    private static class EscalationData extends SupportData {
+    @VisibleForTesting
+    static class EscalationData extends SupportData {
 
         @StringRes
         final int text1;
@@ -813,4 +815,9 @@ public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAd
             }
         }
     }
+
+    @VisibleForTesting
+    List<SupportData> getSupportData() {
+        return mSupportData;
+    }
 }
index e3d4c94..a877ed2 100644 (file)
@@ -18,6 +18,7 @@ package com.android.settings.dashboard;
 
 import android.accounts.Account;
 import android.app.Activity;
+import android.content.Context;
 import android.content.Intent;
 import android.provider.Settings;
 import android.view.LayoutInflater;
@@ -26,7 +27,9 @@ import android.widget.Spinner;
 import android.widget.SpinnerAdapter;
 import com.android.settings.TestConfig;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.dashboard.SupportItemAdapter.EscalationData;
 import com.android.settings.overlay.SupportFeatureProvider;
+import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,6 +41,8 @@ import org.robolectric.annotation.Config;
 import com.android.settings.R;
 import org.robolectric.shadows.ShadowActivity;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.verify;
 import static org.robolectric.Shadows.shadowOf;
 import static org.mockito.Mockito.when;
@@ -111,6 +116,37 @@ public class SupportItemAdapterTest {
         verify(mSupportFeatureProvider).getSupportEligibleAccounts(mActivity);
     }
 
+    @Test
+    public void testRefreshData_CardUpdatedOnEnteringOrLeavingSupportHours() {
+        // pretend we have support right now
+        when(mSupportFeatureProvider.isSupportTypeEnabled(any(), anyInt()))
+                .thenReturn(true);
+        when(mSupportFeatureProvider.isOperatingNow(anyInt())).thenReturn(true);
+        when(mSupportFeatureProvider.getSupportEligibleAccounts(any())).thenReturn(ONE_ACCOUNT);
+        mSupportItemAdapter = new SupportItemAdapter(mActivity, null, mSupportFeatureProvider,
+                mMetricsFeatureProvider, null);
+
+        // If this doesn't return escalation data something has gone wrong
+        EscalationData data = (EscalationData) mSupportItemAdapter.getSupportData().get(0);
+
+        // precondition, support is enabled
+        assertThat(data.enabled1).isTrue();
+
+        // pretend we support hours are over
+        when(mSupportFeatureProvider.isOperatingNow(anyInt())).thenReturn(false);
+        mSupportItemAdapter.refreshData();
+        data = (EscalationData) mSupportItemAdapter.getSupportData().get(0);
+
+        assertThat(data.enabled1).isFalse();
+
+        // pretend support hours have started again
+        when(mSupportFeatureProvider.isOperatingNow(anyInt())).thenReturn(true);
+        mSupportItemAdapter.refreshData();
+        data = (EscalationData) mSupportItemAdapter.getSupportData().get(0);
+
+        assertThat(data.enabled1).isTrue();
+    }
+
     /**
      * Check after {@link SupportItemAdapter#bindAccountPicker(SupportItemAdapter.ViewHolder)} is
      * invoked, whether the spinner in {@paramref viewHolder} has all the data from {@paramref