From 56199e94876d4bbd89fb0272156702a321dd681e Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 6 Feb 2017 14:40:20 -0800 Subject: [PATCH] Misc fix on network & internet screen for developer preview - Move wifi calling into wifi preference screen - Update tethering setting title - Ripple for master swtich preference only apply on the left half. - Move network reset to action bar overflow menu Fix: 34974598 Fix: 34976385 Test: RunSettingsRoboTests Change-Id: I0e11843efc52a0042784a4da46b7ac81fcf16138 --- res/layout/preference_master_switch.xml | 90 +++++++++++++++++++ .../preference_widget_master_switch.xml | 1 - res/values/strings.xml | 2 +- res/xml/network_and_internet.xml | 19 +--- res/xml/wifi_configure_settings.xml | 12 ++- .../android/settings/WirelessSettings.java | 8 -- .../network/NetworkDashboardFragment.java | 20 ++++- .../NetworkResetActionMenuController.java | 59 ++++++++++++ .../NetworkResetPreferenceController.java | 44 --------- .../widget/MasterSwitchPreference.java | 1 + .../settings/wifi/ConfigureWifiSettings.java | 2 + .../network/NetworkDashboardFragmentTest.java | 20 ++++- .../NetworkResetActionMenuControllerTest.java | 80 +++++++++++++++++ 13 files changed, 280 insertions(+), 78 deletions(-) create mode 100644 res/layout/preference_master_switch.xml create mode 100644 src/com/android/settings/network/NetworkResetActionMenuController.java delete mode 100644 src/com/android/settings/network/NetworkResetPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/network/NetworkResetActionMenuControllerTest.java diff --git a/res/layout/preference_master_switch.xml b/res/layout/preference_master_switch.xml new file mode 100644 index 00000000000..9f46d76093f --- /dev/null +++ b/res/layout/preference_master_switch.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/preference_widget_master_switch.xml b/res/layout/preference_widget_master_switch.xml index 51d938b8a46..cc804633d1b 100644 --- a/res/layout/preference_widget_master_switch.xml +++ b/res/layout/preference_widget_master_switch.xml @@ -24,7 +24,6 @@ android:layout_height="match_parent" android:gravity="start|center_vertical" android:orientation="horizontal" - android:paddingStart="20dp" android:paddingEnd="20dp" android:paddingTop="16dp" android:paddingBottom="16dp"> diff --git a/res/values/strings.xml b/res/values/strings.xml index a441081ddbb..235463bc71a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2943,7 +2943,7 @@ Tethering - Tethering & portable hotspot + Hotspot & Tethering "Can\u2019t tether or use portable hotspots while Data Saver is on" diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml index 7c414981334..d7a6355f908 100644 --- a/res/xml/network_and_internet.xml +++ b/res/xml/network_and_internet.xml @@ -26,8 +26,8 @@ android:icon="@drawable/ic_settings_wireless" android:order="-30"> + android:action="android.settings.WIFI_SETTINGS" + android:targetClass="Settings$WifiSettingsActivity"/> - - - - \ No newline at end of file diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml index ad5315de3c2..e8c3171cd12 100644 --- a/res/xml/wifi_configure_settings.xml +++ b/res/xml/wifi_configure_settings.xml @@ -14,8 +14,10 @@ limitations under the License. --> - + + + diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java index 6c613a52402..910e1eb092b 100644 --- a/src/com/android/settings/WirelessSettings.java +++ b/src/com/android/settings/WirelessSettings.java @@ -23,7 +23,6 @@ import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.net.ConnectivityManager; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; @@ -31,14 +30,12 @@ import android.provider.SearchIndexableResource; import android.provider.Settings; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; -import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.network.AirplaneModePreferenceController; import com.android.settings.network.MobileNetworkPreferenceController; import com.android.settings.network.MobilePlanPreferenceController; -import com.android.settings.network.NetworkResetPreferenceController; import com.android.settings.network.ProxyPreferenceController; import com.android.settings.network.TetherPreferenceController; import com.android.settings.network.VpnPreferenceController; @@ -47,7 +44,6 @@ import com.android.settings.nfc.NfcPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settingslib.RestrictedLockUtils; -import com.android.settingslib.RestrictedPreference; import java.util.ArrayList; import java.util.Arrays; @@ -69,7 +65,6 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde private TetherPreferenceController mTetherPreferenceController; private MobileNetworkPreferenceController mMobileNetworkPreferenceController; private VpnPreferenceController mVpnPreferenceController; - private NetworkResetPreferenceController mNetworkResetPreferenceController; private WifiCallingPreferenceController mWifiCallingPreferenceController; private ProxyPreferenceController mProxyPreferenceController; private MobilePlanPreferenceController mMobilePlanPreferenceController; @@ -150,7 +145,6 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde mMobileNetworkPreferenceController = new MobileNetworkPreferenceController(activity); mVpnPreferenceController = new VpnPreferenceController(activity); mWifiCallingPreferenceController = new WifiCallingPreferenceController(activity); - mNetworkResetPreferenceController = new NetworkResetPreferenceController(activity); mProxyPreferenceController = new ProxyPreferenceController(activity); mMobilePlanPreferenceController = new MobilePlanPreferenceController(activity, this); mNfcPreferenceController = new NfcPreferenceController(activity); @@ -162,7 +156,6 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde mMobileNetworkPreferenceController.displayPreference(screen); mVpnPreferenceController.displayPreference(screen); mWifiCallingPreferenceController.displayPreference(screen); - mNetworkResetPreferenceController.displayPreference(screen); mProxyPreferenceController.displayPreference(screen); mMobilePlanPreferenceController.displayPreference(screen); mNfcPreferenceController.displayPreference(screen); @@ -270,7 +263,6 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde new TetherPreferenceController(context).updateNonIndexableKeys(result); new WifiCallingPreferenceController(context).updateNonIndexableKeys(result); - new NetworkResetPreferenceController(context).updateNonIndexableKeys(result); return result; } diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java index 2d914148ddb..d2b0621446a 100644 --- a/src/com/android/settings/network/NetworkDashboardFragment.java +++ b/src/com/android/settings/network/NetworkDashboardFragment.java @@ -20,6 +20,8 @@ import android.app.Dialog; import android.content.Context; import android.provider.SearchIndexableResource; import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; @@ -42,6 +44,8 @@ public class NetworkDashboardFragment extends DashboardFragment implements private static final String TAG = "NetworkDashboardFrag"; + private NetworkResetActionMenuController mNetworkResetController; + @Override public int getMetricsCategory() { return MetricsProto.MetricsEvent.SETTINGS_NETWORK_CATEGORY; @@ -57,6 +61,18 @@ public class NetworkDashboardFragment extends DashboardFragment implements return R.xml.network_and_internet; } + @Override + public void onAttach(Context context) { + super.onAttach(context); + mNetworkResetController = new NetworkResetActionMenuController(context); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + mNetworkResetController.buildMenuItem(menu); + } + @Override protected List getPreferenceControllers(Context context) { final AirplaneModePreferenceController airplaneModePreferenceController = @@ -64,7 +80,7 @@ public class NetworkDashboardFragment extends DashboardFragment implements final MobilePlanPreferenceController mobilePlanPreferenceController = new MobilePlanPreferenceController(context, this); final WifiMasterSwitchPreferenceController wifiPreferenceController = - new WifiMasterSwitchPreferenceController(context, mMetricsFeatureProvider); + new WifiMasterSwitchPreferenceController(context, mMetricsFeatureProvider); final Lifecycle lifecycle = getLifecycle(); lifecycle.addObserver(airplaneModePreferenceController); lifecycle.addObserver(mobilePlanPreferenceController); @@ -75,8 +91,6 @@ public class NetworkDashboardFragment extends DashboardFragment implements controllers.add(new MobileNetworkPreferenceController(context)); controllers.add(new TetherPreferenceController(context)); controllers.add(new VpnPreferenceController(context)); - controllers.add(new WifiCallingPreferenceController(context)); - controllers.add(new NetworkResetPreferenceController(context)); controllers.add(new ProxyPreferenceController(context)); controllers.add(mobilePlanPreferenceController); controllers.add(wifiPreferenceController); diff --git a/src/com/android/settings/network/NetworkResetActionMenuController.java b/src/com/android/settings/network/NetworkResetActionMenuController.java new file mode 100644 index 00000000000..67c37a42edd --- /dev/null +++ b/src/com/android/settings/network/NetworkResetActionMenuController.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.network; + +import android.content.Context; +import android.os.UserHandle; +import android.os.UserManager; +import android.support.annotation.VisibleForTesting; +import android.view.Menu; +import android.view.MenuItem; + +import com.android.settings.R; +import com.android.settings.ResetNetwork; +import com.android.settings.Utils; +import com.android.settingslib.RestrictedLockUtils; + +public class NetworkResetActionMenuController { + + private static final int MENU_NETWORK_RESET = Menu.FIRST + 200; + private final Context mContext; + + public NetworkResetActionMenuController(Context context) { + mContext = context; + } + + public void buildMenuItem(Menu menu) { + MenuItem item = null; + if (isAvailable() && menu != null) { + item = menu.add(0, MENU_NETWORK_RESET, 0, R.string.reset_network_title); + } + if (item != null) { + item.setOnMenuItemClickListener(target -> { + Utils.startWithFragment(mContext, ResetNetwork.class.getName(), null, null, + 0, R.string.reset_network_title, null); + return true; + }); + } + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + boolean isAvailable() { + return !RestrictedLockUtils.hasBaseUserRestriction(mContext, + UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId()); + } +} diff --git a/src/com/android/settings/network/NetworkResetPreferenceController.java b/src/com/android/settings/network/NetworkResetPreferenceController.java deleted file mode 100644 index e357fbe2456..00000000000 --- a/src/com/android/settings/network/NetworkResetPreferenceController.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.settings.network; - -import android.content.Context; -import android.os.UserHandle; -import android.os.UserManager; -import android.support.v7.preference.Preference; - -import com.android.settings.core.PreferenceController; -import com.android.settingslib.RestrictedLockUtils; - -public class NetworkResetPreferenceController extends PreferenceController { - - private static final String KEY_NETWORK_RESET = "network_reset"; - - public NetworkResetPreferenceController(Context context) { - super(context); - } - - @Override - public boolean isAvailable() { - return !RestrictedLockUtils.hasBaseUserRestriction(mContext, - UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId()); - } - - @Override - public String getPreferenceKey() { - return KEY_NETWORK_RESET; - } -} diff --git a/src/com/android/settings/widget/MasterSwitchPreference.java b/src/com/android/settings/widget/MasterSwitchPreference.java index 4650730fba6..94c429bb6b0 100644 --- a/src/com/android/settings/widget/MasterSwitchPreference.java +++ b/src/com/android/settings/widget/MasterSwitchPreference.java @@ -110,6 +110,7 @@ public class MasterSwitchPreference extends Preference { } private void init() { + setLayoutResource(R.layout.preference_master_switch); setWidgetLayoutResource(R.layout.preference_widget_master_switch); } } diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java index 2a9c8699eac..74df6be73fa 100644 --- a/src/com/android/settings/wifi/ConfigureWifiSettings.java +++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java @@ -25,6 +25,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.core.PreferenceController; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.network.WifiCallingPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.wifi.p2p.WifiP2pPreferenceController; @@ -71,6 +72,7 @@ public class ConfigureWifiSettings extends DashboardFragment { controllers.add(new WifiWakeupPreferenceController(context, getLifecycle())); controllers.add(new WifiSleepPolicyPreferenceController(context)); controllers.add(new WifiP2pPreferenceController(context, getLifecycle(), mWifiManager)); + controllers.add(new WifiCallingPreferenceController(context)); controllers.add(new WpsPreferenceController( context, getLifecycle(), mWifiManager, getFragmentManager())); return controllers; diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java index dc96ed6025d..7626ec4ed84 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java @@ -17,13 +17,13 @@ package com.android.settings.network; import android.content.Context; import android.provider.SearchIndexableResource; +import android.view.Menu; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; -import com.android.settings.accounts.UserAndAccountDashboardFragment; -import com.android.settings.dashboard.DashboardFragmentRegistry; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settingslib.drawer.CategoryKey; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,10 +32,14 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; +import org.robolectric.util.ReflectionHelpers; import java.util.List; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @@ -72,4 +76,16 @@ public class NetworkDashboardFragmentTest { assertThat(indexRes).isNotNull(); assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId()); } + + @Test + public void testPrepareActionBar_networkResetShouldBeCreated() { + final NetworkResetActionMenuController resetController = + mock(NetworkResetActionMenuController.class); + ReflectionHelpers.setField(mFragment, "mNetworkResetController", resetController); + + mFragment.onCreateOptionsMenu(null, null); + + verify(resetController).buildMenuItem(any(Menu.class)); + } + } diff --git a/tests/robotests/src/com/android/settings/network/NetworkResetActionMenuControllerTest.java b/tests/robotests/src/com/android/settings/network/NetworkResetActionMenuControllerTest.java new file mode 100644 index 00000000000..ba332b78e77 --- /dev/null +++ b/tests/robotests/src/com/android/settings/network/NetworkResetActionMenuControllerTest.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.network; + + +import android.content.Context; +import android.view.Menu; +import android.view.MenuItem; + +import com.android.settings.SettingsRobolectricTestRunner; +import com.android.settings.TestConfig; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class NetworkResetActionMenuControllerTest { + + private Context mContext; + private NetworkResetActionMenuController mController; + @Mock + private Menu mMenu; + @Mock + private MenuItem mMenuItem; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; + mController = spy(new NetworkResetActionMenuController(mContext)); + when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem); + } + + @Test + public void buildMenuItem_available_shouldAddToMenu() { + doReturn(true).when(mController).isAvailable(); + + mController.buildMenuItem(mMenu); + + verify(mMenu).add(anyInt(), anyInt(), anyInt(), anyInt()); + verify(mMenuItem).setOnMenuItemClickListener(any(MenuItem.OnMenuItemClickListener.class)); + } + + @Test + public void buildMenuItem_notAvailable_shouldNotAddToMenu() { + doReturn(false).when(mController).isAvailable(); + + mController.buildMenuItem(mMenu); + + verify(mMenu, never()).add(anyInt(), anyInt(), anyInt(), anyInt()); + } +}