Add an open button in App info page.

Per new UX, we need to add an "Open" button
in App info page. When user clicks this button,
it will launch application.

Test: visual, robotest
Bug: 116346008
Change-Id: Ic4a36979d08bf8d58f792474cd3c9b34a147fef8
This commit is contained in:
tmfang
2018-11-29 23:35:26 +08:00
parent 5674e02732
commit 72b25d65d3
2 changed files with 65 additions and 33 deletions

View File

@@ -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

View File

@@ -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;
}