Cherish:Pulse initial checkin for Android 12 [2/2]

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Hưng Phan <phandinhhungvp2001@gmail.com>
This commit is contained in:
Pranav Vashi
2020-12-27 17:29:21 +05:30
committed by Hưng Phan
parent f547af0ea1
commit 524eb9b536
7 changed files with 526 additions and 1 deletions

View File

@@ -538,6 +538,29 @@
<item>@string/qs_tile_animation_duration_super_fast</item>
</string-array>
<!-- Pulse music visualizer -->
<string-array name="pulse_render_mode_entries">
<item>@string/pulse_render_mode_fading_bars</item>
<item>@string/pulse_render_mode_solid_lines</item>
</string-array>
<string-array name="pulse_render_mode_values" translatable="false">
<item>0</item>
<item>1</item>
</string-array>
<string-array name="pulse_color_mode_entries">
<item>@string/pulse_color_accent</item>
<item>@string/pulse_color_custom</item>
<item>@string/pulse_color_lava_lamp</item>
</string-array>
<string-array name="pulse_color_mode_values" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="qs_tile_animation_duration_values" translatable="false">
<item>2500</item>
<item>2000</item>

View File

@@ -767,4 +767,36 @@
<string name="custom_theme_clear">Clear</string>
<string name="custom_theme_vivid">Vivid(Monet)</string>
<!-- Pulse music visualizer -->
<string name="pulse_help_policy_notice_title">About Pulse</string>
<string name="pulse_help_policy_notice_summary">Pulse is a brilliant audio graphic equalizer when music plays on the device</string>
<string name="pulse_settings">Pulse</string>
<string name="pulse_settings_summary">Audio graphic equalizer for navigation bar and lockscreen</string>
<string name="show_navbar_pulse_title">Navbar Pulse</string>
<string name="show_navbar_pulse_summary">Audio graphic equalizer on the navigation bar</string>
<string name="show_lockscreen_pulse_title">Lockscreen Pulse</string>
<string name="show_lockscreen_pulse_summary">Audio graphic equalizer on the lockscreen</string>
<string name="show_ambient_pulse_title">Ambient Pulse</string>
<string name="show_ambient_pulse_summary">Audio graphic equalizer on the ambient screen</string>
<string name="pulse_render_mode_title">Render mode</string>
<string name="pulse_render_mode_fading_bars">Fading blocks</string>
<string name="pulse_render_mode_solid_lines">Solid lines</string>
<string name="pulse_legacy_mode_advanced_category">Fading blocks mode settings</string>
<string name="pulse_custom_fudge_factor">Sanity level</string>
<string name="pulse_lavalamp_speed_title">Lava lamp speed</string>
<string name="pulse_solid_units_count">Solid lines count</string>
<string name="pulse_solid_units_opacity">Solid lines opacity</string>
<string name="pulse_solid_dimen_category">Solid lines mode settings</string>
<string name="pulse_color_mode_title">Color</string>
<string name="pulse_color_accent">Accent</string>
<string name="pulse_color_custom">Custom</string>
<string name="pulse_color_lava_lamp">Lava lamp</string>
<string name="pulse_color_user_title">Choose color</string>
<string name="pulse_smoothing_enabled_title">Turn on smoothing</string>
<string name="pulse_smoothing_enabled_summary">Each bar is animated more smoothly</string>
<string name="pulse_custom_dimen">Bar width</string>
<string name="pulse_custom_div">Bar spacing</string>
<string name="pulse_filled_block_size">Block size</string>
<string name="pulse_empty_block_size">Block spacing</string>
</resources>

View File

@@ -113,6 +113,13 @@
android:dependency="lockscreen_media_metadata"
android:defaultValue="0" />
<!-- Pulse music visualizer -->
<Preference
android:key="pulse_settings"
android:title="@string/pulse_settings"
android:summary="@string/pulse_settings_summary"
android:fragment="com.cherish.settings.fragments.sound.PulseSettings" />
<com.cherish.settings.preferences.SystemSettingSeekBarPreference
android:key="ls_media_filter_blur_radius"
android:title="@string/lockscreen_albumart_filter_blur_radius_title"

156
res/xml/pulse_settings.xml Normal file
View File

