diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d1c53c7..466aefc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,10 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/launcherBaseTheme"> + android:enableOnBackInvokedCallback="true" + android:theme="@style/launcherBaseTheme" + tools:ignore="UnusedAttribute" > + = Build.VERSION_CODES.TIRAMISU) { + onBackInvokedDispatcher.registerOnBackInvokedCallback( + OnBackInvokedDispatcher.PRIORITY_OVERLAY + ) { + handleBack() + } + } + } override fun onStart() { @@ -193,9 +205,13 @@ class HomeActivity : UIObject, AppCompatActivity(), super.onDestroy() } + @SuppressLint("GestureBackNavigation") override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { when (keyCode) { - KeyEvent.KEYCODE_BACK -> LauncherAction.CHOOSE.launch(this) + KeyEvent.KEYCODE_BACK -> { + // Only used pre Android 13, cf. onBackInvokedDispatcher + handleBack() + } KeyEvent.KEYCODE_VOLUME_UP -> { if (Action.forGesture(Gesture.VOLUME_UP) == LauncherAction.VOLUME_UP) { // Let the OS handle the key event. This works better with some custom ROMs @@ -326,27 +342,24 @@ class HomeActivity : UIObject, AppCompatActivity(), } } - /* TODO: Remove those. For now they are necessary - * because this inherits from GestureDetector.OnGestureListener */ - override fun onDoubleTapEvent(event: MotionEvent): Boolean { - return false - } - override fun onDown(event: MotionEvent): Boolean { - return false - } - - override fun onScroll(e1: MotionEvent?, e2: MotionEvent, dX: Float, dY: Float): Boolean { - return false - } - - override fun onShowPress(event: MotionEvent) {} - override fun onSingleTapUp(event: MotionEvent): Boolean { - return false + private fun handleBack() { + LauncherAction.CHOOSE.launch(this) } override fun isHomeScreen(): Boolean { return true } + + /* TODO: Remove those. For now they are necessary + * because this inherits from GestureDetector.OnGestureListener */ + override fun onDoubleTapEvent(event: MotionEvent): Boolean { return false } + override fun onDown(event: MotionEvent): Boolean { return false } + override fun onScroll(e1: MotionEvent?, e2: MotionEvent, dX: Float, dY: Float): Boolean { return false } + override fun onShowPress(event: MotionEvent) {} + override fun onSingleTapUp(event: MotionEvent): Boolean { return false } + + + } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt index 5d66e68..1fe5afb 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt @@ -9,6 +9,7 @@ import android.os.Build import android.os.Bundle import android.view.View import android.widget.Toast +import android.window.OnBackInvokedDispatcher import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager @@ -53,6 +54,14 @@ class ListActivity : AppCompatActivity(), UIObject { super.onCreate(savedInstanceState) super.onCreate() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && intention == ListActivityIntention.VIEW) { + onBackInvokedDispatcher.registerOnBackInvokedCallback( + OnBackInvokedDispatcher.PRIORITY_OVERLAY + ) { + finish() + } + } + // get info about which action this activity is open for intent.extras?.let { bundle -> intention = bundle.getString("intention")