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 - 継続しない:
sleep_on_fold_key
この設定は display_settings.xml から拡張されます。設定ページの UI
は FoldLockBehaviorSettings フラグメントに実装され、設定は FoldLockBehaviorPreferenceController によって管理されます。
バックエンド ロジック
デバイスが折りたたまれると、LogicalDisplayMapper と
PowerManager が次のようにデバイスの動作を制御します。
LogicalDisplayMapperは、FOLD_LOCK_BEHAVIOR設定の値をFoldSettingProviderを使用して読み取ります。- 設定値に基づいて:
- 値が
stay_awake_on_fold_keyの場合、デバイスはスリープ状態になりません。 - 値が
selective_stay_awake_keyまたはsleep_on_fold_keyの場合、LogicalDisplayMapperは#goToSleepシグナルをPowerManagerに送信します。selective_stay_awake_keyの場合、#goToSleepシグナルには フラグPowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEPが含まれます。これにより、デバイスは認証を必要とせずにキーガードを表示します。sleep_on_fold_keyの場合、#goToSleepシグナルはこのフラグなしで送信され、デバイスがロックされます。
- 値が