Loading res/values/bools.xml +3 −0 Original line number Diff line number Diff line Loading @@ -173,4 +173,7 @@ <!-- Whether wifi_mac_address should be shown or not. --> <bool name="config_show_wifi_mac_address">true</bool> <!-- Whether to disable "Uninstall Updates" menu item for System apps or not.. --> <bool name="config_disable_uninstall_update">false</bool> </resources> src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +6 −3 Original line number Diff line number Diff line Loading @@ -82,8 +82,8 @@ public class AppInfoDashboardFragment extends DashboardFragment private static final String TAG = "AppInfoDashboard"; // Menu identifiers private static final int UNINSTALL_ALL_USERS_MENU = 1; private static final int UNINSTALL_UPDATES = 2; @VisibleForTesting static final int UNINSTALL_ALL_USERS_MENU = 1; @VisibleForTesting static final int UNINSTALL_UPDATES = 2; static final int FORCE_STOP_MENU = 3; // Result code identifiers Loading Loading @@ -330,7 +330,10 @@ public class AppInfoDashboardFragment extends DashboardFragment menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(shouldShowUninstallForAll(mAppEntry)); mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; final MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES); uninstallUpdatesItem.setVisible(mUpdatedSysApp && !mAppsControlDisallowedBySystem); final boolean uninstallUpdateDisabled = getContext().getResources().getBoolean( R.bool.config_disable_uninstall_update); uninstallUpdatesItem.setVisible( mUpdatedSysApp && !mAppsControlDisallowedBySystem && !uninstallUpdateDisabled); if (uninstallUpdatesItem.isVisible()) { RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(), uninstallUpdatesItem, mAppsControlDisallowedAdmin); Loading tests/robotests/res/values-mcc999/config.xml +1 −0 Original line number Diff line number Diff line Loading @@ -62,4 +62,5 @@ <bool name="config_show_device_model">false</bool> <bool name="config_show_wifi_ip_address">false</bool> <bool name="config_show_wifi_mac_address">false</bool> <bool name="config_disable_uninstall_update">true</bool> </resources> tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package com.android.settings.applications.appinfo; import static com.android.settings.applications.appinfo.AppInfoDashboardFragment .UNINSTALL_ALL_USERS_MENU; import static com.android.settings.applications.appinfo.AppInfoDashboardFragment.UNINSTALL_UPDATES; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; Loading @@ -25,6 +29,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -36,6 +41,8 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.UserManager; import android.view.Menu; import android.view.MenuItem; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; Loading Loading @@ -128,6 +135,42 @@ public final class AppInfoDashboardFragmentTest { assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse(); } @Test public void onPrepareOptionsMenu_setUpdateMenuVisible_byDefaultForSystemApps_shouldBeTrue() { Menu menu = onPrepareOptionsMenuTestsSetup(); mFragment.onPrepareOptionsMenu(menu); verify(menu.findItem(UNINSTALL_UPDATES), times(1)).setVisible(true); } @Test @Config(qualifiers = "mcc999") public void onPrepareOptionsMenu_setUpdateMenuVisible_ifDisabledByDevice_shouldBeFalse() { Menu menu = onPrepareOptionsMenuTestsSetup(); mFragment.onPrepareOptionsMenu(menu); verify(menu.findItem(UNINSTALL_UPDATES), times(1)).setVisible(false); } private Menu onPrepareOptionsMenuTestsSetup() { // Menu mocking Menu menu = mock(Menu.class); final MenuItem uninstallUpdatesMenuItem = mock(MenuItem.class); final MenuItem uninstallForAllMenuItem = mock(MenuItem.class); when(menu.findItem(UNINSTALL_UPDATES)).thenReturn(uninstallUpdatesMenuItem); when(menu.findItem(UNINSTALL_ALL_USERS_MENU)).thenReturn(uninstallForAllMenuItem); // Setup work to prevent NPE final ApplicationInfo info = new ApplicationInfo(); info.flags = ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; info.enabled = true; final AppEntry appEntry = mock(AppEntry.class); appEntry.info = info; mFragment.setAppEntry(appEntry); return menu; } @Test public void launchFragment_hasNoPackageInfo_shouldFinish() { ReflectionHelpers.setField(mFragment, "mPackageInfo", null); Loading Loading
res/values/bools.xml +3 −0 Original line number Diff line number Diff line Loading @@ -173,4 +173,7 @@ <!-- Whether wifi_mac_address should be shown or not. --> <bool name="config_show_wifi_mac_address">true</bool> <!-- Whether to disable "Uninstall Updates" menu item for System apps or not.. --> <bool name="config_disable_uninstall_update">false</bool> </resources>
src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +6 −3 Original line number Diff line number Diff line Loading @@ -82,8 +82,8 @@ public class AppInfoDashboardFragment extends DashboardFragment private static final String TAG = "AppInfoDashboard"; // Menu identifiers private static final int UNINSTALL_ALL_USERS_MENU = 1; private static final int UNINSTALL_UPDATES = 2; @VisibleForTesting static final int UNINSTALL_ALL_USERS_MENU = 1; @VisibleForTesting static final int UNINSTALL_UPDATES = 2; static final int FORCE_STOP_MENU = 3; // Result code identifiers Loading Loading @@ -330,7 +330,10 @@ public class AppInfoDashboardFragment extends DashboardFragment menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(shouldShowUninstallForAll(mAppEntry)); mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; final MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES); uninstallUpdatesItem.setVisible(mUpdatedSysApp && !mAppsControlDisallowedBySystem); final boolean uninstallUpdateDisabled = getContext().getResources().getBoolean( R.bool.config_disable_uninstall_update); uninstallUpdatesItem.setVisible( mUpdatedSysApp && !mAppsControlDisallowedBySystem && !uninstallUpdateDisabled); if (uninstallUpdatesItem.isVisible()) { RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(), uninstallUpdatesItem, mAppsControlDisallowedAdmin); Loading
tests/robotests/res/values-mcc999/config.xml +1 −0 Original line number Diff line number Diff line Loading @@ -62,4 +62,5 @@ <bool name="config_show_device_model">false</bool> <bool name="config_show_wifi_ip_address">false</bool> <bool name="config_show_wifi_mac_address">false</bool> <bool name="config_disable_uninstall_update">true</bool> </resources>
tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package com.android.settings.applications.appinfo; import static com.android.settings.applications.appinfo.AppInfoDashboardFragment .UNINSTALL_ALL_USERS_MENU; import static com.android.settings.applications.appinfo.AppInfoDashboardFragment.UNINSTALL_UPDATES; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; Loading @@ -25,6 +29,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -36,6 +41,8 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.UserManager; import android.view.Menu; import android.view.MenuItem; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; Loading Loading @@ -128,6 +135,42 @@ public final class AppInfoDashboardFragmentTest { assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse(); } @Test public void onPrepareOptionsMenu_setUpdateMenuVisible_byDefaultForSystemApps_shouldBeTrue() { Menu menu = onPrepareOptionsMenuTestsSetup(); mFragment.onPrepareOptionsMenu(menu); verify(menu.findItem(UNINSTALL_UPDATES), times(1)).setVisible(true); } @Test @Config(qualifiers = "mcc999") public void onPrepareOptionsMenu_setUpdateMenuVisible_ifDisabledByDevice_shouldBeFalse() { Menu menu = onPrepareOptionsMenuTestsSetup(); mFragment.onPrepareOptionsMenu(menu); verify(menu.findItem(UNINSTALL_UPDATES), times(1)).setVisible(false); } private Menu onPrepareOptionsMenuTestsSetup() { // Menu mocking Menu menu = mock(Menu.class); final MenuItem uninstallUpdatesMenuItem = mock(MenuItem.class); final MenuItem uninstallForAllMenuItem = mock(MenuItem.class); when(menu.findItem(UNINSTALL_UPDATES)).thenReturn(uninstallUpdatesMenuItem); when(menu.findItem(UNINSTALL_ALL_USERS_MENU)).thenReturn(uninstallForAllMenuItem); // Setup work to prevent NPE final ApplicationInfo info = new ApplicationInfo(); info.flags = ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; info.enabled = true; final AppEntry appEntry = mock(AppEntry.class); appEntry.info = info; mFragment.setAppEntry(appEntry); return menu; } @Test public void launchFragment_hasNoPackageInfo_shouldFinish() { ReflectionHelpers.setField(mFragment, "mPackageInfo", null); Loading