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

Commit 52478a70 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[3FT] Use system's default digital assistant's label" into main

parents dea27574 533fbaf7
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4998,6 +4998,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);