From 4fcd5ed29f6bb5916099acc7aa9ea8aa54bcb414 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 10 Mar 2017 12:25:35 -0800 Subject: [PATCH] Disable wifi display activity if device can't support it. Change-Id: I19ab9d0d480b66e56b87cef7c49d4391a3608111 Fix: 36069170 Test: make RunSettingsRoboTests --- .../android/settings/SettingsActivity.java | 5 ++ .../settings/wfd/WifiDisplaySettings.java | 61 ++++++++++--------- .../settings/wfd/WifiDisplaySettingsTest.java | 21 +++++++ 3 files changed, 59 insertions(+), 28 deletions(-) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 7d6cf77a8e3..7a4d5f86390 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -67,6 +67,7 @@ import com.android.settings.dashboard.SearchResultsSummary; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.DynamicIndexableContentMonitor; import com.android.settings.search2.SearchFeatureProvider; +import com.android.settings.wfd.WifiDisplaySettings; import com.android.settings.widget.SwitchBar; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.SettingsDrawerActivity; @@ -947,6 +948,10 @@ public class SettingsActivity extends SettingsDrawerActivity FeatureFactory.getFactory(this).getEnterprisePrivacyFeatureProvider(this) .hasDeviceOwner(), isAdmin); + setTileEnabled(new ComponentName(packageName, + Settings.WifiDisplaySettingsActivity.class.getName()), + WifiDisplaySettings.isAvailable(this), isAdmin); + if (UserHandle.MU_ENABLED && !isAdmin) { // When on restricted users, disable all extra categories (but only the settings ones). diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java index f7c2f6ebfd4..0d6b4dc28b9 100755 --- a/src/com/android/settings/wfd/WifiDisplaySettings.java +++ b/src/com/android/settings/wfd/WifiDisplaySettings.java @@ -125,9 +125,9 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { super.onCreate(icicle); final Context context = getActivity(); - mRouter = (MediaRouter)context.getSystemService(Context.MEDIA_ROUTER_SERVICE); - mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE); - mWifiP2pManager = (WifiP2pManager)context.getSystemService(Context.WIFI_P2P_SERVICE); + mRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE); + mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); + mWifiP2pManager = (WifiP2pManager) context.getSystemService(Context.WIFI_P2P_SERVICE); mWifiP2pChannel = mWifiP2pManager.initialize(context, Looper.getMainLooper(), null); addPreferencesFromResource(R.xml.wifi_display_settings); @@ -211,6 +211,11 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { return super.onOptionsItemSelected(item); } + public static boolean isAvailable(Context context) { + return context.getSystemService(Context.DISPLAY_SERVICE) != null + && context.getSystemService(Context.WIFI_P2P_SERVICE) != null; + } + private void scheduleUpdate(int changes) { if (mStarted) { if (mPendingChanges == 0) { @@ -237,7 +242,7 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { mWifiDisplayCertificationOn = Settings.Global.getInt(getContentResolver(), Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, 0) != 0; mWpsConfig = Settings.Global.getInt(getContentResolver(), - Settings.Global.WIFI_DISPLAY_WPS_CONFIG, WpsInfo.INVALID); + Settings.Global.WIFI_DISPLAY_WPS_CONFIG, WpsInfo.INVALID); // The wifi display enabled setting may have changed. invalidateOptions = true; @@ -402,12 +407,12 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { }); mWpsConfig = Settings.Global.getInt(getActivity().getContentResolver(), Settings.Global.WIFI_DISPLAY_WPS_CONFIG, WpsInfo.INVALID); - String[] wpsEntries = { "Default", "PBC", "KEYPAD", "DISPLAY" }; + String[] wpsEntries = {"Default", "PBC", "KEYPAD", "DISPLAY"}; String[] wpsValues = { - "" + WpsInfo.INVALID, - "" + WpsInfo.PBC, - "" + WpsInfo.KEYPAD, - "" + WpsInfo.DISPLAY }; + "" + WpsInfo.INVALID, + "" + WpsInfo.PBC, + "" + WpsInfo.KEYPAD, + "" + WpsInfo.DISPLAY}; lp.setKey("wps"); lp.setTitle(R.string.wifi_display_wps_config); lp.setEntries(wpsEntries); @@ -430,8 +435,8 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { return true; } }); - String[] lcEntries = { "Auto", "1", "6", "11" }; - String[] lcValues = { "0", "1", "6", "11" }; + String[] lcEntries = {"Auto", "1", "6", "11"}; + String[] lcValues = {"0", "1", "6", "11"}; lp.setKey("listening_channel"); lp.setTitle(R.string.wifi_display_listen_channel); lp.setEntries(lcEntries); @@ -454,8 +459,8 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { return true; } }); - String[] ocEntries = { "Auto", "1", "6", "11", "36" }; - String[] ocValues = { "0", "1", "6", "11", "36" }; + String[] ocEntries = {"Auto", "1", "6", "11", "36"}; + String[] ocValues = {"0", "1", "6", "11", "36"}; lp.setKey("operating_channel"); lp.setTitle(R.string.wifi_display_operating_channel); lp.setEntries(ocEntries); @@ -512,14 +517,14 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { public void onSuccess() { if (DEBUG) { Slog.d(TAG, "Successfully " + (enable ? "entered" : "exited") - +" listen mode."); + + " listen mode."); } } @Override public void onFailure(int reason) { Slog.e(TAG, "Failed to " + (enable ? "entered" : "exited") - +" listen mode with reason " + reason + "."); + + " listen mode with reason " + reason + "."); } }); } @@ -530,18 +535,18 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { } mWifiP2pManager.setWifiP2pChannels(mWifiP2pChannel, lc, oc, new ActionListener() { - @Override - public void onSuccess() { - if (DEBUG) { - Slog.d(TAG, "Successfully set wifi p2p channels."); - } - } + @Override + public void onSuccess() { + if (DEBUG) { + Slog.d(TAG, "Successfully set wifi p2p channels."); + } + } - @Override - public void onFailure(int reason) { - Slog.e(TAG, "Failed to set wifi p2p channels with reason " + reason + "."); - } - }); + @Override + public void onFailure(int reason) { + Slog.e(TAG, "Failed to set wifi p2p channels with reason " + reason + "."); + } + }); } private void toggleRoute(MediaRouter.RouteInfo route) { @@ -561,7 +566,7 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { private void showWifiDisplayOptionsDialog(final WifiDisplay display) { View view = getActivity().getLayoutInflater().inflate(R.layout.wifi_display_options, null); - final EditText nameEditText = (EditText)view.findViewById(R.id.name); + final EditText nameEditText = (EditText) view.findViewById(R.id.name); nameEditText.setText(display.getFriendlyDisplayName()); DialogInterface.OnClickListener done = new DialogInterface.OnClickListener() { @@ -707,7 +712,7 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { TypedValue value = new TypedValue(); getContext().getTheme().resolveAttribute(android.R.attr.disabledAlpha, value, true); - deviceDetails.setImageAlpha((int)(value.getFloat() * 255)); + deviceDetails.setImageAlpha((int) (value.getFloat() * 255)); deviceDetails.setEnabled(true); // always allow button to be pressed } } diff --git a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java index c412d5560b3..de097fcb344 100644 --- a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java +++ b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java @@ -18,7 +18,9 @@ package com.android.settings.wfd; import android.app.Activity; import android.content.Context; +import android.hardware.display.DisplayManager; import android.media.MediaRouter; +import android.net.wifi.p2p.WifiP2pManager; import com.android.settings.R; import com.android.settings.SettingsRobolectricTestRunner; @@ -32,6 +34,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -82,4 +85,22 @@ public class WifiDisplaySettingsTest { verify(mActivity).getString(R.string.wifi_display_status_connected); } + @Test + public void isAvailable_noService_shouldReturnFalse() { + assertThat(WifiDisplaySettings.isAvailable(mActivity)) + .isFalse(); + + } + + @Test + public void isAvailable_hasService_shouldReturnTrue() { + when(mActivity.getSystemService(Context.DISPLAY_SERVICE)) + .thenReturn(mock(DisplayManager.class)); + when(mActivity.getSystemService(Context.WIFI_P2P_SERVICE)) + .thenReturn(mock(WifiP2pManager.class)); + + assertThat(WifiDisplaySettings.isAvailable(mActivity)) + .isTrue(); + } + }