Android 13からOpt inにて Predictive back gesture
が使用できるようになります。これにより、バックジェスチャー(画面の左から右にスワイプするやつ)でホームに戻るときに予測できるようになります。
どのような感じは以下のドキュメントで確認できます。戻るときにホーム画面が少し見えるような感じになります。
https://developer.android.com/about/versions/13/features/predictive-back-gesture
ただし、この Predictive back gesture
によりバック関連の既存挙動が変更され、場合によってはかなりの変更が必要になります。
このドキュメントには以下のように記載されており、今後デフォルトとなり対応が必須になってくると思われます。
Caution: If you don’t update your app by the next major version of Android following 13, users will experience broken Back navigation when running your app.
Predictive back gestureのOpt in
Android 13の時点ではOpt inが必要になります。以下のように AndroidManifest.xml
に追加します。
<manifest>
<application
...
android:enableOnBackInvokedCallback="true"
...
> </application>
</manifest>
また、端末/エミュレータでは開発者オプション から有効にする必要があります。 Predictive back animations
( 日本語では 予測型「戻る」アニメーション
)を有効にする必要があります。
既存挙動の変更
Predictive back gesture が有効になると既存挙動が変更されます。onBackPressed
と KeyEvent.KEYCODE_BACK
が機能しなくなります。
この例では、 onKeyDown
を使ってますが、 onKeyUp
等でも同様です。
こういった処理は結構使用されてると思うので、影響が大きいアプリはありそうです。早めに対応を検討していったほうが良いと思います。
Predictive back gestureのサポート
Predictive back gestureのサポートをするにはPlatform APIかAndroidXを使用する必要があります。minSdk 33っていうアプリはだいぶレアかと思いますので、AndroidXを使っていくことになると思います。
今回はAndroidXの使用方法を紹介していきます。Platform APIは省略します。
androidx.activity:activity
のOnBackPressedCallback
を使うことで対応できます。これを書いてる時点では 1.6.0-alpha05
を使用しています。
Composeの場合
Composeの場合は BackHandler
を使うことで対応可能です。
注意
例えば、条件でActivityを終了させたりしなかったりするパターンで以下のような実装を思いつくと思います。
ただ、この場合に Predictive back gesture をOpt inしていたとしても、挙動が以前と同じなってしまい効果がなくなってしまいます。
なので、条件によって終了させるかどうかを実装するときは、 OnBackPressedCallback
の有効・無効を切り替えるほうが良いと思います。
無効のときは Predictive back gesture の効果が得られつつ、Activityを終了させることができます。
Composeの場合はフラグ用意して、それを切り替えて制御します。
参考
https://developer.android.com/about/versions/13/features/predictive-back-gesture