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

Commit c9787361 authored by DingYong's avatar DingYong Committed by Josep del Rio
Browse files

Call a search activity when using KEYCODE_SEARCH



This change adds the ability to change the behavior
of the search key to open a search activity instead
of attempting to start the search activity of the
currently opened app. The new behavior remains the
same by default, but now it can be changed to
either do nothing or open a configured activity; in
this mode, if no activity has been configured,
the `ACTION_WEB_SEARCH` Intent will be launched.

Test: manual
Bug: 240865724
Signed-off-by: default avatarLiZhihong &lt;lizh52@lenovo.corp-partner.google.com&gt; DingYong <dingyong2@lenovo.corp-partner.google.com>
Change-Id: I3037d255b693ade3f45e170746e0c2b2de5db6fb
parent 6e20c774
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -1104,6 +1104,17 @@
    <integer name="config_shortPressOnStemPrimaryBehavior">0</integer>


    <!-- Control the behavior of the search key.
            0 - Launch default search activity
            1 - Launch target activity defined by config_searchKeyTargetActivity
    -->
    <integer name="config_searchKeyBehavior">0</integer>

    <!-- Component name for the default target activity to be launched when user
         presses the global search key. [DO NOT TRANSLATE]
    -->
    <string name="config_searchKeyTargetActivity" translatable="false"></string>

    <!-- Time to wait while a button is pressed before triggering a very long press. -->
    <integer name="config_veryLongPressTimeout">3500</integer>

+2 −0
Original line number Diff line number Diff line
@@ -451,6 +451,8 @@
  <java-symbol type="integer" name="config_doublePressOnStemPrimaryBehavior" />
  <java-symbol type="integer" name="config_triplePressOnStemPrimaryBehavior" />
  <java-symbol type="string" name="config_doublePressOnPowerTargetActivity" />
  <java-symbol type="integer" name="config_searchKeyBehavior" />
  <java-symbol type="string" name="config_searchKeyTargetActivity" />
  <java-symbol type="integer" name="config_windowOutsetBottom" />
  <java-symbol type="integer" name="db_connection_pool_size" />
  <java-symbol type="integer" name="db_journal_size_limit" />
+43 −1
Original line number Diff line number Diff line
@@ -322,6 +322,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    static final int TRIPLE_PRESS_PRIMARY_NOTHING = 0;
    static final int TRIPLE_PRESS_PRIMARY_TOGGLE_ACCESSIBILITY = 1;

    // Must match: config_searchKeyBehavior in config.xml
    static final int SEARCH_BEHAVIOR_DEFAULT_SEARCH = 0;
    static final int SEARCH_BEHAVIOR_TARGET_ACTIVITY = 1;

    static public final String SYSTEM_DIALOG_REASON_KEY = "reason";
    static public final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
    static public final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
@@ -525,6 +529,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    boolean mWakeOnAssistKeyPress;
    boolean mWakeOnBackKeyPress;
    long mWakeUpToLastStateTimeout;
    int mSearchKeyBehavior;
    ComponentName mSearchKeyTargetActivity;

    private boolean mHandleVolumeKeysInWM;

@@ -2039,6 +2045,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        mWakeUpToLastStateTimeout = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_wakeUpToLastStateTimeoutMillis);

        mSearchKeyBehavior = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_searchKeyBehavior);

        mSearchKeyTargetActivity = ComponentName.unflattenFromString(
            mContext.getResources().getString(
                com.android.internal.R.string.config_searchKeyTargetActivity));
        readConfigurationDependentBehaviors();

        mDisplayFoldController = DisplayFoldController.create(context, DEFAULT_DISPLAY);
@@ -2942,7 +2954,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    toggleNotificationPanel();
                }
                return key_consumed;

            case KeyEvent.KEYCODE_SEARCH:
                if (down && repeatCount == 0 && !keyguardOn()) {
                    switch(mSearchKeyBehavior) {
                        case SEARCH_BEHAVIOR_TARGET_ACTIVITY: {
                            launchTargetSearchActivity();
                            return key_consumed;
                        }
                        case SEARCH_BEHAVIOR_DEFAULT_SEARCH:
                        default:
                            break;
                    }
                }
                break;
            case KeyEvent.KEYCODE_SPACE:
                // Handle keyboard layout switching. (META + SPACE)
                if ((metaState & KeyEvent.META_META_MASK) == 0) {
@@ -6003,4 +6027,22 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    private void launchTargetSearchActivity() {
        Intent intent;
        if (mSearchKeyTargetActivity != null) {
            intent = new Intent();
            intent.setComponent(mSearchKeyTargetActivity);
        } else {
            intent = new Intent(Intent.ACTION_WEB_SEARCH);
        }
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        try {
            startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF);
        } catch (ActivityNotFoundException ignore) {
            Slog.e(TAG, "Could not resolve activity with : "
                    + intent.getComponent().flattenToString()
                    + " name.");
        }
    }
}