From 361e48f3d81bf6d18e24250ff93b403a606062ec Mon Sep 17 00:00:00 2001 From: bigrushdog Date: Tue, 9 Jun 2020 16:31:25 -0700 Subject: [PATCH] Cherish: Pulse navbar audio gfx visualizer for Android 10 [3/4] --- res/values/cherish_arrays.xml | 23 +++ res/values/cherish_strings.xml | 30 ++++ res/xml/cherish_settings_lockscreen.xml | 7 + res/xml/cherish_settings_pulse.xml | 144 ++++++++++++++++ .../settings/fragments/PulseSettings.java | 154 ++++++++++++++++++ 5 files changed, 358 insertions(+) create mode 100644 res/xml/cherish_settings_pulse.xml create mode 100644 src/com/cherish/settings/fragments/PulseSettings.java diff --git a/res/values/cherish_arrays.xml b/res/values/cherish_arrays.xml index d870a27..f975189 100644 --- a/res/values/cherish_arrays.xml +++ b/res/values/cherish_arrays.xml @@ -588,4 +588,27 @@ 3 4 + + + + @string/pulse_render_mode_fading_bars + @string/pulse_render_mode_solid_lines + + + + 0 + 1 + + + + @string/pulse_color_accent + @string/pulse_color_custom + @string/pulse_color_lava_lamp + + + + 0 + 1 + 2 + diff --git a/res/values/cherish_strings.xml b/res/values/cherish_strings.xml index 5c0ff9c..cefba00 100644 --- a/res/values/cherish_strings.xml +++ b/res/values/cherish_strings.xml @@ -686,4 +686,34 @@ Lockscreen bottom shortcuts Customize bottom left and right shortcuts + + Pulse does not work with some audio sources when listening on device speaker + Pulse + Navigation bar audio graphic equalizer + Show Pulse + Audio graphic equalizer on the navigation bar + Render mode + Fading blocks + Solid lines + Color + Color mode + Accent + Custom + Lava lamp + Choose color + Turn on smoothing + Each bar is animated more smoothly + Advanced + Fading blocks mode settings + Sanity level + Lava lamp speed + Solid lines count + Solid lines count + Solid lines opacity + Solid lines mode settings + Bar width + Bar spacing + Block size + Block spacing + diff --git a/res/xml/cherish_settings_lockscreen.xml b/res/xml/cherish_settings_lockscreen.xml index 4e29007..457b49d 100644 --- a/res/xml/cherish_settings_lockscreen.xml +++ b/res/xml/cherish_settings_lockscreen.xml @@ -95,6 +95,13 @@ android:icon="@drawable/ic_media" android:defaultValue="true" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/cherish/settings/fragments/PulseSettings.java b/src/com/cherish/settings/fragments/PulseSettings.java new file mode 100644 index 0000000..4ba6ba8 --- /dev/null +++ b/src/com/cherish/settings/fragments/PulseSettings.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2020 The Dirty Unicorns 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.cherish.settings.fragments; + +import java.util.ArrayList; +import java.util.List; + +import com.android.internal.logging.nano.MetricsProto; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; +import com.android.settingslib.search.SearchIndexable; +import net.margaritov.preference.colorpicker.ColorPickerPreference; +import com.android.internal.util.cherish.CherishUtils; + +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; +import android.os.UserHandle; + +import androidx.preference.PreferenceCategory; +import androidx.preference.ListPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; +import androidx.preference.Preference.OnPreferenceChangeListener; +import androidx.preference.SwitchPreference; + +import android.provider.SearchIndexableResource; +import android.provider.Settings; + +@SearchIndexable +public class PulseSettings extends SettingsPreferenceFragment implements + Preference.OnPreferenceChangeListener, Indexable { + private static final String TAG = PulseSettings.class.getSimpleName(); + private static final String PULSE_COLOR_MODE_KEY = "navbar_pulse_color_type"; + private static final String PULSE_COLOR_MODE_CHOOSER_KEY = "navbar_pulse_color_user"; + private static final String PULSE_COLOR_MODE_LAVA_SPEED_KEY = "navbar_pulse_lavalamp_speed"; + private static final String PULSE_RENDER_CATEGORY_SOLID = "pulse_2"; + private static final String PULSE_RENDER_CATEGORY_FADING = "pulse_fading_bars_category"; + private static final String PULSE_RENDER_MODE_KEY = "navbar_pulse_render_style"; + private static final int RENDER_STYLE_FADING_BARS = 0; + private static final int RENDER_STYLE_SOLID_LINES = 1; + private static final int COLOR_TYPE_ACCENT = 0; + private static final int COLOR_TYPE_USER = 1; + private static final int COLOR_TYPE_LAVALAMP = 2; + + private Preference mRenderMode; + private ListPreference mColorModePref; + private ColorPickerPreference mColorPickerPref; + private Preference mLavaSpeedPref; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.cherish_settings_pulse); + + mFooterPreferenceMixin.createFooterPreference() + .setTitle(R.string.pulse_help_policy_notice_summary); + + mColorModePref = (ListPreference) findPreference(PULSE_COLOR_MODE_KEY); + mColorPickerPref = (ColorPickerPreference) findPreference(PULSE_COLOR_MODE_CHOOSER_KEY); + mLavaSpeedPref = findPreference(PULSE_COLOR_MODE_LAVA_SPEED_KEY); + mColorModePref.setOnPreferenceChangeListener(this); + int colorMode = Settings.System.getIntForUser(getContentResolver(), + Settings.System.PULSE_COLOR_TYPE, COLOR_TYPE_ACCENT, UserHandle.USER_CURRENT); + mColorPickerPref.setDefaultValue(CherishUtils.getThemeAccentColor(getContext())); + if (colorMode == COLOR_TYPE_ACCENT) { + mColorPickerPref.setNewPreviewColor(CherishUtils.getThemeAccentColor(getContext())); + } + updateColorPrefs(colorMode); + + mRenderMode = findPreference(PULSE_RENDER_MODE_KEY); + mRenderMode.setOnPreferenceChangeListener(this); + int renderMode = Settings.System.getIntForUser(getContentResolver(), + Settings.System.PULSE_RENDER_STYLE_URI, 0, UserHandle.USER_CURRENT); + updateRenderCategories(renderMode); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (preference.equals(mColorModePref)) { + updateColorPrefs(Integer.valueOf(String.valueOf(newValue))); + return true; + } else if (preference.equals(mRenderMode)) { + updateRenderCategories(Integer.valueOf(String.valueOf(newValue))); + return true; + } + return false; + } + + private void updateColorPrefs(int val) { + switch (val) { + case COLOR_TYPE_ACCENT: + mColorPickerPref.setEnabled(false); + mLavaSpeedPref.setEnabled(false); + break; + case COLOR_TYPE_USER: + mColorPickerPref.setEnabled(true); + mLavaSpeedPref.setEnabled(false); + break; + case COLOR_TYPE_LAVALAMP: + mColorPickerPref.setEnabled(false); + mLavaSpeedPref.setEnabled(true); + break; + } + } + + private void updateRenderCategories(int mode) { + PreferenceCategory fadingBarsCat = (PreferenceCategory) findPreference( + PULSE_RENDER_CATEGORY_FADING); + fadingBarsCat.setEnabled(mode == RENDER_STYLE_FADING_BARS); + PreferenceCategory solidBarsCat = (PreferenceCategory) findPreference( + PULSE_RENDER_CATEGORY_SOLID); + solidBarsCat.setEnabled(mode == RENDER_STYLE_SOLID_LINES); + } + + @Override + public int getMetricsCategory() { + return MetricsProto.MetricsEvent.CHERISH_SETTINGS; + } + + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex(Context context, + boolean enabled) { + final ArrayList result = new ArrayList<>(); + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.cherish_settings_pulse; + result.add(sir); + return result; + } + + @Override + public List getNonIndexableKeys(Context context) { + final List keys = super.getNonIndexableKeys(context); + return keys; + } + }; +}