@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2020-22 The CherishOS 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.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:title="@string/pulse_settings" >
<SwitchPreference
android:key="navbar_pulse_enabled"
android:title="@string/show_navbar_pulse_title"
android:summary="@string/show_navbar_pulse_summary"/>
<SwitchPreference
android:key="lockscreen_pulse_enabled"
android:title="@string/show_lockscreen_pulse_title"
android:summary="@string/show_lockscreen_pulse_summary"/>
<SwitchPreference
android:key="ambient_pulse_enabled"
android:title="@string/show_ambient_pulse_title"
android:summary="@string/show_ambient_pulse_summary"/>
<com.cherish.settings.preferences.SecureSettingListPreference
android:key="pulse_render_style"
android:title="@string/pulse_render_mode_title"
android:entries="@array/pulse_render_mode_entries"
android:entryValues="@array/pulse_render_mode_values"
android:defaultValue="1"/>
<com.cherish.settings.preferences.SecureSettingSwitchPreference
android:key="pulse_smoothing_enabled"
android:title="@string/pulse_smoothing_enabled_title"
android:summary="@string/pulse_smoothing_enabled_summary"
android:defaultValue="false"/>
<com.cherish.settings.preferences.SecureSettingListPreference
android:key="pulse_color_mode"
android:title="@string/pulse_color_mode_title"
android:entries="@array/pulse_color_mode_entries"
android:entryValues="@array/pulse_color_mode_values"
android:defaultValue="2"/>
<net.margaritov.preference.colorpicker.SecureSettingColorPickerPreference
android:key="pulse_color_user"
android:title="@string/pulse_color_user_title"
android:defaultValue="0x92FFFFFF"/>
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_lavalamp_speed"
android:title="@string/pulse_lavalamp_speed_title"
android:defaultValue="10000"
android:max="30000"
settings:min="200"
settings:interval="200"
settings:units="@string/unit_milliseconds"/>
<PreferenceCategory
android:key="pulse_fading_bars_category"
android:title="@string/pulse_legacy_mode_advanced_category">
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_custom_dimen"
android:title="@string/pulse_custom_dimen"
android:defaultValue="14"
android:max="30"
settings:min="1"
settings:units="@string/unit_pixels"
android:dependency="pulse_fading_bars_category"/>
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_custom_div"
android:title="@string/pulse_custom_div"
android:defaultValue="16"
android:max="44"
settings:min="2"
settings:interval="2"
settings:units="@string/unit_pixels"
android:dependency="pulse_fading_bars_category"/>
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_filled_block_size"
android:title="@string/pulse_filled_block_size"
android:defaultValue="4"
android:max="8"
settings:min="4"
settings:units="@string/unit_pixels"
android:dependency="pulse_fading_bars_category"/>
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_empty_block_size"
android:title="@string/pulse_empty_block_size"
android:defaultValue="1"
android:max="4"
settings:min="0"
settings:units="@string/unit_pixels"
android:dependency="pulse_fading_bars_category"/>
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_custom_fudge_factor"
android:title="@string/pulse_custom_fudge_factor"
android:defaultValue="4"
android:max="6"
settings:min="2"
android:dependency="pulse_fading_bars_category"/>
</PreferenceCategory>
<PreferenceCategory
android:key="pulse_2"
android:title="@string/pulse_solid_dimen_category">
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_solid_units_opacity"
android:title="@string/pulse_solid_units_opacity"
android:defaultValue="200"
android:max="255"
settings:min="0"
android:dependency="pulse_2"/>
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_solid_units_count"
android:title="@string/pulse_solid_units_count"
android:defaultValue="32"
android:max="128"
settings:min="16"
settings:interval="16"
android:dependency="pulse_2"/>
<com.cherish.settings.preferences.SecureSettingSeekBarPreference
android:key="pulse_solid_fudge_factor"
android:title="@string/pulse_custom_fudge_factor"
android:defaultValue="4"
android:max="6"
settings:min="2"
android:dependency="pulse_2"/>
</PreferenceCategory>
<com.android.settingslib.widget.FooterPreference
android:key="pulse_settings_footer"
android:selectable="false"
settings:searchable="false" />
</PreferenceScreen>

