Skip to content

Commit

Permalink
Backports fixes from pro version
Browse files Browse the repository at this point in the history
  • Loading branch information
dshkil committed Mar 19, 2011
1 parent 90555e7 commit ba85a85
Show file tree
Hide file tree
Showing 7 changed files with 192 additions and 211 deletions.
9 changes: 5 additions & 4 deletions res/values/misc.xml
Expand Up @@ -11,16 +11,17 @@
<item name="fullyChargedStatusTextScaleX" format="integer" type="integer">100</item>
<item format="float" type="string" name="mutedTextScaleX">0.97</item>
<item format="float" type="string" name="unpluggedSinceTextScaleX">0.97</item>

<item type="dimen" format="dimension" name="mute_alerts_pad">25.0dip</item>

<declare-styleable name="SeekBarPreference">
<attr name="max" format="integer" />
<attr name="minValue" format="integer" />
<attr name="maxValue" format="integer" />
<attr name="valueFormat" format="string" />
<attr name="dialogMessage" format="string" />
<attr name="suffix" format="string" />
</declare-styleable>

<declare-styleable name="TimePickerPreference">
<declare-styleable name="SummaryFormat">
<attr name="summaryFormat" format="string" />
<attr name="summaryEmpty" format="string" />
</declare-styleable>
Expand Down
8 changes: 5 additions & 3 deletions res/xml/settings.xml
Expand Up @@ -22,14 +22,16 @@

