/* * 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 libcore.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.equal(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(); } } } }