diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java index ebcb6edafd1..2e528a71e6f 100644 --- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java @@ -101,6 +101,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp @VisibleForTesting ActionButtonsPreference mButtonsPref; + private final int mUserId; private final int mRequestUninstall; private final int mRequestRemoveDeviceAdmin; private final DevicePolicyManager mDpm; @@ -110,8 +111,8 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp private final InstrumentedPreferenceFragment mFragment; private final MetricsFeatureProvider mMetricsFeatureProvider; private final ApplicationFeatureProvider mApplicationFeatureProvider; - private final int mUserId; + private Intent mAppLaunchIntent; private ApplicationsState.Session mSession; private RestrictedLockUtils.EnforcedAdmin mAppsControlDisallowedAdmin; @@ -144,6 +145,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp mUserId = UserHandle.myUserId(); mRequestUninstall = requestUninstall; mRequestRemoveDeviceAdmin = requestRemoveDeviceAdmin; + mAppLaunchIntent = mPm.getLaunchIntentForPackage(mPackageName); if (packageName != null) { mAppEntry = mState.getEntry(packageName, mUserId); @@ -167,13 +169,16 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp if (isAvailable()) { mButtonsPref = ((ActionButtonsPreference) screen.findPreference( KEY_ACTION_BUTTONS)) - .setButton1Text(R.string.uninstall_text) - .setButton1Icon(R.drawable.ic_settings_delete) - .setButton2Text(R.string.force_stop) - .setButton2Icon(R.drawable.ic_settings_force_stop) - .setButton1OnClickListener(new UninstallAndDisableButtonListener()) - .setButton2OnClickListener(new ForceStopButtonListener()) - .setButton2Enabled(false); + .setButton1Text(R.string.launch_instant_app) + .setButton1Icon(R.drawable.ic_settings_open) + .setButton1OnClickListener(v -> launchApplication()) + .setButton2Text(R.string.uninstall_text) + .setButton2Icon(R.drawable.ic_settings_delete) + .setButton2OnClickListener(new UninstallAndDisableButtonListener()) + .setButton3Text(R.string.force_stop) + .setButton3Icon(R.drawable.ic_settings_force_stop) + .setButton3OnClickListener(new ForceStopButtonListener()) + .setButton3Enabled(false); } } @@ -361,6 +366,12 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp } } + @VisibleForTesting + void updateOpenButton() { + mAppLaunchIntent = mPm.getLaunchIntentForPackage(mPackageName); + mButtonsPref.setButton1Visible(mAppLaunchIntent != null); + } + @VisibleForTesting void updateUninstallButton() { final boolean isBundled = (mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0; @@ -431,7 +442,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp enabled = false; } - mButtonsPref.setButton1Enabled(enabled); + mButtonsPref.setButton2Enabled(enabled); } /** @@ -498,9 +509,9 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp @VisibleForTesting void updateForceStopButtonInner(boolean enabled) { if (mAppsControlDisallowedBySystem) { - mButtonsPref.setButton2Enabled(false); + mButtonsPref.setButton3Enabled(false); } else { - mButtonsPref.setButton2Enabled(enabled); + mButtonsPref.setButton3Enabled(enabled); } } @@ -548,16 +559,16 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp if (mHomePackages.contains(mAppEntry.info.packageName) || isSystemPackage(mActivity.getResources(), mPm, mPackageInfo)) { // Disable button for core system applications. - mButtonsPref.setButton1Text(R.string.uninstall_text) - .setButton1Icon(R.drawable.ic_settings_delete); + mButtonsPref.setButton2Text(R.string.uninstall_text) + .setButton2Icon(R.drawable.ic_settings_delete); } else if (mAppEntry.info.enabled && !isDisabledUntilUsed()) { - mButtonsPref.setButton1Text(R.string.uninstall_text) - .setButton1Icon(R.drawable.ic_settings_delete); + mButtonsPref.setButton2Text(R.string.uninstall_text) + .setButton2Icon(R.drawable.ic_settings_delete); disableable = !mApplicationFeatureProvider.getKeepEnabledPackages() .contains(mAppEntry.info.packageName); } else { - mButtonsPref.setButton1Text(R.string.install_text) - .setButton1Icon(R.drawable.ic_settings_install); + mButtonsPref.setButton2Text(R.string.install_text) + .setButton2Icon(R.drawable.ic_settings_install); disableable = true; } @@ -640,6 +651,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp } } + updateOpenButton(); updateUninstallButton(); updateForceStopButton(); @@ -664,6 +676,11 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp mActivity.unregisterReceiver(mPackageRemovedReceiver); } + private void launchApplication() { + if (mAppLaunchIntent != null) { + mContext.startActivityAsUser(mAppLaunchIntent, new UserHandle(mUserId)); + } + } /** * Changes the status of disable/enable for a package diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java index e40a88553f4..f8dd11bb726 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java @@ -100,9 +100,8 @@ public class AppButtonsPreferenceControllerTest { @Mock private PackageInfo mPackageInfo; - private ActionButtonsPreference mButtonPrefs; - private Intent mUninstallIntent; + private ActionButtonsPreference mButtonPrefs; private AppButtonsPreferenceController mController; @Before @@ -175,6 +174,22 @@ public class AppButtonsPreferenceControllerTest { assertThat(mController.mPackageInfo).isNull(); } + @Test + public void updateOpenButton_noLaunchIntent_buttonShouldBeDisable() { + mController.updateOpenButton(); + + verify(mButtonPrefs).setButton1Visible(false); + } + + @Test + public void updateOpenButton_haveLaunchIntent_buttonShouldBeEnable() { + doReturn(new Intent()).when(mPackageManger).getLaunchIntentForPackage(anyString()); + + mController.updateOpenButton(); + + verify(mButtonPrefs).setButton1Visible(true); + } + @Test public void updateUninstallButton_isSystemApp_handleAsDisableableButton() { doReturn(false).when(mController).handleDisableable(); @@ -183,7 +198,7 @@ public class AppButtonsPreferenceControllerTest { mController.updateUninstallButton(); verify(mController).handleDisableable(); - verify(mButtonPrefs).setButton1Enabled(false); + verify(mButtonPrefs).setButton2Enabled(false); } @Test @@ -221,7 +236,7 @@ public class AppButtonsPreferenceControllerTest { mController.updateUninstallButton(); verify(mController).handleDisableable(); - verify(mButtonPrefs).setButton1Enabled(false); + verify(mButtonPrefs).setButton2Enabled(false); } @Test @@ -230,7 +245,7 @@ public class AppButtonsPreferenceControllerTest { mController.updateUninstallButton(); - verify(mButtonPrefs).setButton1Enabled(false); + verify(mButtonPrefs).setButton2Enabled(false); } @Test @@ -240,7 +255,7 @@ public class AppButtonsPreferenceControllerTest { mController.updateUninstallButton(); - verify(mButtonPrefs).setButton1Enabled(false); + verify(mButtonPrefs).setButton2Enabled(false); } @Test @@ -249,7 +264,7 @@ public class AppButtonsPreferenceControllerTest { mController.updateUninstallButton(); - verify(mButtonPrefs).setButton1Enabled(false); + verify(mButtonPrefs).setButton2Enabled(false); } @Test @@ -259,7 +274,7 @@ public class AppButtonsPreferenceControllerTest { mController.updateUninstallButton(); - verify(mButtonPrefs).setButton1Enabled(false); + verify(mButtonPrefs).setButton2Enabled(false); } @Test @@ -309,7 +324,7 @@ public class AppButtonsPreferenceControllerTest { final boolean controllable = mController.handleDisableable(); - verify(mButtonPrefs).setButton1Text(R.string.uninstall_text); + verify(mButtonPrefs).setButton2Text(R.string.uninstall_text); assertThat(controllable).isFalse(); } @@ -321,7 +336,7 @@ public class AppButtonsPreferenceControllerTest { final boolean controllable = mController.handleDisableable(); - verify(mButtonPrefs).setButton1Text(R.string.uninstall_text); + verify(mButtonPrefs).setButton2Text(R.string.uninstall_text); assertThat(controllable).isTrue(); } @@ -333,7 +348,7 @@ public class AppButtonsPreferenceControllerTest { final boolean controllable = mController.handleDisableable(); - verify(mButtonPrefs).setButton1Text(R.string.install_text); + verify(mButtonPrefs).setButton2Text(R.string.install_text); assertThat(controllable).isTrue(); } @@ -394,11 +409,11 @@ public class AppButtonsPreferenceControllerTest { private ActionButtonsPreference createMock() { final ActionButtonsPreference pref = mock(ActionButtonsPreference.class); - when(pref.setButton1Text(anyInt())).thenReturn(pref); - when(pref.setButton1Icon(anyInt())).thenReturn(pref); - when(pref.setButton1Enabled(anyBoolean())).thenReturn(pref); - when(pref.setButton1Visible(anyBoolean())).thenReturn(pref); - when(pref.setButton1OnClickListener(any(View.OnClickListener.class))).thenReturn(pref); + when(pref.setButton2Text(anyInt())).thenReturn(pref); + when(pref.setButton2Icon(anyInt())).thenReturn(pref); + when(pref.setButton2Enabled(anyBoolean())).thenReturn(pref); + when(pref.setButton2Visible(anyBoolean())).thenReturn(pref); + when(pref.setButton2OnClickListener(any(View.OnClickListener.class))).thenReturn(pref); return pref; }