OSDN Git Service

Catch exception when checking WifiDisplay availability
authorFan Zhang <zhfan@google.com>
Thu, 19 Oct 2017 23:49:21 +0000 (16:49 -0700)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Wed, 27 Dec 2017 06:35:37 +0000 (14:35 +0800)
Change-Id: Ic2f17905babf43e92a825b8b5b4f8aac7d8ff001
Fixes: 68013053
Test: robotests

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

index 0d6b4dc..3fe438f 100755 (executable)
@@ -36,6 +36,7 @@ import android.net.wifi.p2p.WifiP2pManager.Channel;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.ServiceManager;
 import android.provider.Settings;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.ListPreference;
@@ -212,8 +213,13 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment {
     }
 
     public static boolean isAvailable(Context context) {
-        return context.getSystemService(Context.DISPLAY_SERVICE) != null
-                && context.getSystemService(Context.WIFI_P2P_SERVICE) != null;
+        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;
+        }
     }
 
     private void scheduleUpdate(int changes) {
index df45ad5..7d8ee52 100644 (file)
 
 package com.android.settings.wfd;
 
+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;
+import static org.mockito.Mockito.when;
+
 import android.app.Activity;
 import android.content.Context;
 import android.hardware.display.DisplayManager;
 import android.media.MediaRouter;
 import android.net.wifi.p2p.WifiP2pManager;
+import android.os.ServiceManager;
 
 import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -34,12 +41,6 @@ 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;
-import static org.mockito.Mockito.when;
-
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class WifiDisplaySettingsTest {
@@ -89,7 +90,15 @@ public class WifiDisplaySettingsTest {
     public void isAvailable_noService_shouldReturnFalse() {
         assertThat(WifiDisplaySettings.isAvailable(mActivity))
                 .isFalse();
+    }
 
+    @Test
+    public void isAvailable_throwException_shouldReturnFalse() {
+        when(mActivity.getSystemService(Context.WIFI_P2P_SERVICE))
+                .thenThrow(new IllegalStateException());
+
+        assertThat(WifiDisplaySettings.isAvailable(mActivity))
+                .isFalse();
     }
 
     @Test