Merge "2nd attempt to fix crash when getting unavailable service"

This commit is contained in:
Fan Zhang
2018-01-24 19:08:46 +00:00
committed by Gerrit Code Review
2 changed files with 13 additions and 11 deletions

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager;
import android.hardware.display.WifiDisplay; import android.hardware.display.WifiDisplay;
@@ -213,13 +214,9 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment {
} }
public static boolean isAvailable(Context context) { public static boolean isAvailable(Context context) {
try { return context.getSystemService(Context.DISPLAY_SERVICE) != null
return context.getSystemService(Context.DISPLAY_SERVICE) != null && context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)
&& context.getSystemService(Context.WIFI_P2P_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) { private void scheduleUpdate(int changes) {

View File

@@ -24,6 +24,7 @@ import static org.mockito.Mockito.when;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager;
import android.media.MediaRouter; import android.media.MediaRouter;
import android.net.wifi.p2p.WifiP2pManager; import android.net.wifi.p2p.WifiP2pManager;
@@ -51,6 +52,8 @@ public class WifiDisplaySettingsTest {
private SummaryLoader mSummaryLoader; private SummaryLoader mSummaryLoader;
@Mock @Mock
private MediaRouter mMediaRouter; private MediaRouter mMediaRouter;
@Mock
private PackageManager mPackageManager;
private SummaryLoader.SummaryProvider mSummaryProvider; private SummaryLoader.SummaryProvider mSummaryProvider;
@@ -59,6 +62,8 @@ public class WifiDisplaySettingsTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
when(mActivity.getSystemService(Context.MEDIA_ROUTER_SERVICE)) when(mActivity.getSystemService(Context.MEDIA_ROUTER_SERVICE))
.thenReturn(mMediaRouter); .thenReturn(mMediaRouter);
when(mActivity.getPackageManager()).thenReturn(mPackageManager);
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)).thenReturn(true);
mSummaryProvider = WifiDisplaySettings.SUMMARY_PROVIDER_FACTORY.createSummaryProvider( mSummaryProvider = WifiDisplaySettings.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(
mActivity, mSummaryLoader); mActivity, mSummaryLoader);
@@ -87,15 +92,15 @@ public class WifiDisplaySettingsTest {
} }
@Test @Test
public void isAvailable_noService_shouldReturnFalse() { public void isAvailable_nullService_shouldReturnFalse() {
assertThat(WifiDisplaySettings.isAvailable(mActivity)) assertThat(WifiDisplaySettings.isAvailable(mActivity))
.isFalse(); .isFalse();
} }
@Test @Test
public void isAvailable_throwException_shouldReturnFalse() { public void isAvailable_noWifiDirectFeature_shouldReturnFalse() {
when(mActivity.getSystemService(Context.WIFI_P2P_SERVICE)) when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT))
.thenThrow(new IllegalStateException()); .thenReturn(false);
assertThat(WifiDisplaySettings.isAvailable(mActivity)) assertThat(WifiDisplaySettings.isAvailable(mActivity))
.isFalse(); .isFalse();