見出し画像

[volca] Android12をターゲットにしたらカスタム通知に影響がありました

こんばんは。

前回に引き続き、volcaの通知の話題です。

タイトルのとおりですが、volcaは今年の1月にAndroid12をターゲット(= targetSdkVersion31)にするようアプリを更新しています。

それにより、アプリで出しているカスタム通知の見た目に影響がありました。

どんな影響があったか

"ダークテーマの見た目が良くない"

見た目が良くない

volcaではユーザーからの要望があり、カスタム通知をダークテーマにできる機能を提供しています。

今までは通知領域全体をダークテーマ色にできていたのですが、Android12ターゲット以降から、端末設定がダークテーマ未適用時には白ベースの通知にダークテーマ色のカスタム部分が表示されるようになってしまいました。

Android12をターゲットとするアプリでの動作の変更

Android12をターゲットとするアプリで、Android12端末でカスタム通知を表示した場合、カスタム通知が適用される領域が通知内部の固定領域に制限されるようになりました。

カスタムできる範囲の変更

以前は、通知領域全体をカスタム通知の領域として使えることができました。

これは、通知領域全体をカスタムできることによって、見た目の一貫性が損なわれ、ユーザーの混乱を招く、ことに対する動作の変更であるとのことです。

対応方針

通知領域全体の色を変えるのはできなくなってしまいました。

対応としては、端末のダークテーマ設定に合わせて通知の色を決めるようにし、設定からは無くすことにしました。

Android デベロッパー > ドキュメント > ガイド > ダークテーマ

ドキュメントにも、カスタム通知ビューに関して、テーマに合わせるよう記載があったので今回の改修方針で良さそうです。

改修

通知のテーマ設定をなくす

設定画面にあった、通知のテーマ設定をなくしました

ダークテーマ用のリソースを用意

ダークテーマの時は使われる色を変えたいので、values-nightディレクトリを作り色を定義します。

ライトテーマ時の色設定
ダークテーマ時の色設定

以前は背景色をテーマで分けていましたが、背景色はシステムの設定に従うため不要になりました。
アイコンの通常時の色とdisabled時の色を定義し、テーマによって変わるようにしています。

ライトテーマ時の通知
ダークテーマ時の通知

テーマ変更時に通知色を切り替える

Activity/Fragmentといった画面の色であれば、適用するThemeの継承元をDayNightにすればテーマ変更時に切り替わります。

しかし通知の場合、テーマ変更によって通知領域全体の色は白/黒に変わりますが、上記で定義したアイコン色に切り替わりません。

そこで、テーマ変更を検知し、通知を出し直す処理を行うようにしました。

AndroidManifestでServiceに定義
ServiceのonConfigurationChangedで通知を出し直す

まず、通知表示を担当するServiceがuiModeの構成変更に対応できるようAndroidManifestに宣言します。

そして、そのServiceにonConfigurationChangedを記載し、テーマ変更の際に通知を出し直すようにしました。

まとめ

  • Android12ターゲットのアプリでAndroid12以降の端末では、

    • カスタム通知で使える領域が狭くなる

    • 通知のベースは、端末のテーマに合わせた色になる

  • カスタム通知を実装する場合は、端末のテーマ変更時の表示を確認する

  • テーマ変更時にカスタム通知表示内容を切り替えたい場合は、uiModeの構成変更に対応するようにする

この記事が気に入ったらサポートをしてみませんか?