SQLDelight で View を使うべし

👉 Drive your UI with SQLDelight’s views | Leandro Favarin 
👉 GitHub - cashapp/sqldelight: SQLDelight - Generates typesafe Kotlin APIs from SQL 

SQLDelight は、すべてのクエリーに対して自動的にモデルオブジェクトを作成します。

以下シンプルな名前付きクエリー。


bandsOrderedByName:
SELECT id, name
FROM band
ORDER BY name DESC;

bandsOrderedByAge:
SELECT id, name
FROM band
ORDER BY age;

これから以下が作成される。


data class BandsOrderedByName(id: String, name: String)

data class BandsOrderedByAge(id: String, name: String)

実際は、もっと複雑になります。

以下、join句を使ったクエリーの場合。


SELECT
  band.id,
  band.name,
  album.*
FROM band
JOIN album ON band.id = album.band_id;

SQL View を使うとエレガントになります。


👉 SQLite Query Language: CREATE VIEW 


CREATE VIEW bandWithAlbum AS
SELECT
  band.id,
  band.name,
  album.*
FROM band
JOIN album ON band.id = album.band_id;

bandsOrderedByName:
SELECT *
FROM bandWithAlbum
ORDER BY name DESC;

bandsOrderedByAge:
SELECT *
FROM bandWithAlbum
ORDER BY age;

SQLDelight は、BandWithAlbum タイプを生成します。

続いて、ページネーションの例。


count:
SELECT count(*)
FROM bandWithAlbum;

paged:
SELECT *
FROM bandWithAlbum
LIMIT ?
OFFSET ?;

SQLDelight が生成するモデルは、data クラスなので、DiffUtil コールバックはすぐに書けます。


object BandItemCallback : ItemCallback<BandWithAlbum>() {
  override fun areItemsTheSame(oldItem: BandWithAlbum, newItem: BandWithAlbum): Boolean {
    return oldItem.id == newItem.id
  }

  override fun areContentsTheSame(oldItem: BandWithAlbum, newItem: BandWithAlbum): Boolean {
    return oldItem == newItem
  }
}

また、enum クラスを使ったソートオプション。


enum class Sort { NAME, AGE }

fun bandsSorted(by: Sort): Flow<List<BandWithAlbum>> = when (by) {
  NAME -> db.bandsOrderedByName()
  AGE -> db.bandsOrderedByAge()
}.asFlow().mapToList()

逆に、これらのようなSQL処理をプログラムで実行すると効率は落ちます。
👉 The Resurgence of SQL (Droidcon NYC 2017) - Speaker Deck 

まとめ

欲しいタイプを View にすると、少ないコードで実現できます。

ユーザーの要求は、技術が発達するにつれてますます激しくなることは明らかです。良きユーザエクスペリエンスのための簡単な実装方法を常に把握しておくことが重要になります。


AndroidJUnit4.class is deprecated | androidx.test.InstrumentationRegistry is deprecated

地味にハマる。

こーゆーのは、いちいちググらないといけないのか?

誰の都合の変更だ?

以下、苦悩の動画。



ここら androidx.test.ext に注意していないと分からない。

👉 Google's Maven Repository 


