Merge pull request #1648 from nextcloud/call-notifcation-setting

Replace 'mute calls' by 'call notifications'
This commit is contained in:
Tim Krueger 2021-10-25 14:01:45 +02:00 committed by GitHub
commit 8fd4f3e5d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 105 additions and 27 deletions

View File

@ -4,8 +4,10 @@
*
* @author Mario Danic
* @author Marcel Hibbe
* @author Tim Krüger
* Copyright (C) 2017 Mario Danic (mario@lovelyhq.com)
* 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
* it under the terms of the GNU General Public License as published by
@ -418,4 +420,9 @@ public interface NcApi {
@DELETE
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);
}

View File

@ -3,6 +3,8 @@
*
* @author Mario Danic
* @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) 2017-2018 Mario Danic <mario@lovelyhq.com>
*
@ -609,7 +611,14 @@ class ConversationInfoController(args: Bundle) :
}
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()

View File

@ -142,11 +142,6 @@ public class NotificationWorker extends Worker {
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(),
"important_conversation", intent.getExtras().getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN()))) != null) {
importantConversation = Boolean.parseBoolean(arbitraryStorageEntity.getValue());
@ -183,6 +178,8 @@ public class NotificationWorker extends Worker {
showNotification(intent);
}
}
muteCall = !(conversation.notificationCalls == 1);
}
@Override

View File

