summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-04-23 23:18:16 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-04-23 23:18:16 +0000
commit04edd7390c6ad5ff321b81f83376314018ce23bf (patch)
treeacbc59925f281dfbf46909b4ea2e48ae19714204
parentf9442f5e51cce80fd401906d681281d5966b3abf (diff)
parent40ceb026d71c13d6746c6cd9a3f79a210a10cf0f (diff)
downloadTvSettings-sdk-release.tar.gz
Snap for 11754915 from 40ceb026d71c13d6746c6cd9a3f79a210a10cf0f to sdk-releasesdk-release
Change-Id: Iac6ae090a1ab9bcf68d3293340dd94ee8fe15728
-rw-r--r--Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java11
-rw-r--r--TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/slices/SettingsPreferenceFragment.java26
2 files changed, 35 insertions, 2 deletions
diff --git a/Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java b/Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java
index 98e76a39a..2f31da8e2 100644
--- a/Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java
+++ b/Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java
@@ -203,13 +203,13 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
}
vh.itemView.setOnTouchListener((v, e) -> {
if (e.getActionMasked() == MotionEvent.ACTION_DOWN
- && e.getButtonState() == MotionEvent.BUTTON_PRIMARY) {
+ && isPrimaryKey(e.getButtonState())) {
vh.itemView.requestFocus();
v.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_DPAD_CENTER));
return true;
} else if (e.getActionMasked() == MotionEvent.ACTION_UP
- && e.getButtonState() == MotionEvent.BUTTON_PRIMARY) {
+ && isPrimaryKey(e.getButtonState())) {
v.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_DPAD_CENTER));
return true;
@@ -316,4 +316,11 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
protected int getPageId() {
return TvSettingsEnums.PAGE_CLASSIC_DEFAULT;
}
+
+ // check if such motion event should translate to key event DPAD_CENTER
+ private boolean isPrimaryKey(int buttonState) {
+ return buttonState == MotionEvent.BUTTON_PRIMARY
+ || buttonState == MotionEvent.BUTTON_STYLUS_PRIMARY
+ || buttonState == 0; // motion events which creates by UI Automator
+ }
}
diff --git a/TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/slices/SettingsPreferenceFragment.java b/TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/slices/SettingsPreferenceFragment.java
index 58ceda8fb..ea76be986 100644
--- a/TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/slices/SettingsPreferenceFragment.java
+++ b/TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/slices/SettingsPreferenceFragment.java
@@ -30,9 +30,11 @@ import android.app.tvsettings.TvSettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
+import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -116,6 +118,23 @@ public abstract class SettingsPreferenceFragment extends SettingsPreferenceFragm
PreferenceViewHolder vh = super.onCreateViewHolder(parent, viewType);
vh.itemView.setStateListAnimator(AnimatorInflater.loadStateListAnimator(
getContext(), R.animator.preference));
+ vh.itemView.setOnTouchListener((v, e) -> {
+ if (e.getActionMasked() == MotionEvent.ACTION_DOWN
+ && isPrimaryKey(e.getButtonState())) {
+ vh.itemView.requestFocus();
+ v.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_DPAD_CENTER));
+ return true;
+ } else if (e.getActionMasked() == MotionEvent.ACTION_UP
+ && isPrimaryKey(e.getButtonState())) {
+ v.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP,
+ KeyEvent.KEYCODE_DPAD_CENTER));
+ return true;
+ }
+ return false;
+ });
+ vh.itemView.setFocusable(true);
+ vh.itemView.setFocusableInTouchMode(true);
return vh;
}
};
@@ -204,4 +223,11 @@ public abstract class SettingsPreferenceFragment extends SettingsPreferenceFragm
protected int getPageId() {
return TvSettingsEnums.PAGE_CLASSIC_DEFAULT;
}
+
+ // check if such motion event should translate to key event DPAD_CENTER
+ private boolean isPrimaryKey(int buttonState) {
+ return buttonState == MotionEvent.BUTTON_PRIMARY
+ || buttonState == MotionEvent.BUTTON_STYLUS_PRIMARY
+ || buttonState == 0; // motion events which creates by UI Automator
+ }
}