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
シグナルが送信され、デバイスがロックされます。
- 値が