# 要件定義

現在の要求と受入条件の正本。会話での採用希望・詳細仕様案・実装済みを区別する。未決の細部は [レビュー項目](review-register.md) を参照する。HTMLの存在やビルド成功をAndroid実装の完了とみなさない。

## 目的と範囲

AV8は、ホーム自体をカテゴリ別アプリドロワーにする独立Androidランチャー。Apperの操作とYahoo Aviateのcollections構成を参考に、利用者が所属・順序・常時表示を決めて素早く起動できることを目的とする。Apperの忠実なクローンではない。

主利用者は個人・仕事用アプリを使い分ける端末所有者。対象実機はPixel 10aだが、保証するAndroidバージョン・端末範囲は未確定。アルファベット順の全アプリ専用ページは作らない。ウィジェットはアプリと異なる種類のページで、初期内容は空。優先順位は下表、現在の実装・検証範囲はレビュー項目に記録する。

## 優先度

| 優先度 | 対象 |
| --- | --- |
| P0 | アプリ起動・分類・編集・ドラッグ・保存の安定性、仕事用の分離と停止復帰 |
| P1 | ページ並び替え |
| P2 | 常設ショートカット |
| P3 | アプリ固有の長押しメニュー |
| P4 | ウィジェットページ管理 |
| P5 | Androidウィジェット表示 |

通知バッジ・Private・追加公開プロファイルも現行の実装対象とする。OS依存の能力と確認済み環境は[プラットフォーム設計](platform-design.md)・[検証結果](review-register.md)で区別する。

## ホームとカテゴリ

| ID | 要件・受入条件 |
| --- | --- |
| HOME-01 | HOMEから分類済みアプリへアクセスでき、タップで対象プロファイルのアプリが起動する |
| HOME-02 | アプリページとウィジェットページを別種類として扱う。ページは対象プロファイルを持つ |
| VIS-01 | 高密度な表示。大きな固定ヘッダー、日付時刻、アプリタイトル、Collections / Widgets見出し、件数、空カテゴリ説明は置かない。アプリ名は常時アイコン下に近接表示 |
| VIS-02 | 展開縮小・編集・ドラッグでアイコン自体の寸法が変化しない。帯の上下余白を各2dp詰め、帯から1行目の間隔は2dp追加。2行目以降は従来の間隔を維持 |
| VIS-05 | アプリの表示言語はシステムに従う・日本語・英語から選択できる。Androidのアプリ別言語設定と連動し、設定階層・保存済み配置を維持する。ユーザーが付けたカテゴリ／ページ名や他アプリの言語を変更しない |
| VIS-06 | 設定から全体の明暗をシステム追従（初期値）／ライト／ダークで選択できる。カテゴリ・背景色の明暗ペアと操作面に反映し、設定階層・保存配置を維持する |
| VIS-07 | ステータスバーは模様のない固定の半透明領域で可読性を確保。斜線・格子は付けない。Apps／Widgetの初期内容はバー下から始まり、スクロール時はバーの背後を通る。操作を奪う新しい上部ツールバーは置かない |
| VIS-08 | アイコン形状をオリジナル（初期値）／丸／スクワークルで選択できる。元画像を保持し、仕事用バッジはマスクの外側へ重ねる。アイコン寸法・配置・通知ドットは変更しない |
| VIS-04 | カテゴリタイトル帯は左右外側マージンなしで画面端まで表示。帯内部とアプリグリッドの余白は維持。通常・編集・カテゴリ並べ替えで共通 |
| VIS-03 | ホーム背景はシステム壁紙の手前に任意の明暗色ペアと透明度を持つ背景色レイヤーを置く。初期状態は壁紙のみ。下部ナビとシステムホームバー領域は不透明。背景色は「色と背景」から編集し、設定にも同編集画面への入口を置く。AV8設定からOSの壁紙変更画面へ。試験的に縦スクロールと展開・縮小後の本文高に壁紙位置を連動させる。壁紙自体は変更せず、壁紙側の対応・余白が必要。継続採用は評価後に判断。カテゴリ背景の透明度は「並び順と色を編集」内の「色と背景」から全カテゴリ共通で調整し、カテゴリ別の値は持たせない。文字・アイコン等をまとめて透かさず、明暗色ペアとは独立して保持。ロック／停止解除のボタンはカテゴリ透明度と独立した不透明な背景・高コントラストの文字で表示する |
| COL-01 | 初期・新規カテゴリは展開状態。手動の縮小状態は再起動後も維持。各カテゴリの⋮メニューから現在プロファイルを全展開・全縮小でき、全縮小はお気に入りを残しHide apps設定を変えない |
| COL-02 | 展開時は内容の高さと隣接カテゴリの移動が同期し、瞬間的に重ならない |
| COL-03 | 追加・名前変更・削除が可能。移動先からも新規作成可能。カテゴリ削除でアプリ自体は失わない。削除先の製品仕様はQ-04 |
| COL-04 | 専用並び替えモードでは全カテゴリをタイトル帯だけにする。6点グリップは触れた瞬間にドラッグを開始する。帯のほかの部分は通常の縦スワイプでスクロールし、長押ししてから動かしても並べ替えられる。色スウォッチは独立した操作。端の自動スクロール、見た位置への挿入、保存、終了時の本文表示復帰 |
| COL-06 | タイトルのみ表示をカテゴリメニューから選択でき、タイトルタップで隠す前の表示範囲へ戻る |
| COL-07 | 全体の明暗はVIS-06の選択に従い、配色はシステム由来。独自のUIテーマ色選択は設けない（ホーム背景色とは別）。カテゴリ単位で明暗色ペアを指定。並び順と色の編集へ入口を集約し、帯の個別色変更と現在プロファイルの全カテゴリ一括指定を提供。シンプルは調整済みペア、Proはライト／ダークを独立してHSV/HSL/RGB・HEX指定。両側プレビュー・ペアの適用／取消・システム標準への復帰、文字とアイコンの可読性を扱う。SimpleパレットはP010（バランス／ミュート）の8明暗ペアを採用。既存保存色を自動変更しない |
| FAV-01 | 縮小時はお気に入りだけを表示。0個ならタイトル帯のみ。任意個数で、先頭4個・5個などに固定しない |
| FAV-02 | 編集時は網掛け・破線枠・短い補足のあるお気に入りの箱と通常アプリ領域を表示。箱の間のドラッグで指定・解除し、空の箱もドロップ可能 |

