このページでは、デスクトップ ウィンドウに関連する機能とテスト シナリオについて詳しく説明します。
Android 17 以降では、ディスプレイごとの デスクトップ ウィンドウを有効にできます。詳細については、 デスクトップ ウィンドウを有効にするをご覧ください。
デスクトップ機能
このセクションでは、デスクトップ ウィンドウに関連する主な機能と構成について説明します。
タスクの上限を有効にする
デスクトップ ウィンドウでサポートされるタスクの最大数を構成するには:
- デスクトップ ウィンドウを有効にします。
config.xmlの構成オーバーレイ フラグconfig_maxDesktopWindowingActiveTasksを、サポートされるタスクの最大数に設定します。無制限の数のタスクをサポートするには、フラグをデフォルト値の0に設定します。<integer name="config_maxDesktopWindowingActiveTasks">4</integer>
ブラウザ固有の機能
Android 16 では、ブラウザ固有の機能として、カスタマイズ可能なヘッダー インセットとアプリ インスタンス管理の 2 つが導入されました。このセクションでは、ブラウザの互換性を検証するためのテスト シナリオについて説明します。OEM は、機能の実装が意図したとおりに動作することを確認する必要があります。
カスタマイズ可能なヘッダー インセットのテストケース
次のテストケースでは、カスタマイズ可能なヘッダー インセットとのブラウザの互換性を検証します。
- UI のインタラクティビティ: ブラウザのキャプション バーの UI が、すべてのウィンドウ構成(フリーフォーム、分割画面、全画面表示)で完全にインタラクティブであることを確認します。
- システム アイコンのクリアランス: ブラウザの UI がシステム アイコンの下に描画されないことを確認します。
- 前景色の適用: ブラウザのテーマに基づいて、アプリのヘッダーのシステム アイコンに正しい前景色が適用されていることを確認します。 これは、ブラウザのテーマがシステムのテーマと異なる場合に特に重要です。
- ウィンドウのドラッグ: タブバーの空の領域を長押しして、フリーフォーム ウィンドウをドラッグできることを検証します。
- サイズ変更時のタブの表示 / 非表示: 最適な使いやすさを維持するために、ウィンドウの幅に基づいてタブが表示または非表示になることをテストします。
ドラッグ可能なジェスチャー動作によるアプリ インスタンス管理のテストケース
次のテストケースでは、アプリ インスタンス管理とのブラウザの互換性を検証します。
- 新しいウィンドウの作成: タブバーから空の領域にタブをドラッグすると、そのタブを含む新しいブラウザ ウィンドウが作成されることを確認します。
- 最後のタブの新しいウィンドウ(単一インスタンス)がない: ブラウザ インスタンスが 1 つだけ開いている場合、そのウィンドウの最後のタブをドラッグしても新しいウィンドウが作成されないことを確認します。
デスクトップ優先モードとタッチ優先モード
デスクトップ ウィンドウは、スタンドアロン タブレットだけでなく、クラムシェルや外部ディスプレイが接続されたデバイスなど、さまざまなフォーム ファクタをサポートするように設計されています。フォーム ファクタが異なると、操作に対するユーザーの期待も異なります。これは、多くの場合、主な入力方法(タッチ、キーボード、マウス)によって決まります。そのため、デスクトップ ウィンドウでは、次の 2 つの異なる動作モードが採用されています。
- デスクトップ優先モード: キーボードとタッチパッドに最適化されたエクスペリエンスを提供します。このモードでは、フリーフォーム ウィンドウが優先されます。このモードは、ノートパソコンのような構成を想定しています。
- タッチ優先モード: タッチに最適化されたエクスペリエンスを提供します。このモードでは、全画面表示ウィンドウが優先されます。このモードは、スタンドアロン タブレットのデフォルトです。
これらのモードは、個別のデスクトップ環境ではなく、デフォルトの UI 動作を決定するディスプレイごとの状態です。
動作の違い
次の表に、デスクトップ優先モードとタッチ優先モードの UI と機能の主な違いをまとめます。
| 機能 | タッチ優先モード | デスクトップ優先モード |
|---|---|---|
| デフォルトの起動 | フリーフォーム ウィンドウがすでに最上位にある場合を除き、ウィンドウは全画面表示で起動します。 | 全画面表示ウィンドウがすでに最上位にある場合を除き、ウィンドウはフリーフォームで起動します。 |
| タスクバーのタイプ | 全画面表示では、一時的なタスクバー (固定されたアプリのみを表示)を使用します。 | 常にデスクトップ タスクバー (固定されたアプリと開いているアプリを表示)を使用します。 |
| 再フォーカス | ウィンドウは、現在のディスプレイ モードに基づいて再アクティブ化されます(たとえば、ディスプレイがデスクトップ ウィンドウの場合、フリーフォームで再アクティブ化されます)。 | ウィンドウは、保存されているウィンドウ モードに基づいて再アクティブ化されます(たとえば、全画面表示ウィンドウは常に全画面表示で再開されます)。 |
| ドラッグして最上位に移動 | ウィンドウを上端にドラッグすると、全画面表示 になります。 | ウィンドウを上端にドラッグすると、最大化 状態になります。 |
| ウィンドウ コントロール | 全画面表示コントロールにアプリハンドルを使用します。 | 全画面表示コントロールにホバーメニューを使用します。 |
デスクトップ優先モードはディスプレイごとの状態です。つまり、デバイスはタッチ優先の内部ディスプレイとデスクトップ優先の外部ディスプレイを同時にホストできます。
切り替えトリガー
システムは、いくつかの要素を評価して、ディスプレイに適したモードを決定します。
- 入力周辺機器: キーボードとタッチパッドまたはマウスの両方が接続されて有効になっている場合、ディスプレイはデスクトップ優先に切り替わります。
- 外部ディスプレイ: 接続された外部ディスプレイは、通常、内部ディスプレイをミラーリングしていない限り、デフォルトでデスクトップ優先モードになります。
- デバイスの姿勢: コンバーチブル デバイスの場合、物理的な向きに基づいてモードを切り替えることができます(たとえば、キーボードを裏返すとタッチ優先に切り替わります)。
技術実装
この状態の「信頼できる情報源」は、ディスプレイ ウィンドウ モード、具体的にはディスプレイの TaskDisplayArea のウィンドウ モードです。シェル コンポーネントとランチャー コンポーネントは、DisplayAreaInfo またはディスプレイ コンテキストの WindowConfiguration を介してこの状態にアクセスできます。
ディスプレイごとのデスクトップ ウィンドウ
Android 17 以降では、Display.canHostTasks で定義されているように、タスクをホストできるディスプレイの場合、WindowManager(WM)は、OEM が構成できる条件に基づいて、デスクトップ ウィンドウの対象となるかどうかを判断します。デフォルトでは、WM は次の条件を確認します。
- フリーフォーム ウィンドウのサポート
- システム デコレーションが有効になっている
- デフォルトのディスプレイまたはコンテンツ モードの切り替えが有効になっている
ディスプレイの対象となるかどうかが変更されると、WM は IDisplayWindowListener.onDesktopModeEligibleChanged を呼び出します。非表示の API WindowManager.isEligibleForDesktopMode は、ディスプレイがウィンドウの対象となるかどうかを返します。WM シェルはこの呼び出しをインターセプトし、ディスプレイが対象となる場合は、ディスプレイがデスクトップ ウィンドウをサポートしているかどうかを判断して、必要なリソースを割り当てます。