OSDN Git Service

Pre-set initial state to wifi tether switches.
authorFan Zhang <zhfan@google.com>
Tue, 5 Sep 2017 20:32:24 +0000 (13:32 -0700)
committerFan Zhang <zhfan@google.com>
Tue, 5 Sep 2017 20:57:14 +0000 (13:57 -0700)
The preset initial state helps eliminating animation jank when first
landing on the page.

Change-Id: Ia7ba83983f18409b1c653cc1ebb0f3aad281358c
Fixes: 64811322
Test: robotests

src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java

index 8057f73..627bf32 100644 (file)
@@ -40,6 +40,7 @@ public class WifiTetherSwitchBarController implements SwitchWidgetController.OnS
     private final SwitchWidgetController mSwitchBar;
     private final ConnectivityManager mConnectivityManager;
     private final DataSaverBackend mDataSaverBackend;
+    private final WifiManager mWifiManager;
 
     WifiTetherSwitchBarController(Context context, SwitchWidgetController switchBar) {
         mContext = context;
@@ -47,6 +48,8 @@ public class WifiTetherSwitchBarController implements SwitchWidgetController.OnS
         mDataSaverBackend = new DataSaverBackend(context);
         mConnectivityManager =
                 (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        mSwitchBar.setChecked(mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED);
         mSwitchBar.setListener(this);
     }
 
index 9a660a5..860a914 100644 (file)
@@ -37,15 +37,16 @@ import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.widget.MasterSwitchPreference;
-import com.android.settings.widget.SwitchWidgetController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
@@ -65,6 +66,8 @@ import java.util.ArrayList;
         })
 public class WifiTetherPreferenceControllerTest {
 
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mFeatureFactoryContext;
     @Mock
     private Context mContext;
     @Mock
@@ -82,6 +85,7 @@ public class WifiTetherPreferenceControllerTest {
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mLifecycle = new Lifecycle();
+        FakeFeatureFactory.setupForTest(mFeatureFactoryContext);
         mPreference = new MasterSwitchPreference(RuntimeEnvironment.application);
         when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE))
                 .thenReturn(mConnectivityManager);
@@ -125,6 +129,36 @@ public class WifiTetherPreferenceControllerTest {
     }
 
     @Test
+    public void start_wifiApOff_shouldSetInitialStateToOff() {
+        when(mWifiManager.getWifiApState()).thenReturn(WifiManager.WIFI_AP_STATE_DISABLED);
+        final BroadcastReceiver receiver = ReflectionHelpers.getField(mController, "mReceiver");
+        final MasterSwitchPreference pref = mock(MasterSwitchPreference.class);
+        when(mScreen.findPreference(anyString())).thenReturn(pref);
+
+        mController.displayPreference(mScreen);
+        mLifecycle.onStart();
+
+        assertThat(ShadowWifiTetherSwitchBarController.onStartCalled).isTrue();
+        verify(mContext).registerReceiver(eq(receiver), any(IntentFilter.class));
+        verify(pref).setChecked(false);
+    }
+
+    @Test
+    public void start_wifiApOn_shouldSetInitialStateToOn() {
+        when(mWifiManager.getWifiApState()).thenReturn(WifiManager.WIFI_AP_STATE_ENABLED);
+        final BroadcastReceiver receiver = ReflectionHelpers.getField(mController, "mReceiver");
+        final MasterSwitchPreference pref = mock(MasterSwitchPreference.class);
+        when(mScreen.findPreference(anyString())).thenReturn(pref);
+
+        mController.displayPreference(mScreen);
+        mLifecycle.onStart();
+
+        assertThat(ShadowWifiTetherSwitchBarController.onStartCalled).isTrue();
+        verify(mContext).registerReceiver(eq(receiver), any(IntentFilter.class));
+        verify(pref).setChecked(true);
+    }
+
+    @Test
     public void testReceiver_apStateChangedToDisabled_shouldUpdatePreferenceSummary() {
         mController.displayPreference(mScreen);
         final BroadcastReceiver receiver = ReflectionHelpers.getField(mController, "mReceiver");
@@ -199,9 +233,6 @@ public class WifiTetherPreferenceControllerTest {
         public static boolean onStartCalled;
         public static boolean onStopCalled;
 
-        public void __constructor__(Context context, SwitchWidgetController switchWidget) {
-        }
-
         public static void reset() {
             onStartCalled = false;
             onStopCalled = false;