## アプリ編集とドラッグ

| ID | 要件・受入条件 |
| --- | --- |
| APP-01 | 個別・一括移動。カテゴリ追加だけで既存Uncategorized項目を勝手に再分類しない |
| APP-02 | 同じ箱・別の箱・別カテゴリへドラッグで挿入位置を指定し、再起動後も維持 |
| APP-03 | 新規・更新・削除を反映。新規初期分類はQ-03。更新で手動配置を破壊しない |
| EDIT-01 | 長押しメニューから編集開始。シングルタップで選択切替し、選択解除と一括移動を提供。移動は単方向矢印＋ラベル。モーダルは対象・移動目的・移動先カテゴリを区別し、お気に入り／通常を説明付きラジオ選択にする。毎回お気に入りを初期選択し、新規カテゴリ作成後もお気に入りを選ぶ |
| EDIT-02 | 2個以上選択中はドラッグせず、一括移動を利用 |
| EDIT-03 | 編集開始時の起点アイコンを同じ画面位置に保つ。操作バーは下側で、本文を押し下げない |
| EDIT-04 | 編集中は横ページ移動禁止。長押しメニュー中は背面の縦横スクロール・ページ切替禁止 |
| EDIT-05 | 編集開始で全カテゴリを一時展開し、終了時に元の表示状態へ戻す。確定済みの移動・お気に入り変更は維持 |
| DRAG-01 | 浮動アイコンは一つ。移動先は空白で示し、背後に同じアイコンを描かない |
| DRAG-02 | 周囲の項目が滑らかに避け、アニメーション中の再判定で往復・ちらつきを起こさない |
| DRAG-03 | 縦端で自動スクロールし、画面外のカテゴリへ移動できる |
| DRAG-04 | 縮小したドロップ先を展開して挿入先を見せる。一時展開の終了後の扱いはQ-05 |
| DRAG-05 | 成功後は移動項目の選択解除。成功・失敗・中止の全経路で残像・暗転・入力ロック・欠落を残さない |

