1f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler/* 2f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * Copyright (C) 2016 The Android Open Source Project 3f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * 4f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 5f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * you may not use this file except in compliance with the License. 6f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * You may obtain a copy of the License at 7f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * 8f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * http://www.apache.org/licenses/LICENSE-2.0 9f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * 10f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * Unless required by applicable law or agreed to in writing, software 11f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 12f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * See the License for the specific language governing permissions and 14f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler * limitations under the License 15f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler */ 16f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 17f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerpackage com.android.tv.settings.system; 18f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 19f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.content.Context; 20f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.media.tv.TvInputInfo; 21f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.os.Bundle; 22f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.os.UserHandle; 23f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.support.annotation.NonNull; 24f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.support.v17.preference.LeanbackPreferenceFragment; 25f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.support.v7.preference.Preference; 26f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.support.v7.preference.PreferenceGroup; 27f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.support.v7.preference.TwoStatePreference; 28f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport android.text.TextUtils; 29f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 30f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport com.android.tv.settings.R; 31f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport com.android.tv.settings.RadioPreference; 32f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 33f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport java.util.Map; 34f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerimport java.util.Set; 35f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 36f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantlerpublic class InputOptionsFragment extends LeanbackPreferenceFragment implements 37f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler InputCustomNameFragment.Callback { 38f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 39f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private static final String KEY_SHOW_INPUT = "show_input"; 40f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private static final String KEY_NAMES = "names"; 41f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private static final String KEY_NAME_DEFAULT = "name_default"; 42f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private static final String KEY_NAME_CUSTOM = "name_custom"; 43f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 44f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private static final String ARG_INPUT = "input"; 45f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 46f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private TwoStatePreference mShowPref; 47f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private PreferenceGroup mNamesGroup; 48f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private TwoStatePreference mNameDefaultPref; 49f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private TwoStatePreference mNameCustomPref; 50f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 51f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private Map<String, String> mCustomLabels; 52f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private Set<String> mHiddenIds; 53f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 54f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private TvInputInfo mInputInfo; 55f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 56f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler public static void prepareArgs(@NonNull Bundle args, TvInputInfo inputInfo) { 57f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler args.putParcelable(ARG_INPUT, inputInfo); 58f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 59f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 60f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler @Override 61f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler public void onCreate(Bundle savedInstanceState) { 62f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mInputInfo = getArguments().getParcelable(ARG_INPUT); 63f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 64f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler super.onCreate(savedInstanceState); 65f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 66f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final Context context = getContext(); 67f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mCustomLabels = 68f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler TvInputInfo.TvInputSettings.getCustomLabels(context, UserHandle.USER_SYSTEM); 69f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mHiddenIds = 70f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler TvInputInfo.TvInputSettings.getHiddenTvInputIds(context, UserHandle.USER_SYSTEM); 71f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 72f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 73f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 74f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler @Override 75f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler public void onResume() { 76f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler super.onResume(); 77f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler refresh(); 78f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 79f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 80f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler @Override 81f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 82f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler setPreferencesFromResource(R.xml.input_options, null); 83f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler getPreferenceScreen().setTitle(mInputInfo.loadLabel(getContext())); 84f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 85f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mShowPref = (TwoStatePreference) findPreference(KEY_SHOW_INPUT); 86f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 87f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNamesGroup = (PreferenceGroup) findPreference(KEY_NAMES); 88f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 89f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNameDefaultPref = (TwoStatePreference) findPreference(KEY_NAME_DEFAULT); 90f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNameCustomPref = (TwoStatePreference) findPreference(KEY_NAME_CUSTOM); 91f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 92f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 93f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 94f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private void refresh() { 95f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 96f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mShowPref.setChecked(!mHiddenIds.contains(mInputInfo.getId())); 97f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 98f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final CharSequence defaultLabel = mInputInfo.loadLabel(getContext()); 99f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final CharSequence customLabel = mCustomLabels.get(mInputInfo.getId()); 100f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 101f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler boolean nameMatched = false; 102f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler for (int i = 0; i < mNamesGroup.getPreferenceCount(); i++) { 103f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final TwoStatePreference namePref = (TwoStatePreference) mNamesGroup.getPreference(i); 104f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 105f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler if (TextUtils.equals(namePref.getKey(), KEY_NAME_DEFAULT) 106f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler || TextUtils.equals(namePref.getKey(), KEY_NAME_CUSTOM)) { 107f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler continue; 108f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 109f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final boolean nameMatch = TextUtils.equals(namePref.getTitle(), customLabel); 110f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler namePref.setChecked(nameMatch); 111f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler nameMatched |= nameMatch; 112f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 113f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 114f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNameDefaultPref.setTitle(defaultLabel); 115f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 116f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final boolean nameIsDefault = TextUtils.isEmpty(customLabel); 117f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNameDefaultPref.setChecked(nameIsDefault); 118f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 119f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler InputCustomNameFragment.prepareArgs(mNameCustomPref.getExtras(), defaultLabel, 120f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler nameIsDefault ? defaultLabel : customLabel); 121f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 122f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler if (!nameIsDefault && !nameMatched) { 123f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNameCustomPref.setChecked(true); 124f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNameCustomPref.setSummary(customLabel); 125f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } else { 126f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNameCustomPref.setChecked(false); 127f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mNameCustomPref.setSummary(null); 128f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 129f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 130f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 131f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler @Override 132f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler public boolean onPreferenceTreeClick(Preference preference) { 133f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final String key = preference.getKey(); 134f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler if (key == null) { 135f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler return super.onPreferenceTreeClick(preference); 136f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 137f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler if (preference instanceof RadioPreference) { 138f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final RadioPreference radioPreference = (RadioPreference) preference; 139f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler radioPreference.setChecked(true); 140f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler radioPreference.clearOtherRadioPreferences(mNamesGroup); 141f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 142f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler if (TextUtils.equals(key, KEY_NAME_CUSTOM)) { 143f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler return super.onPreferenceTreeClick(preference); 144f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } else if (TextUtils.equals(key, KEY_NAME_DEFAULT)) { 145f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler setInputName(null); 146f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler return true; 147f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } else { 148f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler setInputName(preference.getTitle()); 149f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 150f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 151f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler switch (key) { 152f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler case KEY_SHOW_INPUT: 153f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler setInputVisible(((TwoStatePreference) preference).isChecked()); 154f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler return true; 155f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 156f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler return super.onPreferenceTreeClick(preference); 157f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 158f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 159f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private void setInputName(CharSequence name) { 160f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler if (TextUtils.isEmpty(name)) { 161f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mCustomLabels.remove(mInputInfo.getId()); 162f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } else { 163f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mCustomLabels.put(mInputInfo.getId(), name.toString()); 164f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 165f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 166f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler TvInputInfo.TvInputSettings 167f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler .putCustomLabels(getContext(), mCustomLabels, UserHandle.USER_SYSTEM); 168f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 169f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 170f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler private void setInputVisible(boolean visible) { 171f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler final boolean wasVisible = !mHiddenIds.contains(mInputInfo.getId()); 172f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 173f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler if (wasVisible == visible) { 174f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler return; 175f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 176f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 177f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler if (visible) { 178f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mHiddenIds.remove(mInputInfo.getId()); 179f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } else { 180f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler mHiddenIds.add(mInputInfo.getId()); 181f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 182f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 183f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler TvInputInfo.TvInputSettings 184f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler .putHiddenTvInputs(getContext(), mHiddenIds, UserHandle.USER_SYSTEM); 185f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 186f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler 187f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler @Override 188f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler public void onSetCustomName(CharSequence name) { 189f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler setInputName(name); 190f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler } 191f66f830fbfbc92d355214247c84d70cddf4bfd41Tony Mantler} 192