From 63c7c202d7e5de9443ec70d656fef222fef58aa5 Mon Sep 17 00:00:00 2001 From: Zhen Zhang Date: Tue, 10 Mar 2020 14:33:43 -0700 Subject: [PATCH] Log some actions for changing wifi hotspot config Log following actions: - wifi hotspot name changed - wifi hotspot password changed Added tests for logging actions in each controller's test. Bug: 151113705 Test: WifiTetherSSIDPrefereceControllerTest; WifiTetherPasswordPreferenceControllerTest; CodeInspectionTest Change-Id: I84b1cd8449e575a6ee1ad8868e7791dc601e726f --- ...ifiTetherPasswordPreferenceController.java | 18 ++++++++++++ .../WifiTetherSSIDPreferenceController.java | 14 ++++++++++ ...etherPasswordPreferenceControllerTest.java | 28 +++++++++++++++++-- ...ifiTetherSSIDPreferenceControllerTest.java | 27 ++++++++++++++++-- 4 files changed, 83 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java index 03ea121faac..a4a51dc0e72 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java @@ -18,18 +18,22 @@ package com.android.settings.wifi.tether; import static com.android.settings.AllInOneTetherSettings.DEDUP_POSTFIX; +import android.app.settings.SettingsEnums; import android.content.Context; import android.net.wifi.SoftApConfiguration; import android.text.TextUtils; import android.util.FeatureFlagUtils; +import androidx.annotation.VisibleForTesting; import androidx.preference.EditTextPreference; import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.core.FeatureFlags; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.ValidatedEditTextPreference; import com.android.settings.wifi.WifiUtils; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.UUID; @@ -40,9 +44,19 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer private String mPassword; + private final MetricsFeatureProvider mMetricsFeatureProvider; + + @VisibleForTesting + WifiTetherPasswordPreferenceController(Context context, OnTetherConfigUpdateListener listener, + MetricsFeatureProvider provider) { + super(context, listener); + mMetricsFeatureProvider = provider; + } + public WifiTetherPasswordPreferenceController(Context context, OnTetherConfigUpdateListener listener) { super(context, listener); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -69,6 +83,10 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer @Override public boolean onPreferenceChange(Preference preference, Object newValue) { + if (!TextUtils.equals(mPassword, (String) newValue)) { + mMetricsFeatureProvider.action(mContext, + SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD); + } mPassword = (String) newValue; updatePasswordDisplay((EditTextPreference) mPreference); mListener.onTetherConfigUpdated(this); diff --git a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java index a4289a682e7..9070d4487ea 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java @@ -22,6 +22,7 @@ import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; import android.net.wifi.SoftApConfiguration; +import android.text.TextUtils; import android.util.FeatureFlagUtils; import android.util.Log; @@ -48,6 +49,15 @@ public class WifiTetherSSIDPreferenceController extends WifiTetherBasePreference private final MetricsFeatureProvider mMetricsFeatureProvider; + // This constructor is used for testing. + @VisibleForTesting + WifiTetherSSIDPreferenceController(Context context, OnTetherConfigUpdateListener listener, + MetricsFeatureProvider provider) { + super(context, listener); + mWifiDeviceNameTextValidator = new WifiDeviceNameTextValidator(); + mMetricsFeatureProvider = provider; + } + public WifiTetherSSIDPreferenceController(Context context, OnTetherConfigUpdateListener listener) { super(context, listener); @@ -93,6 +103,10 @@ public class WifiTetherSSIDPreferenceController extends WifiTetherBasePreference @Override public boolean onPreferenceChange(Preference preference, Object newValue) { + if (!TextUtils.equals(mSSID, (String) newValue)) { + mMetricsFeatureProvider.action(mContext, + SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME); + } mSSID = (String) newValue; updateSsidDisplay((EditTextPreference) preference); mListener.onTetherConfigUpdated(this); diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java index bf2261aa0ce..7835f7eba16 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java @@ -19,10 +19,12 @@ package com.android.settings.wifi.tether; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.settings.SettingsEnums; import android.content.Context; import android.net.ConnectivityManager; import android.net.wifi.SoftApConfiguration; @@ -31,6 +33,7 @@ import android.net.wifi.WifiManager; import androidx.preference.PreferenceScreen; import com.android.settings.widget.ValidatedEditTextPreference; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.Before; import org.junit.Test; @@ -46,6 +49,7 @@ public class WifiTetherPasswordPreferenceControllerTest { private static final String VALID_PASS = "12345678"; private static final String VALID_PASS2 = "23456789"; + private static final String INITIAL_PASSWORD = "test_password"; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; @Mock @@ -56,6 +60,8 @@ public class WifiTetherPasswordPreferenceControllerTest { private WifiTetherBasePreferenceController.OnTetherConfigUpdateListener mListener; @Mock private PreferenceScreen mScreen; + @Mock + private MetricsFeatureProvider mMetricsFeatureProvider; private WifiTetherPasswordPreferenceController mController; private ValidatedEditTextPreference mPreference; @@ -66,7 +72,8 @@ public class WifiTetherPasswordPreferenceControllerTest { MockitoAnnotations.initMocks(this); mPreference = new ValidatedEditTextPreference(RuntimeEnvironment.application); mConfig = new SoftApConfiguration.Builder().setSsid("test_1234") - .setPassphrase("test_password", SoftApConfiguration.SECURITY_TYPE_WPA2_PSK).build(); + .setPassphrase(INITIAL_PASSWORD, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK) + .build(); when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager); when(mWifiManager.getSoftApConfiguration()).thenReturn(mConfig); @@ -76,7 +83,8 @@ public class WifiTetherPasswordPreferenceControllerTest { when(mContext.getResources()).thenReturn(RuntimeEnvironment.application.getResources()); when(mScreen.findPreference(anyString())).thenReturn(mPreference); - mController = new WifiTetherPasswordPreferenceController(mContext, mListener); + mController = new WifiTetherPasswordPreferenceController(mContext, mListener, + mMetricsFeatureProvider); } @Test @@ -101,6 +109,22 @@ public class WifiTetherPasswordPreferenceControllerTest { verify(mListener, times(2)).onTetherConfigUpdated(mController); } + @Test + public void changePreference_shouldLogActionWhenChanged() { + mController.displayPreference(mScreen); + mController.onPreferenceChange(mPreference, VALID_PASS); + verify(mMetricsFeatureProvider).action(mContext, + SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD); + } + + @Test + public void changePreference_shouldNotLogActionWhenNotChanged() { + mController.displayPreference(mScreen); + mController.onPreferenceChange(mPreference, INITIAL_PASSWORD); + verify(mMetricsFeatureProvider, never()).action(mContext, + SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD); + } + @Test public void updateDisplay_shouldUpdateValue() { // Set controller password to anything and verify is set. diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java index fc3808850e6..a6a9ddaa968 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java @@ -19,10 +19,12 @@ package com.android.settings.wifi.tether; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.settings.SettingsEnums; import android.content.Context; import android.net.ConnectivityManager; import android.net.wifi.SoftApConfiguration; @@ -30,6 +32,8 @@ import android.net.wifi.WifiManager; import androidx.preference.PreferenceScreen; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -52,6 +56,8 @@ public class WifiTetherSSIDPreferenceControllerTest { private WifiTetherBasePreferenceController.OnTetherConfigUpdateListener mListener; @Mock private PreferenceScreen mScreen; + @Mock + private MetricsFeatureProvider mMetricsFeatureProvider; private WifiTetherSSIDPreferenceController mController; private WifiTetherSsidPreference mPreference; @@ -67,8 +73,8 @@ public class WifiTetherSSIDPreferenceControllerTest { when(mConnectivityManager.getTetherableWifiRegexs()).thenReturn(new String[]{"1", "2"}); when(mContext.getResources()).thenReturn(RuntimeEnvironment.application.getResources()); when(mScreen.findPreference(anyString())).thenReturn(mPreference); - - mController = new WifiTetherSSIDPreferenceController(mContext, mListener); + mController = new WifiTetherSSIDPreferenceController(mContext, mListener, + mMetricsFeatureProvider); } @Test @@ -102,6 +108,23 @@ public class WifiTetherSSIDPreferenceControllerTest { verify(mListener, times(2)).onTetherConfigUpdated(mController); } + @Test + public void changePreference_shouldLogActionWhenChanged() { + mController.displayPreference(mScreen); + mController.onPreferenceChange(mPreference, "1"); + verify(mMetricsFeatureProvider).action(mContext, + SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME); + } + + @Test + public void changePreference_shouldNotLogActionWhenNotChanged() { + mController.displayPreference(mScreen); + mController.onPreferenceChange(mPreference, + WifiTetherSSIDPreferenceController.DEFAULT_SSID); + verify(mMetricsFeatureProvider, never()).action(mContext, + SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME); + } + @Test public void updateDisplay_shouldUpdateValue() { // Set controller ssid to anything and verify is set.