Merge "2nd attempt to fix crash when getting unavailable service"
diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java
index 3fe438f..67a1e4a 100755
--- a/src/com/android/settings/wfd/WifiDisplaySettings.java
+++ b/src/com/android/settings/wfd/WifiDisplaySettings.java
@@ -22,6 +22,7 @@
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 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 7d8ee52..4b90e7f 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 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 @@
private SummaryLoader mSummaryLoader;
@Mock
private MediaRouter mMediaRouter;
+ @Mock
+ private PackageManager mPackageManager;
private SummaryLoader.SummaryProvider mSummaryProvider;
@@ -59,6 +62,8 @@
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 @@
}
@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();