diff options
| author | Dirk Sierd de Vries <contact@lecapuchon.nl> | 2026-08-09 20:04:03 +0200 |
|---|---|---|
| committer | Dirk Sierd de Vries <contact@lecapuchon.nl> | 2026-08-09 20:04:03 +0200 |
| commit | 919431a02604a3dfb6950e42541318cb9a1f855d (patch) | |
| tree | 7fe754914570f53bedfed60b25e80cc904463213 /app/src/main | |
| parent | 624fb39899e65054ab25c3025dda8ba57e021290 (diff) | |
| download | SidePhOnelauncher-919431a02604a3dfb6950e42541318cb9a1f855d.tar.gz SidePhOnelauncher-919431a02604a3dfb6950e42541318cb9a1f855d.tar.bz2 SidePhOnelauncher-919431a02604a3dfb6950e42541318cb9a1f855d.zip | |
Refine D-pad search navigation and drawer input
- open app search from the home screen with DPAD_RIGHT
- return from the drawer search field with DPAD_LEFT when the caret is at the start
- keep normal cursor movement inside the search input
- force the drawer search text back to the default typeface while preserving keypad-friendly IME behavior
Diffstat (limited to 'app/src/main')
| -rw-r--r-- | app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt | 25 | ||||
| -rw-r--r-- | app/src/main/java/app/olauncher/ui/HomeFragment.kt | 27 |
2 files changed, 33 insertions, 19 deletions
diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index b4b7ef1..56af3dc 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -1,6 +1,7 @@ package app.olauncher.ui import android.content.Context +import android.graphics.Typeface import android.os.Build import android.os.Bundle import android.os.Process @@ -113,7 +114,28 @@ class AppDrawerFragment : Fragment() { if (event.action != KeyEvent.ACTION_DOWN) return@setOnKeyListener false if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { focusFirstLaunchableItem() - } else false + } else { + false + } + } + + searchTextView?.setOnKeyListener { _, keyCode, event -> + if (event.action != KeyEvent.ACTION_DOWN) return@setOnKeyListener false + when (keyCode) { + KeyEvent.KEYCODE_DPAD_DOWN -> focusFirstLaunchableItem() + KeyEvent.KEYCODE_DPAD_LEFT -> { + val textView = searchTextView + val selectionStart = textView?.selectionStart ?: -1 + val selectionEnd = textView?.selectionEnd ?: -1 + if (selectionStart <= 0 && selectionEnd <= 0) { + findNavController().popBackStack() + true + } else { + false + } + } + else -> false + } } } @@ -127,6 +149,7 @@ class AppDrawerFragment : Fragment() { searchTextView?.gravity = prefs.appLabelAlignment searchTextView?.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD + searchTextView?.typeface = Typeface.DEFAULT searchTextView?.imeOptions = EditorInfo.IME_ACTION_SEARCH or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING } catch (e: Exception) { diff --git a/app/src/main/java/app/olauncher/ui/HomeFragment.kt b/app/src/main/java/app/olauncher/ui/HomeFragment.kt index 1d14c61..43ddbb1 100644 --- a/app/src/main/java/app/olauncher/ui/HomeFragment.kt +++ b/app/src/main/java/app/olauncher/ui/HomeFragment.kt @@ -62,7 +62,6 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener private val binding get() = _binding!! private var dpadLeftKeyDownTime = 0L - private var dpadRightKeyDownTime = 0L private val notificationDotListener: () -> Unit = { activity?.runOnUiThread { if (_binding != null) updateHomeNotificationDots() @@ -94,7 +93,6 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener super.onResume() NotificationDotRepository.addListener(notificationDotListener) dpadLeftKeyDownTime = 0L - dpadRightKeyDownTime = 0L populateHomeScreen(false) viewModel.isOlauncherDefault() if (prefs.showStatusBar) showStatusBar() @@ -245,8 +243,6 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener if (event.repeatCount > 0) return true if (focusedIndex < visibleApps.size - 1) { visibleApps[focusedIndex + 1].requestFocus() - } else if (focusedIndex == visibleApps.size - 1) { - showAppList(Constants.FLAG_LAUNCH_APP) } return true } @@ -262,14 +258,8 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener return true } KeyEvent.KEYCODE_DPAD_RIGHT -> { - if (dpadRightKeyDownTime == 0L) dpadRightKeyDownTime = System.currentTimeMillis() - if (event.repeatCount > 0) { - val elapsed = System.currentTimeMillis() - dpadRightKeyDownTime - if (elapsed >= Constants.LONG_PRESS_DELAY_MS) { - dpadRightKeyDownTime = 0L - openSwipeRightApp() - } - } + if (event.repeatCount > 0) return true + showAppList(Constants.FLAG_LAUNCH_APP) return true } KeyEvent.KEYCODE_DPAD_CENTER, @@ -284,10 +274,7 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener dpadLeftKeyDownTime = 0L return true } - KeyEvent.KEYCODE_DPAD_RIGHT -> { - dpadRightKeyDownTime = 0L - return true - } + KeyEvent.KEYCODE_DPAD_RIGHT -> return true KeyEvent.KEYCODE_DPAD_CENTER, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER -> return false @@ -361,11 +348,15 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener if (focusedIndex < 0) return@setOnKeyListener true if (focusedIndex < visibleApps.size - 1) { visibleApps[focusedIndex + 1].requestFocus() - } else { - showAppList(Constants.FLAG_LAUNCH_APP) } true } + KeyEvent.KEYCODE_DPAD_RIGHT -> { + if (event.action != KeyEvent.ACTION_DOWN) return@setOnKeyListener true + if (event.repeatCount > 0) return@setOnKeyListener true + showAppList(Constants.FLAG_LAUNCH_APP) + true + } KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_DPAD_CENTER, KeyEvent.KEYCODE_NUMPAD_ENTER -> { |
