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

Commit 533fbaf7 authored by yyalan's avatar yyalan
Browse files

[3FT] Use system's default digital assistant's label

Or the generic "Assistant" when nothing is set

Demo in comment.

Bug: 409264578
Flag: com.android.settings.flags.touchpad_settings_design_update
Flag: com.android.settings.flags.three_finger_tap_app_launch
Test: See comment
Change-Id: I755f795d055a92da7d5beb27cacead0b9d07a51b
parent d2a34ce6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4930,6 +4930,10 @@
    <string name="three_finger_tap_middle_click">Middle mouse button</string>
    <!-- Radio button text for 'launch assistant' action. This is one of multiple actions the user can select from the three finger tap customization radio group. The action if selected will launch the Assistant when a three-finger tap is performed on a touchpad. [CHAR LIMIT=35] -->
    <string name="three_finger_tap_launch_gemini">Launch Assistant</string>
    <!-- Radio button text for 'launch <default assistant>' action. This is one of multiple actions the user can select from the three finger tap customization radio group. The action if selected will launch the Assistant when a three-finger tap is performed on a touchpad. [CHAR LIMIT=35] -->
    <string name="three_finger_tap_launch_default_assistant">Launch <xliff:g id="app_name" example="Assistant">%s</xliff:g></string>
    <!-- The generic assistant name when no app is chosen. [CHAR LIMIT=35] -->
    <string name="three_finger_tap_launch_generic_assistant_name">Assistant</string>
    <!-- Radio button text for 'Go home' action. This is one of multiple actions the user can select from the three finger tap customization radio group. The action if selected will take the user home when a three-finger tap is performed on a touchpad. [CHAR LIMIT=35] -->
    <string name="three_finger_tap_go_home">Go home</string>
    <!-- Radio button text for 'Go back' action. This is one of multiple actions the user can select from the three finger tap customization radio group. The action if selected will initiate a back gesture when a three-finger tap is performed on a touchpad. [CHAR LIMIT=35] -->
+45 −2
Original line number Diff line number Diff line
@@ -16,8 +16,13 @@

package com.android.settings.inputmethod;

import static com.android.settings.flags.Flags.touchpadSettingsDesignUpdate;

import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.hardware.input.InputGestureData;
import android.hardware.input.InputManager;
@@ -26,6 +31,8 @@ import android.hardware.input.KeyGestureEvent;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -36,6 +43,7 @@ import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.widget.SelectorWithWidgetPreference;

@@ -48,13 +56,16 @@ import com.android.settingslib.widget.SelectorWithWidgetPreference;
public class TouchpadThreeFingerTapActionPreferenceController extends BasePreferenceController
        implements LifecycleEventObserver, SelectorWithWidgetPreference.OnClickListener {

    private static final String TAG = "ThreeFingerTapAction";
    private static final String ASSISTANT_KEY = "launch_gemini";

    private final InputManager mInputManager;
    private final ContentResolver mContentResolver;
    private PackageManager mPackageManager;

    @Nullable
    private SelectorWithWidgetPreference mPreference;


    private ContentObserver mObserver =
            new ContentObserver(new Handler(Looper.getMainLooper())) {
                @Override
@@ -73,14 +84,17 @@ public class TouchpadThreeFingerTapActionPreferenceController extends BasePrefer
        super(context, key);
        mInputManager = context.getSystemService(InputManager.class);
        mContentResolver = context.getContentResolver();
        mPackageManager = context.getPackageManager();
    }

    @VisibleForTesting
    TouchpadThreeFingerTapActionPreferenceController(@NonNull Context context,
            @NonNull String key,
            ContentObserver contentObserver) {
            ContentObserver contentObserver,
            PackageManager packageManager) {
        this(context, key);
        mObserver = contentObserver;
        mPackageManager = packageManager;
    }

    @Override
@@ -94,9 +108,38 @@ public class TouchpadThreeFingerTapActionPreferenceController extends BasePrefer
    public void displayPreference(@NonNull PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = screen.findPreference(mPreferenceKey);

        if (mPreference != null) {
            mPreference.setOnClickListener(this);
            if (touchpadSettingsDesignUpdate() && mPreferenceKey.equals(ASSISTANT_KEY)) {
                updateDefaultAssistant(mPreference);
            }
        }
    }

    private void updateDefaultAssistant(@NonNull Preference preference) {
        String flattened = Settings.Secure.getString(mContentResolver,
                Settings.Secure.ASSISTANT);
        if (flattened != null) {
            ComponentName componentName = ComponentName.unflattenFromString(flattened);
            CharSequence label = getLabelFromPackageName(componentName);
            String title = mContext.getString(
                    R.string.three_finger_tap_launch_default_assistant, label);
            preference.setTitle(title);
        }
    }

    private CharSequence getLabelFromPackageName(@Nullable ComponentName componentName) {
        if (componentName != null) {
            try {
                ApplicationInfo appInfo = mPackageManager.getApplicationInfo(
                        componentName.getPackageName(), /* flags = */ 0);
                return appInfo.loadLabel(mPackageManager);
            } catch (PackageManager.NameNotFoundException e) {
                Log.e(TAG, "Package not found: " + componentName.getPackageName(), e);
            }
        }
        return mContext.getString(R.string.three_finger_tap_launch_generic_assistant_name);
    }

    @Override
+4 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.when;

import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.hardware.input.KeyGestureEvent;

@@ -64,6 +65,8 @@ public class TouchpadThreeFingerTapActionPreferenceControllerTest {
    private SelectorWithWidgetPreference mMockPref;
    @Mock
    private ContentObserver mMockContentObserver;
    @Mock
    private PackageManager mMockPackageManager;

    private final Context mContext = ApplicationProvider.getApplicationContext();
    private ContentResolver mContentResolver;
@@ -73,7 +76,7 @@ public class TouchpadThreeFingerTapActionPreferenceControllerTest {
    public void setup() {
        mContentResolver = mContext.getContentResolver();
        mController = new TouchpadThreeFingerTapActionPreferenceController(
                mContext, PREF_KEY, mMockContentObserver);
                mContext, PREF_KEY, mMockContentObserver, mMockPackageManager);
        when(mMockScreen.findPreference(mController.getPreferenceKey())).thenReturn(mMockPref);
        when(mMockPref.getKey()).thenReturn(PREF_KEY);
        mController.displayPreference(mMockScreen);