Skip to content

Commit fec240f

Browse files
committed
QuietHours: reworked Range serialization logic
This allows better flexibility for implementing additional features. Requires re-configuring as old ranges are incompatible and thus lost due to this change.
1 parent e80ec1c commit fec240f

File tree

4 files changed

+74
-49
lines changed

4 files changed

+74
-49
lines changed

src/com/ceco/oreo/gravitybox/ledcontrol/QuietHours.java

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -51,42 +51,62 @@ public static final class Range {
5151

5252
private Range() { }
5353

54-
public static Range parse(String value) {
55-
if (value == null || value.isEmpty())
56-
return createDefault();
57-
58-
String[] buf = value.split("\\|");
59-
Range r = new Range();
60-
r.id = buf[0];
61-
r.days = new HashSet<String>(Arrays.asList(buf[1].split(",")));
62-
r.startTime = Integer.valueOf(buf[2]);
63-
r.endTime = Integer.valueOf(buf[3]);
54+
public static Range parse(Set<String> dataSet) {
55+
Range r = createDefault();
56+
if (dataSet == null || dataSet.isEmpty())
57+
return r;
58+
59+
for (String val : dataSet) {
60+
String[] data = val.split(":", 2);
61+
if (data[0].equals("id")) {
62+
r.id = data[1];
63+
} else if (data[0].equals("days")) {
64+
r.days = new HashSet<String>(Arrays.asList(data[1].split(",")));
65+
} else if (data[0].equals("startTime")) {
66+
r.startTime = Integer.valueOf(data[1]);
67+
} else if (data[0].equals("endTime")) {
68+
r.endTime = Integer.valueOf(data[1]);
69+
}
70+
}
6471
return r;
6572
}
6673

6774
public static Range createDefault() {
6875
Range r = new Range();
69-
r.id = UUID.randomUUID().toString();
76+
r.id = String.format("qhr-%s", UUID.randomUUID().toString());
7077
r.days = new HashSet<String>(Arrays.asList("1","2","3","4","5","6","7"));
7178
r.startTime = 1380;
7279
r.endTime = 360;
7380
return r;
7481
}
7582

76-
public String getValue() {
77-
String buf = id + "|";
83+
public Set<String> getValue() {
84+
Set<String> dataSet = new HashSet<String>();
85+
dataSet.add("id:" + id);
86+
String buf = "";
7887
for (String day : days) {
79-
if (!buf.endsWith("|")) buf += ",";
88+
if (!buf.isEmpty()) buf += ",";
8089
buf += day;
8190
}
82-
buf += "|" + String.valueOf(startTime);
83-
buf += "|" + String.valueOf(endTime);
84-
return buf;
91+
dataSet.add("days:" + buf);
92+
dataSet.add("startTime:" + String.valueOf(startTime));
93+
dataSet.add("endTime:" + String.valueOf(endTime));
94+
return dataSet;
8595
}
8696

8797
public boolean endsNextDay() {
8898
return (endTime < startTime);
8999
}
100+
101+
public static ArrayList<String> getIdList(SharedPreferences prefs) {
102+
ArrayList<String> list = new ArrayList<>();
103+
for (String key : prefs.getAll().keySet()) {
104+
if (key.startsWith("qhr-")) {
105+
list.add(key);
106+
}
107+
}
108+
return list;
109+
}
90110
}
91111

92112
private static final List<String> NOTIF_TEXT_FIELDS = new ArrayList<>(Arrays.asList(
@@ -103,7 +123,7 @@ public boolean endsNextDay() {
103123
public boolean interactive;
104124
public boolean muteSystemVibe;
105125
public Set<String> ringerWhitelist;
106-
private Set<String> ranges;
126+
private Set<Range> ranges;
107127

108128
public QuietHours(Bundle prefs) {
109129
uncLocked = prefs.getBoolean(QuietHoursActivity.EXTRA_QH_LOCKED);
@@ -116,7 +136,12 @@ public QuietHours(Bundle prefs) {
116136
interactive = prefs.getBoolean(QuietHoursActivity.EXTRA_QH_INTERACTIVE);
117137
muteSystemVibe = prefs.getBoolean(QuietHoursActivity.EXTRA_QH_MUTE_SYSTEM_VIBE);
118138
ringerWhitelist = new HashSet<String>(prefs.getStringArrayList(QuietHoursActivity.EXTRA_QH_RINGER_WHITELIST));
119-
ranges = new HashSet<String>(prefs.getStringArrayList(QuietHoursActivity.EXTRA_QH_RANGES));
139+
ranges = new HashSet<Range>();
140+
for (String key : prefs.keySet()) {
141+
if (key.startsWith("qhr-")) {
142+
ranges.add(Range.parse(new HashSet<>(prefs.getStringArrayList(key))));
143+
}
144+
}
120145
}
121146

122147
public QuietHours(SharedPreferences prefs) {
@@ -132,8 +157,12 @@ public QuietHours(SharedPreferences prefs) {
132157
muteSystemVibe = prefs.getBoolean(QuietHoursActivity.PREF_KEY_MUTE_SYSTEM_VIBE, false);
133158
ringerWhitelist = prefs.getStringSet(QuietHoursActivity.PREF_KEY_QH_RINGER_WHITELIST,
134159
new HashSet<String>());
135-
ranges = prefs.getStringSet(QuietHoursActivity.PREF_KEY_QH_RANGES,
136-
new HashSet<String>());
160+
ranges = new HashSet<Range>();
161+
for (String key : prefs.getAll().keySet()) {
162+
if (key.startsWith("qhr-")) {
163+
ranges.add(Range.parse(new HashSet<>(prefs.getStringSet(key, null))));
164+
}
165+
}
137166
}
138167

139168
public boolean quietHoursActive(LedSettings ls, Notification n, boolean userPresent) {
@@ -181,8 +210,7 @@ public boolean quietHoursActive() {
181210
int curDay = c.get(Calendar.DAY_OF_WEEK);
182211
int prevDay = (curDay == 1 ? 7 : curDay - 1);
183212

184-
for (String rangeValue : ranges) {
185-
Range range = Range.parse(rangeValue);
213+
for (Range range : ranges) {
186214
boolean active = false;
187215
if (range.endsNextDay()) {
188216
active = (curMin >= range.startTime && range.days.contains(String.valueOf(curDay)) ||

src/com/ceco/oreo/gravitybox/ledcontrol/QuietHoursActivity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ public class QuietHoursActivity extends GravityBoxActivity {
6767
public static final String EXTRA_QH_INTERACTIVE = "qhInteractive";
6868
public static final String EXTRA_QH_MUTE_SYSTEM_VIBE = "qhMuteSystemVibe";
6969
public static final String EXTRA_QH_RINGER_WHITELIST = "qhRingerWhitelist";
70-
public static final String EXTRA_QH_RANGES = "qhRanges";
7170

7271
protected static void broadcastSettings(Context ctx, SharedPreferences prefs) {
7372
Intent intent = new Intent(ACTION_QUIET_HOURS_CHANGED);
@@ -83,8 +82,9 @@ protected static void broadcastSettings(Context ctx, SharedPreferences prefs) {
8382
intent.putExtra(EXTRA_QH_MUTE_SYSTEM_VIBE, prefs.getBoolean(QuietHoursActivity.PREF_KEY_MUTE_SYSTEM_VIBE, false));
8483
intent.putStringArrayListExtra(EXTRA_QH_RINGER_WHITELIST, new ArrayList<String>(
8584
prefs.getStringSet(PREF_KEY_QH_RINGER_WHITELIST, new HashSet<String>())));
86-
intent.putStringArrayListExtra(EXTRA_QH_RANGES, new ArrayList<String>(prefs.getStringSet(
87-
PREF_KEY_QH_RANGES, new HashSet<String>())));
85+
for (String rangeId : QuietHours.Range.getIdList(prefs)) {
86+
intent.putStringArrayListExtra(rangeId, new ArrayList<>(prefs.getStringSet(rangeId, null)));
87+
}
8888
ctx.sendBroadcast(intent);
8989
}
9090

src/com/ceco/oreo/gravitybox/ledcontrol/QuietHoursRangeActivity.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package com.ceco.oreo.gravitybox.ledcontrol;
1616

1717
import java.text.DateFormatSymbols;
18+
import java.util.ArrayList;
19+
import java.util.HashSet;
1820
import java.util.Locale;
1921
import java.util.Set;
2022
import java.util.TreeSet;
@@ -48,10 +50,10 @@ public class QuietHoursRangeActivity extends GravityBoxActivity {
4850
protected void onCreate(Bundle savedInstanceState) {
4951
super.onCreate(savedInstanceState);
5052

51-
String rangeValue = null;
53+
Set<String> rangeValue = null;
5254
final Intent intent = getIntent();
53-
if (intent != null) {
54-
rangeValue = intent.getStringExtra(EXTRA_QH_RANGE);
55+
if (intent != null && intent.hasExtra(EXTRA_QH_RANGE)) {
56+
rangeValue = new HashSet<>(intent.getStringArrayListExtra(EXTRA_QH_RANGE));
5557
}
5658

5759
setContentView(R.layout.quiet_hours_range_activity);
@@ -70,7 +72,8 @@ public void onClick(View v) {
7072
@Override
7173
public void onClick(View v) {
7274
Intent intent = new Intent();
73-
intent.putExtra(EXTRA_QH_RANGE, getFragment().getRange().getValue());
75+
intent.putStringArrayListExtra(EXTRA_QH_RANGE, new ArrayList<String>(
76+
getFragment().getRange().getValue()));
7477
setResult(Activity.RESULT_OK, intent);
7578
finish();
7679
}

src/com/ceco/oreo/gravitybox/ledcontrol/QuietHoursRangeListActivity.java

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,24 @@ public void onClick(View v) {
6363

6464
mPrefs = SettingsManager.getInstance(this).getQuietHoursPrefs();
6565
mList = new ArrayList<>();
66-
Set<String> data = mPrefs.getStringSet(QuietHoursActivity.PREF_KEY_QH_RANGES,
67-
new HashSet<String>());
68-
for (String value : data) {
69-
mList.add(new QuietHoursRangeListItem(this, QuietHours.Range.parse(value)));
66+
for (String id : QuietHours.Range.getIdList(mPrefs)) {
67+
mList.add(new QuietHoursRangeListItem(this, QuietHours.Range.parse(
68+
mPrefs.getStringSet(id, null))));
7069
}
7170
mListView.setAdapter(new QuietHoursRangeListAdapter(this, mList, this));
7271
}
7372

7473
@Override
7574
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
7675
if (resultCode == Activity.RESULT_OK) {
77-
saveRange(data.getStringExtra(QuietHoursRangeActivity.EXTRA_QH_RANGE));
76+
saveRange(new HashSet<>(data.getStringArrayListExtra(
77+
QuietHoursRangeActivity.EXTRA_QH_RANGE)));
7878
}
7979

8080
super.onActivityResult(requestCode, resultCode, data);
8181
}
8282

83-
private void saveRange(String value) {
83+
private void saveRange(Set<String> value) {
8484
QuietHours.Range range = QuietHours.Range.parse(value);
8585
boolean isNew = true;
8686
for (QuietHoursRangeListItem item : mList) {
@@ -95,25 +95,18 @@ private void saveRange(String value) {
9595
if (isNew) {
9696
mList.add(new QuietHoursRangeListItem(this, range));
9797
}
98-
commitChanges();
99-
((QuietHoursRangeListAdapter)mListView.getAdapter()).notifyDataSetChanged();
100-
}
101-
102-
private void commitChanges() {
103-
Set<String> newSet = new HashSet<String>();
104-
for (QuietHoursRangeListItem item : mList) {
105-
newSet.add(item.getRange().getValue());
106-
}
107-
mPrefs.edit().putStringSet(QuietHoursActivity.PREF_KEY_QH_RANGES, newSet).commit();
98+
mPrefs.edit().putStringSet(range.id, range.getValue()).commit();
10899
QuietHoursActivity.broadcastSettings(this, mPrefs);
100+
((QuietHoursRangeListAdapter)mListView.getAdapter()).notifyDataSetChanged();
109101
}
110102

111103
@Override
112104
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
113105
QuietHoursRangeListItem item = (QuietHoursRangeListItem) mListView.getItemAtPosition(position);
114106
Intent intent = new Intent(QuietHoursRangeListActivity.this,
115107
QuietHoursRangeActivity.class);
116-
intent.putExtra(QuietHoursRangeActivity.EXTRA_QH_RANGE, item.getRange().getValue());
108+
intent.putStringArrayListExtra(QuietHoursRangeActivity.EXTRA_QH_RANGE,
109+
new ArrayList<>(item.getRange().getValue()));
117110
startActivityForResult(intent, 0);
118111
}
119112

@@ -122,9 +115,10 @@ public void onItemDeleted(QuietHoursRangeListItem item) {
122115
for (int i = mList.size()-1; i >= 0; i--) {
123116
if (mList.get(i).getRange().id.equals(item.getRange().id)) {
124117
mList.remove(i);
118+
mPrefs.edit().remove(item.getRange().id).commit();
119+
QuietHoursActivity.broadcastSettings(this, mPrefs);
120+
((QuietHoursRangeListAdapter)mListView.getAdapter()).notifyDataSetChanged();
125121
}
126122
}
127-
commitChanges();
128-
((QuietHoursRangeListAdapter)mListView.getAdapter()).notifyDataSetChanged();
129123
}
130124
}

0 commit comments

Comments
 (0)