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