diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-04-23 23:18:16 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-04-23 23:18:16 +0000 |
commit | 04edd7390c6ad5ff321b81f83376314018ce23bf (patch) | |
tree | acbc59925f281dfbf46909b4ea2e48ae19714204 | |
parent | f9442f5e51cce80fd401906d681281d5966b3abf (diff) | |
parent | 40ceb026d71c13d6746c6cd9a3f79a210a10cf0f (diff) | |
download | TvSettings-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.java | 11 | ||||
-rw-r--r-- | TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/slices/SettingsPreferenceFragment.java | 26 |
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 + } } |