Skip to content

Commit 5ea6a60

Browse files
committed
QuietHours: implemented per-range led/vibe/system sound settings
Each time range can specify its own independent settings for led/vibe/system sound behavior which apply automatically when given range is currently active during QH Auto mode. For manual mode, default settings specified at the main QH screen apply.
1 parent fec240f commit 5ea6a60

File tree

5 files changed

+162
-10
lines changed

5 files changed

+162
-10
lines changed

res/xml/quiet_hours_range_settings.xml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,31 @@
3131
android:defaultValue="360"
3232
android:persistent="false" />
3333

34+
<CheckBoxPreference
35+
android:key="pref_lc_qh_range_mute_led"
36+
android:title="@string/pref_lc_qh_mute_led_title"
37+
android:defaultValue="false"
38+
android:persistent="false" />
39+
40+
<CheckBoxPreference
41+
android:key="pref_lc_qh_range_mute_vibe"
42+
android:title="@string/pref_lc_qh_mute_vibe_title"
43+
android:summary="@string/pref_lc_qh_mute_vibe_summary"
44+
android:defaultValue="true"
45+
android:persistent="false" />
46+
47+
<CheckBoxPreference
48+
android:key="pref_lc_qh_range_mute_system_vibe"
49+
android:title="@string/pref_lc_qh_mute_system_vibe_title"
50+
android:summary="@string/pref_lc_qh_mute_system_vibe_summary"
51+
android:defaultValue="false"
52+
android:persistent="false" />
53+
54+
<MultiSelectListPreference
55+
android:key="pref_lc_qh_range_mute_system_sounds"
56+
android:title="@string/pref_lc_qh_mute_system_sounds_title"
57+
android:entries="@array/system_sound_entries"
58+
android:entryValues="@array/system_sound_values"
59+
android:defaultValue="@array/empty_array" />
60+
3461
</PreferenceScreen>

src/com/ceco/oreo/gravitybox/ModLedControl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -309,9 +309,9 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
309309
}
310310

