/*
* 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.view.KeyEvent;
import java.util.Map;
/**
* Manages key combo code and key. KeyComboModel is responsible for persisting preferences of key
* combo code.
*/
public interface KeyComboModel {
int KEY_COMBO_CODE_UNASSIGNED = KeyEvent.KEYCODE_UNKNOWN;
int KEY_COMBO_CODE_INVALID = -1;
int NO_MODIFIER = 0;
/**
* Returns modifier of this model. If this model doesn't have modifier,
* KEY_COMBO_MODEL_NO_MODIFIER will be returned.
*/
int getTriggerModifier();
/**
* Notifies the model that preference of trigger modifier has changed. You must call this method
* when you change preference of trigger modifier since the model might cache the value in it.
*/
void notifyTriggerModifierChanged();
/**
* Returns preference key to be used for storing trigger modifier of this mode. Returns null if
* this model doesn't support trigger modifier.
*/
String getPreferenceKeyForTriggerModifier();
/**
* Returns map of key and key combo code. Key combo codes in this map don't contain trigger
* modifier if model has it.
*/
Map<String, Long> getKeyComboCodeMap();
/**
* Gets key for preference that is assigned for keyComboCode if keyComboCode is not
* KEY_COMBO_CODE_UNASSIGNED. If no preference is assigned or keyComboCode was
* KEY_COMBO_CODE_UNASSIGNED, returns null.
* @param keyComboCode key combo code which doesn't contain trigger modifier if model has it.
*/
String getKeyForKeyComboCode(long keyComboCode);
/**
* Gets key combo code for key. KEY_COMBO_CODE_UNASSIGNED will be returned if key is invalid.
*/
long getKeyComboCodeForKey(String key);
/**
* Gets default key combo code for key. KEY_COMBO_CODE_UNASSIGNED will be returned if no key
* combo code is assigned to the key or it's invalid.
*/
long getDefaultKeyComboCode(String key);
/**
* Assigns keyComboCode for preference.
* @param key key of key combo.
* @param keyComboCode key combo code which doesn't contain trigger modifier if model has it.
*/
void saveKeyComboCode(String key, long keyComboCode);
/**
* Clears key combo code assigned for preference key.
*/
void clearKeyComboCode(String key);
/**
* Returns true if keyComboCode is eligible combination for this model. This method doesn't
* check consistency with other key combo codes in this model. e.g. duplicated key combos.
* @param keyComboCode key combo code which doesn't contain trigger modifier if model has it.
*/
boolean isEligibleKeyComboCode(long keyComboCode);
/**
* Returns description of eligible key combination. This will be shown in the UI.
*/
String getDescriptionOfEligibleKeyCombo();
/**
* Updates key combo model. This method will be called when TalkBack is updated.
*/
void updateVersion(int previousVersion);
}