| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file |
| * except in compliance with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software distributed under the |
| * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the specific language governing |
| * permissions and limitations under the License. |
| */ |
| |
| package com.android.systemui.tuner; |
| |
| import android.app.AlertDialog.Builder; |
| import android.app.Dialog; |
| import android.app.DialogFragment; |
| import android.app.Fragment; |
| import android.content.Context; |
| import android.content.DialogInterface.OnClickListener; |
| import android.os.Bundle; |
| import android.support.v14.preference.PreferenceFragment; |
| import android.support.v7.preference.Preference; |
| import android.support.v7.preference.PreferenceScreen; |
| import android.util.AttributeSet; |
| import android.util.Log; |
| import android.view.View; |
| import android.widget.Toolbar; |
| |
| import com.android.settingslib.Utils; |
| import com.android.systemui.fragments.FragmentHostManager; |
| import com.android.systemui.R; |
| |
| import java.util.Objects; |
| |
| public class RadioListPreference extends CustomListPreference { |
| |
| private OnClickListener mOnClickListener; |
| private CharSequence mSummary; |
| |
| public RadioListPreference(Context context, AttributeSet attrs) { |
| super(context, attrs); |
| } |
| |
| @Override |
| protected void onPrepareDialogBuilder(Builder builder, OnClickListener listener) { |
| mOnClickListener = listener; |
| } |
| |
| @Override |
| public void setSummary(CharSequence summary) { |
| super.setSummary(summary); |
| mSummary = summary; |
| } |
| |
| @Override |
| public CharSequence getSummary() { |
| if (mSummary == null || mSummary.toString().contains("%s")) { |
| return super.getSummary(); |
| } |
| return mSummary; |
| } |
| |
| @Override |
| protected Dialog onDialogCreated(DialogFragment fragment, Dialog dialog) { |
| Dialog d = new Dialog(getContext(), android.R.style.Theme_DeviceDefault_Settings); |
| Toolbar t = (Toolbar) d.findViewById(com.android.internal.R.id.action_bar); |
| View v = new View(getContext()); |
| v.setId(R.id.content); |
| d.setContentView(v); |
| t.setTitle(getTitle()); |
| t.setNavigationIcon(Utils.getDrawable(d.getContext(), android.R.attr.homeAsUpIndicator)); |
| t.setNavigationOnClickListener(view -> d.dismiss()); |
| |
| RadioFragment f = new RadioFragment(); |
| f.setPreference(this); |
| FragmentHostManager.get(v).getFragmentManager() |
| .beginTransaction() |
| .add(android.R.id.content, f) |
| .commit(); |
| return d; |
| } |
| |
| @Override |
| protected void onDialogStateRestored(DialogFragment fragment, Dialog dialog, |
| Bundle savedInstanceState) { |
| super.onDialogStateRestored(fragment, dialog, savedInstanceState); |
| View view = dialog.findViewById(R.id.content); |
| RadioFragment radioFragment = (RadioFragment) FragmentHostManager.get(view) |
| .getFragmentManager().findFragmentById(R.id.content); |
| if (radioFragment != null) { |
| radioFragment.setPreference(this); |
| } |
| } |
| |
| @Override |
| protected void onDialogClosed(boolean positiveResult) { |
| super.onDialogClosed(positiveResult); |
| } |
| |
| public static class RadioFragment extends TunerPreferenceFragment { |
| private RadioListPreference mListPref; |
| |
| @Override |
| public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { |
| Context context = getPreferenceManager().getContext(); |
| PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(context); |
| setPreferenceScreen(screen); |
| if (mListPref != null) { |
| update(); |
| } |
| } |
| |
| private void update() { |
| Context context = getPreferenceManager().getContext(); |
| |
| CharSequence[] entries = mListPref.getEntries(); |
| CharSequence[] values = mListPref.getEntryValues(); |
| CharSequence current = mListPref.getValue(); |
| for (int i = 0; i < entries.length; i++) { |
| CharSequence entry = entries[i]; |
| SelectablePreference pref = new SelectablePreference(context); |
| getPreferenceScreen().addPreference(pref); |
| pref.setTitle(entry); |
| pref.setChecked(Objects.equals(current, values[i])); |
| pref.setKey(String.valueOf(i)); |
| } |
| } |
| |
| @Override |
| public boolean onPreferenceTreeClick(Preference preference) { |
| mListPref.mOnClickListener.onClick(null, Integer.parseInt(preference.getKey())); |
| return true; |
| } |
| |
| public void setPreference(RadioListPreference radioListPreference) { |
| mListPref = radioListPreference; |
| if (getPreferenceManager() != null) { |
| update(); |
| } |
| } |
| } |
| } |