Skip to content

Commit b366d9a

Browse files
committed
QuietHours: implemented per-range phone ringer whitelist
1 parent 0b4c010 commit b366d9a

8 files changed

+110
-24
lines changed

res/xml/led_control_quiet_hours_settings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@
5353
android:key="pref_lc_qh_ringer_whitelist"
5454
android:title="@string/pref_lc_qh_ringer_whitelist_title"
5555
android:summary="@string/pref_lc_qh_ringer_whitelist_summary"
56-
android:persistent="false" />
56+
android:persistent="false"
57+
android:dependency="pref_lc_qh_enabled" />
5758

5859
<CheckBoxPreference
5960
android:key="pref_lc_qh_statusbar_icon"

res/xml/quiet_hours_range_settings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,10 @@
5858
android:entryValues="@array/system_sound_values"
5959
android:defaultValue="@array/empty_array" />
6060

61+
<Preference
62+
android:key="pref_lc_qh_range_ringer_whitelist"
63+
android:title="@string/pref_lc_qh_ringer_whitelist_title"
64+
android:summary="@string/pref_lc_qh_ringer_whitelist_summary"
65+
android:persistent="false" />
66+
6167
</PreferenceScreen>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
153153
(Context)XposedHelpers.getObjectField(call, "mContext"),
154154
contactUri);
155155
if (DEBUG) log("Contact lookup key: " + key);
156-
if (key != null && mQuietHours.ringerWhitelist.contains(key)) {
156+
if (key != null && mQuietHours.getRingerWhitelist().contains(key)) {
157157
return;
158158
}
159159
}

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public static final class Range {
5252
public boolean muteVibe;
5353
public boolean muteSystemVibe;
5454
public Set<String> muteSystemSounds;
55+
public Set<String> ringerWhitelist;
5556

5657
private Range() { }
5758

@@ -78,6 +79,8 @@ public static Range parse(Set<String> dataSet) {
7879
r.muteSystemVibe = Boolean.valueOf(data[1]);
7980
} else if (data[0].equals("muteSystemSounds")) {
8081
r.muteSystemSounds = new HashSet<String>(Arrays.asList(data[1].split(",")));
82+
} else if (data[0].equals("ringerWhitelist")) {
83+
r.ringerWhitelist = new HashSet<String>(Arrays.asList(data[1].split(",")));
8184
}
8285
}
8386
return r;
@@ -93,6 +96,7 @@ public static Range createDefault() {
9396
r.muteVibe = true;
9497
r.muteSystemVibe = false;
9598
r.muteSystemSounds = new HashSet<String>();
99+
r.ringerWhitelist = new HashSet<String>();
96100
return r;
97101
}
98102

@@ -116,6 +120,12 @@ public Set<String> getValue() {
116120
buf += ss;
117121
}
118122
dataSet.add("muteSystemSounds:" + buf);
123+
buf = "";
124+
for (String ss : ringerWhitelist) {
125+
if (!buf.isEmpty()) buf += ",";
126+
buf += ss;
127+
}
128+
dataSet.add("ringerWhitelist:" + buf);
119129
return dataSet;
120130
}
121131