311311
final boolean qhActive = mQuietHours.quietHoursActive(ls, n, userPresent);
312-
final boolean qhActiveIncludingLed = qhActive && mQuietHours.muteLED;
312+
final boolean qhActiveIncludingLed = qhActive && mQuietHours.shouldMuteLed();
313313
final boolean qhActiveIncludingVibe = qhActive && (
314-
(mQuietHours.mode != QuietHours.Mode.WEAR && mQuietHours.muteVibe) ||
314+
(mQuietHours.mode != QuietHours.Mode.WEAR && mQuietHours.shouldMuteVibe()) ||
315315
(mQuietHours.mode == QuietHours.Mode.WEAR && userPresent));
316316
final boolean qhActiveIncludingActiveScreen = qhActive && !mUncActiveScreenIgnoreQh;
317317
if (DEBUG) log("qhActive=" + qhActive + "; qhActiveIncludingLed=" + qhActiveIncludingLed +
@@ -653,7 +653,7 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable
653653
private static XC_MethodHook startVibrationHook = new XC_MethodHook() {
654654
@Override
655655
protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
656-
if (mQuietHours.quietHoursActive() && (mQuietHours.muteSystemVibe ||
656+
if (mQuietHours.quietHoursActive() && (mQuietHours.shouldMuteSystemVibe() ||
657657
mQuietHours.mode == QuietHours.Mode.WEAR)) {
658658
if (DEBUG) log("startVibrationLocked: system level vibration suppressed");
659659
param.setResult(null);

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

Lines changed: 74 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public static final class Range {
4848
public Set<String> days;
4949
public int startTime;
5050
public int endTime;
51+
public boolean muteLED;
52+
public boolean muteVibe;
53+
public boolean muteSystemVibe;
54+
public Set<String> muteSystemSounds;
5155

5256
private Range() { }
5357

@@ -66,6 +70,14 @@ public static Range parse(Set<String> dataSet) {
6670
r.startTime = Integer.valueOf(data[1]);
6771
} else if (data[0].equals("endTime")) {
6872
r.endTime = Integer.valueOf(data[1]);
73+
} else if (data[0].equals("muteLED")) {
74+
r.muteLED = Boolean.valueOf(data[1]);
75+
} else if (data[0].equals("muteVibe")) {
76+
r.muteVibe = Boolean.valueOf(data[1]);
77+
} else if (data[0].equals("muteSystemVibe")) {
78+
r.muteSystemVibe = Boolean.valueOf(data[1]);
79+
} else if (data[0].equals("muteSystemSounds")) {
80+
r.muteSystemSounds = new HashSet<String>(Arrays.asList(data[1].split(",")));
6981
}
7082
}
7183
return r;
@@ -77,6 +89,10 @@ public static Range createDefault() {
7789
r.days = new HashSet<String>(Arrays.asList("1","2","3","4","5","6","7"));
7890
r.startTime = 1380;
7991
r.endTime = 360;
92+
r.muteLED = false;
93+
r.muteVibe = true;
94+
r.muteSystemVibe = false;
95+
r.muteSystemSounds = new HashSet<String>();
8096
return r;
8197
}
8298

@@ -91,6 +107,15 @@ public Set<String> getValue() {
91107
dataSet.add("days:" + buf);
92108
dataSet.add("startTime:" + String.valueOf(startTime));
93109
dataSet.add("endTime:" + String.valueOf(endTime));
110+
dataSet.add("muteLED:" + String.valueOf(muteLED));
111+
dataSet.add("muteVibe:" + String.valueOf(muteVibe));
112+
dataSet.add("muteSystemVibe:" + String.valueOf(muteSystemVibe));
113+
buf = "";
114+
for (String ss : muteSystemSounds) {
115+
if (!buf.isEmpty()) buf += ",";
116+
buf += ss;
117+
}
118+
dataSet.add("muteSystemSounds:" + buf);
94119
return dataSet;
95120
}
96121

@@ -115,13 +140,13 @@ public static ArrayList<String> getIdList(SharedPreferences prefs) {
115140

116141
public boolean uncLocked;
117142
public boolean enabled;
118-
public boolean muteLED;
119-
public boolean muteVibe;
120-
public Set<String> muteSystemSounds;
143+
private boolean muteLED;
144+
private boolean muteVibe;
145+
private Set<String> muteSystemSounds;
121146
public boolean showStatusbarIcon;
122147
public Mode mode;
123148
public boolean interactive;
124-
public boolean muteSystemVibe;
149+
private boolean muteSystemVibe;
125150
public Set<String> ringerWhitelist;
126151
private Set<Range> ranges;
127152

@@ -202,7 +227,13 @@ public boolean quietHoursActive() {
202227

203228
if (mode != Mode.AUTO) {
204229
return (mode == Mode.ON || mode == Mode.WEAR);
230+
} else {
231+
return (getActiveRange() != null);
205232
}
233+
}
234+
235+
public Range getActiveRange() {
236+
if (uncLocked || !enabled || mode != Mode.AUTO) return null;
206237

207238
Calendar c = new GregorianCalendar();
208239
c.setTimeInMillis(System.currentTimeMillis());
@@ -219,15 +250,51 @@ public boolean quietHoursActive() {
219250
active = range.days.contains(String.valueOf(curDay));
220251
}
221252
if (active && Utils.isTimeOfDayInRange(c.getTimeInMillis(), range.startTime, range.endTime)) {
222-
return true;
253+
return range;
254+
}
255+
}
256+
257+
return null;
258+
}
259+
260+
public boolean shouldMuteLed() {
261+
if (mode == Mode.AUTO) {
262+
Range r = getActiveRange();
263+
if (r != null) {
264+
return r.muteLED;
223265
}
224266
}
267+
return muteLED;
268+
}
225269

226-
return false;
270+
public boolean shouldMuteVibe() {
271+
if (mode == Mode.AUTO) {
272+
Range r = getActiveRange();
273+
if (r != null) {
274+
return r.muteVibe;
275+
}
276+
}
277+
return muteVibe;
278+
}
279+
280+
public boolean shouldMuteSystemVibe() {
281+
if (mode == Mode.AUTO) {
282+
Range r = getActiveRange();
283+
if (r != null) {
284+
return r.muteSystemVibe;
285+
}
286+
}
287+
return muteSystemVibe;
227288
}
228289

229290
public boolean isSystemSoundMuted(String systemSound) {
230-
return (muteSystemSounds.contains(systemSound) && quietHoursActive());
291+
if (mode == Mode.AUTO) {
292+
Range r = getActiveRange();
293+
if (r != null) {
294+
return r.muteSystemSounds.contains(systemSound);
295+
}
296+
}
297+
return muteSystemSounds.contains(systemSound) && quietHoursActive();
231298
}
232299

233300
private List<CharSequence> getNotificationTexts(Notification notification) {

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import java.text.DateFormatSymbols;
1818
import java.util.ArrayList;
19+
import java.util.Collection;
1920
import java.util.HashSet;
2021
import java.util.Locale;
2122
import java.util.Set;
@@ -29,6 +30,7 @@
2930
import android.app.Activity;
3031
import android.content.Intent;
3132
import android.os.Bundle;
33+
import android.preference.CheckBoxPreference;
3234
import android.preference.MultiSelectListPreference;
3335
import android.preference.Preference;
3436
import android.preference.Preference.OnPreferenceChangeListener;
@@ -41,6 +43,10 @@ public class QuietHoursRangeActivity extends GravityBoxActivity {
4143
public static final String PREF_QH_RANGE_DAYS = "pref_lc_qh_range_days";
4244
public static final String PREF_QH_RANGE_START = "pref_lc_qh_range_start";
4345
public static final String PREF_QH_RANGE_END = "pref_lc_qh_range_end";
46+
public static final String PREF_QH_RANGE_MUTE_LED = "pref_lc_qh_range_mute_led";
47+
public static final String PREF_QH_RANGE_MUTE_VIBE = "pref_lc_qh_range_mute_vibe";
48+
public static final String PREF_QH_RANGE_MUTE_SYSTEM_VIBE = "pref_lc_qh_range_mute_system_vibe";
49+
public static final String PREF_QH_RANGE_MUTE_SYSTEM_SOUNDS = "pref_lc_qh_range_mute_system_sounds";
4450
public static final String EXTRA_QH_RANGE = "qhRange";
4551

4652
private Button mBtnCancel;
@@ -93,6 +99,10 @@ public static class PrefsFragment extends PreferenceFragment
9399
private MultiSelectListPreference mPrefDays;
94100
private TimePreference mPrefStartTime;
95101
private TimePreference mPrefEndTime;
102+
private CheckBoxPreference mPrefMuteLed;
103+
private CheckBoxPreference mPrefMuteVibe;
104+
private CheckBoxPreference mPrefMuteSystemVibe;
105+
private MultiSelectListPreference mPrefMuteSystemSounds;
96106
private QuietHours.Range mRange;
97107

98108
public PrefsFragment() { }
@@ -122,13 +132,29 @@ public void onCreate(Bundle savedInstanceState) {
122132

123133
mPrefEndTime = (TimePreference) findPreference(PREF_QH_RANGE_END);
124134
mPrefEndTime.setOnPreferenceChangeListener(this);
135+
136+
mPrefMuteLed = (CheckBoxPreference) findPreference(PREF_QH_RANGE_MUTE_LED);
137+
mPrefMuteLed.setOnPreferenceChangeListener(this);
138+
139+
mPrefMuteVibe = (CheckBoxPreference) findPreference(PREF_QH_RANGE_MUTE_VIBE);
140+
mPrefMuteVibe.setOnPreferenceChangeListener(this);
141+
142+
mPrefMuteSystemVibe = (CheckBoxPreference) findPreference(PREF_QH_RANGE_MUTE_SYSTEM_VIBE);
143+
mPrefMuteSystemVibe.setOnPreferenceChangeListener(this);
144+
145+
mPrefMuteSystemSounds = (MultiSelectListPreference) findPreference(PREF_QH_RANGE_MUTE_SYSTEM_SOUNDS);
146+
mPrefMuteSystemSounds.setOnPreferenceChangeListener(this);
125147
}
126148

127149
void setRange(QuietHours.Range range) {
128150
mRange = range;
129151
mPrefDays.setValues(mRange.days);
130152
mPrefStartTime.setValue(mRange.startTime);
131153
mPrefEndTime.setValue(mRange.endTime);
154+
mPrefMuteLed.setChecked(mRange.muteLED);
155+
mPrefMuteVibe.setChecked(mRange.muteVibe || mRange.muteSystemVibe);
156+
mPrefMuteSystemVibe.setChecked(mRange.muteSystemVibe);
157+
mPrefMuteSystemSounds.setValues(mRange.muteSystemSounds);
132158
updateSummaries();
133159
}
134160

@@ -150,6 +176,22 @@ private void updateSummaries() {
150176

151177
mPrefEndTime.setSummarySuffix(mRange.endsNextDay() ?
152178
getString(R.string.next_day) : null);
179+
180+
CharSequence[] entries = mPrefMuteSystemSounds.getEntries();
181+
CharSequence[] entryValues = mPrefMuteSystemSounds.getEntryValues();
182+
summary = "";
183+
for (String value : mRange.muteSystemSounds) {
184+
for (int i=0; i<entryValues.length; i++) {
185+
if (entryValues[i].equals(value)) {
186+
if (!summary.isEmpty()) summary += ", ";
187+
summary += entries[i];
188+
break;
189+
}
190+
}
191+
}
192+
mPrefMuteSystemSounds.setSummary(summary);
193+
194+
mPrefMuteVibe.setEnabled(!mRange.muteSystemVibe);
153195
}
154196

155197
@SuppressWarnings("unchecked")
@@ -161,6 +203,18 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
161203
mRange.startTime = (int) newValue;
162204
} else if (preference == mPrefEndTime) {
163205
mRange.endTime = (int) newValue;
206+
} else if (preference == mPrefMuteLed) {
207+
mRange.muteLED = (boolean) newValue;
208+
} else if (preference == mPrefMuteVibe) {
209+
mRange.muteVibe = (boolean) newValue;
210+
} else if (preference == mPrefMuteSystemVibe) {
211+
mRange.muteSystemVibe = (boolean) newValue;
212+
if (mRange.muteSystemVibe) {
213+
mRange.muteVibe = true;
214+
mPrefMuteVibe.setChecked(true);
215+
}
216+
} else if (preference == mPrefMuteSystemSounds) {
217+
mRange.muteSystemSounds = new HashSet<String>((Collection<? extends String>) newValue);
164218
}
165219
updateSummaries();
166220
return true;

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ private void saveRange(Set<String> value) {
8888
item.getRange().days = range.days;
8989
item.getRange().startTime = range.startTime;
9090
item.getRange().endTime = range.endTime;
91+
item.getRange().muteLED = range.muteLED;
92+
item.getRange().muteVibe = range.muteVibe;
93+
item.getRange().muteSystemVibe = range.muteSystemVibe;
94+
item.getRange().muteSystemSounds = range.muteSystemSounds;
9195
isNew = false;
9296
break;
9397
}

0 commit comments

Comments
 (0)