Create Double Tap Power Illustrations based on target action

Creates illustration for when double tap power gesture is set to open
wallet and preference controller to alternate illustration based on gesture
target action

Android Settings Feature Request: b/380287172

Test: atest DoubleTapPowerIllustrationPreferenceControllerTest
Test: manually verified illustration corresponds to selected target
action
Bug: 381789181
FLAG: android.service.quickaccesswallet.launch_wallet_option_on_power_double_tap

Change-Id: Id73a38e09bd72856d46d74f04c0c0d2b3f989929
This commit is contained in:
Lorenzo Lucena Maguire
2024-12-02 06:06:00 +00:00
parent d3af193384
commit 18d0d26395
5 changed files with 244 additions and 1 deletions

View File

@@ -0,0 +1,96 @@
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.gestures;
import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_BUTTON_GESTURE_TARGET_ACTION_URI;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.IllustrationPreference;
/** Configures the behaviour of the double tap power illustration. */
public class DoubleTapPowerIllustrationPreferenceController extends BasePreferenceController
implements LifecycleObserver, OnStart, OnStop {
@Nullable
private IllustrationPreference mIllustrationPreference;
private final ContentObserver mSettingsObserver =
new ContentObserver(new Handler(Looper.getMainLooper())) {
@Override
public void onChange(boolean selfChange, @Nullable Uri uri) {
if (mIllustrationPreference != null && uri != null) {
updateState(mIllustrationPreference);
}
}
};
public DoubleTapPowerIllustrationPreferenceController(
@NonNull Context context, @NonNull String key) {
super(context, key);
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
}
@Override
public void displayPreference(@NonNull PreferenceScreen screen) {
super.displayPreference(screen);
mIllustrationPreference = screen.findPreference(getPreferenceKey());
}
@Override
public void updateState(@NonNull Preference preference) {
super.updateState(preference);
((IllustrationPreference) preference)
.setLottieAnimationResId(
DoubleTapPowerSettingsUtils
.isDoubleTapPowerButtonGestureForCameraLaunchEnabled(
mContext)
? R.drawable.quickly_open_camera
: R.drawable.double_tap_power_for_wallet);
}
@Override
public void onStart() {
final ContentResolver resolver = mContext.getContentResolver();
resolver.registerContentObserver(
DOUBLE_TAP_POWER_BUTTON_GESTURE_TARGET_ACTION_URI, true, mSettingsObserver);
}
@Override
public void onStop() {
DoubleTapPowerSettingsUtils.unregisterObserver(mContext, mSettingsObserver);
}
}