Closed10

Basics for System Back

rkonnorkonno

これまでの「System back」の進化

  • 「ホーム」や「戻る」は、アプリ内および異なるアプリ間のナビゲーションとして、Android 内でも重要なアクションとして進化してきた

ハードウェアボタン
ハードウェアボタン時代 (0:23)

ソフトウェアの戻るボタンとナビゲーションボタン
ソフトウェアボタン時代、そしてジェスチャーナビゲーションへ (0:33)

rkonnorkonno

「System back」 をより直感的に操作できることを目指す

  • Android 13 は、ジェスチャーナビゲーションをより予測しやすく、使いやすいものにするために、数年にわたっての投資の始まり
  • アフォーダンスを刷新して、システム全体で一貫した操作感を実現するために Haptic を改良する

アフォーダンスの更新
今後2年間で、ユーザーに戻る体験の改善を提供する (0:47)

  • 調査の結果、ユーザーが最も不満を感じるのは、「システムバック」で不意にランチャーに戻ってしまい、アプリケーションを再び開かざるを得なくなるケースだと分かった
  • 最初にこの体験を改善するような API のアップデートを予定している

予測できない「戻る」挙動
現在は「戻る」挙動が予測できない (1:15)

rkonnorkonno

「戻る」を処理するかをシステムは把握していない

ユーザーがジェスチャーで「ホーム」に移動したり「履歴」を開いたりするとき

  • システムは何が起こっているかを事前に把握している
  • ジェスチャー中に直感的なフィードバックを提供することができる

ホームを実行する
何が起きているかをシステムは把握できている (1:40)

ユーザーが「戻る」ジェスチャーを開始したとき

  • システムはアプリがそれを処理しているかどうかを把握していない
  • その結果、適切なフィードフォワードを表示することができない

戻るを実行する
「戻る」ときにシステムはどう処理されるかを把握できていない (1:58)

rkonnorkonno

Ahead-of-time モデル

  • Android 13 以降、アプリは Back イベントを処理するかどうかを事前にシステムに通知する必要がある
  • System back をディスパッチするための Ahead-of-time モデル を導入
  • これにより、システムはアプリケーションが「戻る」を処理するかどうかをジェスチャーを開始する前に事前に知ることが可能に

予測可能な「戻る」
ユーザーが自分が何をしているかを事前に確認できる (2:38)

  • アプリケーションが「戻る」を処理しない場合、システムはアプリの終了をプレビューし、ランチャーの背後にあるものを表示できる
  • ユーザーは、スワイプしている途中でアプリを本当に閉じるのかどうかを決められる
rkonnorkonno

新しいプラットフォームAPI

  • Ahead-of-time モデルをサポートするために、onBackInvokedCallback API を導入する
  • インターフェイスには、onBackInvoked というメソッドが1つあり、Activity や Dialog からonBackPressedメソッドの代わりに呼び出されるようになる

onBackInvokedCallback api
interface OnBackInvokedCallback (3:24)

  • コールバックを登録するには、Activity または Dialog から onBackInvokedDispatcher を取得する必要がある
  • これを用いて「戻る」を処理したいことを事前にシステムに伝えることができる
    • 「戻る」ときにコールバックが呼び出されて、システムはそれ以上何もしない
  • 一方で、コールバックを提供しない/登録を解除すると、「戻る」をシステムが制御してアプリの終了をプレビューする

onBackInvokedDispatcher api
interface OnBackInvokedDispatcher (3:46)

rkonnorkonno

Predictive back gesture を導入する

Android Manifest に enableOnBackInvokedCallback フラグを追加

<application

android:enableOnBackInvokedCallback="true">
  • Android Manifest の Application タブに明示的にフラグを追加する(4:38
  • オプトインするまでは全く影響を受けない
    • Android 13 をターゲットにする前であってもオプトインして動作を確認できる

AndroidX Activity 1.6 にアップグレードする

  • 新しいAPI は Activity 1.6 以上に上げると使用できる
  • このアップデートでは、Android X のライブラリでは Navigation Component の使用を推奨している
  • BackHandler やJetpack Compose は、Android 13 に即座に対応し、以前のバージョンのAndroidとの後方互換性を保つ
    • これは AndroidX Activity が onBackPressedDispatcher API を先取りして提供していたおかげ
  • onBackPressedDispatcher の挙動
    • 以前のバージョンのAndroidをターゲットにしている場合は、Activity のonBackPressed を呼び出す
    • Android 13以降では、新しいプラットフォーム API を呼び出す
rkonnorkonno

追加で対応すべきこと

Custom back navigation を使用していないケース

  • アプリが Custom back navigation を実装していない(システムに「戻る」処理を任せている)場合は、オプトインするだけでよい

Custom back navigation を使用しているケース

AndroidX back navigation (OnBackPressedDispatcher) を使用している場合

  • Custom back navigation の方法として最も推奨している OnBackPressedDispatcher を使用している場合は、オプトインするだけでよい

カスタムビューのような低レベルなコンポートネントの場合

  • プラットフォームAPI を直接使用する必要がある
  • その場合のAPIの使用方法については、6:30~ を参照
    • 例として Navigation Drawer レイアウトにプラットフォームAPIを統合する方法を紹介している
rkonnorkonno

今後の長期的な計画

  • これまでランチャーに戻る時に表示されるような主要なユースケースのためのアニメーションを構築してきた
  • Compose や FragmentNavigation で制御されるアプリ内トランジションはまだバックプレビューを表示することはないが、これから議論して検討を続ける

what's next
今後の見通し (13:10)

このスクラップは2022/06/14にクローズされました