Predictive back gestureの対応

Kenji Abe
Aug 1, 2022
Photo by Nick Fewings on Unsplash

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 が有効になると既存挙動が変更されます。
onBackPressedKeyEvent.KEYCODE_BACK が機能しなくなります。

この例では、 onKeyDown を使ってますが、 onKeyUp 等でも同様です。

こういった処理は結構使用されてると思うので、影響が大きいアプリはありそうです。早めに対応を検討していったほうが良いと思います。

Predictive back gestureのサポート

Predictive back gestureのサポートをするにはPlatform APIかAndroidXを使用する必要があります。minSdk 33っていうアプリはだいぶレアかと思いますので、AndroidXを使っていくことになると思います。

今回はAndroidXの使用方法を紹介していきます。Platform APIは省略します。

androidx.activity:activityOnBackPressedCallback を使うことで対応できます。これを書いてる時点では 1.6.0-alpha05 を使用しています。

Composeの場合

Composeの場合は BackHandler を使うことで対応可能です。

注意

例えば、条件でActivityを終了させたりしなかったりするパターンで以下のような実装を思いつくと思います。

ただ、この場合に Predictive back gesture をOpt inしていたとしても、挙動が以前と同じなってしまい効果がなくなってしまいます。

なので、条件によって終了させるかどうかを実装するときは、 OnBackPressedCallback の有効・無効を切り替えるほうが良いと思います。

無効のときは Predictive back gesture の効果が得られつつ、Activityを終了させることができます。

Composeの場合はフラグ用意して、それを切り替えて制御します。

参考

https://android-developers.googleblog.com/2022/07/prepare-your-app-to-support-predictive-back-gestures.html

https://developer.android.com/about/versions/13/features/predictive-back-gesture

--

--

Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO