mirror of
https://github.com/nextcloud/talk-android
synced 2025-02-02 20:53:09 +00:00
disable call buttons if calls are disabled by capability
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
parent
b53e0a8029
commit
436c860011
@ -411,7 +411,7 @@ class ChatController(args: Bundle) :
|
||||
}
|
||||
|
||||
private fun loadAvatarForStatusBar() {
|
||||
if (inOneToOneCall() && activity != null && conversationVoiceCallMenuItem != null) {
|
||||
if (inOneToOneCall() && activity != null) {
|
||||
|
||||
val imageRequest = DisplayUtils.getImageRequestForUrl(
|
||||
ApiUtils.getUrlForAvatar(
|
||||
@ -1159,35 +1159,56 @@ class ChatController(args: Bundle) :
|
||||
}
|
||||
|
||||
private fun checkReadOnlyState() {
|
||||
if (currentConversation != null && isAlive()) {
|
||||
if (currentConversation?.shouldShowLobby(conversationUser) ?: false ||
|
||||
currentConversation?.conversationReadOnlyState != null &&
|
||||
currentConversation?.conversationReadOnlyState ==
|
||||
Conversation.ConversationReadOnlyState.CONVERSATION_READ_ONLY
|
||||
) {
|
||||
|
||||
conversationVoiceCallMenuItem?.icon?.alpha = SEMI_TRANSPARENT_INT
|
||||
conversationVideoMenuItem?.icon?.alpha = SEMI_TRANSPARENT_INT
|
||||
if (isAlive()) {
|
||||
if (isReadOnlyConversation() || shouldShowLobby()) {
|
||||
disableCallButtons()
|
||||
binding.messageInputView.visibility = View.GONE
|
||||
} else {
|
||||
if (conversationVoiceCallMenuItem != null) {
|
||||
conversationVoiceCallMenuItem?.icon?.alpha = FULLY_OPAQUE_INT
|
||||
}
|
||||
|
||||
if (conversationVideoMenuItem != null) {
|
||||
conversationVideoMenuItem?.icon?.alpha = FULLY_OPAQUE_INT
|
||||
}
|
||||
|
||||
if (currentConversation != null && currentConversation!!.shouldShowLobby(conversationUser)
|
||||
) {
|
||||
binding.messageInputView.visibility = View.GONE
|
||||
} else {
|
||||
binding.messageInputView.visibility = View.VISIBLE
|
||||
}
|
||||
enableCallButtons()
|
||||
binding.messageInputView.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldShowLobby(): Boolean {
|
||||
if (currentConversation != null) {
|
||||
return currentConversation?.shouldShowLobby(conversationUser) == true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private fun disableCallButtons() {
|
||||
if (CapabilitiesUtil.isAbleToCall(conversationUser)) {
|
||||
if (conversationVoiceCallMenuItem != null && conversationVideoMenuItem != null) {
|
||||
conversationVoiceCallMenuItem?.icon?.alpha = SEMI_TRANSPARENT_INT
|
||||
conversationVideoMenuItem?.icon?.alpha = SEMI_TRANSPARENT_INT
|
||||
conversationVoiceCallMenuItem?.isEnabled = false
|
||||
conversationVideoMenuItem?.isEnabled = false
|
||||
} else {
|
||||
Log.e(TAG, "call buttons were null when trying to disable them")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun enableCallButtons() {
|
||||
if (CapabilitiesUtil.isAbleToCall(conversationUser)) {
|
||||
if (conversationVoiceCallMenuItem != null && conversationVideoMenuItem != null) {
|
||||
conversationVoiceCallMenuItem?.icon?.alpha = FULLY_OPAQUE_INT
|
||||
conversationVideoMenuItem?.icon?.alpha = FULLY_OPAQUE_INT
|
||||
conversationVoiceCallMenuItem?.isEnabled = true
|
||||
conversationVideoMenuItem?.isEnabled = true
|
||||
} else {
|
||||
Log.e(TAG, "call buttons were null when trying to enable them")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun isReadOnlyConversation(): Boolean {
|
||||
return currentConversation?.conversationReadOnlyState != null &&
|
||||
currentConversation?.conversationReadOnlyState ==
|
||||
Conversation.ConversationReadOnlyState.CONVERSATION_READ_ONLY
|
||||
}
|
||||
|
||||
private fun checkLobbyState() {
|
||||
if (currentConversation != null &&
|
||||
currentConversation?.isLobbyViewApplicable(conversationUser) ?: false &&
|
||||
@ -2300,14 +2321,11 @@ class ChatController(args: Bundle) :
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
super.onCreateOptionsMenu(menu, inflater)
|
||||
inflater.inflate(R.menu.menu_conversation, menu)
|
||||
|
||||
if (conversationUser?.userId == "?") {
|
||||
menu.removeItem(R.id.conversation_info)
|
||||
conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call)
|
||||
conversationVideoMenuItem = menu.findItem(R.id.conversation_video_call)
|
||||
} else {
|
||||
conversationInfoMenuItem = menu.findItem(R.id.conversation_info)
|
||||
conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call)
|
||||
conversationVideoMenuItem = menu.findItem(R.id.conversation_video_call)
|
||||
|
||||
if (CapabilitiesUtil.hasSpreedFeatureCapability(conversationUser, "rich-object-list-media")) {
|
||||
conversationSharedItemsItem = menu.findItem(R.id.shared_items)
|
||||
@ -2317,6 +2335,14 @@ class ChatController(args: Bundle) :
|
||||
|
||||
loadAvatarForStatusBar()
|
||||
}
|
||||
|
||||
if (CapabilitiesUtil.isAbleToCall(conversationUser)) {
|
||||
conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call)
|
||||
conversationVideoMenuItem = menu.findItem(R.id.conversation_video_call)
|
||||
} else {
|
||||
menu.removeItem(R.id.conversation_video_call)
|
||||
menu.removeItem(R.id.conversation_voice_call)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
@ -2335,18 +2361,12 @@ class ChatController(args: Bundle) :
|
||||
return true
|
||||
}
|
||||
R.id.conversation_video_call -> {
|
||||
if (conversationVideoMenuItem?.icon?.alpha == FULLY_OPAQUE_INT) {
|
||||
startACall(false)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
startACall(false)
|
||||
return true
|
||||
}
|
||||
R.id.conversation_voice_call -> {
|
||||
if (conversationVoiceCallMenuItem?.icon?.alpha == FULLY_OPAQUE_INT) {
|
||||
startACall(true)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
startACall(true)
|
||||
return true
|
||||
}
|
||||
R.id.conversation_info -> {
|
||||
showConversationInfoScreen()
|
||||
|
@ -40,7 +40,7 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
if (capabilities.getNotificationsCapability() != null &&
|
||||
capabilities.getNotificationsCapability().getFeatures() != null) {
|
||||
capabilities.getNotificationsCapability().getFeatures() != null) {
|
||||
return capabilities.getSpreedCapability().getFeatures().contains(capabilityName);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@ -55,7 +55,7 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
if (capabilities.getExternalCapability() != null &&
|
||||
capabilities.getExternalCapability().containsKey("v1")) {
|
||||
capabilities.getExternalCapability().containsKey("v1")) {
|
||||
return capabilities.getExternalCapability().get("v1").contains(capabilityName);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@ -84,7 +84,7 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
if (capabilities != null && capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures() != null) {
|
||||
capabilities.getSpreedCapability().getFeatures() != null) {
|
||||
return capabilities.getSpreedCapability().getFeatures().contains(capabilityName);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@ -99,13 +99,13 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
if (capabilities != null &&
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("chat")) {
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("chat")) {
|
||||
HashMap<String, String> chatConfigHashMap = capabilities
|
||||
.getSpreedCapability()
|
||||
.getConfig()
|
||||
.get("chat");
|
||||
.getSpreedCapability()
|
||||
.getConfig()
|
||||
.get("chat");
|
||||
if (chatConfigHashMap != null && chatConfigHashMap.containsKey("max-length")) {
|
||||
int chatSize = Integer.parseInt(chatConfigHashMap.get("max-length"));
|
||||
if (chatSize > 0) {
|
||||
@ -127,9 +127,9 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
return capabilities != null &&
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures().contains("phonebook-search");
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures().contains("phonebook-search");
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Failed to get capabilities for the user");
|
||||
}
|
||||
@ -142,9 +142,9 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
if (capabilities != null &&
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("chat")) {
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("chat")) {
|
||||
Map<String, String> map = capabilities.getSpreedCapability().getConfig().get("chat");
|
||||
return map != null && map.containsKey("read-privacy");
|
||||
}
|
||||
@ -160,9 +160,9 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
if (capabilities != null &&
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("chat")) {
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("chat")) {
|
||||
HashMap<String, String> map = capabilities.getSpreedCapability().getConfig().get("chat");
|
||||
if (map != null && map.containsKey("read-privacy")) {
|
||||
return Integer.parseInt(map.get("read-privacy")) == 1;
|
||||
@ -196,9 +196,9 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
if (capabilities != null &&
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("attachments")) {
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("attachments")) {
|
||||
HashMap<String, String> map = capabilities.getSpreedCapability().getConfig().get("attachments");
|
||||
if (map != null && map.containsKey("folder")) {
|
||||
return map.get("folder");
|
||||
@ -233,9 +233,9 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
return (capabilities != null &&
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures().contains("temp-user-avatar-api"));
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures() != null &&
|
||||
capabilities.getSpreedCapability().getFeatures().contains("temp-user-avatar-api"));
|
||||
} catch (IOException e) {
|
||||
Log.e("User.java", "Failed to get server name", e);
|
||||
}
|
||||
@ -249,13 +249,36 @@ public abstract class CapabilitiesUtil {
|
||||
try {
|
||||
capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
return (capabilities != null &&
|
||||
capabilities.getProvisioningCapability() != null &&
|
||||
capabilities.getProvisioningCapability().getAccountPropertyScopesVersion() != null &&
|
||||
capabilities.getProvisioningCapability().getAccountPropertyScopesVersion() > 1);
|
||||
capabilities.getProvisioningCapability() != null &&
|
||||
capabilities.getProvisioningCapability().getAccountPropertyScopesVersion() != null &&
|
||||
capabilities.getProvisioningCapability().getAccountPropertyScopesVersion() > 1);
|
||||
} catch (IOException e) {
|
||||
Log.e("User.java", "Failed to get server name", e);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isAbleToCall(@Nullable UserEntity user) {
|
||||
if (user != null && user.getCapabilities() != null) {
|
||||
try {
|
||||
Capabilities capabilities = LoganSquare.parse(user.getCapabilities(), Capabilities.class);
|
||||
if (capabilities != null &&
|
||||
capabilities.getSpreedCapability() != null &&
|
||||
capabilities.getSpreedCapability().getConfig() != null &&
|
||||
capabilities.getSpreedCapability().getConfig().containsKey("call") &&
|
||||
capabilities.getSpreedCapability().getConfig().get("call") != null &&
|
||||
capabilities.getSpreedCapability().getConfig().get("call").containsKey("enabled")) {
|
||||
return Boolean.parseBoolean(
|
||||
capabilities.getSpreedCapability().getConfig().get("call").get("enabled"));
|
||||
} else {
|
||||
// older nextcloud versions without the capability can't disable the calls
|
||||
return true;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Failed to get capabilities for the user", e);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user