diff options
author | Zach Prezkuta <fermion@gmx.com> | 2015-08-09 17:05:25 -0600 |
---|---|---|
committer | Zach Prezkuta <fermion@gmx.com> | 2015-08-14 20:28:03 -0600 |
commit | c4b791a029bd70cdc611e537efcb8b03780703ae (patch) | |
tree | ae493f154cec7a3c6263532555777b18c0855f66 /src | |
parent | 4619501ac40f473170a0cff9023283c548df2b14 (diff) | |
download | android_packages_apps_LockClock-c4b791a029bd70cdc611e537efcb8b03780703ae.tar.gz android_packages_apps_LockClock-c4b791a029bd70cdc611e537efcb8b03780703ae.tar.bz2 android_packages_apps_LockClock-c4b791a029bd70cdc611e537efcb8b03780703ae.zip |
Allow user to change background color/transparency for the widget,
for greater compatibility with various wallpapers
Use slider for background transparency adjustment
Change-Id: I7f1d00fd5df6ea52b127287fc17baf1477fbb9a3
Diffstat (limited to 'src')
4 files changed, 225 insertions, 1 deletions
diff --git a/src/com/cyanogenmod/lockclock/ClockWidgetService.java b/src/com/cyanogenmod/lockclock/ClockWidgetService.java index 8402194..d5f6635 100644 --- a/src/com/cyanogenmod/lockclock/ClockWidgetService.java +++ b/src/com/cyanogenmod/lockclock/ClockWidgetService.java @@ -183,6 +183,14 @@ public class ClockWidgetService extends IntentService { setClockSize(remoteViews, ratio); } + // Set the widget background color/transparency + int backColor = Preferences.clockBackgroundColor(this); + int backTrans = Preferences.clockBackgroundTransparency(this); + backColor = (backTrans << 24) | (backColor & 0xFFFFFF); + remoteViews.setInt(R.id.clock_panel, "setBackgroundColor", backColor); + remoteViews.setInt(R.id.calendar_panel, "setBackgroundColor", backColor); + remoteViews.setInt(R.id.weather_panel, "setBackgroundColor", backColor); + // Do the update mAppWidgetManager.updateAppWidget(id, remoteViews); } diff --git a/src/com/cyanogenmod/lockclock/misc/Constants.java b/src/com/cyanogenmod/lockclock/misc/Constants.java index 751de2d..a7113f2 100755 --- a/src/com/cyanogenmod/lockclock/misc/Constants.java +++ b/src/com/cyanogenmod/lockclock/misc/Constants.java @@ -31,6 +31,8 @@ public class Constants { public static final String CLOCK_SHOW_ALARM = "clock_show_alarm"; public static final String CLOCK_FONT_COLOR = "clock_font_color"; public static final String CLOCK_ALARM_FONT_COLOR = "clock_alarm_font_color"; + public static final String CLOCK_BACKGROUND_COLOR = "clock_background_color"; + public static final String CLOCK_BACKGROUND_TRANSPARENCY = "clock_background_transparency"; public static final String CLOCK_AM_PM_INDICATOR = "clock_am_pm_indicator"; public static final String SHOW_WEATHER = "show_weather"; @@ -91,7 +93,9 @@ public class Constants { public static final String DEFAULT_LIGHT_COLOR = "#ffffffff"; public static final String DEFAULT_DARK_COLOR = "#80ffffff"; - + public static final String DEFAULT_BACKGROUND_COLOR = "#00000000"; + public static final int DEFAULT_BACKGROUND_TRANSPARENCY = 0; + // Intent actions public static final String ACTION_SHOW_FORECAST = "com.cyanogenmod.lockclock.action.SHOW_FORECAST"; diff --git a/src/com/cyanogenmod/lockclock/misc/Preferences.java b/src/com/cyanogenmod/lockclock/misc/Preferences.java index 01e1d45..941e761 100644 --- a/src/com/cyanogenmod/lockclock/misc/Preferences.java +++ b/src/com/cyanogenmod/lockclock/misc/Preferences.java @@ -81,6 +81,18 @@ public class Preferences { return color; } + public static int clockBackgroundColor(Context context) { + int color = Color.parseColor(getPrefs(context).getString(Constants.CLOCK_BACKGROUND_COLOR, + Constants.DEFAULT_BACKGROUND_COLOR)); + return color; + } + + public static int clockBackgroundTransparency(Context context) { + int trans = getPrefs(context).getInt(Constants.CLOCK_BACKGROUND_TRANSPARENCY, + Constants.DEFAULT_BACKGROUND_TRANSPARENCY); + return trans; + } + public static int weatherFontColor(Context context) { int color = Color.parseColor(getPrefs(context).getString(Constants.WEATHER_FONT_COLOR, Constants.DEFAULT_LIGHT_COLOR)); diff --git a/src/com/cyanogenmod/lockclock/preference/BackgroundTransparency.java b/src/com/cyanogenmod/lockclock/preference/BackgroundTransparency.java new file mode 100644 index 0000000..88eebe9 --- /dev/null +++ b/src/com/cyanogenmod/lockclock/preference/BackgroundTransparency.java @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2015 The CyanogenMod 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.cyanogenmod.lockclock.preference; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.DialogInterface; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.UserHandle; +import android.preference.DialogPreference; +import android.provider.Settings; +import android.util.AttributeSet; +import android.view.View; +import android.widget.Button; +import android.widget.SeekBar; +import android.widget.TextView; + +import com.cyanogenmod.lockclock.ClockWidgetProvider; +import com.cyanogenmod.lockclock.R; +import com.cyanogenmod.lockclock.misc.Constants; + +/** + * Preference for selection of background transparency for the clock widget + */ +public class BackgroundTransparency extends DialogPreference { + private static final String TAG = "BackgroundTransparency"; + + private final Context mContext; + + private TransparencySeekBar mBackgroundTransparency; + + private int mOriginalBackgroundTransparency; + + private final int mDefaultBackgroundTransparency; + + public BackgroundTransparency(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + + mDefaultBackgroundTransparency = Constants.DEFAULT_BACKGROUND_TRANSPARENCY; + setDialogLayoutResource(R.layout.background_transparency); + } + + @Override + protected void onBindDialogView(View view) { + super.onBindDialogView(view); + + SharedPreferences getPrefs = mContext.getSharedPreferences(Constants.PREF_NAME, Context.MODE_PRIVATE); + mOriginalBackgroundTransparency = getPrefs.getInt(Constants.CLOCK_BACKGROUND_TRANSPARENCY, + Constants.DEFAULT_BACKGROUND_TRANSPARENCY); + + SeekBar trans = (SeekBar) view.findViewById(R.id.background_transparency_seekbar); + mBackgroundTransparency = new TransparencySeekBar(trans); + + mBackgroundTransparency.setProgress(mOriginalBackgroundTransparency); + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + updateTransparency(positiveResult); + } + + @Override + protected Parcelable onSaveInstanceState() { + final Parcelable superState = super.onSaveInstanceState(); + if (getDialog() == null || !getDialog().isShowing()) { + return superState; + } + + // Save the dialog state + final SavedState myState = new SavedState(superState); + myState.originalBackgroundTransparency = mOriginalBackgroundTransparency; + myState.currentBackgroundTransparency = mBackgroundTransparency.getProgress(); + + // Restore the old state when the activity or dialog is being paused + updateTransparency(false); + + return myState; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) { + if (state == null || !state.getClass().equals(SavedState.class)) { + // Didn't save state for us in onSaveInstanceState + super.onRestoreInstanceState(state); + return; + } + + SavedState myState = (SavedState) state; + super.onRestoreInstanceState(myState.getSuperState()); + + mOriginalBackgroundTransparency = myState.originalBackgroundTransparency; + mBackgroundTransparency.setProgress(myState.currentBackgroundTransparency); + + updateTransparency(true); + } + + private static class SavedState extends BaseSavedState { + int originalBackgroundTransparency; + int currentBackgroundTransparency; + + public SavedState(Parcelable superState) { + super(superState); + } + + public SavedState(Parcel source) { + super(source); + originalBackgroundTransparency = source.readInt(); + currentBackgroundTransparency = source.readInt(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(originalBackgroundTransparency); + dest.writeInt(currentBackgroundTransparency); + } + + public static final Parcelable.Creator<SavedState> CREATOR = + new Parcelable.Creator<SavedState>() { + + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + private void updateTransparency(boolean accept) { + int trans = accept ? mBackgroundTransparency.getProgress() : mOriginalBackgroundTransparency; + callChangeListener(trans); + + SharedPreferences getPrefs = mContext.getSharedPreferences(Constants.PREF_NAME, Context.MODE_PRIVATE); + SharedPreferences.Editor edit = getPrefs.edit(); + edit.putInt(Constants.CLOCK_BACKGROUND_TRANSPARENCY, trans); + edit.apply(); + } + + private class TransparencySeekBar implements SeekBar.OnSeekBarChangeListener { + private final SeekBar mSeekBar; + + private static final int MIN = 0; + private static final int MAX = 255; + private static final int STEP = 5; + + public TransparencySeekBar(SeekBar seekBar) { + mSeekBar = seekBar; + + mSeekBar.setMax((MAX - MIN) / STEP); + mSeekBar.setOnSeekBarChangeListener(this); + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (fromUser) { + updateTransparency(true); + } + } + + public void setProgress(int progress) { + int p = Math.max(progress, MIN) - MIN; + mSeekBar.setProgress(Math.round((float) p / STEP)); + } + + public int getProgress() { + return mSeekBar.getProgress() * STEP + MIN; + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + // Do nothing here + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + // Do nothing here + } + } +} |