1790442e4cd8106cf2c69d23ff185953b620b087aJason Monk/* 2790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * Copyright (C) 2017 The Android Open Source Project 3790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * 4790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * except in compliance with the License. You may obtain a copy of the License at 6790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * 7790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * http://www.apache.org/licenses/LICENSE-2.0 8790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * 9790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 10790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * KIND, either express or implied. See the License for the specific language governing 12790442e4cd8106cf2c69d23ff185953b620b087aJason Monk * permissions and limitations under the License. 13790442e4cd8106cf2c69d23ff185953b620b087aJason Monk */ 14790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 15790442e4cd8106cf2c69d23ff185953b620b087aJason Monkpackage com.android.systemui.tuner; 16790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 17790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.app.AlertDialog.Builder; 18790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.app.Dialog; 19790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.app.DialogFragment; 20790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.app.Fragment; 21790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.content.Context; 22790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.content.DialogInterface.OnClickListener; 23790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.os.Bundle; 24790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.support.v14.preference.PreferenceFragment; 25790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.support.v7.preference.Preference; 26790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.support.v7.preference.PreferenceScreen; 27790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.util.AttributeSet; 28790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.util.Log; 29790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.view.View; 30790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport android.widget.Toolbar; 31790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 32790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport com.android.settingslib.Utils; 33790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport com.android.systemui.fragments.FragmentHostManager; 34790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport com.android.systemui.R; 35790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 36790442e4cd8106cf2c69d23ff185953b620b087aJason Monkimport libcore.util.Objects; 37790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 38790442e4cd8106cf2c69d23ff185953b620b087aJason Monkpublic class RadioListPreference extends CustomListPreference { 39790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 40790442e4cd8106cf2c69d23ff185953b620b087aJason Monk private OnClickListener mOnClickListener; 41790442e4cd8106cf2c69d23ff185953b620b087aJason Monk private CharSequence mSummary; 42790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 43790442e4cd8106cf2c69d23ff185953b620b087aJason Monk public RadioListPreference(Context context, AttributeSet attrs) { 44790442e4cd8106cf2c69d23ff185953b620b087aJason Monk super(context, attrs); 45790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 46790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 47790442e4cd8106cf2c69d23ff185953b620b087aJason Monk @Override 48790442e4cd8106cf2c69d23ff185953b620b087aJason Monk protected void onPrepareDialogBuilder(Builder builder, OnClickListener listener) { 49790442e4cd8106cf2c69d23ff185953b620b087aJason Monk mOnClickListener = listener; 50790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 51790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 52790442e4cd8106cf2c69d23ff185953b620b087aJason Monk @Override 53790442e4cd8106cf2c69d23ff185953b620b087aJason Monk public void setSummary(CharSequence summary) { 54790442e4cd8106cf2c69d23ff185953b620b087aJason Monk super.setSummary(summary); 55790442e4cd8106cf2c69d23ff185953b620b087aJason Monk mSummary = summary; 56790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 57790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 58790442e4cd8106cf2c69d23ff185953b620b087aJason Monk @Override 59790442e4cd8106cf2c69d23ff185953b620b087aJason Monk public CharSequence getSummary() { 60790442e4cd8106cf2c69d23ff185953b620b087aJason Monk if (mSummary == null || mSummary.toString().contains("%s")) { 61790442e4cd8106cf2c69d23ff185953b620b087aJason Monk return super.getSummary(); 62790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 63790442e4cd8106cf2c69d23ff185953b620b087aJason Monk return mSummary; 64790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 65790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 66790442e4cd8106cf2c69d23ff185953b620b087aJason Monk @Override 67790442e4cd8106cf2c69d23ff185953b620b087aJason Monk protected Dialog onDialogCreated(DialogFragment fragment, Dialog dialog) { 68790442e4cd8106cf2c69d23ff185953b620b087aJason Monk Dialog d = new Dialog(getContext(), android.R.style.Theme_DeviceDefault_Settings); 69790442e4cd8106cf2c69d23ff185953b620b087aJason Monk Toolbar t = (Toolbar) d.findViewById(com.android.internal.R.id.action_bar); 70790442e4cd8106cf2c69d23ff185953b620b087aJason Monk View v = new View(getContext()); 71790442e4cd8106cf2c69d23ff185953b620b087aJason Monk v.setId(R.id.content); 72790442e4cd8106cf2c69d23ff185953b620b087aJason Monk d.setContentView(v); 73790442e4cd8106cf2c69d23ff185953b620b087aJason Monk t.setTitle(getTitle()); 74790442e4cd8106cf2c69d23ff185953b620b087aJason Monk t.setNavigationIcon(Utils.getDrawable(d.getContext(), android.R.attr.homeAsUpIndicator)); 75790442e4cd8106cf2c69d23ff185953b620b087aJason Monk t.setNavigationOnClickListener(view -> d.dismiss()); 76790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 77790442e4cd8106cf2c69d23ff185953b620b087aJason Monk RadioFragment f = new RadioFragment(); 78790442e4cd8106cf2c69d23ff185953b620b087aJason Monk f.setPreference(this); 79790442e4cd8106cf2c69d23ff185953b620b087aJason Monk FragmentHostManager.get(v).getFragmentManager() 80790442e4cd8106cf2c69d23ff185953b620b087aJason Monk .beginTransaction() 81790442e4cd8106cf2c69d23ff185953b620b087aJason Monk .add(android.R.id.content, f) 82790442e4cd8106cf2c69d23ff185953b620b087aJason Monk .commit(); 83790442e4cd8106cf2c69d23ff185953b620b087aJason Monk return d; 84790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 85790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 86790442e4cd8106cf2c69d23ff185953b620b087aJason Monk @Override 87790442e4cd8106cf2c69d23ff185953b620b087aJason Monk protected void onDialogStateRestored(DialogFragment fragment, Dialog dialog, 88790442e4cd8106cf2c69d23ff185953b620b087aJason Monk Bundle savedInstanceState) { 89790442e4cd8106cf2c69d23ff185953b620b087aJason Monk super.onDialogStateRestored(fragment, dialog, savedInstanceState); 90790442e4cd8106cf2c69d23ff185953b620b087aJason Monk View view = dialog.findViewById(R.id.content); 91790442e4cd8106cf2c69d23ff185953b620b087aJason Monk RadioFragment radioFragment = (RadioFragment) FragmentHostManager.get(view) 92790442e4cd8106cf2c69d23ff185953b620b087aJason Monk .getFragmentManager().findFragmentById(R.id.content); 93790442e4cd8106cf2c69d23ff185953b620b087aJason Monk if (radioFragment != null) { 94790442e4cd8106cf2c69d23ff185953b620b087aJason Monk radioFragment.setPreference(this); 95790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 96790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 97790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 98790442e4cd8106cf2c69d23ff185953b620b087aJason Monk @Override 99790442e4cd8106cf2c69d23ff185953b620b087aJason Monk protected void onDialogClosed(boolean positiveResult) { 100790442e4cd8106cf2c69d23ff185953b620b087aJason Monk super.onDialogClosed(positiveResult); 101790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 102790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 103790442e4cd8106cf2c69d23ff185953b620b087aJason Monk public static class RadioFragment extends TunerPreferenceFragment { 104790442e4cd8106cf2c69d23ff185953b620b087aJason Monk private RadioListPreference mListPref; 105790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 106790442e4cd8106cf2c69d23ff185953b620b087aJason Monk @Override 107790442e4cd8106cf2c69d23ff185953b620b087aJason Monk public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 108790442e4cd8106cf2c69d23ff185953b620b087aJason Monk Context context = getPreferenceManager().getContext(); 109790442e4cd8106cf2c69d23ff185953b620b087aJason Monk PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(context); 110790442e4cd8106cf2c69d23ff185953b620b087aJason Monk setPreferenceScreen(screen); 111790442e4cd8106cf2c69d23ff185953b620b087aJason Monk if (mListPref != null) { 112790442e4cd8106cf2c69d23ff185953b620b087aJason Monk update(); 113790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 114790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 115790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 116790442e4cd8106cf2c69d23ff185953b620b087aJason Monk private void update() { 117790442e4cd8106cf2c69d23ff185953b620b087aJason Monk Context context = getPreferenceManager().getContext(); 118790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 119790442e4cd8106cf2c69d23ff185953b620b087aJason Monk CharSequence[] entries = mListPref.getEntries(); 120790442e4cd8106cf2c69d23ff185953b620b087aJason Monk CharSequence[] values = mListPref.getEntryValues(); 121790442e4cd8106cf2c69d23ff185953b620b087aJason Monk CharSequence current = mListPref.getValue(); 122790442e4cd8106cf2c69d23ff185953b620b087aJason Monk for (int i = 0; i < entries.length; i++) { 123790442e4cd8106cf2c69d23ff185953b620b087aJason Monk CharSequence entry = entries[i]; 124790442e4cd8106cf2c69d23ff185953b620b087aJason Monk SelectablePreference pref = new SelectablePreference(context); 125790442e4cd8106cf2c69d23ff185953b620b087aJason Monk getPreferenceScreen().addPreference(pref); 126790442e4cd8106cf2c69d23ff185953b620b087aJason Monk pref.setTitle(entry); 127790442e4cd8106cf2c69d23ff185953b620b087aJason Monk pref.setChecked(Objects.equal(current, values[i])); 128790442e4cd8106cf2c69d23ff185953b620b087aJason Monk pref.setKey(String.valueOf(i)); 129790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 130790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 131790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 132790442e4cd8106cf2c69d23ff185953b620b087aJason Monk @Override 133790442e4cd8106cf2c69d23ff185953b620b087aJason Monk public boolean onPreferenceTreeClick(Preference preference) { 134790442e4cd8106cf2c69d23ff185953b620b087aJason Monk mListPref.mOnClickListener.onClick(null, Integer.parseInt(preference.getKey())); 135790442e4cd8106cf2c69d23ff185953b620b087aJason Monk return true; 136790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 137790442e4cd8106cf2c69d23ff185953b620b087aJason Monk 138790442e4cd8106cf2c69d23ff185953b620b087aJason Monk public void setPreference(RadioListPreference radioListPreference) { 139790442e4cd8106cf2c69d23ff185953b620b087aJason Monk mListPref = radioListPreference; 140790442e4cd8106cf2c69d23ff185953b620b087aJason Monk if (getPreferenceManager() != null) { 141790442e4cd8106cf2c69d23ff185953b620b087aJason Monk update(); 142790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 143790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 144790442e4cd8106cf2c69d23ff185953b620b087aJason Monk } 145790442e4cd8106cf2c69d23ff185953b620b087aJason Monk} 146