From 1389a0c9c9d2cc09d22ce6fbafd096537e0ae78c Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 19 Oct 2017 16:49:21 -0700 Subject: [PATCH] Catch exception when checking WifiDisplay availability Change-Id: Ic2f17905babf43e92a825b8b5b4f8aac7d8ff001 Fixes: 68013053 Test: robotests --- .../settings/wfd/WifiDisplaySettings.java | 10 ++++++-- .../settings/wfd/WifiDisplaySettingsTest.java | 23 +++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java index 0d6b4dc28b9..3fe438fda1d 100755 --- a/src/com/android/settings/wfd/WifiDisplaySettings.java +++ b/src/com/android/settings/wfd/WifiDisplaySettings.java @@ -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) { diff --git a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java index df45ad58e61..7d8ee52bbb5 100644 --- a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java +++ b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java @@ -16,16 +16,23 @@ 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