OSDN Git Service

2nd attempt to fix crash when getting unavailable service
authorFan Zhang <zhfan@google.com>
Tue, 23 Jan 2018 21:48:27 +0000 (13:48 -0800)
committerFan Zhang <zhfan@google.com>
Tue, 23 Jan 2018 21:53:06 +0000 (13:53 -0800)
Change-Id: I6abb16e1c84b82021ce2dd54097fe68857e69129
Fixes: 68013053
Test: robotests

src/com/android/settings/wfd/WifiDisplaySettings.java
tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java

index 3fe438f..67a1e4a 100755 (executable)
@@ -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) {
index 7d8ee52..4b90e7f 100644 (file)
@@ -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();