From e6740f740ea505dc3a07bbec2861b684f30d7194 Mon Sep 17 00:00:00 2001 From: Daniel Nishi Date: Fri, 14 Apr 2017 14:12:35 -0700 Subject: [PATCH] Fix a bug where options menu was not showing. There were two issues that stopped the options menu from showing properly. First, the SettingsPreferenceFragment did not call its super class, causing the Lifecycle methods to never be called. Second, the options menu was not being invalidated which also stopped the Lifecycle methods from being called. Change-Id: I29f2fc105c7ecae7adaccb2e4643e48646398d8d Fixes: 37255835 Test: Robotest --- .../settings/SettingsPreferenceFragment.java | 1 + .../deviceinfo/StorageDashboardFragment.java | 20 +++++++++++++------ .../StorageDashboardFragmentTest.java | 13 ++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 70743e2a98f..761e8cf57d7 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -440,6 +440,7 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); if (mHelpUri != null && getActivity() != null) { HelpUtils.prepareHelpMenuItem(getActivity(), menu, mHelpUri, getClass().getName()); } diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index 602e65f802f..24e50d3e3d8 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -16,6 +16,7 @@ package com.android.settings.deviceinfo; +import android.app.Activity; import android.app.LoaderManager; import android.content.Context; import android.content.Intent; @@ -78,16 +79,15 @@ public class StorageDashboardFragment extends DashboardFragment super.onCreate(icicle); // Initialize the storage sizes that we can quickly calc. - final Context context = getActivity(); - StorageManager sm = context.getSystemService(StorageManager.class); + final Activity activity = getActivity(); + StorageManager sm = activity.getSystemService(StorageManager.class); mVolume = Utils.maybeInitializeVolume(sm, getArguments()); if (mVolume == null) { - getActivity().finish(); + activity.finish(); return; } - mOptionMenuController = new PrivateVolumeOptionMenuController( - context, mVolume, new PackageManagerWrapperImpl(context.getPackageManager())); + initializeOptionsMenu(activity); final long sharedDataSize = mVolume.getPath().getTotalSpace(); long totalSize = sm.getPrimaryStorageSize(); @@ -114,6 +114,15 @@ public class StorageDashboardFragment extends DashboardFragment } } + @VisibleForTesting + void initializeOptionsMenu(Activity activity) { + mOptionMenuController = new PrivateVolumeOptionMenuController( + activity, mVolume, new PackageManagerWrapperImpl(activity.getPackageManager())); + getLifecycle().addObserver(mOptionMenuController); + setHasOptionsMenu(true); + activity.invalidateOptionsMenu(); + } + @Override public void onResume() { super.onResume(); @@ -156,7 +165,6 @@ public class StorageDashboardFragment extends DashboardFragment new AutomaticStorageManagementSwitchPreferenceController( context, mMetricsFeatureProvider, getFragmentManager()); getLifecycle().addObserver(asmController); - getLifecycle().addObserver(mOptionMenuController); controllers.add(asmController); return controllers; } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/StorageDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/StorageDashboardFragmentTest.java index b3253f97910..0c9988b7473 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/StorageDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/StorageDashboardFragmentTest.java @@ -18,6 +18,10 @@ package com.android.settings.deviceinfo; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import android.app.Activity; import android.os.storage.StorageManager; import android.provider.SearchIndexableResource; @@ -55,6 +59,15 @@ public class StorageDashboardFragmentTest { assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_STORAGE); } + @Test + public void test_initializeOptionsMenuInvalidatesExistingMenu() { + Activity activity = mock(Activity.class); + + mFragment.initializeOptionsMenu(activity); + + verify(activity).invalidateOptionsMenu(); + } + @Test public void testSearchIndexProvider_shouldIndexResource() { final List indexRes =