dependencies {

    // …

    androidTestImplementation 'androidx.test:core:1.2.1-alpha02'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2-alpha02' // deprecated AndroidUnitTest4

そういういうことですか。

👉 android - AndroidJUnit4.class is deprecated: How to use androidx.test.ext.junit.runners.AndroidJUnit4? - Stack Overflow 
👉 android - androidx.test.InstrumentationRegistry is deprecated - Stack Overflow 


関連ワード:  AndroidKotlinアプリ開発


一気に眺める Android 10 Q の新機能 50

👉 Hands-on 50+ new changes & features in Android 10 [Video] - 9to5Google 

何がどんだけ更新したか分かりにくいので。

こまごまとした機能の変更や強化が多い感想。

ジェスチャーナビゲーション

画面下に表示される3つ(2つ)の画面の操作ボタンが1つで操作できるようになります。

「設定」
「システム」
「操作」
「システムナビゲーション」
「ジェスチャーナビゲーション」




👉 Android-Q beta5 ジェスチャーナビゲーション【動画有り】 

「戻る」の感度

画面下左右角からの「戻る」操作の感度を設定できます。

「設定」
「システム」
「操作」
「システムナビゲーション」
「ジェスチャーナビゲーション」(歯車ボタン)

ダークテーマ

システムレベルのダークモードが実装されています。

「設定」
「ディスプレイ」
「ダークテーマ」

ダークテーマの自動回転ボタン

自動表示される画面回転ボタンにもダークテーマが適用されます。

ダークテーマのブート時アニメーション

電源ONや再起動時のブート画面にもダークテーマが適用されます。

カスタムテーマ

いくつかの項目をお好みにカスタマイズできます。

「設定」
「システム」
「開発者向けオプション」
「テーマ設定」

共有メニュー

共有時に表示される共有先の選択肢が分かりやすくなり、大幅にスピードアップされています。

ファイル選択

各種アプリからファイル選択を行う場合の画面が改善されています。

通知設定の管理

通知を下に広げたところからまとめて管理できるようになりました。

(通知引き出す)
左下「管理」

権限マネージャー

権限の設定画面がまとめられすべてここから確認設定できるようになりました。

「設定」
「プライバシー」
「権限マネージャー」



フォーカスモード

煩わしいアプリをまとめてON/OFFできるようになります。

「設定」
「Digital Wellbeing」
「フォーカスモード」



👉 フォーカスモード (Focus mode) ~ Android 10 

バブル通知(ふきだし)

メッセージなど一部の通知受信時に表示される丸い動くアイコンです。

Facebookメッセンジャーなどでお馴染みのやつです。

「設定」
「システム」
「開発者オプション」
「ふきだし」

端末稼働時間

電源ONにしてからの通算稼働時間です。

「設定」
「デバイス情報」
「稼働時間」

緊急通報アイコン

一番したに分かりやすく表示されています。

「電源ボタン」長押し

Wi-Fiかんたん接続設定

接続中のWi-Fi接続情報をQRコードで表示したり共有することができます。

「設定」
「ネットワークとインターネット」
「Wi-Fi」
(歯車マーク)
「ネットワークの詳細」
「共有」

オーディオバランス

左右のオーディオバランスを調整できます。

「設定」
「ユーザー補助」
「オーディオバランス」

クイックパネルからセンサーOFF

電池の消耗が激しい各種センサーをまとめてOFFにできます。

「設定」
「開発者向けオプション」
「クイック設定開発者用タイル」
「センサーOFF」をON

アプリ情報画面

各アプリ情報を表示する画面も分かりやすくなりました。

(アプリのアイコン長押し)
(i)マーク

ロック画面の 「Now Playing」 機能

周辺で流れている曲を検知してロック画面に曲名などを表示します。

「設定」
「この曲なに?」 または 「ロック」で検索

Wi-Fiとバッテリーアイコンの更新

Wi-Fi とバッテリーの増減をアイコンの変化で表示します。

プロフィール画像設定

ユーザーごとに画像を設定できます。

「クイックタイルのプロフィールアイコン」
「詳細設定」
(編集するユーザー名)
(画像マーク)

Bluetooth端末選択画面

色分けされて分かりやすくなりました。

(クイックタイル BTボタン長押し)

緊急時情報画面

各項目を分かりやすく編集や表示できるようになりました。

「設定」
「デバイス情報」
「緊急時情報」

使用量画面

各アプリなど使用量をグラフなどで分かりやすく表示しています。

「設定」
「Wellbeing」

ロック画面のエンターボタン

パスコード入力時など明確に区別できるようになりました。


サイレント通知の表示

「サイレント」に設定された通知も通知バー内に区別して表示されます。

通知長押しからの詳細設定

受信した通知を長押しすることでその詳細設定画面を表示させることができます。

夜景モード切り替えをカメラ画面に

カメラの撮影時画面で夜景モードも選択できます。

Android Beam の削除

ファイルやデータを共有できるこの機能は削除されました。今後はNFCによるファイル共有などになるのでしょうか。

Files と Google 壁紙のマテリアルテーマ化

機種によってOSに内蔵されたりされなかったりする2つの必須機能(アプリ)のデザインがマテリアルテーマに対応しています。

👉 Files by Google: スマートフォンの容量を確保 - Google Play のアプリ 
👉 壁紙 - Google Play のアプリ 

共有シートでの画像プレビュー

画像を共有送信する前にプレビューにて確認できます。

ポップアップ音量設定

ボリューム変更時にアイコンからポップアップ表示で個別にボリューム操作ができます。


ライブ壁紙のプレビュー

適用前にプレビューでライブ壁紙の変化を確認することができます。

「設定」
「ディスプレイ」
「壁紙」
(ライブ壁紙選択)
(右上のプレビュー)

設定サジェスチョン

おすすめされる設定項目のサジェスチョンが設定画面上部にボタンで表示されます。

「設定」

まとめ

よく分からん機能などはスルーした。

新しい目玉機能の追加はなく、既存機能の微妙な整理や変更ばかり。

昔のようなドキドキ感はない。

操作は混乱するばかりだ。

ちなみに、イースターエッグ(隠し機能)は以下。動画あり。

👉 Nonograms (お絵かきロジック/ ピクロス) – Android 10 Easter Egg パズルゲーム