mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-24 19:06:53 +01:00
Add the option the blacklist applications also for Pebble Messages
Fixes #996
This commit is contained in:
parent
2f4c9ef0d9
commit
4d0020ae1d
@ -176,7 +176,8 @@ public class GBApplication extends Application {
|
||||
setLanguage(language);
|
||||
|
||||
deviceService = createDeviceService();
|
||||
loadAppsBlackList();
|
||||
loadAppsNotifBlackList();
|
||||
loadAppsPebbleBlackList();
|
||||
loadCalendarsBlackList();
|
||||
|
||||
if (isRunningMarshmallowOrLater()) {
|
||||
@ -372,58 +373,119 @@ public class GBApplication extends Application {
|
||||
return NotificationManager.INTERRUPTION_FILTER_ALL;
|
||||
}
|
||||
|
||||
private static HashSet<String> apps_blacklist = null;
|
||||
private static HashSet<String> apps_notification_blacklist = null;
|
||||
|
||||
public static boolean appIsBlacklisted(String packageName) {
|
||||
if (apps_blacklist == null) {
|
||||
GB.log("appIsBlacklisted: apps_blacklist is null!", GB.INFO, null);
|
||||
public static boolean appIsNotifBlacklisted(String packageName) {
|
||||
if (apps_notification_blacklist == null) {
|
||||
GB.log("appIsNotifBlacklisted: apps_notification_blacklist is null!", GB.INFO, null);
|
||||
}
|
||||
return apps_blacklist != null && apps_blacklist.contains(packageName);
|
||||
return apps_notification_blacklist != null && apps_notification_blacklist.contains(packageName);
|
||||
}
|
||||
|
||||
public static void setAppsBlackList(Set<String> packageNames) {
|
||||
public static void setAppsNotifBlackList(Set<String> packageNames) {
|
||||
if (packageNames == null) {
|
||||
GB.log("Set null apps_blacklist", GB.INFO, null);
|
||||
apps_blacklist = new HashSet<>();
|
||||
GB.log("Set null apps_notification_blacklist", GB.INFO, null);
|
||||
apps_notification_blacklist = new HashSet<>();
|
||||
} else {
|
||||
apps_blacklist = new HashSet<>(packageNames);
|
||||
apps_notification_blacklist = new HashSet<>(packageNames);
|
||||
}
|
||||
GB.log("New apps_blacklist has " + apps_blacklist.size() + " entries", GB.INFO, null);
|
||||
saveAppsBlackList();
|
||||
GB.log("New apps_notification_blacklist has " + apps_notification_blacklist.size() + " entries", GB.INFO, null);
|
||||
saveAppsNotifBlackList();
|
||||
}
|
||||
|
||||
private static void loadAppsBlackList() {
|
||||
GB.log("Loading apps_blacklist", GB.INFO, null);
|
||||
apps_blacklist = (HashSet<String>) sharedPrefs.getStringSet(GBPrefs.PACKAGE_BLACKLIST, null);
|
||||
if (apps_blacklist == null) {
|
||||
apps_blacklist = new HashSet<>();
|
||||
private static void loadAppsNotifBlackList() {
|
||||
GB.log("Loading apps_notification_blacklist", GB.INFO, null);
|
||||
apps_notification_blacklist = (HashSet<String>) sharedPrefs.getStringSet(GBPrefs.PACKAGE_BLACKLIST, null);
|
||||
if (apps_notification_blacklist == null) {
|
||||
apps_notification_blacklist = new HashSet<>();
|
||||
}
|
||||
GB.log("Loaded apps_blacklist has " + apps_blacklist.size() + " entries", GB.INFO, null);
|
||||
GB.log("Loaded apps_notification_blacklist has " + apps_notification_blacklist.size() + " entries", GB.INFO, null);
|
||||
}
|
||||
|
||||
private static void saveAppsBlackList() {
|
||||
GB.log("Saving apps_blacklist with " + apps_blacklist.size() + " entries", GB.INFO, null);
|
||||
private static void saveAppsNotifBlackList() {
|
||||
GB.log("Saving apps_notification_blacklist with " + apps_notification_blacklist.size() + " entries", GB.INFO, null);
|
||||
SharedPreferences.Editor editor = sharedPrefs.edit();
|
||||
if (apps_blacklist.isEmpty()) {
|
||||
if (apps_notification_blacklist.isEmpty()) {
|
||||
editor.putStringSet(GBPrefs.PACKAGE_BLACKLIST, null);
|
||||
} else {
|
||||
Prefs.putStringSet(editor, GBPrefs.PACKAGE_BLACKLIST, apps_blacklist);
|
||||
Prefs.putStringSet(editor, GBPrefs.PACKAGE_BLACKLIST, apps_notification_blacklist);
|
||||
}
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
public static void addAppToBlacklist(String packageName) {
|
||||
if (apps_blacklist.add(packageName)) {
|
||||
saveAppsBlackList();
|
||||
public static void addAppToNotifBlacklist(String packageName) {
|
||||
if (apps_notification_blacklist.add(packageName)) {
|
||||
saveAppsNotifBlackList();
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void removeFromAppsBlacklist(String packageName) {
|
||||
GB.log("Removing from apps_blacklist: " + packageName, GB.INFO, null);
|
||||
apps_blacklist.remove(packageName);
|
||||
saveAppsBlackList();
|
||||
public static synchronized void removeFromAppsNotifBlacklist(String packageName) {
|
||||
GB.log("Removing from apps_notification_blacklist: " + packageName, GB.INFO, null);
|
||||
apps_notification_blacklist.remove(packageName);
|
||||
saveAppsNotifBlackList();
|
||||
}
|
||||
|
||||
private static HashSet<String> apps_pebblemsg_blacklist = null;
|
||||
|
||||
public static boolean appIsPebbleBlacklisted(String sender) {
|
||||
if (apps_pebblemsg_blacklist == null) {
|
||||
GB.log("appIsPebbleBlacklisted: apps_pebblemsg_blacklist is null!", GB.INFO, null);
|
||||
}
|
||||
return apps_pebblemsg_blacklist != null && apps_pebblemsg_blacklist.contains(sender);
|
||||
}
|
||||
|
||||
public static void setAppsPebbleBlackList(Set<String> packageNames) {
|
||||
if (packageNames == null) {
|
||||
GB.log("Set null apps_pebblemsg_blacklist", GB.INFO, null);
|
||||
apps_pebblemsg_blacklist = new HashSet<>();
|
||||
} else {
|
||||
apps_pebblemsg_blacklist = new HashSet<>(packageNames);
|
||||
}
|
||||
GB.log("New apps_pebblemsg_blacklist has " + apps_pebblemsg_blacklist.size() + " entries", GB.INFO, null);
|
||||
saveAppsPebbleBlackList();
|
||||
}
|
||||
|
||||
private static void loadAppsPebbleBlackList() {
|
||||
GB.log("Loading apps_pebblemsg_blacklist", GB.INFO, null);
|
||||
apps_pebblemsg_blacklist = (HashSet<String>) sharedPrefs.getStringSet(GBPrefs.PACKAGE_PEBBLEMSG_BLACKLIST, null);
|
||||
if (apps_pebblemsg_blacklist == null) {
|
||||
apps_pebblemsg_blacklist = new HashSet<>();
|
||||
}
|
||||
GB.log("Loaded apps_pebblemsg_blacklist has " + apps_pebblemsg_blacklist.size() + " entries", GB.INFO, null);
|
||||
}
|
||||
|
||||
private static void saveAppsPebbleBlackList() {
|
||||
GB.log("Saving apps_pebblemsg_blacklist with " + apps_pebblemsg_blacklist.size() + " entries", GB.INFO, null);
|
||||
SharedPreferences.Editor editor = sharedPrefs.edit();
|
||||
if (apps_pebblemsg_blacklist.isEmpty()) {
|
||||
editor.putStringSet(GBPrefs.PACKAGE_PEBBLEMSG_BLACKLIST, null);
|
||||
} else {
|
||||
Prefs.putStringSet(editor, GBPrefs.PACKAGE_PEBBLEMSG_BLACKLIST, apps_pebblemsg_blacklist);
|
||||
}
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
public static void addAppToPebbleBlacklist(String packageName) {
|
||||
if (apps_pebblemsg_blacklist.add(packageNameToPebbleMsgSender(packageName))) {
|
||||
saveAppsPebbleBlackList();
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void removeFromAppsPebbleBlacklist(String packageName) {
|
||||
GB.log("Removing from apps_pebblemsg_blacklist: " + packageName, GB.INFO, null);
|
||||
apps_pebblemsg_blacklist.remove(packageNameToPebbleMsgSender(packageName));
|
||||
saveAppsPebbleBlackList();
|
||||
}
|
||||
|
||||
public static String packageNameToPebbleMsgSender(String packageName) {
|
||||
if ("eu.siacs.conversations".equals(packageName)){
|
||||
return("Conversations");
|
||||
} else if ("net.osmand.plus".equals(packageName)) {
|
||||
return("OsmAnd");
|
||||
}
|
||||
return packageName;
|
||||
}
|
||||
|
||||
private static HashSet<String> calendars_blacklist = null;
|
||||
|
||||
public static boolean calendarIsBlacklisted(String calendarDisplayName) {
|
||||
@ -435,7 +497,7 @@ public class GBApplication extends Application {
|
||||
|
||||
public static void setCalendarsBlackList(Set<String> calendarNames) {
|
||||
if (calendarNames == null) {
|
||||
GB.log("Set null apps_blacklist", GB.INFO, null);
|
||||
GB.log("Set null apps_notification_blacklist", GB.INFO, null);
|
||||
calendars_blacklist = new HashSet<>();
|
||||
} else {
|
||||
calendars_blacklist = new HashSet<>(calendarNames);
|
||||
|
@ -38,6 +38,8 @@ import java.util.List;
|
||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||
|
||||
import static nodomain.freeyourgadget.gadgetbridge.GBApplication.packageNameToPebbleMsgSender;
|
||||
|
||||
public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapter.AppBLViewHolder> implements Filterable {
|
||||
|
||||
private List<ApplicationInfo> applicationInfoList;
|
||||
@ -62,7 +64,7 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
|
||||
if (name == null) {
|
||||
name = ai.packageName;
|
||||
}
|
||||
if (GBApplication.appIsBlacklisted(ai.packageName)) {
|
||||
if (GBApplication.appIsNotifBlacklisted(ai.packageName) || GBApplication.appIsPebbleBlacklisted(packageNameToPebbleMsgSender(ai.packageName))) {
|
||||
// sort blacklisted first by prefixing with a '!'
|
||||
name = "!" + name;
|
||||
}
|
||||
@ -94,17 +96,31 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
|
||||
holder.deviceAppNameLabel.setText(mNameMap.get(appInfo));
|
||||
holder.deviceImageView.setImageDrawable(appInfo.loadIcon(mPm));
|
||||
|
||||
holder.checkbox.setChecked(GBApplication.appIsBlacklisted(appInfo.packageName));
|
||||
holder.blacklist_checkbox.setChecked(GBApplication.appIsNotifBlacklisted(appInfo.packageName));
|
||||
holder.blacklist_checkbox.setTextColor(mContext.getResources().getColorStateList(R.color.blacklist_checkboxes));
|
||||
|
||||
holder.blacklist_pebble_checkbox.setChecked(GBApplication.appIsPebbleBlacklisted(packageNameToPebbleMsgSender(appInfo.packageName)));
|
||||
|
||||
holder.blacklist_pebble_checkbox.setTextColor(mContext.getResources().getColorStateList(R.color.blacklist_checkboxes));
|
||||
holder.blacklist_pebble_checkbox.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if ( ((CheckBox)view).isChecked() ) {
|
||||
GBApplication.addAppToPebbleBlacklist(appInfo.packageName);
|
||||
} else {
|
||||
GBApplication.removeFromAppsPebbleBlacklist(appInfo.packageName);
|
||||
}
|
||||
}
|
||||
});
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
CheckBox checkBox = ((CheckBox) v.findViewById(R.id.item_checkbox));
|
||||
checkBox.toggle();
|
||||
if (checkBox.isChecked()) {
|
||||
GBApplication.addAppToBlacklist(appInfo.packageName);
|
||||
GBApplication.addAppToNotifBlacklist(appInfo.packageName);
|
||||
} else {
|
||||
GBApplication.removeFromAppsBlacklist(appInfo.packageName);
|
||||
GBApplication.removeFromAppsNotifBlacklist(appInfo.packageName);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -123,9 +139,10 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
|
||||
return applicationFilter;
|
||||
}
|
||||
|
||||
public class AppBLViewHolder extends RecyclerView.ViewHolder {
|
||||
class AppBLViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
final CheckBox checkbox;
|
||||
final CheckBox blacklist_checkbox;
|
||||
final CheckBox blacklist_pebble_checkbox;
|
||||
final ImageView deviceImageView;
|
||||
final TextView deviceAppVersionAuthorLabel;
|
||||
final TextView deviceAppNameLabel;
|
||||
@ -133,7 +150,8 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
|
||||
AppBLViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
||||
checkbox = (CheckBox) itemView.findViewById(R.id.item_checkbox);
|
||||
blacklist_checkbox = (CheckBox) itemView.findViewById(R.id.item_checkbox);
|
||||
blacklist_pebble_checkbox = (CheckBox) itemView.findViewById(R.id.item_pebble_checkbox);
|
||||
deviceImageView = (ImageView) itemView.findViewById(R.id.item_image);
|
||||
deviceAppVersionAuthorLabel = (TextView) itemView.findViewById(R.id.item_details);
|
||||
deviceAppNameLabel = (TextView) itemView.findViewById(R.id.item_name);
|
||||
|
@ -113,7 +113,7 @@ public class NotificationListener extends NotificationListenerService {
|
||||
} else {
|
||||
// ACTION_MUTE
|
||||
LOG.info("going to mute " + sbn.getPackageName());
|
||||
GBApplication.addAppToBlacklist(sbn.getPackageName());
|
||||
GBApplication.addAppToNotifBlacklist(sbn.getPackageName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -426,7 +426,7 @@ public class NotificationListener extends NotificationListenerService {
|
||||
}
|
||||
}
|
||||
|
||||
if (GBApplication.appIsBlacklisted(source)) {
|
||||
if (GBApplication.appIsNotifBlacklisted(source)) {
|
||||
LOG.info("Ignoring notification, application is blacklisted");
|
||||
return true;
|
||||
}
|
||||
|
@ -76,6 +76,11 @@ public class PebbleReceiver extends BroadcastReceiver {
|
||||
if (notificationSpec.title != null) {
|
||||
notificationSpec.type = NotificationType.UNKNOWN;
|
||||
String sender = intent.getStringExtra("sender");
|
||||
if (GBApplication.appIsPebbleBlacklisted(sender)) {
|
||||
LOG.info("Ignoring Pebble message, application "+ sender +" is blacklisted");
|
||||
return;
|
||||
}
|
||||
|
||||
if ("Conversations".equals(sender)) {
|
||||
notificationSpec.type = NotificationType.CONVERSATIONS;
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import java.util.Date;
|
||||
|
||||
public class GBPrefs {
|
||||
public static final String PACKAGE_BLACKLIST = "package_blacklist";
|
||||
public static final String PACKAGE_PEBBLEMSG_BLACKLIST = "package_pebblemsg_blacklist";
|
||||
public static final String CALENDAR_BLACKLIST = "calendar_blacklist";
|
||||
public static final String AUTO_RECONNECT = "general_autocreconnect";
|
||||
private static final String AUTO_START = "general_autostartonboot";
|
||||
|
@ -130,7 +130,14 @@ public class ImportExportSharedPreferences {
|
||||
for (int z=0;z<text.split(",").length;z++){
|
||||
apps_blacklist.add(text.split(",")[z].trim());
|
||||
}
|
||||
GBApplication.setAppsBlackList(apps_blacklist);
|
||||
GBApplication.setAppsNotifBlackList(apps_blacklist);
|
||||
} else if (key.equals(GBPrefs.PACKAGE_PEBBLEMSG_BLACKLIST)) { //TODO: untested
|
||||
Set<String> apps_pebble_blacklist = new HashSet<>();
|
||||
text=text.replace("[","").replace("]","");
|
||||
for (int z=0;z<text.split(",").length;z++){
|
||||
apps_pebble_blacklist.add(text.split(",")[z].trim());
|
||||
}
|
||||
GBApplication.setAppsPebbleBlackList(apps_pebble_blacklist);
|
||||
} else if (key.equals(GBPrefs.CALENDAR_BLACKLIST)) { //TODO: untested
|
||||
Set<String> calendars_blacklist = new HashSet<>();
|
||||
text = text.replace("[", "").replace("]", "");
|
||||
|
6
app/src/main/res/color/blacklist_checkboxes.xml
Normal file
6
app/src/main/res/color/blacklist_checkboxes.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item android:state_checked="true" android:color="#FF0000"/> <!-- checked -->
|
||||
<item android:state_checked="true" android:state_enabled="false" app:alpha="?android:disabledAlpha" android:color="#FF0000"/> <!-- checked, disabled -->
|
||||
<item android:color="#000000"/> <!-- anything else -->
|
||||
</selector>
|
@ -12,19 +12,34 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:clickable="false"
|
||||
android:focusable="false" />
|
||||
android:focusable="false"
|
||||
android:button="@null"
|
||||
android:text="NOTIF"/>
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/item_pebble_checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:button="@null"
|
||||
android:layout_toEndOf="@+id/item_checkbox"
|
||||
android:text="PEBBLE"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/item_image"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_toEndOf="@+id/item_checkbox"
|
||||
android:layout_toEndOf="@+id/item_pebble_checkbox"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingTop="8dp" />
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user