View File

@@ -0,0 +1,221 @@
/*
* Copyright (C) 2016-2021 crDroid Android 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.sound;
import android.content.Context;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.SwitchPreference;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import net.margaritov.preference.colorpicker.ColorPickerPreference;
public class PulseSettings extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener {
private static final String TAG = PulseSettings.class.getSimpleName();
private static final String NAVBAR_PULSE_ENABLED_KEY = "navbar_pulse_enabled";
private static final String LOCKSCREEN_PULSE_ENABLED_KEY = "lockscreen_pulse_enabled";
private static final String AMBIENT_PULSE_ENABLED_KEY = "ambient_pulse_enabled";
private static final String PULSE_SMOOTHING_KEY = "pulse_smoothing_enabled";
private static final String PULSE_COLOR_MODE_KEY = "pulse_color_mode";
private static final String PULSE_COLOR_MODE_CHOOSER_KEY = "pulse_color_user";
private static final String PULSE_COLOR_MODE_LAVA_SPEED_KEY = "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 = "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 static final int COLOR_TYPE_AUTO = 3;
private static final String PULSE_SETTINGS_FOOTER = "pulse_settings_footer";
private SwitchPreference mNavbarPulse;
private SwitchPreference mLockscreenPulse;
private SwitchPreference mAmbientPulse;
private SwitchPreference mPulseSmoothing;
private Preference mRenderMode;
private ListPreference mColorModePref;
private ColorPickerPreference mColorPickerPref;
private Preference mLavaSpeedPref;
private Preference mFooterPref;
private PreferenceCategory mFadingBarsCat;
private PreferenceCategory mSolidBarsCat;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pulse_settings);
ContentResolver resolver = getContext().getContentResolver();
mNavbarPulse = (SwitchPreference) findPreference(NAVBAR_PULSE_ENABLED_KEY);
boolean navbarPulse = Settings.Secure.getIntForUser(resolver,
Settings.Secure.NAVBAR_PULSE_ENABLED, 0, UserHandle.USER_CURRENT) != 0;
mNavbarPulse.setChecked(navbarPulse);
mNavbarPulse.setOnPreferenceChangeListener(this);
mLockscreenPulse = (SwitchPreference) findPreference(LOCKSCREEN_PULSE_ENABLED_KEY);
boolean lockscreenPulse = Settings.Secure.getIntForUser(resolver,
Settings.Secure.LOCKSCREEN_PULSE_ENABLED, 1, UserHandle.USER_CURRENT) != 0;
mLockscreenPulse.setChecked(lockscreenPulse);
mLockscreenPulse.setOnPreferenceChangeListener(this);
mAmbientPulse = (SwitchPreference) findPreference(AMBIENT_PULSE_ENABLED_KEY);
boolean ambientPulse = Settings.Secure.getIntForUser(resolver,
Settings.Secure.AMBIENT_PULSE_ENABLED, 0, UserHandle.USER_CURRENT) != 0;
mAmbientPulse.setChecked(ambientPulse);
mAmbientPulse.setOnPreferenceChangeListener(this);
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);
mRenderMode = findPreference(PULSE_RENDER_MODE_KEY);
mRenderMode.setOnPreferenceChangeListener(this);
mFadingBarsCat = (PreferenceCategory) findPreference(
PULSE_RENDER_CATEGORY_FADING);
mSolidBarsCat = (PreferenceCategory) findPreference(
PULSE_RENDER_CATEGORY_SOLID);
mPulseSmoothing = (SwitchPreference) findPreference(PULSE_SMOOTHING_KEY);
mFooterPref = findPreference(PULSE_SETTINGS_FOOTER);
mFooterPref.setTitle(R.string.pulse_help_policy_notice_summary);
updateAllPrefs();
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
ContentResolver resolver = getContext().getContentResolver();
if (preference == mNavbarPulse) {
boolean val = (Boolean) newValue;
Settings.Secure.putIntForUser(resolver,
Settings.Secure.NAVBAR_PULSE_ENABLED, val ? 1 : 0, UserHandle.USER_CURRENT);
updateAllPrefs();
return true;
} else if (preference == mLockscreenPulse) {
boolean val = (Boolean) newValue;
Settings.Secure.putIntForUser(resolver,
Settings.Secure.LOCKSCREEN_PULSE_ENABLED, val ? 1 : 0, UserHandle.USER_CURRENT);
updateAllPrefs();
return true;
} else if (preference == mAmbientPulse) {
boolean val = (Boolean) newValue;
Settings.Secure.putIntForUser(resolver,
Settings.Secure.AMBIENT_PULSE_ENABLED, val ? 1 : 0, UserHandle.USER_CURRENT);
updateAllPrefs();
return true;
} else if (preference == mColorModePref) {
updateColorPrefs(Integer.valueOf(String.valueOf(newValue)));
return true;
} else if (preference == mRenderMode) {
updateRenderCategories(Integer.valueOf(String.valueOf(newValue)));
return true;
}
return false;
}
private void updateAllPrefs() {
ContentResolver resolver = getContext().getContentResolver();
boolean navbarPulse = Settings.Secure.getIntForUser(resolver,
Settings.Secure.NAVBAR_PULSE_ENABLED, 0, UserHandle.USER_CURRENT) != 0;
boolean lockscreenPulse = Settings.Secure.getIntForUser(resolver,
Settings.Secure.LOCKSCREEN_PULSE_ENABLED, 1, UserHandle.USER_CURRENT) != 0;
boolean ambientPulse = Settings.Secure.getIntForUser(resolver,
Settings.Secure.AMBIENT_PULSE_ENABLED, 0, UserHandle.USER_CURRENT) != 0;
mPulseSmoothing.setEnabled(navbarPulse || lockscreenPulse || ambientPulse);
mColorModePref.setEnabled(navbarPulse || lockscreenPulse || ambientPulse);
if (navbarPulse || lockscreenPulse) {
int colorMode = Settings.Secure.getIntForUser(resolver,
Settings.Secure.PULSE_COLOR_MODE, COLOR_TYPE_LAVALAMP, UserHandle.USER_CURRENT);
updateColorPrefs(colorMode);
} else {
mColorPickerPref.setEnabled(false);
mLavaSpeedPref.setEnabled(false);
}
mRenderMode.setEnabled(navbarPulse || lockscreenPulse || ambientPulse);
if (navbarPulse || lockscreenPulse || ambientPulse) {
int renderMode = Settings.Secure.getIntForUser(resolver,
Settings.Secure.PULSE_RENDER_STYLE, RENDER_STYLE_SOLID_LINES, UserHandle.USER_CURRENT);
updateRenderCategories(renderMode);
} else {
mFadingBarsCat.setEnabled(false);
mSolidBarsCat.setEnabled(false);
}
mFooterPref.setEnabled(navbarPulse || lockscreenPulse);
}
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;
case COLOR_TYPE_AUTO:
mColorPickerPref.setEnabled(false);
mLavaSpeedPref.setEnabled(false);
break;
}
}
private void updateRenderCategories(int mode) {
mFadingBarsCat.setEnabled(mode == RENDER_STYLE_FADING_BARS);
mSolidBarsCat.setEnabled(mode == RENDER_STYLE_SOLID_LINES);
}
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.CHERISH_SETTINGS;
}
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright (C) 2020 crDroid Android 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 net.margaritov.preference.colorpicker;
import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.provider.Settings;
import com.cherish.settings.preferences.SecureSettingsStore;
import net.margaritov.preference.colorpicker.ColorPickerPreference;
public class SecureSettingColorPickerPreference extends ColorPickerPreference {
public SecureSettingColorPickerPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
}
public SecureSettingColorPickerPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
}
public SecureSettingColorPickerPreference(Context context) {
super(context, null);
setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
}
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright (C) 2020 crDroid Android 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 net.margaritov.preference.colorpicker;
import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.provider.Settings;
import com.cherish.settings.preferences.SystemSettingsStore;
import net.margaritov.preference.colorpicker.ColorPickerPreference;
public class SystemSettingColorPickerPreference extends ColorPickerPreference {
public SystemSettingColorPickerPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
}
public SystemSettingColorPickerPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
}
public SystemSettingColorPickerPreference(Context context) {
super(context, null);
setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
}
}