@ -3,6 +3,8 @@
* Nextcloud Talk application
*
* @author Mario Danic
* @author Tim Krüger
* Copyright (C) 2021 Tim Krüger <t@timkrueger.me>
* Copyright (C) 2017 Mario Danic (mario@lovelyhq.com)
*
* 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 java.util.HashMap;
import java.util.Objects;
@Parcel
@JsonObject
@ -101,6 +104,9 @@ public class Conversation {
@JsonField(name = "unreadMentionDirect")
public Boolean unreadMentionDirect;
@JsonField(name = "notificationCalls")
public Integer notificationCalls;
public boolean isPublic() {
return (ConversationType.ROOM_PUBLIC_CALL.equals(type));
}
@ -261,6 +267,8 @@ public class Conversation {
return unreadMentionDirect;
}
public Integer getNotificationCalls() { return notificationCalls; }
public void setRoomId(String roomId) {
this.roomId = roomId;
}
@ -370,6 +378,7 @@ public class Conversation {
this.unreadMentionDirect = unreadMentionDirect;
}
@Override
public boolean equals(Object o) {
if (this == o) {
@ -405,46 +414,46 @@ public class Conversation {
if (callFlag != that.callFlag) {
return false;
}
if (roomId != null ? !roomId.equals(that.roomId) : that.roomId != null) {
if (!Objects.equals(roomId, that.roomId)) {
return false;
}
if (!token.equals(that.token)) {
return false;
}
if (name != null ? !name.equals(that.name) : that.name != null) {
if (!Objects.equals(name, that.name)) {
return false;
}
if (displayName != null ? !displayName.equals(that.displayName) : that.displayName != null) {
if (!Objects.equals(displayName, that.displayName)) {
return false;
}
if (description != null ? !description.equals(that.description) : that.description != null) {
if (!Objects.equals(description, that.description)) {
return false;
}
if (type != that.type) {
return false;
}
if (participants != null ? !participants.equals(that.participants) : that.participants != null) {
if (!Objects.equals(participants, that.participants)) {
return false;
}
if (participantType != that.participantType) {
return false;
}
if (sessionId != null ? !sessionId.equals(that.sessionId) : that.sessionId != null) {
if (!Objects.equals(sessionId, that.sessionId)) {
return false;
}
if (actorId != null ? !actorId.equals(that.actorId) : that.actorId != null) {
if (!Objects.equals(actorId, that.actorId)) {
return false;
}
if (actorType != null ? !actorType.equals(that.actorType) : that.actorType != null) {
if (!Objects.equals(actorType, that.actorType)) {
return false;
}
if (password != null ? !password.equals(that.password) : that.password != null) {
if (!Objects.equals(password, that.password)) {
return false;
}
if (lastMessage != null ? !lastMessage.equals(that.lastMessage) : that.lastMessage != null) {
if (!Objects.equals(lastMessage, that.lastMessage)) {
return false;
}
if (objectType != null ? !objectType.equals(that.objectType) : that.objectType != null) {
if (!Objects.equals(objectType, that.objectType)) {
return false;
}
if (notificationLevel != that.notificationLevel) {
@ -456,13 +465,16 @@ public class Conversation {
if (lobbyState != that.lobbyState) {
return false;
}
if (lobbyTimer != null ? !lobbyTimer.equals(that.lobbyTimer) : that.lobbyTimer != null) {
if (!Objects.equals(lobbyTimer, that.lobbyTimer)) {
return false;
}
if (canLeaveConversation != null ? !canLeaveConversation.equals(that.canLeaveConversation) : that.canLeaveConversation != null) {
if (!Objects.equals(canLeaveConversation, that.canLeaveConversation)) {
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) {
@ -499,6 +511,7 @@ public class Conversation {
result = 31 * result + callFlag;
result = 31 * result + (canLeaveConversation != null ? canLeaveConversation.hashCode() : 0);
result = 31 * result + (canDeleteConversation != null ? canDeleteConversation.hashCode() : 0);
result = 31 * result + (notificationCalls != null ? notificationCalls.hashCode() : 0);
return result;
}
@ -533,6 +546,7 @@ public class Conversation {
", callFlag=" + callFlag +
", canLeaveConversation=" + canLeaveConversation +
", canDeleteConversation=" + canDeleteConversation +
", notificationCalls=" + notificationCalls +
'}';
}

View File

@ -2,6 +2,8 @@
* Nextcloud Talk application
*
* @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>
*
* 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";
}
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) {
return getUrlForApi(version, baseUrl) + "/call/" + token;
}

View File

@ -2,6 +2,8 @@
* Nextcloud Talk application
*
* @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>
*
* 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.text.TextUtils;
import android.util.Log;
import autodagger.AutoInjector;
import com.nextcloud.talk.api.NcApi;
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.utils.ApiUtils;
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.yarolegovich.mp.io.StorageModule;
import org.jetbrains.annotations.NotNull;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import javax.inject.Inject;
import java.util.Collections;
import java.util.Set;
@AutoInjector(NextcloudTalkApplication.class)
public class DatabaseStorageModule implements StorageModule {
private static final String TAG = "DatabaseStorageModule";
@Inject
ArbitraryStorageUtils arbitraryStorageUtils;
@Inject
NcApi ncApi;
private UserEntity conversationUser;
private String conversationToken;
private long accountIdentifier;
@ -65,6 +78,40 @@ public class DatabaseStorageModule implements StorageModule {
@Override
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")) {
arbitraryStorageUtils.storeStorageSetting(accountIdentifier, key, Boolean.toString(value), conversationToken);
} else {

View File

@ -54,13 +54,12 @@
apc:mp_title="@string/nc_plain_old_messages" />
<com.yarolegovich.mp.MaterialSwitchPreference
android:id="@+id/muteCalls"
android:id="@+id/callNotifications"
android:layout_width="match_parent"
android:layout_height="wrap_content"
apc:mp_default_value="false"
apc:mp_key="mute_calls"
apc:mp_title="@string/nc_mute_calls"
apc:mp_summary="@string/nc_mute_calls_desc"/>
apc:mp_default_value="true"
apc:mp_key="call_notifications"
apc:mp_title="@string/nc_call_notifications" />
</com.yarolegovich.mp.MaterialPreferenceCategory>

View File

@ -231,8 +231,7 @@
<string name="nc_notify_me_always">Always notify</string>
<string name="nc_notify_me_mention">Notify when mentioned</string>
<string name="nc_notify_me_never">Never notify</string>
<string name="nc_mute_calls">Mute calls</string>
<string name="nc_mute_calls_desc">Incoming calls will be silenced</string>
<string name="nc_call_notifications">Call notifications</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>