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

Commit 54c6851a authored by Lorenzo Lucena Maguire's avatar Lorenzo Lucena Maguire
Browse files

Avoid Resurfacing double tap power lockscreen shortcut tip if dismissed

Upon modifying the target action for the double tap power shortcut, the
preference card will be surfaced again after the user has already
dismissed the preference card. This change ensures the card is not
surfaced again within the lifecycle of the activity in case the user
dismisses the preference card.

Android Settings Feature Request: b/380287172

Bug: 406311198
Test: atest
tests/robotests/src/com/android/settings/gestures/DoubleTapPowerLockscreenTipPreferenceControllerTest
Test: Manually Tested.
Flag: android.service.quickaccesswallet.launch_wallet_option_on_power_double_tap

Change-Id: I0dec07a84679680a7eba79f58c2a6f7ef419639b
parent 9c196d38
Loading
Loading
Loading
Loading
+28 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

@@ -39,6 +40,8 @@ import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.CardPreference;

import kotlin.Unit;

public class DoubleTapPowerLockscreenTipPreferenceController extends BasePreferenceController
        implements LifecycleObserver, OnStart, OnStop {

@@ -58,6 +61,7 @@ public class DoubleTapPowerLockscreenTipPreferenceController extends BasePrefere
    static final String WALLET_KEYGUARD_QUICK_AFFORDANCE_NAME = "Wallet";

    @Nullable private CardPreference mPreference;
    private boolean mHasBeenDismissed = false;

    private final Handler mHandler = new Handler(Looper.getMainLooper());
    private final ContentObserver mSettingsObserver =
@@ -116,7 +120,17 @@ public class DoubleTapPowerLockscreenTipPreferenceController extends BasePrefere
        super.displayPreference(screen);
        mPreference = screen.findPreference(getPreferenceKey());
        if (mPreference != null) {
            mPreference.useDismissAction();
            mPreference.setAdditionalAction(
                    com.android.settingslib.widget
                            .theme.R.drawable.settingslib_expressive_icon_close,
                    mContext.getString(
                            com.android.settingslib.widget
                                    .theme.R.string.settingslib_dismiss_button_content_description),
                    preference -> {
                        onDismiss(preference);
                        return Unit.INSTANCE;
                    }
            );
            mPreference.setOnPreferenceClickListener(preference -> {
                final Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
                intent.putExtra("destination", "quick_affordances");
@@ -140,7 +154,8 @@ public class DoubleTapPowerLockscreenTipPreferenceController extends BasePrefere
    public void updateState(@NonNull Preference preference) {
        super.updateState(preference);

        if (!DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureEnabled(mContext)) {
        if (!DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureEnabled(mContext)
                || mHasBeenDismissed) {
            preference.setVisible(false);
            return;
        }
@@ -160,6 +175,17 @@ public class DoubleTapPowerLockscreenTipPreferenceController extends BasePrefere
        }
    }

    /**
     * Dismisses the Preference
     *
     * @param preference Preference
     */
    @VisibleForTesting
    public void onDismiss(@NonNull Preference preference) {
        preference.setVisible(false);
        mHasBeenDismissed = true;
    }

    @Nullable
    private static String getTargetActionIfLockScreenShortcut(@NonNull Context context) {
        String currentTargetActionName =
+11 −0
Original line number Diff line number Diff line
@@ -112,6 +112,17 @@ public class DoubleTapPowerLockscreenTipPreferenceControllerTest {
        assertThat(mPreference.isVisible()).isFalse();
    }

    @Test
    public void updateState_onDismissed_preferenceNotVisible() {
        DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonGestureEnabled(mContext, true);
        setSelectedLockScreenShortcuts(CAMERA_KEYGUARD_QUICK_AFFORDANCE_NAME);
        mController.onDismiss(mPreference);

        mController.updateState(mPreference);

        assertThat(mPreference.isVisible()).isFalse();
    }

    @Test
    public void updateState_targetActionInLockscreenShortcut_preferenceVisible() {
        DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonGestureEnabled(mContext, true);