1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-28 12:56:49 +01:00

Add the option the blacklist applications also for Pebble Messages

Fixes #996
This commit is contained in:
Daniele Gobbetti 2018-06-18 20:38:37 +02:00
parent 2f4c9ef0d9
commit 4d0020ae1d
8 changed files with 158 additions and 44 deletions

View File

@ -176,7 +176,8 @@ public class GBApplication extends Application {
setLanguage(language); setLanguage(language);
deviceService = createDeviceService(); deviceService = createDeviceService();
loadAppsBlackList(); loadAppsNotifBlackList();
loadAppsPebbleBlackList();
loadCalendarsBlackList(); loadCalendarsBlackList();
if (isRunningMarshmallowOrLater()) { if (isRunningMarshmallowOrLater()) {
@ -372,58 +373,119 @@ public class GBApplication extends Application {
return NotificationManager.INTERRUPTION_FILTER_ALL; 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) { public static boolean appIsNotifBlacklisted(String packageName) {
if (apps_blacklist == null) { if (apps_notification_blacklist == null) {
GB.log("appIsBlacklisted: apps_blacklist is null!", GB.INFO, 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) { if (packageNames == null) {
GB.log("Set null apps_blacklist", GB.INFO, null); GB.log("Set null apps_notification_blacklist", GB.INFO, null);
apps_blacklist = new HashSet<>(); apps_notification_blacklist = new HashSet<>();
} else { } 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); GB.log("New apps_notification_blacklist has " + apps_notification_blacklist.size() + " entries", GB.INFO, null);
saveAppsBlackList(); saveAppsNotifBlackList();
} }
private static void loadAppsBlackList() { private static void loadAppsNotifBlackList() {
GB.log("Loading apps_blacklist", GB.INFO, null); GB.log("Loading apps_notification_blacklist", GB.INFO, null);
apps_blacklist = (HashSet<String>) sharedPrefs.getStringSet(GBPrefs.PACKAGE_BLACKLIST, null); apps_notification_blacklist = (HashSet<String>) sharedPrefs.getStringSet(GBPrefs.PACKAGE_BLACKLIST, null);
if (apps_blacklist == null) { if (apps_notification_blacklist == null) {
apps_blacklist = new HashSet<>(); 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() { private static void saveAppsNotifBlackList() {
GB.log("Saving apps_blacklist with " + apps_blacklist.size() + " entries", GB.INFO, null); GB.log("Saving apps_notification_blacklist with " + apps_notification_blacklist.size() + " entries", GB.INFO, null);
SharedPreferences.Editor editor = sharedPrefs.edit(); SharedPreferences.Editor editor = sharedPrefs.edit();
if (apps_blacklist.isEmpty()) { if (apps_notification_blacklist.isEmpty()) {
editor.putStringSet(GBPrefs.PACKAGE_BLACKLIST, null); editor.putStringSet(GBPrefs.PACKAGE_BLACKLIST, null);
} else { } else {
Prefs.putStringSet(editor, GBPrefs.PACKAGE_BLACKLIST, apps_blacklist); Prefs.putStringSet(editor, GBPrefs.PACKAGE_BLACKLIST, apps_notification_blacklist);
} }
editor.apply(); editor.apply();
} }
public static void addAppToBlacklist(String packageName) { public static void addAppToNotifBlacklist(String packageName) {
if (apps_blacklist.add(packageName)) { if (apps_notification_blacklist.add(packageName)) {
saveAppsBlackList(); saveAppsNotifBlackList();
} }
} }
public static synchronized void removeFromAppsBlacklist(String packageName) { public static synchronized void removeFromAppsNotifBlacklist(String packageName) {
GB.log("Removing from apps_blacklist: " + packageName, GB.INFO, null); GB.log("Removing from apps_notification_blacklist: " + packageName, GB.INFO, null);
apps_blacklist.remove(packageName); apps_notification_blacklist.remove(packageName);
saveAppsBlackList(); 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; private static HashSet<String> calendars_blacklist = null;
public static boolean calendarIsBlacklisted(String calendarDisplayName) { public static boolean calendarIsBlacklisted(String calendarDisplayName) {
@ -435,7 +497,7 @@ public class GBApplication extends Application {
public static void setCalendarsBlackList(Set<String> calendarNames) { public static void setCalendarsBlackList(Set<String> calendarNames) {
if (calendarNames == null) { 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<>(); calendars_blacklist = new HashSet<>();
} else { } else {
calendars_blacklist = new HashSet<>(calendarNames); calendars_blacklist = new HashSet<>(calendarNames);

View File

@ -38,6 +38,8 @@ import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.R;
import static nodomain.freeyourgadget.gadgetbridge.GBApplication.packageNameToPebbleMsgSender;
public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapter.AppBLViewHolder> implements Filterable { public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapter.AppBLViewHolder> implements Filterable {
private List<ApplicationInfo> applicationInfoList; private List<ApplicationInfo> applicationInfoList;
@ -62,7 +64,7 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
if (name == null) { if (name == null) {
name = ai.packageName; 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 '!' // sort blacklisted first by prefixing with a '!'
name = "!" + name; name = "!" + name;
} }
@ -94,17 +96,31 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
holder.deviceAppNameLabel.setText(mNameMap.get(appInfo)); holder.deviceAppNameLabel.setText(mNameMap.get(appInfo));
holder.deviceImageView.setImageDrawable(appInfo.loadIcon(mPm)); 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() { holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CheckBox checkBox = ((CheckBox) v.findViewById(R.id.item_checkbox)); CheckBox checkBox = ((CheckBox) v.findViewById(R.id.item_checkbox));
checkBox.toggle(); checkBox.toggle();
if (checkBox.isChecked()) { if (checkBox.isChecked()) {
GBApplication.addAppToBlacklist(appInfo.packageName); GBApplication.addAppToNotifBlacklist(appInfo.packageName);
} else { } else {
GBApplication.removeFromAppsBlacklist(appInfo.packageName); GBApplication.removeFromAppsNotifBlacklist(appInfo.packageName);
} }
} }
}); });
@ -123,9 +139,10 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
return applicationFilter; 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 ImageView deviceImageView;
final TextView deviceAppVersionAuthorLabel; final TextView deviceAppVersionAuthorLabel;
final TextView deviceAppNameLabel; final TextView deviceAppNameLabel;
@ -133,7 +150,8 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
AppBLViewHolder(View itemView) { AppBLViewHolder(View itemView) {
super(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); deviceImageView = (ImageView) itemView.findViewById(R.id.item_image);
deviceAppVersionAuthorLabel = (TextView) itemView.findViewById(R.id.item_details); deviceAppVersionAuthorLabel = (TextView) itemView.findViewById(R.id.item_details);
deviceAppNameLabel = (TextView) itemView.findViewById(R.id.item_name); deviceAppNameLabel = (TextView) itemView.findViewById(R.id.item_name);

View File

@ -113,7 +113,7 @@ public class NotificationListener extends NotificationListenerService {
} else { } else {
// ACTION_MUTE // ACTION_MUTE
LOG.info("going to mute " + sbn.getPackageName()); 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"); LOG.info("Ignoring notification, application is blacklisted");
return true; return true;
} }

View File

@ -76,6 +76,11 @@ public class PebbleReceiver extends BroadcastReceiver {
if (notificationSpec.title != null) { if (notificationSpec.title != null) {
notificationSpec.type = NotificationType.UNKNOWN; notificationSpec.type = NotificationType.UNKNOWN;
String sender = intent.getStringExtra("sender"); String sender = intent.getStringExtra("sender");
if (GBApplication.appIsPebbleBlacklisted(sender)) {
LOG.info("Ignoring Pebble message, application "+ sender +" is blacklisted");
return;
}
if ("Conversations".equals(sender)) { if ("Conversations".equals(sender)) {
notificationSpec.type = NotificationType.CONVERSATIONS; notificationSpec.type = NotificationType.CONVERSATIONS;
} }

View File

@ -22,6 +22,7 @@ import java.util.Date;
public class GBPrefs { public class GBPrefs {
public static final String PACKAGE_BLACKLIST = "package_blacklist"; 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 CALENDAR_BLACKLIST = "calendar_blacklist";
public static final String AUTO_RECONNECT = "general_autocreconnect"; public static final String AUTO_RECONNECT = "general_autocreconnect";
private static final String AUTO_START = "general_autostartonboot"; private static final String AUTO_START = "general_autostartonboot";

View File

@ -130,7 +130,14 @@ public class ImportExportSharedPreferences {
for (int z=0;z<text.split(",").length;z++){ for (int z=0;z<text.split(",").length;z++){
apps_blacklist.add(text.split(",")[z].trim()); 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 } else if (key.equals(GBPrefs.CALENDAR_BLACKLIST)) { //TODO: untested
Set<String> calendars_blacklist = new HashSet<>(); Set<String> calendars_blacklist = new HashSet<>();
text = text.replace("[", "").replace("]", ""); text = text.replace("[", "").replace("]", "");

View 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>

View File

@ -12,19 +12,34 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginStart="16dp" android:layout_marginStart="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:clickable="false" 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 <ImageView
android:id="@+id/item_image" android:id="@+id/item_image"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginStart="16dp" android:layout_marginStart="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_toEndOf="@+id/item_checkbox" android:layout_toEndOf="@+id/item_pebble_checkbox"
android:paddingBottom="8dp" android:paddingBottom="8dp"
android:paddingTop="8dp" /> android:paddingTop="8dp" />