mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
allow to enable/disable notifications per-account
This commit is contained in:
@@ -236,6 +236,14 @@ public class DcContext {
|
||||
return getConfigInt("is_chatmail") == 1;
|
||||
}
|
||||
|
||||
public boolean isMuted() {
|
||||
return getConfigInt("ui.muted") == 1;
|
||||
}
|
||||
|
||||
public void setMuted(boolean muted) {
|
||||
setConfigInt("ui.muted", muted? 1 : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if at least one chat has location streaming enabled
|
||||
*/
|
||||
|
||||
@@ -287,7 +287,10 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
int skipId = dcAccounts.getSelectedAccount().getAccountId();
|
||||
for (int accountId : dcAccounts.getAll()) {
|
||||
if (accountId != skipId) {
|
||||
unreadCount += dcAccounts.getAccount(accountId).getFreshMsgs().length;
|
||||
DcContext dcContext = dcAccounts.getAccount(accountId);
|
||||
if (!dcContext.isMuted()) {
|
||||
unreadCount += dcContext.getFreshMsgs().length;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ public class LogViewFragment extends Fragment {
|
||||
PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
|
||||
final PackageManager pm = context.getPackageManager();
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
|
||||
final DcContext dcContext = DcHelper.getContext(context);
|
||||
|
||||
builder.append("device=")
|
||||
.append(Build.MANUFACTURER).append(" ")
|
||||
@@ -251,8 +251,7 @@ public class LogViewFragment extends Fragment {
|
||||
builder.append("ignoreBatteryOptimizations=").append(
|
||||
powerManager.isIgnoringBatteryOptimizations(context.getPackageName())).append("\n");
|
||||
}
|
||||
builder.append("notifications=").append(
|
||||
Prefs.isNotificationsEnabled(context)).append("\n");
|
||||
builder.append("notifications=").append(!dcContext.isMuted()).append("\n");
|
||||
builder.append("reliableService=").append(
|
||||
Prefs.reliableService(context)).append("\n");
|
||||
|
||||
@@ -271,7 +270,6 @@ public class LogViewFragment extends Fragment {
|
||||
}
|
||||
|
||||
builder.append("\n");
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
builder.append(dcContext.getInfo());
|
||||
|
||||
return builder.toString();
|
||||
|
||||
@@ -39,7 +39,7 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
|
||||
super(itemView);
|
||||
}
|
||||
|
||||
public abstract void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected);
|
||||
public abstract void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted);
|
||||
public abstract void unbind(@NonNull GlideRequests glideRequests);
|
||||
}
|
||||
|
||||
@@ -64,8 +64,8 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
|
||||
return (AccountSelectionListItem) itemView;
|
||||
}
|
||||
|
||||
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected) {
|
||||
getView().bind(glideRequests, accountId, self, name, addr, unreadCount, selected);
|
||||
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted) {
|
||||
getView().bind(glideRequests, accountId, self, name, addr, unreadCount, selected, isMuted);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,11 +100,11 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
|
||||
String name;
|
||||
String addr = null;
|
||||
int unreadCount = 0;
|
||||
DcContext dcContext = accounts.getAccount(id);
|
||||
|
||||
if (id == DcContact.DC_CONTACT_ID_ADD_ACCOUNT) {
|
||||
name = context.getString(R.string.add_account);
|
||||
} else {
|
||||
DcContext dcContext = accounts.getAccount(id);
|
||||
dcContact = dcContext.getContact(DcContact.DC_CONTACT_ID_SELF);
|
||||
addr = dcContact.getAddr();
|
||||
name = dcContext.getConfig("displayname");
|
||||
@@ -116,7 +116,7 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
|
||||
|
||||
ViewHolder holder = (ViewHolder) viewHolder;
|
||||
holder.unbind(glideRequests);
|
||||
holder.bind(glideRequests, id, dcContact, name, addr, unreadCount, id == selectedAccountId);
|
||||
holder.bind(glideRequests, id, dcContact, name, addr, unreadCount, id == selectedAccountId, dcContext.isMuted());
|
||||
}
|
||||
|
||||
public interface ItemClickListener {
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.components.AvatarImageView;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
public class AccountSelectionListItem extends LinearLayout {
|
||||
@@ -57,7 +58,7 @@ public class AccountSelectionListItem extends LinearLayout {
|
||||
ViewUtil.setTextViewGravityStart(this.nameView, getContext());
|
||||
}
|
||||
|
||||
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected) {
|
||||
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted) {
|
||||
this.accountId = accountId;
|
||||
|
||||
Recipient recipient;
|
||||
@@ -70,6 +71,8 @@ public class AccountSelectionListItem extends LinearLayout {
|
||||
}
|
||||
this.contactPhotoImage.setAvatar(glideRequests, recipient, false);
|
||||
|
||||
nameView.setCompoundDrawablesWithIntrinsicBounds(isMuted? R.drawable.ic_volume_off_grey600_18dp : 0, 0, 0, 0);
|
||||
|
||||
if (selected) {
|
||||
addrView.setTypeface(null, Typeface.BOLD);
|
||||
nameView.setTypeface(null, Typeface.BOLD);
|
||||
@@ -80,7 +83,7 @@ public class AccountSelectionListItem extends LinearLayout {
|
||||
checkbox.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
updateUnreadIndicator(unreadCount);
|
||||
updateUnreadIndicator(unreadCount, isMuted);
|
||||
setText(name, addr);
|
||||
}
|
||||
|
||||
@@ -88,10 +91,11 @@ public class AccountSelectionListItem extends LinearLayout {
|
||||
contactPhotoImage.clear(glideRequests);
|
||||
}
|
||||
|
||||
private void updateUnreadIndicator(int unreadCount) {
|
||||
private void updateUnreadIndicator(int unreadCount, boolean isMuted) {
|
||||
if(unreadCount == 0) {
|
||||
unreadIndicator.setVisibility(View.GONE);
|
||||
} else {
|
||||
final int color = getResources().getColor(isMuted ? (ThemeUtil.isDarkTheme(getContext()) ? R.color.unread_count_muted_dark : R.color.unread_count_muted) : R.color.unread_count);
|
||||
unreadIndicator.setImageDrawable(TextDrawable.builder()
|
||||
.beginConfig()
|
||||
.width(ViewUtil.dpToPx(getContext(), 24))
|
||||
@@ -99,7 +103,7 @@ public class AccountSelectionListItem extends LinearLayout {
|
||||
.textColor(Color.WHITE)
|
||||
.bold()
|
||||
.endConfig()
|
||||
.buildRound(String.valueOf(unreadCount), getResources().getColor(R.color.unread_count)));
|
||||
.buildRound(String.valueOf(unreadCount), color));
|
||||
unreadIndicator.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public class KeepAliveService extends Service {
|
||||
// note, that unfortunately, the check for isIgnoringBatteryOptimizations() is not sufficient,
|
||||
// this checks only stock-android settings, several os have additional "optimizers" that ignore this setting.
|
||||
// therefore, the most reliable way to not get killed is a permanent-foreground-notification.
|
||||
if (Prefs.isNotificationsEnabled(context) && Prefs.reliableService(context)) {
|
||||
if (Prefs.reliableService(context)) {
|
||||
startSelf(context);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -333,7 +333,7 @@ public class NotificationCenter {
|
||||
DcChat dcChat = dcContext.getChat(chatId);
|
||||
ChatData chatData = new ChatData(accountId, chatId);
|
||||
|
||||
if (!Prefs.isNotificationsEnabled(context) || dcChat.isMuted()) {
|
||||
if (dcContext.isMuted() || dcChat.isMuted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -598,7 +598,7 @@ public class NotificationCenter {
|
||||
}
|
||||
|
||||
public void maybePlaySendSound(DcChat dcChat) {
|
||||
if (Prefs.isInChatNotifications(context) && Prefs.isNotificationsEnabled(context) && !dcChat.isMuted()) {
|
||||
if (Prefs.isInChatNotifications(context) && !dcChat.isMuted()) {
|
||||
InChatSounds.getInstance(context).playSendSound();
|
||||
}
|
||||
}
|
||||
|
||||
+7
-11
@@ -29,13 +29,13 @@ import org.thoughtcrime.securesms.notifications.FcmReceiveService;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
|
||||
import static android.app.Activity.RESULT_OK;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_ONLY_FETCH_MVBOX;
|
||||
|
||||
public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragment {
|
||||
|
||||
private static final int REQUEST_CODE_NOTIFICATION_SELECTED = 1;
|
||||
|
||||
private CheckBoxPreference ignoreBattery;
|
||||
private CheckBoxPreference notificationsEnabled;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle paramBundle) {
|
||||
@@ -106,7 +106,7 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
||||
reliableService.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
Context context = getContext();
|
||||
boolean enabled = (Boolean) newValue; // Prefs.reliableService() still has the old value
|
||||
if (enabled && Prefs.isNotificationsEnabled(context)) {
|
||||
if (enabled) {
|
||||
KeepAliveService.startSelf(context);
|
||||
} else {
|
||||
context.stopService(new Intent(context, KeepAliveService.class));
|
||||
@@ -114,15 +114,10 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
||||
return true;
|
||||
});
|
||||
|
||||
CheckBoxPreference notificationsEnabled = this.findPreference("pref_key_enable_notifications");
|
||||
notificationsEnabled = this.findPreference("pref_key_enable_notifications");
|
||||
notificationsEnabled.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
Context context = getContext();
|
||||
boolean enabled = (Boolean) newValue; // Prefs.isNotificationsEnabled() still has the old value
|
||||
if (enabled && Prefs.reliableService(context)) {
|
||||
KeepAliveService.startSelf(context);
|
||||
} else {
|
||||
context.stopService(new Intent(context, KeepAliveService.class));
|
||||
}
|
||||
boolean enabled = (Boolean) newValue;
|
||||
dcContext.setMuted(!enabled);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
@@ -139,6 +134,7 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
||||
|
||||
// update ignoreBattery in onResume() to reflects changes done in the system settings
|
||||
ignoreBattery.setChecked(isIgnoringBatteryOptimizations());
|
||||
notificationsEnabled.setChecked(!dcContext.isMuted());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -237,7 +233,7 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
||||
public static CharSequence getSummary(Context context) {
|
||||
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU || notificationManager.areNotificationsEnabled()) {
|
||||
return context.getString(Prefs.isNotificationsEnabled(context) ? R.string.on : R.string.off);
|
||||
return context.getString(DcHelper.getContext(context).isMuted() ? R.string.off : R.string.on);
|
||||
} else {
|
||||
return context.getString(R.string.disabled_in_system_settings);
|
||||
}
|
||||
|
||||
@@ -168,10 +168,6 @@ public class Prefs {
|
||||
return getIntegerPreference(context, PROMPTED_DOZE_MSG_ID_PREF, 0);
|
||||
}
|
||||
|
||||
public static boolean isNotificationsEnabled(Context context) {
|
||||
return getBooleanPreference(context, NOTIFICATION_PREF, true);
|
||||
}
|
||||
|
||||
public static boolean isPushEnabled(Context context) {
|
||||
return BuildConfig.USE_PLAY_SERVICES && getBooleanPreference(context, "pref_push_enabled", true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user