Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72b25d65 authored by tmfang's avatar tmfang
Browse files

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
parent 5674e027
Loading
Loading
Loading
Loading
+34 −17
Original line number Diff line number Diff line
@@ -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
+31 −16
Original line number Diff line number Diff line
@@ -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;
    }