/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.talkback.keyboard;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.view.KeyEvent;
import com.android.talkback.KeyComboManager;
import com.android.talkback.R;
import com.android.utils.SharedPreferencesUtils;
import com.google.android.marvin.talkback.TalkBackService;
import java.util.Map;
import java.util.TreeMap;
/**
* Default key combo model.
*/
public class DefaultKeyComboModel implements KeyComboModel {
public static final String PREF_KEY_PREFIX = "default_key_combo_model";
private static final boolean IS_IN_ARC = TalkBackService.isInArc();
private final Context mContext;
private final Map<String, Long> mKeyComboCodeMap = new TreeMap<>();
private final KeyComboPersister mPersister;
private int mTriggerModifier = KeyEvent.META_ALT_ON;
public DefaultKeyComboModel(Context context) {
mContext = context;
mPersister = new KeyComboPersister(context, PREF_KEY_PREFIX);
loadTriggerModifierFromPreferences();
addKeyCombos();
}
private void loadTriggerModifierFromPreferences() {
SharedPreferences prefs = SharedPreferencesUtils.getSharedPreferences(mContext);
int defaultTriggerModifier = IS_IN_ARC ?
R.string.trigger_modifier_meta_entry_value :
R.string.trigger_modifier_alt_entry_value;
if (!prefs.contains(getPreferenceKeyForTriggerModifier())) {
// Store default value in preferences to show it in preferences UI.
prefs.edit().putString(getPreferenceKeyForTriggerModifier(),
mContext.getString(defaultTriggerModifier)).apply();
}
String triggerModifier = prefs.getString(getPreferenceKeyForTriggerModifier(),
mContext.getString(defaultTriggerModifier));
if (triggerModifier.equals(mContext.getString(R.string.trigger_modifier_alt_entry_value))) {
mTriggerModifier = KeyEvent.META_ALT_ON;
} else if (triggerModifier.equals(
mContext.getString(R.string.trigger_modifier_meta_entry_value))) {
mTriggerModifier = KeyEvent.META_META_ON;
}
}
private void addKeyCombos() {
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_perform_click));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_perform_long_click));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_other_read_from_top));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_other_read_from_next_item));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_other_global_context_menu));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_other_local_context_menu));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_other_toggle_search));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_global_back));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_up));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_down));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_first));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_last));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_word));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_word));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_character));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_character));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_button));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_button));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_control));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_control));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_checkbox));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_checkbox));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_aria_landmark));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_aria_landmark));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_edit_field));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_edit_field));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_focusable_item));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_focusable_item));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_graphic));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_graphic));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_heading));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_1));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_heading_1));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_2));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_heading_2));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_3));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_heading_3));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_4));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_heading_4));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_5));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_heading_5));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_6));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_heading_6));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_list_item));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_list_item));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_link));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_link));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_list));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_list));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_table));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_table));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_combobox));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_combobox));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !IS_IN_ARC) {
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_next_window));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_navigate_previous_window));
}
if (IS_IN_ARC) {
addKeyCombo(mContext.getString(
R.string.keycombo_shortcut_open_manage_keyboard_shortcuts));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_open_talkback_settings));
}
if (!IS_IN_ARC) {
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_global_suspend));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_global_home));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_global_recents));
addKeyCombo(mContext.getString(R.string.keycombo_shortcut_global_notifications));
}
}
private void addKeyCombo(String key) {
if (!mPersister.contains(key)) {
mPersister.saveKeyCombo(key, getDefaultKeyComboCode(key));
}
mKeyComboCodeMap.put(key, mPersister.getKeyComboCode(key));
}
@Override
public int getTriggerModifier() {
return mTriggerModifier;
}
public String getTriggerModifierName() {
SharedPreferences prefs = SharedPreferencesUtils.getSharedPreferences(mContext);
String triggerModifier = prefs.getString(getPreferenceKeyForTriggerModifier(),
mContext.getString(R.string.trigger_modifier_alt_entry_value));
String TriggerModifierName = "";
if (triggerModifier.equals(mContext.getString(R.string.trigger_modifier_alt_entry_value))) {
TriggerModifierName = mContext.getString(R.string.keycombo_key_modifier_alt);
} else if (triggerModifier.equals(
mContext.getString(R.string.trigger_modifier_meta_entry_value))) {
TriggerModifierName = mContext.getString(R.string.keycombo_key_modifier_meta);
}
return TriggerModifierName;
}
@Override
public void notifyTriggerModifierChanged() {
loadTriggerModifierFromPreferences();
}
@Override
public String getPreferenceKeyForTriggerModifier() {
return mContext.getString(R.string.pref_default_keymap_trigger_modifier_key);
}
@Override
public Map<String, Long> getKeyComboCodeMap() {
return mKeyComboCodeMap;
}
@Override
public String getKeyForKeyComboCode(long keyComboCode) {
for (Map.Entry<String, Long> entry : mKeyComboCodeMap.entrySet()) {
if (entry.getValue() == keyComboCode) {
return entry.getKey();
}
}
return null;
}
@Override
public long getKeyComboCodeForKey(String key) {
if (key != null && mKeyComboCodeMap.containsKey(key)) {
return mKeyComboCodeMap.get(key);
} else {
return KEY_COMBO_CODE_UNASSIGNED;
}
}
@Override
public long getDefaultKeyComboCode(String key) {
if (key == null) {
return KEY_COMBO_CODE_UNASSIGNED;
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_perform_click))) {
if (IS_IN_ARC) {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_SPACE);
} else {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_ENTER);
}
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_perform_long_click))) {
if (IS_IN_ARC) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_SPACE);
} else {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_ENTER);
}
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_global_suspend))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON, KeyEvent.KEYCODE_Z);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_other_read_from_top))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON, KeyEvent.KEYCODE_ENTER);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_other_read_from_next_item))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_ENTER);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_other_global_context_menu))) {
if (IS_IN_ARC) {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_ENTER);
} else {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_SPACE);
}
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_other_local_context_menu))) {
if (IS_IN_ARC) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_ENTER);
} else {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_SPACE);
}
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_other_toggle_search))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON, KeyEvent.KEYCODE_SLASH);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_global_home))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON, KeyEvent.KEYCODE_H);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_global_recents))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON, KeyEvent.KEYCODE_R);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_global_back))) {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_DEL);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_global_notifications))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON, KeyEvent.KEYCODE_N);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next))) {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_DPAD_RIGHT);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous))) {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_DPAD_LEFT);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_up))) {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_DPAD_UP);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_down))) {
return KeyComboManager.getKeyComboCode(NO_MODIFIER, KeyEvent.KEYCODE_DPAD_DOWN);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_first))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON,
KeyEvent.KEYCODE_DPAD_LEFT);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_last))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON,
KeyEvent.KEYCODE_DPAD_RIGHT);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_word))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_DPAD_RIGHT);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_word))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_DPAD_LEFT);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_character))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_DPAD_RIGHT);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_character))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON,
KeyEvent.KEYCODE_DPAD_LEFT);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_button))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_B);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_button))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_B);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_control))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_C);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_control))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_C);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_checkbox))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_X);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_checkbox))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_X);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_next_aria_landmark))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_D);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_aria_landmark))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_D);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_edit_field))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_E);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_edit_field))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_E);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_next_focusable_item))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_F);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_focusable_item))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_F);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_graphic))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_G);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_graphic))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_G);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_H);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_heading))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_H);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_1))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_1);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_heading_1))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_1);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_2))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_2);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_heading_2))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_2);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_3))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_3);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_heading_3))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_3);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_4))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_4);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_heading_4))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_4);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_5))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_5);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_heading_5))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_5);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_heading_6))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_6);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_heading_6))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_6);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_list_item))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_I);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_navigate_previous_list_item))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_I);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_link))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_L);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_link))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_L);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_list))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_O);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_list))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_O);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_table))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_T);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_table))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_T);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_combobox))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_Z);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_combobox))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_SHIFT_ON, KeyEvent.KEYCODE_Z);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_next_window))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON,
KeyEvent.KEYCODE_DPAD_DOWN);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_navigate_previous_window))) {
return KeyComboManager.getKeyComboCode(KeyEvent.META_CTRL_ON, KeyEvent.KEYCODE_DPAD_UP);
}
if (key.equals(mContext.getString(
R.string.keycombo_shortcut_open_manage_keyboard_shortcuts))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_K);
}
if (key.equals(mContext.getString(R.string.keycombo_shortcut_open_talkback_settings))) {
return KeyComboManager.getKeyComboCode(KeyComboModel.NO_MODIFIER, KeyEvent.KEYCODE_0);
}
return KEY_COMBO_CODE_UNASSIGNED;
}
@Override
public void saveKeyComboCode(String key, long keyComboCode) {
mPersister.saveKeyCombo(key, keyComboCode);
mKeyComboCodeMap.put(key, keyComboCode);
}
@Override
public void clearKeyComboCode(String key) {
saveKeyComboCode(key, KEY_COMBO_CODE_UNASSIGNED);
}
@Override
public boolean isEligibleKeyComboCode(long keyComboCode) {
if (keyComboCode == KEY_COMBO_CODE_UNASSIGNED) {
return true;
}
// Do not allow to set key combo which is consisted only with modifiers.
int keyCode = KeyComboManager.getKeyCode(keyComboCode);
if (KeyEvent.isModifierKey(keyCode) || keyCode == KeyEvent.KEYCODE_UNKNOWN) {
return false;
}
// It's not allowed to use trigger modifier as part of key combo code.
return (KeyComboManager.getModifier(keyComboCode) & getTriggerModifier()) == 0;
}
@Override
public String getDescriptionOfEligibleKeyCombo() {
return mContext.getString(R.string.keycombo_assign_dialog_default_keymap_instruction,
getTriggerModifierName());
}
@Override
public void updateVersion(int previousVersion) { }
}