aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZach Prezkuta <fermion@gmx.com>2015-08-09 17:05:25 -0600
committerZach Prezkuta <fermion@gmx.com>2015-08-14 20:28:03 -0600
commitc4b791a029bd70cdc611e537efcb8b03780703ae (patch)
treeae493f154cec7a3c6263532555777b18c0855f66 /src
parent4619501ac40f473170a0cff9023283c548df2b14 (diff)
downloadandroid_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')
-rw-r--r--src/com/cyanogenmod/lockclock/ClockWidgetService.java8
-rwxr-xr-xsrc/com/cyanogenmod/lockclock/misc/Constants.java6
-rw-r--r--src/com/cyanogenmod/lockclock/misc/Preferences.java12
-rw-r--r--src/com/cyanogenmod/lockclock/preference/BackgroundTransparency.java200
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
+ }
+ }
+}