mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-10 14:24:05 +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 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);
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
@ -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 +
|
||||
'}';
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user