<PreferenceCategory
android:title="@string/low_battery_options">
<org.damazio.notifier.SeekBarPreference
<com.shkil.preference.SeekBarPreference
android:key="low_battery_level"
android:title="@string/low_battery_level"
android:dialogTitle="@string/low_battery_level"
android:defaultValue="@integer/default_low_level"
app:valueFormat="%1$d%%"
app:dialogMessage="@string/low_battery_level_hint"
app:max="50"
app:suffix=" %"
app:summaryFormat="@string/low_battery_level_summary"
app:summaryEmpty="@string/low_battery_level_disabled"
app:maxValue="50"
/>
<ListPreference
android:key="alert_interval"
Expand Down
27 changes: 14 additions & 13 deletions src/com/shkil/battery/BatteryNotifierService.java
Expand Up @@ -186,9 +186,7 @@ public void onDestroy() {
Log.i(TAG, "onDestroy");
serviceStarted = false;
unregisterReceiver(batteryInfoReceiver);
if (insistTimerActive) {
stopInsist();
}
stopInsist();
settings.unregisterOnSharedPreferenceChangeListener(this);
hideNotification();
if (stopForegroundMethod == null) {
Expand All @@ -213,9 +211,7 @@ void updateValuesFromSettings(SharedPreferences settings, String key) {
if (Settings.LOW_CHARGE_SOUND_MODE.equals(key) || Settings.LOW_CHARGE_VIBRO_MODE.equals(key)) {
if (batteryState == STATE_LOW) {
if (Settings.isAlarmDisabled(Settings.LOW_CHARGE_SOUND_MODE, Settings.LOW_CHARGE_VIBRO_MODE, settings)) {
if (insistTimerActive) {
stopInsist();
}
stopInsist();
}
else if (!insistTimerActive) {
startInsist();
Expand Down Expand Up @@ -302,6 +298,9 @@ void startInsist() {
alarmManager.cancel(insistTimerPendingIntent);
}
insistTimerActive = true;
if (player != null) {
player.stop();
}
long firstTime = System.currentTimeMillis() + insistInterval;
if (mutedUntilTimeMillis > 0) {
firstTime = Math.max(firstTime, mutedUntilTimeMillis);
Expand All @@ -310,9 +309,11 @@ void startInsist() {
}

void stopInsist() {
insistTimerActive = false;
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(insistTimerPendingIntent);
if (insistTimerActive) {
insistTimerActive = false;
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(insistTimerPendingIntent);
}
if (player != null) {
player.stop();
}
Expand Down Expand Up @@ -413,9 +414,7 @@ void setBatteryState(int state, boolean settingsChanged) {
if (stateChanged) {
this.batteryState = state;
notification.when = System.currentTimeMillis();
if (insistTimerActive) {
stopInsist();
}
stopInsist();
}
notification.flags = DEFAULT_NOTIFICATION_FLAGS;
switch (state) {
Expand Down Expand Up @@ -462,7 +461,9 @@ void setBatteryState(int state, boolean settingsChanged) {
notification.flags |= Notification.FLAG_AUTO_CANCEL;
}
updateNotification();
if (notifyFullBattery && stateChanged && !Settings.isQuietHoursActive(settings, Settings.MUTE_FULL_CHARGE_ALERTS)) {
if (notifyFullBattery && stateChanged && System.currentTimeMillis() >= mutedUntilTimeMillis
&& !Settings.isQuietHoursActive(settings, Settings.MUTE_FULL_CHARGE_ALERTS))
{
alarm(Settings.FULL_CHARGE_SOUND_MODE, Settings.FULL_CHARGE_VIBRO_MODE, Settings.FULL_CHARGE_RINGTONE);
}
}
Expand Down
24 changes: 11 additions & 13 deletions src/com/shkil/battery/Settings.java
Expand Up @@ -119,19 +119,17 @@ public static boolean isQuietHoursActive(SharedPreferences settings, String mute

public static boolean isQuietHoursActive(SharedPreferences settings) {
if (settings.getBoolean(Settings.QUIET_HOURS_ENABLED, false)) {
int quietHoursStart = settings.getInt(Settings.QUIET_HOURS_START, -1);
if (quietHoursStart >= 0) {
int quietHoursEnd = settings.getInt(Settings.QUIET_HOURS_END, -1);
if (quietHoursEnd >= 0 && quietHoursStart != quietHoursEnd) {
long currentTimeInMillis = System.currentTimeMillis();
int timeZoneOffset = timeZone.getOffset(currentTimeInMillis);
int timeInMillis = (int) ((currentTimeInMillis + timeZoneOffset) % 86400000);
if (quietHoursEnd > quietHoursStart) {
return timeInMillis >= quietHoursStart && timeInMillis < quietHoursEnd;
}
else {
return timeInMillis >= quietHoursStart || timeInMillis < quietHoursEnd;
}
int quietHoursStart = settings.getInt(Settings.QUIET_HOURS_START, 0);
int quietHoursEnd = settings.getInt(Settings.QUIET_HOURS_END, 0);
if (quietHoursStart != quietHoursEnd) {
long currentTimeInMillis = System.currentTimeMillis();
int timeZoneOffset = timeZone.getOffset(currentTimeInMillis);
int timeInMillis = (int) ((currentTimeInMillis + timeZoneOffset) % 86400000);
if (quietHoursEnd > quietHoursStart) {
return timeInMillis >= quietHoursStart && timeInMillis < quietHoursEnd;
}
else {
return timeInMillis >= quietHoursStart || timeInMillis < quietHoursEnd;
}
}
}
Expand Down
146 changes: 146 additions & 0 deletions src/com/shkil/preference/SeekBarPreference.java
@@ -0,0 +1,146 @@
package com.shkil.preference;

import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

import com.shkil.battery.R;

public class SeekBarPreference extends DialogPreference implements OnSeekBarChangeListener {

private int currentValue = -1;
private final int minValue;
private final int maxValue;
private final String valueFormat;
private final String summaryFormat;
private final String summaryZero;
private final String dialogMessage;

private SeekBar seekBar;
private TextView valueText;

private static final int DEFAULT_MIN_VALUE = 0;
private static final int DEFAULT_MAX_VALUE = 100;

public SeekBarPreference(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.dialogPreferenceStyle);
}

public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setPersistent(true);
TypedArray seekBarAttrs = context.obtainStyledAttributes(attrs, R.styleable.SeekBarPreference);
TypedArray summaryAttrs = context.obtainStyledAttributes(attrs, R.styleable.SummaryFormat);
valueFormat = seekBarAttrs.getString(R.styleable.SeekBarPreference_valueFormat);
summaryFormat = summaryAttrs.getString(R.styleable.SummaryFormat_summaryFormat);
String summaryZero = summaryAttrs.getString(R.styleable.SummaryFormat_summaryEmpty);
this.summaryZero = summaryZero != null ? summaryZero : "0";
minValue = seekBarAttrs.getInt(R.styleable.SeekBarPreference_minValue, DEFAULT_MIN_VALUE);
maxValue = seekBarAttrs.getInt(R.styleable.SeekBarPreference_maxValue, DEFAULT_MAX_VALUE);
dialogMessage = seekBarAttrs.getString(R.styleable.SeekBarPreference_dialogMessage);
setValue(minValue);
}

@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInt(index, 0);
}

@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
int value;
if (restorePersistedValue) {
value = getPersistedInt(minValue);
}
else if (defaultValue != null) {
value = (Integer) defaultValue;
}
else {
value = minValue;
}
setValue(value);
}

public void setValue(int value) {
if (value < minValue) {
value = minValue;
}
else if (value > maxValue) {
value = maxValue;
}
if (currentValue != value) {
currentValue = value;
if (seekBar != null) {
seekBar.setProgress(value - minValue);
}
if (valueText != null) {
updateValue(value);
}
updateSummary(value);
}
}

private void updateSummary(int value) {
setSummary(value == 0 ? summaryZero : (summaryFormat != null ? String.format(summaryFormat, value) : String.valueOf(value)));
}

private void updateValue(int value) {
valueText.setText(valueFormat != null ? String.format(valueFormat, value) : String.valueOf(value));
}

@Override
protected View onCreateDialogView() {
LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialogView = layoutInflater.inflate(R.layout.seek_bar_preference, null);
SeekBar seekBar = (SeekBar) dialogView.findViewById(R.id.seek_bar);
valueText = (TextView) dialogView.findViewById(R.id.seekbar_value_text);
this.seekBar = seekBar;
seekBar.setMax(maxValue - minValue);
seekBar.setProgress(currentValue - minValue);
TextView dialogMessageView = (TextView) dialogView.findViewById(R.id.dialog_message);
if (dialogMessage != null) {
dialogMessageView.setText(dialogMessage);
}
else {
dialogMessageView.setVisibility(View.GONE);
}
updateValue(currentValue);
seekBar.setOnSeekBarChangeListener(this);
return dialogView;
}

@Override
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
int value = seekBar.getProgress() + minValue;
this.currentValue = value;
if (callChangeListener(value)) {
if (isPersistent()) {
persistInt(value);
}
updateSummary(value);
notifyChanged();
}
}
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
updateValue(progress + minValue);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}

}
20 changes: 11 additions & 9 deletions src/com/shkil/preference/TimePickerPreference.java
Expand Up @@ -16,8 +16,8 @@ public class TimePickerPreference extends DialogPreference {
private TimePicker timePicker;
private int currentHours = -1;
private int currentMinutes = -1;
private String summaryFormat;
private String summaryEmpty;
private final String summaryFormat;
private final String summaryEmpty;

public TimePickerPreference(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.dialogPreferenceStyle);
Expand All @@ -26,9 +26,9 @@ public TimePickerPreference(Context context, AttributeSet attrs) {
public TimePickerPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setPersistent(true);
TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.TimePickerPreference);
summaryFormat = styledAttrs.getString(R.styleable.TimePickerPreference_summaryFormat);
summaryEmpty = styledAttrs.getString(R.styleable.TimePickerPreference_summaryEmpty);
TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.SummaryFormat);
summaryFormat = styledAttrs.getString(R.styleable.SummaryFormat_summaryFormat);
summaryEmpty = styledAttrs.getString(R.styleable.SummaryFormat_summaryEmpty);
setSummary(summaryEmpty);
}

Expand Down Expand Up @@ -112,11 +112,13 @@ protected void onDialogClosed(boolean positiveResult) {
currentHours = timePicker.getCurrentHour();
currentMinutes = timePicker.getCurrentMinute();
int timeInMillis = currentHours * 3600000 + currentMinutes * 60000;
if (isPersistent()) {
persistInt(timeInMillis);
if (callChangeListener(timeInMillis)) {
if (isPersistent()) {
persistInt(timeInMillis);
}
updateSummary(timeInMillis);
notifyChanged();
}
updateSummary(timeInMillis);
callChangeListener(timeInMillis);
}
}

Expand Down

0 comments on commit ba85a85

Please sign in to comment.