/* * Copyright (C) 2016 The Android Open Kang 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.aokp.romcontrol.fragments.statusbar; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.Fragment; import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.net.ConnectivityManager; import android.os.Bundle; import android.os.UserHandle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; import android.provider.Settings; import android.text.format.DateFormat; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import cyanogenmod.providers.CMSettings; import java.util.Date; import com.aokp.romcontrol.R; import net.margaritov.preference.colorpicker.ColorPickerPreference; public class StatusbarSettingsFragment extends Fragment { public StatusbarSettingsFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_statusbar_settings_main, container, false); Resources res = getResources(); super.onCreate(savedInstanceState); getChildFragmentManager().beginTransaction() .replace(R.id.statusbar_settings_main, new StatusBarSettingsPreferenceFragment()) .commit(); return v; } public static class StatusBarSettingsPreferenceFragment extends PreferenceFragment implements OnPreferenceChangeListener { public StatusBarSettingsPreferenceFragment() { } private static final String TAG = "StatusBar"; private ContentResolver mContentResolver; private static final String STATUS_BAR_DATE = "status_bar_date"; private static final String STATUS_BAR_DATE_STYLE = "status_bar_date_style"; private static final String STATUS_BAR_DATE_FORMAT = "status_bar_date_format"; private static final String STATUS_BAR_CLOCK_STYLE = "status_bar_clock"; private static final String STATUS_BAR_AM_PM = "status_bar_am_pm"; private static final String STATUS_BAR_BATTERY_STYLE = "status_bar_battery_style"; private static final String STATUS_BAR_SHOW_BATTERY_PERCENT = "status_bar_show_battery_percent"; private static final String STATUS_BAR_CHARGE_COLOR = "status_bar_charge_color"; private static final String PREF_CLOCK_DATE_POSITION = "clock_date_position"; private static final String SMS_BREATH = "sms_breath"; private static final String MISSED_CALL_BREATH = "missed_call_breath"; private static final String VOICEMAIL_BREATH = "voicemail_breath"; public static final int CLOCK_DATE_STYLE_LOWERCASE = 1; public static final int CLOCK_DATE_STYLE_UPPERCASE = 2; private static final int CUSTOM_CLOCK_DATE_FORMAT_INDEX = 18; private static final int STATUS_BAR_BATTERY_STYLE_HIDDEN = 4; private static final int STATUS_BAR_BATTERY_STYLE_TEXT = 6; private static final String KEY_AOKP_LOGO_COLOR = "status_bar_aokp_logo_color"; private static final String KEY_AOKP_LOGO_STYLE = "status_bar_aokp_logo_style"; private ListPreference mStatusBarDate; private ListPreference mStatusBarDateStyle; private ListPreference mStatusBarDateFormat; private ListPreference mClockDatePosition; private ListPreference mStatusBarClock; private ListPreference mStatusBarAmPm; private ListPreference mStatusBarBattery; private ListPreference mStatusBarBatteryShowPercent; private SwitchPreference mSmsBreath; private SwitchPreference mMissedCallBreath; private SwitchPreference mVoicemailBreath; private ColorPickerPreference mAokpLogoColor; private ListPreference mAokpLogoStyle; private ColorPickerPreference mChargeColor; private boolean mCheckPreferences; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); createCustomView(); } private PreferenceScreen createCustomView() { mCheckPreferences = false; // Load the preferences from an XML resource addPreferencesFromResource(R.xml.fragment_statusbar_settings); PreferenceScreen prefSet = getPreferenceScreen(); final ContentResolver resolver = getActivity().getContentResolver(); PackageManager pm = getActivity().getPackageManager(); Resources systemUiResources; try { systemUiResources = pm.getResourcesForApplication("com.android.systemui"); } catch (Exception e) { Log.e(TAG, "can't access systemui resources",e); return null; } mStatusBarDate = (ListPreference) findPreference(STATUS_BAR_DATE); mStatusBarDateStyle = (ListPreference) findPreference(STATUS_BAR_DATE_STYLE); mStatusBarDateFormat = (ListPreference) findPreference(STATUS_BAR_DATE_FORMAT); int showDate = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_DATE, 0); mStatusBarDate.setValue(String.valueOf(showDate)); mStatusBarDate.setSummary(mStatusBarDate.getEntry()); mStatusBarDate.setOnPreferenceChangeListener(this); int dateStyle = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_DATE_STYLE, 0); mStatusBarDateStyle.setValue(String.valueOf(dateStyle)); mStatusBarDateStyle.setSummary(mStatusBarDateStyle.getEntry()); mStatusBarDateStyle.setOnPreferenceChangeListener(this); mStatusBarDateFormat.setOnPreferenceChangeListener(this); mStatusBarDateFormat.setSummary(mStatusBarDateFormat.getEntry()); if (mStatusBarDateFormat.getValue() == null) { mStatusBarDateFormat.setValue("EEE"); } parseClockDateFormats(); mStatusBarClock = (ListPreference) findPreference(STATUS_BAR_CLOCK_STYLE); mStatusBarAmPm = (ListPreference) findPreference(STATUS_BAR_AM_PM); mStatusBarBattery = (ListPreference) findPreference(STATUS_BAR_BATTERY_STYLE); mStatusBarBatteryShowPercent = (ListPreference) findPreference(STATUS_BAR_SHOW_BATTERY_PERCENT); int clockStyle = CMSettings.System.getInt(resolver, CMSettings.System.STATUS_BAR_CLOCK, 1); mStatusBarClock.setValue(String.valueOf(clockStyle)); mStatusBarClock.setSummary(mStatusBarClock.getEntry()); mStatusBarClock.setOnPreferenceChangeListener(this); if (DateFormat.is24HourFormat(getActivity())) { mStatusBarAmPm.setEnabled(false); mStatusBarAmPm.setSummary(R.string.status_bar_am_pm_info); } else { int statusBarAmPm = CMSettings.System.getInt(resolver, CMSettings.System.STATUS_BAR_AM_PM, 2); mStatusBarAmPm.setValue(String.valueOf(statusBarAmPm)); mStatusBarAmPm.setSummary(mStatusBarAmPm.getEntry()); mStatusBarAmPm.setOnPreferenceChangeListener(this); } mClockDatePosition = (ListPreference) findPreference(PREF_CLOCK_DATE_POSITION); mClockDatePosition.setOnPreferenceChangeListener(this); mClockDatePosition.setValue(Integer.toString(Settings.System.getInt(resolver, Settings.System.STATUSBAR_CLOCK_DATE_POSITION, 0))); mClockDatePosition.setSummary(mClockDatePosition.getEntry()); int batteryStyle = CMSettings.System.getInt(resolver, CMSettings.System.STATUS_BAR_BATTERY_STYLE, 0); mStatusBarBattery.setValue(String.valueOf(batteryStyle)); mStatusBarBattery.setSummary(mStatusBarBattery.getEntry()); mStatusBarBattery.setOnPreferenceChangeListener(this); int batteryShowPercent = CMSettings.System.getInt(resolver, CMSettings.System.STATUS_BAR_SHOW_BATTERY_PERCENT, 0); mStatusBarBatteryShowPercent.setValue(String.valueOf(batteryShowPercent)); mStatusBarBatteryShowPercent.setSummary(mStatusBarBatteryShowPercent.getEntry()); enableStatusBarBatteryDependents(batteryStyle); mStatusBarBatteryShowPercent.setOnPreferenceChangeListener(this); // Aokp logo color & Style mAokpLogoColor = (ColorPickerPreference) prefSet.findPreference(KEY_AOKP_LOGO_COLOR); mAokpLogoColor.setOnPreferenceChangeListener(this); int intColor = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_AOKP_LOGO_COLOR, 0xffffffff); String hexColor = String.format("#%08x", (0xffffffff & intColor)); mAokpLogoColor.setSummary(hexColor); mAokpLogoColor.setNewPreviewColor(intColor); mAokpLogoStyle = (ListPreference) findPreference(KEY_AOKP_LOGO_STYLE); int AokpLogoStyle = Settings.System.getIntForUser(getContentResolver(), Settings.System.STATUS_BAR_AOKP_LOGO_STYLE, 0, UserHandle.USER_CURRENT); mAokpLogoStyle.setValue(String.valueOf(AokpLogoStyle)); mAokpLogoStyle.setSummary(mAokpLogoStyle.getEntry()); mAokpLogoStyle.setOnPreferenceChangeListener(this); // Breathing Notifications mSmsBreath = (SwitchPreference) findPreference(SMS_BREATH); mMissedCallBreath = (SwitchPreference) findPreference(MISSED_CALL_BREATH); mVoicemailBreath = (SwitchPreference) findPreference(VOICEMAIL_BREATH); ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)) { mSmsBreath.setChecked(Settings.System.getInt(resolver, Settings.System.KEY_SMS_BREATH, 0) == 1); mSmsBreath.setOnPreferenceChangeListener(this); mMissedCallBreath.setChecked(Settings.System.getInt(resolver, Settings.System.KEY_MISSED_CALL_BREATH, 0) == 1); mMissedCallBreath.setOnPreferenceChangeListener(this); mVoicemailBreath.setChecked(Settings.System.getInt(resolver, Settings.System.KEY_VOICEMAIL_BREATH, 0) == 1); mVoicemailBreath.setOnPreferenceChangeListener(this); } else { prefSet.removePreference(mSmsBreath); prefSet.removePreference(mMissedCallBreath); prefSet.removePreference(mVoicemailBreath); } int chargeColor = Settings.Secure.getInt(resolver, Settings.Secure.STATUS_BAR_CHARGE_COLOR, Color.WHITE); mChargeColor = (ColorPickerPreference) findPreference("status_bar_charge_color"); mChargeColor.setNewPreviewColor(chargeColor); mChargeColor.setOnPreferenceChangeListener(this); return prefSet; } @Override public void onResume() { super.onResume(); // Adjust clock position for RTL if necessary Configuration config = getResources().getConfiguration(); if (config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { mStatusBarClock.setEntries(getActivity().getResources().getStringArray( R.array.status_bar_clock_style_entries_rtl)); mStatusBarClock.setSummary(mStatusBarClock.getEntry()); } } @Override public void onPause() { super.onPause(); } protected ContentResolver getContentResolver() { Context context = getActivity(); if (context != null) { mContentResolver = context.getContentResolver(); } return mContentResolver; } public boolean onPreferenceChange(Preference preference, Object newValue) { ContentResolver resolver = getActivity().getContentResolver(); AlertDialog dialog; if (preference == mStatusBarClock) { int clockStyle = Integer.parseInt((String) newValue); int index = mStatusBarClock.findIndexOfValue((String) newValue); CMSettings.System.putInt( resolver, CMSettings.System.STATUS_BAR_CLOCK, clockStyle); mStatusBarClock.setSummary(mStatusBarClock.getEntries()[index]); return true; } else if (preference == mStatusBarAmPm) { int statusBarAmPm = Integer.valueOf((String) newValue); int index = mStatusBarAmPm.findIndexOfValue((String) newValue); CMSettings.System.putInt( resolver, CMSettings.System.STATUS_BAR_AM_PM, statusBarAmPm); mStatusBarAmPm.setSummary(mStatusBarAmPm.getEntries()[index]); return true; } else if (preference == mStatusBarBattery) { int batteryStyle = Integer.valueOf((String) newValue); int index = mStatusBarBattery.findIndexOfValue((String) newValue); CMSettings.System.putInt( resolver, CMSettings.System.STATUS_BAR_BATTERY_STYLE, batteryStyle); mStatusBarBattery.setSummary(mStatusBarBattery.getEntries()[index]); enableStatusBarBatteryDependents(batteryStyle); return true; } else if (preference == mStatusBarBatteryShowPercent) { int batteryShowPercent = Integer.valueOf((String) newValue); int index = mStatusBarBatteryShowPercent.findIndexOfValue((String) newValue); CMSettings.System.putInt( resolver, CMSettings.System.STATUS_BAR_SHOW_BATTERY_PERCENT, batteryShowPercent); mStatusBarBatteryShowPercent.setSummary( mStatusBarBatteryShowPercent.getEntries()[index]); return true; } else if (preference == mStatusBarDate) { int statusBarDate = Integer.valueOf((String) newValue); int index = mStatusBarDate.findIndexOfValue((String) newValue); Settings.System.putInt( resolver, STATUS_BAR_DATE, statusBarDate); mStatusBarDate.setSummary(mStatusBarDate.getEntries()[index]); return true; } else if (preference == mStatusBarDateStyle) { int statusBarDateStyle = Integer.parseInt((String) newValue); int index = mStatusBarDateStyle.findIndexOfValue((String) newValue); Settings.System.putInt( resolver, STATUS_BAR_DATE_STYLE, statusBarDateStyle); mStatusBarDateStyle.setSummary(mStatusBarDateStyle.getEntries()[index]); return true; } else if (preference == mStatusBarDateFormat) { int index = mStatusBarDateFormat.findIndexOfValue((String) newValue); if (index == CUSTOM_CLOCK_DATE_FORMAT_INDEX) { AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); alert.setTitle(R.string.status_bar_date_string_edittext_title); alert.setMessage(R.string.status_bar_date_string_edittext_summary); final EditText input = new EditText(getActivity()); String oldText = Settings.System.getString( getActivity().getContentResolver(), Settings.System.STATUS_BAR_DATE_FORMAT); if (oldText != null) { input.setText(oldText); } alert.setView(input); alert.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int whichButton) { String value = input.getText().toString(); if (value.equals("")) { return; } Settings.System.putString(getActivity().getContentResolver(), Settings.System.STATUS_BAR_DATE_FORMAT, value); return; } }); alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int which) { return; } }); dialog = alert.create(); dialog.show(); } else { if ((String) newValue != null) { Settings.System.putString(getActivity().getContentResolver(), Settings.System.STATUS_BAR_DATE_FORMAT, (String) newValue); } } return true; } else if (preference == mClockDatePosition) { int val = Integer.parseInt((String) newValue); int index = mClockDatePosition.findIndexOfValue((String) newValue); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_POSITION, val); mClockDatePosition.setSummary(mClockDatePosition.getEntries()[index]); parseClockDateFormats(); return true; } else if (preference == mAokpLogoColor) { String hex = ColorPickerPreference.convertToARGB( Integer.valueOf(String.valueOf(newValue))); preference.setSummary(hex); int intHex = ColorPickerPreference.convertToColorInt(hex); Settings.System.putInt(resolver, Settings.System.STATUS_BAR_AOKP_LOGO_COLOR, intHex); return true; } else if (preference == mAokpLogoStyle) { int AokpLogoStyle = Integer.valueOf((String) newValue); int index = mAokpLogoStyle.findIndexOfValue((String) newValue); Settings.System.putIntForUser( resolver, Settings.System.STATUS_BAR_AOKP_LOGO_STYLE, AokpLogoStyle, UserHandle.USER_CURRENT); mAokpLogoStyle.setSummary( mAokpLogoStyle.getEntries()[index]); return true; } else if (preference == mSmsBreath) { boolean value = (Boolean) newValue; Settings.System.putInt(resolver, Settings.System.KEY_SMS_BREATH, value ? 1 : 0); return true; } else if (preference == mMissedCallBreath) { boolean value = (Boolean) newValue; Settings.System.putInt(resolver, Settings.System.KEY_MISSED_CALL_BREATH, value ? 1 : 0); return true; } else if (preference == mVoicemailBreath) { boolean value = (Boolean) newValue; Settings.System.putInt(resolver, Settings.System.KEY_VOICEMAIL_BREATH, value ? 1 : 0); return true; } else if (preference.equals(mChargeColor)) { int color = ((Integer) newValue).intValue(); Settings.Secure.putInt(resolver, Settings.Secure.STATUS_BAR_CHARGE_COLOR, color); return true; } return false; } private void enableStatusBarBatteryDependents(int batteryIconStyle) { if (batteryIconStyle == STATUS_BAR_BATTERY_STYLE_HIDDEN || batteryIconStyle == STATUS_BAR_BATTERY_STYLE_TEXT) { mStatusBarBatteryShowPercent.setEnabled(false); } else { mStatusBarBatteryShowPercent.setEnabled(true); } } private void enableStatusBarClockDependents() { int clockStyle = CMSettings.System.getInt(getActivity() .getContentResolver(), CMSettings.System.STATUS_BAR_CLOCK, 1); if (clockStyle == 0) { mStatusBarDate.setEnabled(false); mStatusBarDateStyle.setEnabled(false); mStatusBarDateFormat.setEnabled(false); } else { mStatusBarDate.setEnabled(true); mStatusBarDateStyle.setEnabled(true); mStatusBarDateFormat.setEnabled(true); } } private void parseClockDateFormats() { // Parse and repopulate mClockDateFormats's entries based on current date. String[] dateEntries = getResources().getStringArray(R.array.status_bar_date_format_entries_values); CharSequence parsedDateEntries[]; parsedDateEntries = new String[dateEntries.length]; Date now = new Date(); int lastEntry = dateEntries.length - 1; int dateFormat = Settings.System.getInt(getActivity() .getContentResolver(), Settings.System.STATUS_BAR_DATE_STYLE, 0); for (int i = 0; i < dateEntries.length; i++) { if (i == lastEntry) { parsedDateEntries[i] = dateEntries[i]; } else { String newDate; CharSequence dateString = DateFormat.format(dateEntries[i], now); if (dateFormat == CLOCK_DATE_STYLE_LOWERCASE) { newDate = dateString.toString().toLowerCase(); } else if (dateFormat == CLOCK_DATE_STYLE_UPPERCASE) { newDate = dateString.toString().toUpperCase(); } else { newDate = dateString.toString(); } parsedDateEntries[i] = newDate; } } mStatusBarDateFormat.setEntries(parsedDateEntries); } } }