package com.cherish.settings.fragments; import com.android.internal.logging.nano.MetricsProto; import android.os.Bundle; import android.content.ContentResolver; import com.android.settings.R; import android.content.res.Resources; import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import android.provider.Settings; import androidx.preference.ListPreference; import com.android.settings.SettingsPreferenceFragment; import com.cherish.settings.preferences.SystemSettingMasterSwitchPreference; import com.cherish.settings.preferences.SystemSettingSeekBarPreference; import com.cherish.settings.preferences.CustomSeekBarPreference; import com.cherish.settings.preferences.SystemSettingListPreference; import com.cherish.settings.preferences.SystemSettingListPreference; import com.cherish.settings.preferences.SystemSettingSwitchPreference; import net.margaritov.preference.colorpicker.ColorPickerPreference; import com.android.internal.util.cherish.CherishUtils; public class NotificationSettings extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener{ private static final String NOTIFICATION_PULSE_COLOR = "ambient_notification_light_color"; private static final String AMBIENT_LIGHT_DURATION = "ambient_light_duration"; private static final String AMBIENT_LIGHT_REPEAT_COUNT = "ambient_light_repeat_count"; private static final String PULSE_COLOR_MODE_PREF = "ambient_notification_light_color_mode"; private static final String INCALL_VIB_OPTIONS = "incall_vib_options"; private Preference mChargingLeds; private ColorPickerPreference mEdgeLightColorPreference; private SystemSettingSeekBarPreference mEdgeLightDurationPreference; private SystemSettingSeekBarPreference mEdgeLightRepeatCountPreference; private ListPreference mColorMode; private SystemSettingListPreference mAmbientLightLayout; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.cherish_settings_notifications); PreferenceScreen prefScreen = getPreferenceScreen(); ContentResolver resolver = getActivity().getContentResolver(); mChargingLeds = (Preference) findPreference("charging_light"); if (mChargingLeds != null && !getResources().getBoolean( com.android.internal.R.bool.config_intrusiveBatteryLed)) { prefScreen.removePreference(mChargingLeds); } PreferenceCategory incallVibCategory = (PreferenceCategory) findPreference(INCALL_VIB_OPTIONS); if (!CherishUtils.isVoiceCapable(getActivity())) { prefScreen.removePreference(incallVibCategory); } mEdgeLightRepeatCountPreference = (SystemSettingSeekBarPreference) findPreference(AMBIENT_LIGHT_REPEAT_COUNT); mEdgeLightRepeatCountPreference.setOnPreferenceChangeListener(this); int rCount = Settings.System.getInt(getContentResolver(), Settings.System.AMBIENT_LIGHT_REPEAT_COUNT, 0); mEdgeLightRepeatCountPreference.setValue(rCount); mEdgeLightDurationPreference = (SystemSettingSeekBarPreference) findPreference(AMBIENT_LIGHT_DURATION); mEdgeLightDurationPreference.setOnPreferenceChangeListener(this); int duration = Settings.System.getInt(getContentResolver(), Settings.System.AMBIENT_LIGHT_DURATION, 2); mEdgeLightDurationPreference.setValue(duration); mColorMode = (ListPreference) findPreference(PULSE_COLOR_MODE_PREF); mAmbientLightLayout = (SystemSettingListPreference) findPreference("pulse_ambient_light_layout"); int value; boolean colorModeAutomatic = Settings.System.getInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_COLOR_AUTOMATIC, 0) != 0; boolean colorModeAccent = Settings.System.getInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_ACCENT, 0) != 0; if (colorModeAutomatic) { value = 0; } else if (colorModeAccent) { value = 1; } else { value = 2; } mColorMode.setValue(Integer.toString(value)); mColorMode.setSummary(mColorMode.getEntry()); mColorMode.setOnPreferenceChangeListener(this); mEdgeLightColorPreference = (ColorPickerPreference) findPreference(NOTIFICATION_PULSE_COLOR); int edgeLightColor = Settings.System.getInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_COLOR, 0xFF3980FF); mEdgeLightColorPreference.setNewPreviewColor(edgeLightColor); mEdgeLightColorPreference.setAlphaSliderEnabled(false); mAmbientLightLayout.setEnabled(true); String edgeLightColorHex = String.format("#%08x", (0xFF3980FF & edgeLightColor)); if (edgeLightColorHex.equals("#ff3980ff")) { mEdgeLightColorPreference.setSummary(R.string.color_default); } else { mEdgeLightColorPreference.setSummary(edgeLightColorHex); } mEdgeLightColorPreference.setOnPreferenceChangeListener(this); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == mEdgeLightColorPreference) { String hex = ColorPickerPreference.convertToARGB( Integer.valueOf(String.valueOf(newValue))); if (hex.equals("#ff3980ff")) { preference.setSummary(R.string.color_default); } else { preference.setSummary(hex); } int intHex = ColorPickerPreference.convertToColorInt(hex); Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_COLOR, intHex); return true; } else if (preference == mEdgeLightRepeatCountPreference) { int value = (Integer) newValue; Settings.System.putInt(getContentResolver(), Settings.System.AMBIENT_LIGHT_REPEAT_COUNT, value); return true; } else if (preference == mEdgeLightDurationPreference) { int value = (Integer) newValue; Settings.System.putInt(getContentResolver(), Settings.System.AMBIENT_LIGHT_DURATION, value); return true; } else if (preference == mColorMode) { int value = Integer.valueOf((String) newValue); int index = mColorMode.findIndexOfValue((String) newValue); mColorMode.setSummary(mColorMode.getEntries()[index]); if (value == 0) { Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_COLOR_AUTOMATIC, 1); Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_ACCENT, 0); } else if (value == 1) { Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_COLOR_AUTOMATIC, 0); Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_ACCENT, 1); } else { Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_COLOR_AUTOMATIC, 0); Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_PULSE_ACCENT, 0); } return true; } return false; } @Override public int getMetricsCategory() { return MetricsProto.MetricsEvent.CHERISH_SETTINGS; } }