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:
parent
2f4c9ef0d9
commit
4d0020ae1d
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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";
|
||||||
|
@ -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("]", "");
|
||||||
|
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_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" />
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user