From 838175526386a52df85dc2bd502f3bfad2891f54 Mon Sep 17 00:00:00 2001 From: Daniel Nishi Date: Wed, 3 May 2017 13:36:36 -0700 Subject: [PATCH] Fix Settings crash in Storage settings. If you tap aggressively before the fragment has fully initialized, it was possible to NPE. This null-checks to avoid this. Change-Id: I3488245d230cf1e16b23e34614c8e6b43ea14ff1 Fixes: 37945253 Test: Robotest --- .../storage/StorageItemPreferenceController.java | 8 ++++++++ .../StorageItemPreferenceControllerTest.java | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java index ac54c1788b6..4ce785a2739 100644 --- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java +++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java @@ -300,6 +300,10 @@ public class StorageItemPreferenceController extends PreferenceController { } private Intent getAudioIntent() { + if (mVolume == null) { + return null; + } + Bundle args = new Bundle(); args.putString(ManageApplications.EXTRA_CLASSNAME, Settings.StorageUseActivity.class.getName()); @@ -312,6 +316,10 @@ public class StorageItemPreferenceController extends PreferenceController { } private Intent getAppsIntent() { + if (mVolume == null) { + return null; + } + Bundle args = new Bundle(); args.putString(ManageApplications.EXTRA_CLASSNAME, Settings.StorageUseActivity.class.getName()); diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java index fb659935335..bc42d1f1033 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java @@ -146,6 +146,14 @@ public class StorageItemPreferenceControllerTest { ManageApplications.STORAGE_TYPE_MUSIC); } + @Test + public void handlePreferenceTreeClick_tappingAudioWhileUninitializedDoesntCrash() { + mController.setVolume(null); + + mPreference.setKey("pref_music_audio"); + mController.handlePreferenceTreeClick(mPreference); + } + @Test public void testClickApps() { mPreference.setKey("pref_other_apps"); @@ -164,6 +172,14 @@ public class StorageItemPreferenceControllerTest { .isEqualTo(R.string.apps_storage); } + @Test + public void handlePreferenceTreeClick_tappingAppsWhileUninitializedDoesntCrash() { + mController.setVolume(null); + + mPreference.setKey("pref_other_apps"); + mController.handlePreferenceTreeClick(mPreference); + } + @Test public void testClickFiles() { when(mSvp.findEmulatedForPrivate(any(VolumeInfo.class))).thenReturn(mVolume);