Hardware key: Customization support[2/2] Volume Rocker Wake [2/2] Volume key cursor control (2/2) Co-authored-by: jhenrique09 <jhsv09@gmail.com> Co-authored-by: Max <xyyx@mail.ru> Co-authored-by: bigrushdog <randall.rushing@gmail.com> Signed-off-by: Hưng Phan <phandinhhungvp2001@gmail.com>
229 lines
9.9 KiB
Java
229 lines
9.9 KiB
Java
/*
|
|
* Copyright (C) 2016 The Dirty Unicorns Project
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
package com.cherish.settings.fragments;
|
|
|
|
import android.content.ContentResolver;
|
|
import android.content.Context;
|
|
import android.content.res.Resources;
|
|
import android.database.ContentObserver;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.os.SystemProperties;
|
|
import android.os.UserHandle;
|
|
import android.provider.Settings;
|
|
import android.view.View;
|
|
|
|
import androidx.preference.ListPreference;
|
|
import androidx.preference.Preference;
|
|
import androidx.preference.PreferenceCategory;
|
|
import androidx.preference.PreferenceScreen;
|
|
import androidx.preference.Preference.OnPreferenceChangeListener;
|
|
import androidx.preference.SwitchPreference;
|
|
|
|
import com.android.internal.lineage.hardware.LineageHardwareManager;
|
|
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
|
import com.android.internal.util.cherish.CherishUtils;
|
|
import com.android.internal.util.hwkeys.ActionConstants;
|
|
import com.android.internal.util.hwkeys.ActionUtils;
|
|
import com.android.settings.R;
|
|
import com.android.settings.SettingsPreferenceFragment;
|
|
import com.android.settings.Utils;
|
|
import com.android.settings.search.BaseSearchIndexProvider;
|
|
import com.android.settingslib.search.SearchIndexable;
|
|
|
|
import com.cherish.settings.preferences.ActionFragment;
|
|
import com.cherish.settings.preferences.SecureSettingSwitchPreference;
|
|
import com.cherish.settings.preferences.SystemSettingSwitchPreference;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
|
public class ButtonSettings extends ActionFragment implements
|
|
Preference.OnPreferenceChangeListener {
|
|
|
|
private static final String HWKEY_DISABLE = "hardware_keys_disable";
|
|
private static final String KEY_NAVBAR_INVERSE = "navigation_bar_inverse";
|
|
private static final String KEY_NAVIGATION_COMPACT_LAYOUT = "navigation_bar_compact_layout";
|
|
private static final String KEY_SWAP_CAPACITIVE_KEYS = "swap_capacitive_keys";
|
|
|
|
// category keys
|
|
private static final String CATEGORY_HWKEY = "hardware_keys";
|
|
private static final String CATEGORY_BACK = "back_key";
|
|
private static final String CATEGORY_HOME = "home_key";
|
|
private static final String CATEGORY_MENU = "menu_key";
|
|
private static final String CATEGORY_ASSIST = "assist_key";
|
|
private static final String CATEGORY_APPSWITCH = "app_switch_key";
|
|
private static final String CATEGORY_VOLUME = "volume_keys";
|
|
private static final String CATEGORY_POWER = "power_key";
|
|
|
|
// Masks for checking presence of hardware keys.
|
|
// Must match values in frameworks/base/core/res/res/values/config.xml
|
|
public static final int KEY_MASK_HOME = 0x01;
|
|
public static final int KEY_MASK_BACK = 0x02;
|
|
public static final int KEY_MASK_MENU = 0x04;
|
|
public static final int KEY_MASK_ASSIST = 0x08;
|
|
public static final int KEY_MASK_APP_SWITCH = 0x10;
|
|
public static final int KEY_MASK_CAMERA = 0x20;
|
|
public static final int KEY_MASK_VOLUME = 0x40;
|
|
|
|
private PreferenceCategory mButtonBackLightCategory;
|
|
private PreferenceCategory mHwKeyCategory;
|
|
private SecureSettingSwitchPreference mSwapCapacitiveKeys;
|
|
private SwitchPreference mHwKeyDisable;
|
|
private SystemSettingSwitchPreference mNavbarInverse;
|
|
private SystemSettingSwitchPreference mNavigationCompactLayout;
|
|
|
|
@Override
|
|
public void onCreate(Bundle icicle) {
|
|
super.onCreate(icicle);
|
|
addPreferencesFromResource(R.xml.cherish_settings_button);
|
|
|
|
final Resources res = getResources();
|
|
final ContentResolver resolver = getActivity().getContentResolver();
|
|
final PreferenceScreen prefScreen = getPreferenceScreen();
|
|
|
|
mSwapCapacitiveKeys = findPreference(KEY_SWAP_CAPACITIVE_KEYS);
|
|
if (mSwapCapacitiveKeys != null && !isKeySwapperSupported(getActivity())) {
|
|
prefScreen.removePreference(mSwapCapacitiveKeys);
|
|
mSwapCapacitiveKeys = null;
|
|
}
|
|
|
|
final boolean needsNavbar = ActionUtils.hasNavbarByDefault(getActivity());
|
|
mHwKeyCategory = (PreferenceCategory) prefScreen
|
|
.findPreference(CATEGORY_HWKEY);
|
|
int keysDisabled = 0;
|
|
if (!needsNavbar) {
|
|
mHwKeyDisable = (SwitchPreference) findPreference(HWKEY_DISABLE);
|
|
keysDisabled = Settings.System.getIntForUser(getContentResolver(),
|
|
Settings.System.HARDWARE_KEYS_DISABLE, 0,
|
|
UserHandle.USER_CURRENT);
|
|
mHwKeyDisable.setChecked(keysDisabled != 0);
|
|
mHwKeyDisable.setOnPreferenceChangeListener(this);
|
|
} else {
|
|
prefScreen.removePreference(mHwKeyCategory);
|
|
}
|
|
|
|
// bits for hardware keys present on device
|
|
final int deviceKeys = getResources().getInteger(
|
|
com.android.internal.R.integer.config_deviceHardwareKeys);
|
|
// read bits for present hardware keys
|
|
final boolean hasHomeKey = (deviceKeys & KEY_MASK_HOME) != 0;
|
|
final boolean hasBackKey = (deviceKeys & KEY_MASK_BACK) != 0;
|
|
final boolean hasMenuKey = (deviceKeys & KEY_MASK_MENU) != 0;
|
|
final boolean hasAssistKey = (deviceKeys & KEY_MASK_ASSIST) != 0;
|
|
final boolean hasAppSwitchKey = (deviceKeys & KEY_MASK_APP_SWITCH) != 0;
|
|
// load categories and init/remove preferences based on device
|
|
// configuration
|
|
final PreferenceCategory backCategory = (PreferenceCategory) prefScreen
|
|
.findPreference(CATEGORY_BACK);
|
|
final PreferenceCategory homeCategory = (PreferenceCategory) prefScreen
|
|
.findPreference(CATEGORY_HOME);
|
|
final PreferenceCategory menuCategory = (PreferenceCategory) prefScreen
|
|
.findPreference(CATEGORY_MENU);
|
|
final PreferenceCategory assistCategory = (PreferenceCategory) prefScreen
|
|
.findPreference(CATEGORY_ASSIST);
|
|
final PreferenceCategory appSwitchCategory = (PreferenceCategory) prefScreen
|
|
.findPreference(CATEGORY_APPSWITCH);
|
|
// back key
|
|
if (!hasBackKey) {
|
|
prefScreen.removePreference(backCategory);
|
|
}
|
|
// home key
|
|
if (!hasHomeKey) {
|
|
prefScreen.removePreference(homeCategory);
|
|
}
|
|
// App switch key (recents)
|
|
if (!hasAppSwitchKey) {
|
|
prefScreen.removePreference(appSwitchCategory);
|
|
}
|
|
// menu key
|
|
if (!hasMenuKey) {
|
|
prefScreen.removePreference(menuCategory);
|
|
}
|
|
// search/assist key
|
|
if (!hasAssistKey) {
|
|
prefScreen.removePreference(assistCategory);
|
|
}
|
|
// let super know we can load ActionPreferences
|
|
onPreferenceScreenLoaded(ActionConstants.getDefaults(ActionConstants.HWKEYS));
|
|
|
|
// load preferences first
|
|
setActionPreferencesEnabled(keysDisabled == 0);
|
|
|
|
final boolean isThreeButtonNavbarEnabled = CherishUtils.isThemeEnabled("com.android.internal.systemui.navbar.threebutton");
|
|
mNavbarInverse = (SystemSettingSwitchPreference) findPreference(KEY_NAVBAR_INVERSE);
|
|
mNavbarInverse.setEnabled(isThreeButtonNavbarEnabled);
|
|
mNavigationCompactLayout = (SystemSettingSwitchPreference) findPreference(KEY_NAVIGATION_COMPACT_LAYOUT);
|
|
mNavigationCompactLayout.setEnabled(isThreeButtonNavbarEnabled);
|
|
}
|
|
|
|
private static boolean isKeyDisablerSupported(Context context) {
|
|
final LineageHardwareManager hardware = LineageHardwareManager.getInstance(context);
|
|
return hardware.isSupported(LineageHardwareManager.FEATURE_KEY_DISABLE);
|
|
}
|
|
|
|
private static boolean isKeySwapperSupported(Context context) {
|
|
final LineageHardwareManager hardware = LineageHardwareManager.getInstance(context);
|
|
return hardware.isSupported(LineageHardwareManager.FEATURE_KEY_SWAP);
|
|
}
|
|
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
ContentResolver resolver = getActivity().getContentResolver();
|
|
if (preference == mHwKeyDisable) {
|
|
boolean value = (Boolean) newValue;
|
|
Settings.System.putInt(getContentResolver(), Settings.System.HARDWARE_KEYS_DISABLE,
|
|
value ? 1 : 0);
|
|
setActionPreferencesEnabled(!value);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int getMetricsCategory() {
|
|
return MetricsEvent.CHERISH_SETTINGS;
|
|
}
|
|
|
|
/**
|
|
* For Search.
|
|
*/
|
|
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
|
new BaseSearchIndexProvider(R.xml.cherish_settings_button) {
|
|
|
|
@Override
|
|
public List<String> getNonIndexableKeys(Context context) {
|
|
List<String> keys = super.getNonIndexableKeys(context);
|
|
|
|
LineageHardwareManager mLineageHardware = LineageHardwareManager.getInstance(context);
|
|
|
|
if (!isKeyDisablerSupported(context)) {
|
|
keys.add(HWKEY_DISABLE);
|
|
keys.add(CATEGORY_HWKEY);
|
|
keys.add(CATEGORY_BACK);
|
|
keys.add(CATEGORY_HOME);
|
|
keys.add(CATEGORY_MENU);
|
|
keys.add(CATEGORY_ASSIST);
|
|
keys.add(CATEGORY_APPSWITCH);
|
|
}
|
|
|
|
return keys;
|
|
}
|
|
};
|
|
} |