From 38dd287e01cf6ea6b41b1f603087ce2fbfa647ae Mon Sep 17 00:00:00 2001 From: Michal Brzezinski Date: Thu, 22 Aug 2024 15:41:39 +0000 Subject: [PATCH] Launching touchpad tutorial as user 0 It's required to properly intercept touchpad gestures which is happening in process of user 0. By default activity was launched in the current user process. Also targeting sysui package directly with intent. Bug: 361518125 Test: launch touchpad tutorial with HSUM and see touchpad gestures intercepted Flag: com.android.systemui.shared.new_touchpad_gestures_tutorial Change-Id: I904df93758e49a7b10cf6d7a5398550405daafbb --- .../TouchGesturesButtonPreferenceController.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java b/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java index 12dc076a706..71fa28bf5ca 100644 --- a/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java +++ b/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java @@ -21,11 +21,13 @@ import static com.android.systemui.shared.Flags.newTouchpadGesturesTutorial; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; +import android.os.UserHandle; import android.util.FeatureFlagUtils; import androidx.fragment.app.Fragment; import androidx.preference.PreferenceScreen; +import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; @@ -79,10 +81,12 @@ public class TouchGesturesButtonPreferenceController extends BasePreferenceContr private void showTouchpadGestureEducation() { mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_LEARN_TOUCHPAD_GESTURE_CLICK); if (newTouchpadGesturesTutorial()) { - Intent intent = new Intent(TUTORIAL_ACTION); - intent.addCategory(Intent.CATEGORY_DEFAULT); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); + Intent intent = new Intent(TUTORIAL_ACTION) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .setPackage(Utils.SYSTEMUI_PACKAGE_NAME); + // touchpad tutorial must be started as system user as it needs to have access to state + // of user 0 sysui instance + mContext.startActivityAsUser(intent, UserHandle.SYSTEM); } else { TrackpadGestureDialogFragment fragment = new TrackpadGestureDialogFragment(); fragment.setTargetFragment(mParent, 0);