## テキストによるアプリ自動整理

2026-11-08仕様確定、2026-11-09実装検証。軽量なおまけ機能として扱い、検証範囲はレビュー項目へ記録する。詳細と受入例は[操作仕様](interaction-spec.md#app-auto-organize)を正本とする。厳密な設定インポート、AV8からのLLM通信、カテゴリ自体の並び替えではない。

| ID | 要件・受入条件 |
| --- | --- |
| AUTO-01 | 設定→アプリを自動整理から、現在選択中の公開プロファイル全体を対象に実行。入口に用途、詳細にChatGPTなどへ依頼して返答を取り込む3手順と適用範囲を説明。対象名を明示し、依頼文とアプリ一覧を確認／整理結果を貼り付け／直前の整理を元に戻すを提供。実際の依頼全文を確認してから明示的にコピーし、確認取消ではクリップボードを変えない。カテゴリの並び順と色の編集には置かない。Privateと常設ショートカットは初版の対象外。外部共有する内容をコピー前に説明し、仕事用は組織ルールへの注意も表示。AV8自身は送信せずAPIキー・通信機能を追加しない |
| AUTO-02 | コピーは指示文・既存カテゴリ・パッケージ名とアプリ名コメントを含むテキスト。複数起動アイコンを持つパッケージだけコンポーネント名で区別。一時的な短いアプリIDやJSONを要求しない。返答は角括弧のカテゴリ見出しとアプリ識別子、任意の#コメントで記述できる |
| AUTO-03 | 入力欄から明示的に適用。解釈できたアプリを元区分にかかわらず移動先のお気に入りの先頭へ記載順で取り込み、未知・不正な行をスキップ、重複は最初の有効指定を採用。未記載アプリは所属・お気に入り区分・相対順序を維持。既存カテゴリ順・色・開閉・ページ・ウィジェットは不変。必要な新規カテゴリだけ未分類の直前へ追加。プレビュー・修復画面・厳密なコピー時点一致検証は設けない。有効指定0件では配置もUndoも変更しない |
| AUTO-04 | 適用は一括保存し、成功時だけ対象プロファイルの直前1回のアプリ配置をUndoへ保持。Undoはプロセス内のみで、終了・再起動で消失。後続の手動アプリ編集は確認して巻き戻すが、未インストールアプリを復活させず、後から入ったアプリを保持。保存不能・停止・取得不能では適用せず現在配置を保持。結果は適用アプリ数とスキップ行数だけ簡潔に示す |

初回起動時の端末内デフォルト分類の改善とは別機能。ここで初期カテゴリの名称・数・分類辞書を新たに確定しない。Q-03の新規アプリを未分類へ追加する規則は維持し、カテゴリ追加だけで再分類しない。

## 検索・ページ・仕事用

| ID | 要件・受入条件 |
| --- | --- |
| SEARCH-01 | 通常は下部の虫眼鏡（幅不足時はその他の検索）から。必要時だけ検索欄になり、クリア・終了で元の表示と位置へ戻る |
| SEARCH-02 | 現在のプロファイル内を検索。縮小・タイトルのみのアプリも対象。大小・全半角・前後空白を正規化し、日本語入力と結果0件を扱う |
| NAV-01 | 個人・仕事はなるべく下部中央のボタンで切替。追加・ページを左、設定・検索を右へ分散。翻訳・文字拡大時にラベルを縮めず、実測幅不足なら設定・検索の両方を右端の三点メニューへ収納。片方だけ残さず、ページメニューへ移さない。仕事用プロファイルがない端末では個人・仕事の両ボタンを隠す。一時停止・取得不能では入口を消さない。カテゴリ・所属・順序・お気に入りはプロファイルごとに独立 |
| NAV-02 | 横スワイプは選択中プロファイル内のアプリ／ウィジェット間だけ。画面全幅が指に追従し、確定・取消とも水平スライド。ページ選択ボタンでも同じ方向規則。Privateは混ぜず、動きを減らす設定を尊重 |
| PAGE-01 | ページ選択・追加と、一覧編集への入口を区切り線で分離。編集は画面の縮小プレビューで選択・追加・名前変更・削除。アプリページは削除不可。作成確定までは追加しない |
| PAGE-02 | アプリ・ウィジェット両方のページ名の左に6点グリップを表示し、触れた直後からドラッグして並べ替えられる。右端はウィジェットの⋮用とし、グリップを名前から離して浮かせない。プレビューの長押しによる並べ替えも維持し、通常の横スワイプは一覧のスクロール。安定したページIDで順序を保存。浮動表示・空の挿入先・端の横自動スクロール・中止復元。順序確定直後に現在ページIDの新位置へインジケーターを更新。初期表示先はQ-11 |
| WORK-01 | OSが仕事用プロファイルを列挙したら0件・初回停止中でも入口を表示。一時停止では消さない。詳細はQ-01 |
| WORK-02 | 個人に仕事アプリを混在させず、起動・詳細表示は対象プロファイルで実行。同名の個人アプリへ代替しない |
| WORK-03 | 停止中は「仕事用アプリは一時停止されています」と「停止解除」を表示し、アプリ・ウィジェット内容と操作は隠す |
| WORK-04 | 停止解除はOSへ要求し、実際の状態変更後に戻す。認証待ちを即失敗と扱わず、拒否後も再操作可能 |
| WORK-05 | 停止・取得失敗では配置を失わない。明示的なプロファイル削除とは区別 |
| PROFILE-03 | OSがランチャーへ公開する追加プロファイルを能力に応じて扱う。自ユーザー以外を一律に仕事用と判定しない |

## 通知とアプリ固有操作

通知バッジとアプリ固有アクションへ対応する。今回の表示はドットのみで、数値・通知本文・カテゴリ集約は出さない。OS通知件数からアプリの未読件数を推測しない。固有操作はAndroidのstatic / dynamic app shortcutsとして具体化し、通知の返信・既読化とは分ける。

| ID | 要件・受入条件 |
| --- | --- |
| NTF-01 | OSがバッジ表示を許す有効通知について、対象プロファイル・パッケージのアイコン右上にドットを表示する案。仕事バッジは右下で重ならない |
| NTF-02 | AV8設定→通知バッジから明示的にOSの通知アクセス設定へ進める。通常は下部の専用設定ボタン、幅不足時は右端の三点メニュー内の設定入口を使う。通知権限操作自体はページ選択に混ぜない。拒否・取消後もホームは利用可能。POST_NOTIFICATIONSだけで他アプリ通知を読めるとみなさない |
| NTF-03 | 通知削除・ranking変更・listener再接続で再照合。アイコンのタップだけでドットを消さない |
| NTF-04 | 個人・仕事の同一パッケージを合算しない。管理側制限で取得できない通知を0件と偽って件数表示しない |
| NTF-05 | Privateロック中はドット・件数・本文を公開UIへ出さない。解除後はOSが許す範囲で再取得し、通知キャッシュを通常領域へ永続化しない |
| NTF-06 | 今回は通知本文プレビューを取得・表示・保存しない。本文を推定・復元しない。将来提供する場合もOSの秘匿と明示的な表示設定が前提 |
| ACT-01 | 対象ユーザーについてLauncherAppsから現在取得できるstatic/dynamic shortcutsを長押しメニューに表示し、そのプロファイルのstartShortcutで起動 |
| ACT-02 | 固有操作とAV8の並べ替え・カテゴリ移動・アプリ情報は別領域。固有操作0件なら空見出し・ダミー項目を置かない |
| ACT-03 | メニュー表示後の削除・無効化・資格喪失・プロファイル停止を実行時に再確認。失敗後も閉じる・戻るが機能 |
| SCT-01 | 常設ショートカットはACT-01と別機能。pin要求、shortcutId、所属・順序・アイコン、更新・無効化・削除を扱う |

## ウィジェットとPrivate

| ID | 要件・受入条件 |
| --- | --- |
| WGT-01 | ウィジェットページは任意追加し初期は空。個人・仕事で所属を分離。追加入口は下部の＋だけ。空のページは操作できない案内文を表示し、同じ＋から複数を縦積みで追加できる |
| WGT-02 | 対象プロファイルで公開・許可された提供元だけを選択し、OSのバインド許可・設定へ進む。取消で半端な配置を残さない |
| WGT-03 | HTMLに描く時計・予定・メモは外観説明用サンプル。RemoteViewsの実装・合格証拠には数えない |
| WGT-04 | 配置・サイズ・設定・削除・復元を扱い、provider消失・最小サイズ・appWidgetIdの再割当てを考慮 |
| WGT-05 | 管理許可取消・停止では内容と操作を止め、ページと保存配置は保持 |
| PRV-01 | 通常スワイプ列とは別の専用入口。設定のプライバシー欄に共通入口を置く今回の案。非表示設定ではページ・件数・プレビューを公開しない。Private内にページ／ウィジェット追加操作を出さず、退出・ロックをラベルで区別 |
| PRV-02 | ロック・解除の認証はOSへ委譲し、独自PINを作らない |
| PRV-03 | 認証前・ロック時はアプリ名・カテゴリ名・検索・通知・画像キャッシュを公開しない。ロック後に遅延結果が戻っても破棄 |
| PRV-04 | 「アプリを追加」はPrivate側ストアへ。通常側ストアへ無言の代替や独自APKインストーラーを提供しない |
| PRV-05 | 設定・自動ロック等はOSの領域設定へ委譲 |
| PRV-06 | 未作成・非対応・認証取消・拒否を区別し、解除済みの内容を表示しない。可能ならOS設定へ案内 |

## 状態・品質・検証

| ID | 要件・受入条件 |
| --- | --- |
| STATE-01 | ページ・カテゴリ・所属・順序を永続化し、選択・ドラッグ・メニュー・入力ロックと分離。名称ではなく安定IDとプロファイル＋コンポーネントで識別 |
| STATE-02 | 戻る・再生成・停止・取得失敗で半端な移動を確定せず、一覧取得不能をアンインストールと同一視しない |
| SYS-01 | アプリ起動後もHOME・戻る・タスク切替・設定起動・OSジェスチャーが機能 |
| DEV-01 | リポジトリ直下のstart-emulator.shを唯一の起動入口とし、開発版が表示される |
| A11Y-01 | 色だけに依存せず、文字拡大・読み上げ・フォーカス・タッチ領域・動きを減らす設定を検証 |
| LIFE-01 | 回転・プロセス再生成・編集中の停止で正常状態へ復帰。半端な選択やロックを復元しない。画面オン時は既存一覧を再取得待ちで消さず、更新通知の重複を集約する。表示・一覧取得・キュー待ちを分けて計測し、長時間ロック後の実機待ち時間は別途受入確認する |

移動はドロップ・確定時に一度だけ保存し、プレビューで保存配置を書き換えない。最下部項目にもシステムバーを侵食せず到達可能にする。

データ層は所属・順序・永続化・停止復帰、操作層はイベント列、画面は実際のドラッグ・スクロール・アニメーション・中断を検証する。managed profileで認証・管理制限を確認し、静止画やビルド成功だけで合格にしない。過去の指摘は [回帰確認メモ](../pointed-issues.md) に残す。完了は主観的な百分率ではなく、要件IDごとの実装・検証結果で示す。

## 技術的な参照先

実装時に対象Androidの仕様を再確認する。これらのリンクは対応完了を示さない。

- [Notification badges](https://developer.android.com/develop/ui/views/notifications/badges)
- [NotificationListenerService](https://developer.android.com/reference/android/service/notification/NotificationListenerService)
- [Ranking.canShowBadge](https://developer.android.com/reference/android/service/notification/NotificationListenerService.Ranking#canShowBadge())
- [LauncherApps](https://developer.android.com/reference/android/content/pm/LauncherApps)
