diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java index 3fe438fda1d..67a1e4af949 100755 --- a/src/com/android/settings/wfd/WifiDisplaySettings.java +++ b/src/com/android/settings/wfd/WifiDisplaySettings.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.database.ContentObserver; import android.hardware.display.DisplayManager; import android.hardware.display.WifiDisplay; @@ -213,13 +214,9 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { } public static boolean isAvailable(Context context) { - try { - return context.getSystemService(Context.DISPLAY_SERVICE) != null - && context.getSystemService(Context.WIFI_P2P_SERVICE) != null; - } catch (Exception e) { - // Service is not registered, so this is definitely not available. - return false; - } + return context.getSystemService(Context.DISPLAY_SERVICE) != null + && context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT) + && context.getSystemService(Context.WIFI_P2P_SERVICE) != null; } private void scheduleUpdate(int changes) { diff --git a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java index 7d8ee52bbb5..4b90e7f86fd 100644 --- a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java +++ b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java @@ -24,6 +24,7 @@ import static org.mockito.Mockito.when; import android.app.Activity; import android.content.Context; +import android.content.pm.PackageManager; import android.hardware.display.DisplayManager; import android.media.MediaRouter; import android.net.wifi.p2p.WifiP2pManager; @@ -51,6 +52,8 @@ public class WifiDisplaySettingsTest { private SummaryLoader mSummaryLoader; @Mock private MediaRouter mMediaRouter; + @Mock + private PackageManager mPackageManager; private SummaryLoader.SummaryProvider mSummaryProvider; @@ -59,6 +62,8 @@ public class WifiDisplaySettingsTest { MockitoAnnotations.initMocks(this); when(mActivity.getSystemService(Context.MEDIA_ROUTER_SERVICE)) .thenReturn(mMediaRouter); + when(mActivity.getPackageManager()).thenReturn(mPackageManager); + when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)).thenReturn(true); mSummaryProvider = WifiDisplaySettings.SUMMARY_PROVIDER_FACTORY.createSummaryProvider( mActivity, mSummaryLoader); @@ -87,15 +92,15 @@ public class WifiDisplaySettingsTest { } @Test - public void isAvailable_noService_shouldReturnFalse() { + public void isAvailable_nullService_shouldReturnFalse() { assertThat(WifiDisplaySettings.isAvailable(mActivity)) .isFalse(); } @Test - public void isAvailable_throwException_shouldReturnFalse() { - when(mActivity.getSystemService(Context.WIFI_P2P_SERVICE)) - .thenThrow(new IllegalStateException()); + public void isAvailable_noWifiDirectFeature_shouldReturnFalse() { + when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)) + .thenReturn(false); assertThat(WifiDisplaySettings.isAvailable(mActivity)) .isFalse();