1a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka/* 2a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * Copyright (C) 2014 The Android Open Source Project 3a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * 4a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * you may not use this file except in compliance with the License. 6a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * You may obtain a copy of the License at 7a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * 8a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 9a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * 10a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * See the License for the specific language governing permissions and 14a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka * limitations under the License. 15a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka */ 16a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka 17a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaokapackage com.android.inputmethod.latin.settings; 18a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka 19a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaokaimport android.os.Build; 20a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaokaimport android.preference.CheckBoxPreference; 21a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaokaimport android.preference.Preference; 22a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaokaimport android.preference.PreferenceGroup; 23a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaokaimport android.preference.SwitchPreference; 24a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka 25a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaokaimport java.util.ArrayList; 26a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka 2753c0088d578be0b3581e4c85f7d2d76e374c4627Tadashi G. Takaokapublic class TwoStatePreferenceHelper { 28a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka private static final String EMPTY_TEXT = ""; 29a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka 30a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka private TwoStatePreferenceHelper() { 31a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka // This utility class is not publicly instantiable. 32a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 33a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka 3453c0088d578be0b3581e4c85f7d2d76e374c4627Tadashi G. Takaoka public static void replaceCheckBoxPreferencesBySwitchPreferences(final PreferenceGroup group) { 35a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka // The keyboard settings keeps using a CheckBoxPreference on KitKat or previous. 36a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { 37a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka return; 38a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 39a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka // The keyboard settings starts using a SwitchPreference without switch on/off text on 40a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka // API versions newer than KitKat. 41a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka replaceAllCheckBoxPreferencesBySwitchPreferences(group); 42a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 43a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka 44a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka private static void replaceAllCheckBoxPreferencesBySwitchPreferences( 45a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka final PreferenceGroup group) { 46a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka final ArrayList<Preference> preferences = new ArrayList<>(); 47a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka final int count = group.getPreferenceCount(); 48a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka for (int index = 0; index < count; index++) { 49a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka preferences.add(group.getPreference(index)); 50a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 51a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka group.removeAll(); 52a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka for (int index = 0; index < count; index++) { 53a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka final Preference preference = preferences.get(index); 54a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka if (preference instanceof CheckBoxPreference) { 55a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka addSwitchPreferenceBasedOnCheckBoxPreference((CheckBoxPreference)preference, group); 56a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } else { 57a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka group.addPreference(preference); 58a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka if (preference instanceof PreferenceGroup) { 59a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka replaceAllCheckBoxPreferencesBySwitchPreferences((PreferenceGroup)preference); 60a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 61a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 62a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 63a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 64a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka 65a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka static void addSwitchPreferenceBasedOnCheckBoxPreference(final CheckBoxPreference checkBox, 66a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka final PreferenceGroup group) { 67a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka final SwitchPreference switchPref = new SwitchPreference(checkBox.getContext()); 68a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setTitle(checkBox.getTitle()); 69a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setKey(checkBox.getKey()); 70a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setOrder(checkBox.getOrder()); 71a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setPersistent(checkBox.isPersistent()); 72a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setEnabled(checkBox.isEnabled()); 73a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setChecked(checkBox.isChecked()); 74a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setSummary(checkBox.getSummary()); 75a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setSummaryOn(checkBox.getSummaryOn()); 76a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setSummaryOff(checkBox.getSummaryOff()); 77a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setSwitchTextOn(EMPTY_TEXT); 78a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setSwitchTextOff(EMPTY_TEXT); 79a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka group.addPreference(switchPref); 80a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka switchPref.setDependency(checkBox.getDependency()); 81a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka } 82a2087e66e5d392a6ffc7991959235911c92a4d80Tadashi G. Takaoka} 83