@@ -147,7 +157,7 @@ public static ArrayList<String> getIdList(SharedPreferences prefs) {
147157
public Mode mode;
148158
public boolean interactive;
149159
private boolean muteSystemVibe;
150-
public Set<String> ringerWhitelist;
160+
private Set<String> ringerWhitelist;
151161
private Set<Range> ranges;
152162

153163
public QuietHours(Bundle prefs) {
@@ -297,6 +307,16 @@ public boolean isSystemSoundMuted(String systemSound) {
297307
return muteSystemSounds.contains(systemSound) && quietHoursActive();
298308
}
299309

310+
public Set<String> getRingerWhitelist() {
311+
if (mode == Mode.AUTO) {
312+
Range r = getActiveRange();
313+
if (r != null) {
314+
return r.ringerWhitelist;
315+
}
316+
}
317+
return ringerWhitelist;
318+
}
319+
300320
private List<CharSequence> getNotificationTexts(Notification notification) {
301321
List<CharSequence> texts = new ArrayList<>();
302322

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,16 @@ private void updateSummaries() {
203203
mPrefRingerWhitelist.setEnabled(values != null && values.contains("ringer"));
204204
}
205205

206+
@Override
207+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
208+
if (data != null && data.hasExtra(EXTRA_QH_RINGER_WHITELIST)) {
209+
mPrefs.edit().putStringSet(QuietHoursActivity.PREF_KEY_QH_RINGER_WHITELIST,
210+
new HashSet<>(data.getStringArrayListExtra(EXTRA_QH_RINGER_WHITELIST))).commit();
211+
broadcastSettings(getActivity(), mPrefs);
212+
}
213+
super.onActivityResult(requestCode, resultCode, data);
214+
}
215+
206216
@Override
207217
public void onResume() {
208218
super.onResume();
@@ -235,7 +245,10 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
235245
Preference preference) {
236246
if (preference == mPrefRingerWhitelist) {
237247
Intent intent = new Intent(getActivity(), RingerWhitelistActivity.class);
238-
getActivity().startActivity(intent);
248+
intent.putStringArrayListExtra(EXTRA_QH_RINGER_WHITELIST,
249+
new ArrayList<>(mPrefs.getStringSet(PREF_KEY_QH_RINGER_WHITELIST,
250+
new HashSet<String>())));
251+
startActivityForResult(intent, 0);
239252
return true;
240253
} else if (preference == mPrefRanges) {
241254
Intent intent = new Intent(getActivity(), QuietHoursRangeListActivity.class);

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

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import com.ceco.oreo.gravitybox.GravityBoxActivity;
2626
import com.ceco.oreo.gravitybox.R;
27+
import com.ceco.oreo.gravitybox.SettingsManager;
2728
import com.ceco.oreo.gravitybox.Utils;
2829
import com.ceco.oreo.gravitybox.preference.TimePreference;
2930

@@ -36,6 +37,7 @@
3637
import android.preference.Preference.OnPreferenceChangeListener;
3738
import android.view.View;
3839
import android.preference.PreferenceFragment;
40+
import android.preference.PreferenceScreen;
3941
import android.widget.Button;
4042

4143
public class QuietHoursRangeActivity extends GravityBoxActivity {
@@ -47,6 +49,7 @@ public class QuietHoursRangeActivity extends GravityBoxActivity {
4749
public static final String PREF_QH_RANGE_MUTE_VIBE = "pref_lc_qh_range_mute_vibe";
4850
public static final String PREF_QH_RANGE_MUTE_SYSTEM_VIBE = "pref_lc_qh_range_mute_system_vibe";
4951
public static final String PREF_QH_RANGE_MUTE_SYSTEM_SOUNDS = "pref_lc_qh_range_mute_system_sounds";
52+
public static final String PREF_QH_RANGE_RINGER_WHITELIST = "pref_lc_qh_range_ringer_whitelist";
5053
public static final String EXTRA_QH_RANGE = "qhRange";
5154

5255
private Button mBtnCancel;
@@ -85,7 +88,7 @@ public void onClick(View v) {
8588
}
8689
});
8790

88-
getFragment().setRange(QuietHours.Range.parse(rangeValue));
91+
getFragment().setRangeValue(rangeValue);
8992
}
9093

9194
private PrefsFragment getFragment() {
@@ -103,7 +106,9 @@ public static class PrefsFragment extends PreferenceFragment
103106
private CheckBoxPreference mPrefMuteVibe;
104107
private CheckBoxPreference mPrefMuteSystemVibe;
105108
private MultiSelectListPreference mPrefMuteSystemSounds;
109+
private Preference mPrefRingerWhitelist;
106110
private QuietHours.Range mRange;
111+
private boolean mIsNew;
107112

108113
public PrefsFragment() { }
109114

@@ -144,10 +149,13 @@ public void onCreate(Bundle savedInstanceState) {
144149

145150
mPrefMuteSystemSounds = (MultiSelectListPreference) findPreference(PREF_QH_RANGE_MUTE_SYSTEM_SOUNDS);
146151
mPrefMuteSystemSounds.setOnPreferenceChangeListener(this);
152+
153+
mPrefRingerWhitelist = findPreference(PREF_QH_RANGE_RINGER_WHITELIST);
147154
}
148155

149-
void setRange(QuietHours.Range range) {
150-
mRange = range;
156+
void setRangeValue(Set<String> rangeValue) {
157+
mIsNew = (rangeValue == null);
158+
mRange = QuietHours.Range.parse(rangeValue);
151159
mPrefDays.setValues(mRange.days);
152160
mPrefStartTime.setValue(mRange.startTime);
153161
mPrefEndTime.setValue(mRange.endTime);
@@ -192,6 +200,7 @@ private void updateSummaries() {
192200
mPrefMuteSystemSounds.setSummary(summary);
193201

194202
mPrefMuteVibe.setEnabled(!mRange.muteSystemVibe);
203+
mPrefRingerWhitelist.setEnabled(mRange.muteSystemSounds.contains("ringer"));
195204
}
196205

197206
@SuppressWarnings("unchecked")
@@ -219,5 +228,32 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
219228
updateSummaries();
220229
return true;
221230
}
231+
232+
@Override
233+
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
234+
if (preference == mPrefRingerWhitelist) {
235+
Set<String> whiteList = mRange.ringerWhitelist;
236+
if (mIsNew) {
237+
whiteList = SettingsManager.getInstance(getActivity()).getQuietHoursPrefs()
238+
.getStringSet(QuietHoursActivity.PREF_KEY_QH_RINGER_WHITELIST,
239+
new HashSet<String>());
240+
}
241+
Intent intent = new Intent(getActivity(), RingerWhitelistActivity.class);
242+
intent.putStringArrayListExtra(QuietHoursActivity.EXTRA_QH_RINGER_WHITELIST,
243+
new ArrayList<>(whiteList));
244+
startActivityForResult(intent, 0);
245+
return true;
246+
}
247+
return super.onPreferenceTreeClick(preferenceScreen, preference);
248+
}
249+
250+
@Override
251+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
252+
if (data != null && data.hasExtra(QuietHoursActivity.EXTRA_QH_RINGER_WHITELIST)) {
253+
mRange.ringerWhitelist = new HashSet<>(
254+
data.getStringArrayListExtra(QuietHoursActivity.EXTRA_QH_RINGER_WHITELIST));
255+
}
256+
super.onActivityResult(requestCode, resultCode, data);
257+
}
222258
}
223259
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ private void saveRange(Set<String> value) {
9292
item.getRange().muteVibe = range.muteVibe;
9393
item.getRange().muteSystemVibe = range.muteSystemVibe;
9494
item.getRange().muteSystemSounds = range.muteSystemSounds;
95+
item.getRange().ringerWhitelist = range.ringerWhitelist;
9596
isNew = false;
9697
break;
9798
}

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

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,18 @@
1414
*/
1515
package com.ceco.oreo.gravitybox.ledcontrol;
1616

17+
import java.util.ArrayList;
1718
import java.util.HashSet;
1819
import java.util.Set;
1920

2021
import com.ceco.oreo.gravitybox.GravityBoxAppCompatActivity;
2122
import com.ceco.oreo.gravitybox.R;
22-
import com.ceco.oreo.gravitybox.SettingsManager;
23-
import com.ceco.oreo.gravitybox.WorldReadablePrefs;
2423
import com.ceco.oreo.gravitybox.ledcontrol.RingerWhitelistActivity.ContactsFragment.SelectionType;
2524

2625
import android.Manifest.permission;
26+
import android.app.Activity;
2727
import android.content.Context;
28+
import android.content.Intent;
2829
import android.content.pm.PackageManager;
2930
import android.database.Cursor;
3031
import android.graphics.Point;
@@ -55,6 +56,7 @@ public class RingerWhitelistActivity extends GravityBoxAppCompatActivity {
5556

5657
static final String KEY_SEARCH_QUERY = "searchQuery";
5758
static final String KEY_SELECTION_TYPE = "selectionType";
59+
static final String KEY_SELECTED_KEYS = "selectedKeys";
5860

5961
private String mSearchQuery;
6062
private SelectionType mSelectionType;
@@ -230,11 +232,17 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
230232
public void onActivityCreated(Bundle savedInstanceState) {
231233
super.onActivityCreated(savedInstanceState);
232234

233-
final WorldReadablePrefs prefs = SettingsManager.getInstance(
234-
getActivity()).getQuietHoursPrefs();
235-
mSelectedKeys = new HashSet<String>(prefs.getStringSet(
236-
QuietHoursActivity.PREF_KEY_QH_RINGER_WHITELIST,
237-
new HashSet<String>()));
235+
Intent intent = getActivity().getIntent();
236+
if (savedInstanceState != null && savedInstanceState.containsKey(KEY_SELECTED_KEYS)) {
237+
mSelectedKeys = new HashSet<String>(
238+
savedInstanceState.getStringArrayList(KEY_SELECTED_KEYS));
239+
} else if (intent != null && intent.hasExtra(QuietHoursActivity.EXTRA_QH_RINGER_WHITELIST)) {
240+
mSelectedKeys = new HashSet<String>(intent.getStringArrayListExtra(
241+
QuietHoursActivity.EXTRA_QH_RINGER_WHITELIST));
242+
} else {
243+
mSelectedKeys = new HashSet<String>();
244+
}
245+
updateResult();
238246

239247
mCursorAdapter = new CustomCursorAdapter(
240248
getActivity(),
@@ -254,6 +262,12 @@ public void onActivityCreated(Bundle savedInstanceState) {
254262
fetchData(query);
255263
}
256264

265+
private void updateResult() {
266+
getActivity().setResult(Activity.RESULT_OK,
267+
(new Intent()).putStringArrayListExtra(QuietHoursActivity.EXTRA_QH_RINGER_WHITELIST,
268+
new ArrayList<>(mSelectedKeys)));
269+
}
270+
257271
@Override
258272
public void onSaveInstanceState(Bundle outState) {
259273
if (mCurrentQuery != null) {
@@ -262,19 +276,13 @@ public void onSaveInstanceState(Bundle outState) {
262276
if (mSelectionType != null) {
263277
outState.putString(KEY_SELECTION_TYPE, mSelectionType.toString());
264278
}
279+
if (mSelectedKeys != null) {
280+
outState.putStringArrayList(KEY_SELECTED_KEYS,
281+
new ArrayList<>(mSelectedKeys));
282+
}
265283
super.onSaveInstanceState(outState);
266284
}
267285

268-
@Override
269-
public void onPause() {
270-
final WorldReadablePrefs prefs = SettingsManager.getInstance(
271-
getActivity()).getQuietHoursPrefs();
272-
prefs.edit().putStringSet(QuietHoursActivity.PREF_KEY_QH_RINGER_WHITELIST,
273-
mSelectedKeys).commit();
274-
QuietHoursActivity.broadcastSettings(getActivity(), prefs);
275-
super.onPause();
276-
}
277-
278286
private boolean hasContactReadPermission() {
279287
return getActivity().checkSelfPermission(permission.READ_CONTACTS)
280288
== PackageManager.PERMISSION_GRANTED;
@@ -399,6 +407,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
399407
cb.setChecked(false);
400408
mSelectedKeys.remove(contactKey);
401409
}
410+
updateResult();
402411
}
403412

404413
private class CustomCursorAdapter extends SimpleCursorAdapter {

0 commit comments

Comments
 (0)