OEM は、折りたたみ式デバイスで、ロック解除された状態で開いた状態からデバイスを折りたたんだときに外側の画面がどのように動作するかをユーザーが選択できるオプションを設定できます。
この設定は、[設定] > [ディスプレイ] > [折りたたみ時もアプリの使用を継続] にあります。ユーザーには次の 3 つのオプションがあります。
- 常時: デバイスを折りたたむと、フロント ディスプレイが常にオンになり、ロックが解除されたままになります。
- 上にスワイプして継続: ユーザーがデバイスを折りたたむと、アプリがウェイクロックを保持している場合を除き、認証を必要とせずにキーガードが表示されます。アプリがウェイクロックを保持している場合は、デバイスはアプリで起動したままになります。これがデフォルトの設定です。
- 継続しない: デバイスを折りたたむと、デバイスがロックされ、フロント ディスプレイがオフになります。
図 1. 折りたたみロックの動作設定。
折りたたみロックの動作設定を構成する
設定で折りたたみロックの動作設定を表示するには、デバイスのオーバーレイ config.xml ファイルで config_fold_lock_behavior ブール値を入力します。
<!-- Whether to show Fold lock behavior setting feature in Settings app -->
<bool name="config_fold_lock_behavior">true</bool>
実装の詳細
折りたたみロックの動作は、設定と複数のバックエンド クラスによって制御されます。
設定と UI
FOLD_LOCK_BEHAVIOR 設定の値は、文字列として保持されます。これは、[設定] > [ディスプレイ] > [折りたたみ時もアプリの使用を継続] でのユーザーの選択に対応しています。
- 常に:
stay_awake_on_fold_key - 上にスワイプして続行:
selective_stay_awake_key - Never(行ったことがない):
sleep_on_fold_key
この設定は display_settings.xml から拡張されます。設定ページの UI は FoldLockBehaviorSettings フラグメントに実装され、設定は FoldLockBehaviorPreferenceController によって管理されます。
バックエンド ロジック
デバイスが折りたたまれている場合、LogicalDisplayMapper と PowerManager は次のようにデバイスの動作を制御します。
LogicalDisplayMapperは、FoldSettingProviderを使用してFOLD_LOCK_BEHAVIOR設定値を読み取ります。- 設定値に基づく:
- 値が
stay_awake_on_fold_keyの場合、デバイスはスリープ状態になりません。 - 値が
selective_stay_awake_keyまたはsleep_on_fold_keyの場合、LogicalDisplayMapperはPowerManagerに#goToSleepシグナルを送信します。selective_stay_awake_keyの場合、#goToSleepシグナルにはPowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEPフラグが含まれます。これにより、認証を必要とせずにキーガードが表示されます。sleep_on_fold_keyの場合、このフラグなしで#goToSleepシグナルが送信され、デバイスがロックされます。
- 値が