mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-10 22:34:15 +01:00
Merge pull request #1648 from nextcloud/call-notifcation-setting
Replace 'mute calls' by 'call notifications'
This commit is contained in:
commit
8fd4f3e5d8
@ -4,8 +4,10 @@
|
|||||||
*
|
*
|
||||||
* @author Mario Danic
|
* @author Mario Danic
|
||||||
* @author Marcel Hibbe
|
* @author Marcel Hibbe
|
||||||
|
* @author Tim Krüger
|
||||||
* Copyright (C) 2017 Mario Danic (mario@lovelyhq.com)
|
* Copyright (C) 2017 Mario Danic (mario@lovelyhq.com)
|
||||||
* Copyright (C) 2021 Marcel Hibbe <dev@mhibbe.de>
|
* Copyright (C) 2021 Marcel Hibbe <dev@mhibbe.de>
|
||||||
|
* Copyright (C) 2021 Tim Krüger <t@timkrueger.me>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -418,4 +420,9 @@ public interface NcApi {
|
|||||||
|
|
||||||
@DELETE
|
@DELETE
|
||||||
Observable<GenericOverall> clearChatHistory(@Header("Authorization") String authorization, @Url String url);
|
Observable<GenericOverall> clearChatHistory(@Header("Authorization") String authorization, @Url String url);
|
||||||
|
|
||||||
|
@FormUrlEncoded
|
||||||
|
@POST
|
||||||
|
Observable<GenericOverall> notificationCalls(@Header("Authorization") String authorization, @Url String url,
|
||||||
|
@Field("level") Integer level);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
*
|
*
|
||||||
* @author Mario Danic
|
* @author Mario Danic
|
||||||
* @author Andy Scherzinger
|
* @author Andy Scherzinger
|
||||||
|
* @author Tim Krüger
|
||||||
|
* Copyright (C) 2021 Tim Krüger <t@timkrueger.me>
|
||||||
* Copyright (C) 2021 Andy Scherzinger (info@andy-scherzinger.de)
|
* Copyright (C) 2021 Andy Scherzinger (info@andy-scherzinger.de)
|
||||||
* Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
|
* Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
|
||||||
*
|
*
|
||||||
@ -609,7 +611,14 @@ class ConversationInfoController(args: Bundle) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Conversation.ConversationType.ROOM_SYSTEM == conversation!!.type) {
|
if (Conversation.ConversationType.ROOM_SYSTEM == conversation!!.type) {
|
||||||
binding.notificationSettingsView.muteCalls.visibility = View.GONE
|
binding.notificationSettingsView.callNotifications.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conversation!!.notificationCalls === null) {
|
||||||
|
binding.notificationSettingsView.callNotifications.visibility = View.GONE
|
||||||
|
} else {
|
||||||
|
binding.notificationSettingsView.callNotifications.value =
|
||||||
|
conversationCopy.notificationCalls == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
getListOfParticipants()
|
getListOfParticipants()
|
||||||
|
@ -142,11 +142,6 @@ public class NotificationWorker extends Worker {
|
|||||||
|
|
||||||
ArbitraryStorageEntity arbitraryStorageEntity;
|
ArbitraryStorageEntity arbitraryStorageEntity;
|
||||||
|
|
||||||
if ((arbitraryStorageEntity = arbitraryStorageUtils.getStorageSetting(userEntity.getId(),
|
|
||||||
"mute_calls", intent.getExtras().getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN()))) != null) {
|
|
||||||
muteCall = Boolean.parseBoolean(arbitraryStorageEntity.getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((arbitraryStorageEntity = arbitraryStorageUtils.getStorageSetting(userEntity.getId(),
|
if ((arbitraryStorageEntity = arbitraryStorageUtils.getStorageSetting(userEntity.getId(),
|
||||||
"important_conversation", intent.getExtras().getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN()))) != null) {
|
"important_conversation", intent.getExtras().getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN()))) != null) {
|
||||||
importantConversation = Boolean.parseBoolean(arbitraryStorageEntity.getValue());
|
importantConversation = Boolean.parseBoolean(arbitraryStorageEntity.getValue());
|
||||||
@ -183,6 +178,8 @@ public class NotificationWorker extends Worker {
|
|||||||
showNotification(intent);
|
showNotification(intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
muteCall = !(conversation.notificationCalls == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
* Nextcloud Talk application
|
* Nextcloud Talk application
|
||||||
*
|
*
|
||||||
* @author Mario Danic
|
* @author Mario Danic
|
||||||
|
* @author Tim Krüger
|
||||||
|
* Copyright (C) 2021 Tim Krüger <t@timkrueger.me>
|
||||||
* Copyright (C) 2017 Mario Danic (mario@lovelyhq.com)
|
* Copyright (C) 2017 Mario Danic (mario@lovelyhq.com)
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
@ -35,6 +37,7 @@ import com.nextcloud.talk.models.json.participants.Participant;
|
|||||||
import org.parceler.Parcel;
|
import org.parceler.Parcel;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Parcel
|
@Parcel
|
||||||
@JsonObject
|
@JsonObject
|
||||||
@ -101,6 +104,9 @@ public class Conversation {
|
|||||||
@JsonField(name = "unreadMentionDirect")
|
@JsonField(name = "unreadMentionDirect")
|
||||||
public Boolean unreadMentionDirect;
|
public Boolean unreadMentionDirect;
|
||||||
|
|
||||||
|
@JsonField(name = "notificationCalls")
|
||||||
|
public Integer notificationCalls;
|
||||||
|
|
||||||
public boolean isPublic() {
|
public boolean isPublic() {
|
||||||
return (ConversationType.ROOM_PUBLIC_CALL.equals(type));
|
return (ConversationType.ROOM_PUBLIC_CALL.equals(type));
|
||||||
}
|
}
|
||||||
@ -261,6 +267,8 @@ public class Conversation {
|
|||||||
return unreadMentionDirect;
|
return unreadMentionDirect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getNotificationCalls() { return notificationCalls; }
|
||||||
|
|
||||||
public void setRoomId(String roomId) {
|
public void setRoomId(String roomId) {
|
||||||
this.roomId = roomId;
|
this.roomId = roomId;
|
||||||
}
|
}
|
||||||
@ -370,6 +378,7 @@ public class Conversation {
|
|||||||
this.unreadMentionDirect = unreadMentionDirect;
|
this.unreadMentionDirect = unreadMentionDirect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) {
|
if (this == o) {
|
||||||
@ -405,46 +414,46 @@ public class Conversation {
|
|||||||
if (callFlag != that.callFlag) {
|
if (callFlag != that.callFlag) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (roomId != null ? !roomId.equals(that.roomId) : that.roomId != null) {
|
if (!Objects.equals(roomId, that.roomId)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!token.equals(that.token)) {
|
if (!token.equals(that.token)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (name != null ? !name.equals(that.name) : that.name != null) {
|
if (!Objects.equals(name, that.name)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (displayName != null ? !displayName.equals(that.displayName) : that.displayName != null) {
|
if (!Objects.equals(displayName, that.displayName)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (description != null ? !description.equals(that.description) : that.description != null) {
|
if (!Objects.equals(description, that.description)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (type != that.type) {
|
if (type != that.type) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (participants != null ? !participants.equals(that.participants) : that.participants != null) {
|
if (!Objects.equals(participants, that.participants)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (participantType != that.participantType) {
|
if (participantType != that.participantType) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (sessionId != null ? !sessionId.equals(that.sessionId) : that.sessionId != null) {
|
if (!Objects.equals(sessionId, that.sessionId)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (actorId != null ? !actorId.equals(that.actorId) : that.actorId != null) {
|
if (!Objects.equals(actorId, that.actorId)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (actorType != null ? !actorType.equals(that.actorType) : that.actorType != null) {
|
if (!Objects.equals(actorType, that.actorType)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (password != null ? !password.equals(that.password) : that.password != null) {
|
if (!Objects.equals(password, that.password)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (lastMessage != null ? !lastMessage.equals(that.lastMessage) : that.lastMessage != null) {
|
if (!Objects.equals(lastMessage, that.lastMessage)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (objectType != null ? !objectType.equals(that.objectType) : that.objectType != null) {
|
if (!Objects.equals(objectType, that.objectType)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (notificationLevel != that.notificationLevel) {
|
if (notificationLevel != that.notificationLevel) {
|
||||||
@ -456,13 +465,16 @@ public class Conversation {
|
|||||||
if (lobbyState != that.lobbyState) {
|
if (lobbyState != that.lobbyState) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (lobbyTimer != null ? !lobbyTimer.equals(that.lobbyTimer) : that.lobbyTimer != null) {
|
if (!Objects.equals(lobbyTimer, that.lobbyTimer)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (canLeaveConversation != null ? !canLeaveConversation.equals(that.canLeaveConversation) : that.canLeaveConversation != null) {
|
if (!Objects.equals(canLeaveConversation, that.canLeaveConversation)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return canDeleteConversation != null ? canDeleteConversation.equals(that.canDeleteConversation) : that.canDeleteConversation == null;
|
if (!Objects.equals(notificationCalls, that.notificationCalls)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return Objects.equals(canDeleteConversation, that.canDeleteConversation);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean canEqual(final Object other) {
|
protected boolean canEqual(final Object other) {
|
||||||
@ -499,6 +511,7 @@ public class Conversation {
|
|||||||
result = 31 * result + callFlag;
|
result = 31 * result + callFlag;
|
||||||
result = 31 * result + (canLeaveConversation != null ? canLeaveConversation.hashCode() : 0);
|
result = 31 * result + (canLeaveConversation != null ? canLeaveConversation.hashCode() : 0);
|
||||||
result = 31 * result + (canDeleteConversation != null ? canDeleteConversation.hashCode() : 0);
|
result = 31 * result + (canDeleteConversation != null ? canDeleteConversation.hashCode() : 0);
|
||||||
|
result = 31 * result + (notificationCalls != null ? notificationCalls.hashCode() : 0);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -533,6 +546,7 @@ public class Conversation {
|
|||||||
", callFlag=" + callFlag +
|
", callFlag=" + callFlag +
|
||||||
", canLeaveConversation=" + canLeaveConversation +
|
", canLeaveConversation=" + canLeaveConversation +
|
||||||
", canDeleteConversation=" + canDeleteConversation +
|
", canDeleteConversation=" + canDeleteConversation +
|
||||||
|
", notificationCalls=" + notificationCalls +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
* Nextcloud Talk application
|
* Nextcloud Talk application
|
||||||
*
|
*
|
||||||
* @author Mario Danic
|
* @author Mario Danic
|
||||||
|
* @author Tim Krüger
|
||||||
|
* Copyright (C) 2021 Tim Krüger <t@timkrueger.me>
|
||||||
* Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
|
* Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
@ -234,6 +236,10 @@ public class ApiUtils {
|
|||||||
return getUrlForRoom(version, baseUrl, token) + "/webinary/lobby";
|
return getUrlForRoom(version, baseUrl, token) + "/webinary/lobby";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getUrlForRoomNotificationCalls(int version, String baseUrl, String token) {
|
||||||
|
return getUrlForRoom(version, baseUrl, token) + "/notify-calls";
|
||||||
|
}
|
||||||
|
|
||||||
public static String getUrlForCall(int version, String baseUrl, String token) {
|
public static String getUrlForCall(int version, String baseUrl, String token) {
|
||||||
return getUrlForApi(version, baseUrl) + "/call/" + token;
|
return getUrlForApi(version, baseUrl) + "/call/" + token;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
* Nextcloud Talk application
|
* Nextcloud Talk application
|
||||||
*
|
*
|
||||||
* @author Mario Danic
|
* @author Mario Danic
|
||||||
|
* @author Tim Krüger
|
||||||
|
* Copyright (C) 2021 Tim Krüger <t@timkrueger.me>
|
||||||
* Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
|
* Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
@ -22,6 +24,8 @@ package com.nextcloud.talk.utils.preferences.preferencestorage;
|
|||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import autodagger.AutoInjector;
|
import autodagger.AutoInjector;
|
||||||
import com.nextcloud.talk.api.NcApi;
|
import com.nextcloud.talk.api.NcApi;
|
||||||
import com.nextcloud.talk.application.NextcloudTalkApplication;
|
import com.nextcloud.talk.application.NextcloudTalkApplication;
|
||||||
@ -31,22 +35,31 @@ import com.nextcloud.talk.models.database.UserEntity;
|
|||||||
import com.nextcloud.talk.models.json.generic.GenericOverall;
|
import com.nextcloud.talk.models.json.generic.GenericOverall;
|
||||||
import com.nextcloud.talk.utils.ApiUtils;
|
import com.nextcloud.talk.utils.ApiUtils;
|
||||||
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils;
|
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils;
|
||||||
|
import com.nextcloud.talk.utils.database.user.UserUtils;
|
||||||
import com.yarolegovich.mp.io.StorageModule;
|
import com.yarolegovich.mp.io.StorageModule;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import io.reactivex.Observer;
|
import io.reactivex.Observer;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.Disposable;
|
import io.reactivex.disposables.Disposable;
|
||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@AutoInjector(NextcloudTalkApplication.class)
|
@AutoInjector(NextcloudTalkApplication.class)
|
||||||
public class DatabaseStorageModule implements StorageModule {
|
public class DatabaseStorageModule implements StorageModule {
|
||||||
|
private static final String TAG = "DatabaseStorageModule";
|
||||||
@Inject
|
@Inject
|
||||||
ArbitraryStorageUtils arbitraryStorageUtils;
|
ArbitraryStorageUtils arbitraryStorageUtils;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
NcApi ncApi;
|
NcApi ncApi;
|
||||||
|
|
||||||
|
|
||||||
private UserEntity conversationUser;
|
private UserEntity conversationUser;
|
||||||
private String conversationToken;
|
private String conversationToken;
|
||||||
private long accountIdentifier;
|
private long accountIdentifier;
|
||||||
@ -65,6 +78,40 @@ public class DatabaseStorageModule implements StorageModule {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveBoolean(String key, boolean value) {
|
public void saveBoolean(String key, boolean value) {
|
||||||
|
if(key.equals("call_notifications")) {
|
||||||
|
int apiVersion = ApiUtils.getConversationApiVersion(conversationUser, new int[]{4});
|
||||||
|
ncApi.notificationCalls(ApiUtils.getCredentials(conversationUser.getUsername(),
|
||||||
|
conversationUser.getToken()),
|
||||||
|
ApiUtils.getUrlForRoomNotificationCalls(apiVersion,
|
||||||
|
conversationUser.getBaseUrl(),
|
||||||
|
conversationToken),
|
||||||
|
value ? 1 : 0)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(new Observer<GenericOverall>() {
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(@NotNull Disposable d) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(@NotNull GenericOverall genericOverall) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(@NotNull Throwable e) {
|
||||||
|
Log.e(TAG, "Error when trying to toggle notification calls", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComplete() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (!key.equals("conversation_lobby")) {
|
if (!key.equals("conversation_lobby")) {
|
||||||
arbitraryStorageUtils.storeStorageSetting(accountIdentifier, key, Boolean.toString(value), conversationToken);
|
arbitraryStorageUtils.storeStorageSetting(accountIdentifier, key, Boolean.toString(value), conversationToken);
|
||||||
} else {
|
} else {
|
||||||
|
@ -54,13 +54,12 @@
|
|||||||
apc:mp_title="@string/nc_plain_old_messages" />
|
apc:mp_title="@string/nc_plain_old_messages" />
|
||||||
|
|
||||||
<com.yarolegovich.mp.MaterialSwitchPreference
|
<com.yarolegovich.mp.MaterialSwitchPreference
|
||||||
android:id="@+id/muteCalls"
|
android:id="@+id/callNotifications"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
apc:mp_default_value="false"
|
apc:mp_default_value="true"
|
||||||
apc:mp_key="mute_calls"
|
apc:mp_key="call_notifications"
|
||||||
apc:mp_title="@string/nc_mute_calls"
|
apc:mp_title="@string/nc_call_notifications" />
|
||||||
apc:mp_summary="@string/nc_mute_calls_desc"/>
|
|
||||||
|
|
||||||
</com.yarolegovich.mp.MaterialPreferenceCategory>
|
</com.yarolegovich.mp.MaterialPreferenceCategory>
|
||||||
|
|
||||||
|
@ -231,8 +231,7 @@
|
|||||||
<string name="nc_notify_me_always">Always notify</string>
|
<string name="nc_notify_me_always">Always notify</string>
|
||||||
<string name="nc_notify_me_mention">Notify when mentioned</string>
|
<string name="nc_notify_me_mention">Notify when mentioned</string>
|
||||||
<string name="nc_notify_me_never">Never notify</string>
|
<string name="nc_notify_me_never">Never notify</string>
|
||||||
<string name="nc_mute_calls">Mute calls</string>
|
<string name="nc_call_notifications">Call notifications</string>
|
||||||
<string name="nc_mute_calls_desc">Incoming calls will be silenced</string>
|
|
||||||
<string name="nc_important_conversation">Important conversation</string>
|
<string name="nc_important_conversation">Important conversation</string>
|
||||||
<string name="nc_important_conversation_desc">Notifications in this conversation will override Do Not Disturb settings</string>
|
<string name="nc_important_conversation_desc">Notifications in this conversation will override Do Not Disturb settings</string>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user