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