| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package io.v.android.debug; |
| |
| import android.content.SharedPreferences; |
| import android.os.Bundle; |
| import android.preference.Preference; |
| import android.preference.PreferenceFragment; |
| import android.preference.PreferenceManager; |
| import android.support.v4.content.ContextCompat; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| |
| import io.v.android.VAndroidContext; |
| import io.v.android.VOptionPreferenceUtils; |
| import io.v.v23.OptionDefs; |
| import io.v.v23.android.R; |
| |
| /** |
| * A {@link PreferenceFragment} surfacing logging options. |
| * <ul> |
| * <li>VLEVEL - verbosity for vlog</li> |
| * <li>VMODULE - per-module log verbosities</li> |
| * </ul> |
| */ |
| public class DebugLogPreferenceFragment extends PreferenceFragment |
| implements SharedPreferences.OnSharedPreferenceChangeListener { |
| @Override |
| public void onCreate(final Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| final PreferenceManager pm = getPreferenceManager(); |
| pm.setSharedPreferencesName(VAndroidContext.VANADIUM_OPTIONS_SHARED_PREFS); |
| pm.getSharedPreferences().registerOnSharedPreferenceChangeListener(this); |
| createPreferences(); |
| } |
| |
| private void createPreferences() { |
| addPreferencesFromResource(R.xml.pref_logging); |
| final SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences(); |
| updateVLevelSummary(sharedPreferences, findPreference(OptionDefs.LOG_VLEVEL)); |
| updateVModuleSummary(sharedPreferences, findPreference(OptionDefs.LOG_VMODULE)); |
| } |
| |
| @Override |
| public View onCreateView(final LayoutInflater inflater, final ViewGroup container, |
| final Bundle savedInstanceState) { |
| final View view = super.onCreateView(inflater, container, savedInstanceState); |
| |
| view.setBackgroundColor(ContextCompat.getColor( |
| getActivity(), android.R.color.background_light)); |
| |
| return view; |
| } |
| |
| private static void updateVLevelSummary(final SharedPreferences sharedPreferences, |
| final Preference pref) { |
| pref.setSummary(VOptionPreferenceUtils.readVLevel(sharedPreferences) |
| .map(Object::toString) |
| .orElse(null)); |
| } |
| |
| private static void updateVModuleSummary(final SharedPreferences sharedPreferences, |
| final Preference pref) { |
| pref.setSummary(VOptionPreferenceUtils.readVModule(sharedPreferences).orElse(null)); |
| } |
| |
| @Override |
| public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { |
| final Preference pref = findPreference(key); |
| if (pref == null) { |
| return; |
| } |
| |
| if (OptionDefs.LOG_VLEVEL.equals(key)) { |
| updateVLevelSummary(sharedPreferences, pref); |
| } else if (OptionDefs.LOG_VMODULE.equals(key)) { |
| updateVModuleSummary(sharedPreferences, pref); |
| } |
| } |
| |
| public void reset() { |
| getPreferenceManager().getSharedPreferences().edit() |
| .clear() |
| .commit(); |
| // The easiest way to resync the preferences seems to be: |
| getPreferenceScreen().removeAll(); |
| createPreferences(); |
| } |
| } |