Fix OHM H/W key shortcut dosn't work appropriately

When one-handed mode disabled
1. Turn on the shortcut of the OHM with hold volume keys
2. Hold the volume keys
Should trigger one-anded mode

Due to S/W & H/W shortcut keys are mapping to different settings
S/W : ACCESSIBILITY_BUTTON_TARGETS
H/W : ACCESSIBILITY_SHORTCUT_TARGET_SERVICE
We should check both status of the them.

Bug: 193411296
Bug: 198739184
Test: atest WMShellUnitTests
Change-Id: I3994ab89fd6163c283969cc3175877e29b44c67a
Merged-Id: I3994ab89fd6163c283969cc3175877e29b44c67a
This commit is contained in:
Bill Lin
2021-07-16 18:46:09 +08:00
parent 6925a160d0
commit 08898e3dde
2 changed files with 18 additions and 2 deletions

View File

@@ -445,6 +445,9 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
mOneHandedSettingsUtil.registerSettingsKeyObserver(
Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS,
mContext.getContentResolver(), mShortcutEnabledObserver, newUserId);
mOneHandedSettingsUtil.registerSettingsKeyObserver(
Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE,
mContext.getContentResolver(), mShortcutEnabledObserver, newUserId);
}
private void unregisterSettingObservers() {

View File

@@ -171,9 +171,22 @@ public final class OneHandedSettingsUtil {
* @return true if user enabled one-handed shortcut in settings, false otherwise.
*/
public boolean getShortcutEnabled(ContentResolver resolver, int userId) {
final String targets = Settings.Secure.getStringForUser(resolver,
// Checks SOFTWARE_SHORTCUT_KEY
final String targetsSwKey = Settings.Secure.getStringForUser(resolver,
Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, userId);
return TextUtils.isEmpty(targets) ? false : targets.contains(ONE_HANDED_MODE_TARGET_NAME);
if (!TextUtils.isEmpty(targetsSwKey) && targetsSwKey.contains(
ONE_HANDED_MODE_TARGET_NAME)) {
return true;
}
// Checks HARDWARE_SHORTCUT_KEY
final String targetsHwKey = Settings.Secure.getStringForUser(resolver,
Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, userId);
if (!TextUtils.isEmpty(targetsHwKey) && targetsHwKey.contains(
ONE_HANDED_MODE_TARGET_NAME)) {
return true;
}
return false;
}
/**