summaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
authorDirk Sierd de Vries <contact@lecapuchon.nl>2026-08-09 20:04:03 +0200
committerDirk Sierd de Vries <contact@lecapuchon.nl>2026-08-09 20:04:03 +0200
commit919431a02604a3dfb6950e42541318cb9a1f855d (patch)
tree7fe754914570f53bedfed60b25e80cc904463213 /app/src/main
parent624fb39899e65054ab25c3025dda8ba57e021290 (diff)
downloadSidePhOnelauncher-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.kt25
-rw-r--r--app/src/main/java/app/olauncher/ui/HomeFragment.kt27
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 -> {