migrating from material preferences to native, squashed commit

Signed-off-by: Julius Linus julius.linus@nextcloud.com
This commit is contained in:
rapterjet2004 2023-06-08 15:56:33 -05:00 committed by Marcel Hibbe
parent 1b43d18566
commit 943286ddd6
18 changed files with 1267 additions and 1391 deletions

View File

@ -160,6 +160,7 @@ configurations.all {
} }
dependencies { dependencies {
implementation 'androidx.preference:preference-ktx:1.2.0'
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.0") detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.0")
implementation fileTree(include: ['*'], dir: 'libs') implementation fileTree(include: ['*'], dir: 'libs')
@ -236,7 +237,6 @@ dependencies {
implementation 'net.orange-box.storebox:storebox-lib:1.4.0' implementation 'net.orange-box.storebox:storebox-lib:1.4.0'
implementation 'eu.davidea:flexible-adapter:5.1.0' implementation 'eu.davidea:flexible-adapter:5.1.0'
implementation 'eu.davidea:flexible-adapter-ui:1.0.0' implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
implementation 'com.yarolegovich:mp:1.1.6'
implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0' implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0'
implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'com.github.wooplr:Spotlight:1.3' implementation 'com.github.wooplr:Spotlight:1.3'

View File

@ -42,7 +42,6 @@ import android.view.View.GONE
import android.view.View.VISIBLE import android.view.View.VISIBLE
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SwitchCompat
import androidx.work.Data import androidx.work.Data
import androidx.work.OneTimeWorkRequest import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager import androidx.work.WorkManager
@ -97,7 +96,6 @@ import io.reactivex.schedulers.Schedulers
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode import org.greenrobot.eventbus.ThreadMode
import org.parceler.Parcels import org.parceler.Parcels
import java.lang.Long
import java.util.Calendar import java.util.Calendar
import java.util.Collections import java.util.Collections
import java.util.Locale import java.util.Locale
@ -135,7 +133,7 @@ class ConversationInfoActivity :
private val workerData: Data? private val workerData: Data?
get() { get() {
if (!TextUtils.isEmpty(conversationToken) && conversationUser != null) { if (!TextUtils.isEmpty(conversationToken)) {
val data = Data.Builder() val data = Data.Builder()
data.putString(BundleKeys.KEY_ROOM_TOKEN, conversationToken) data.putString(BundleKeys.KEY_ROOM_TOKEN, conversationToken)
data.putLong(BundleKeys.KEY_INTERNAL_USER_ID, conversationUser.id!!) data.putLong(BundleKeys.KEY_INTERNAL_USER_ID, conversationUser.id!!)
@ -180,7 +178,7 @@ class ConversationInfoActivity :
fetchRoomInfo() fetchRoomInfo()
themeCategories() themeTextViews()
themeSwitchPreferences() themeSwitchPreferences()
binding.addParticipantsAction.visibility = GONE binding.addParticipantsAction.visibility = GONE
@ -253,39 +251,15 @@ class ConversationInfoActivity :
} }
} }
private fun themeCategories() { private fun themeTextViews() {
binding.run {
listOf(
conversationInfoName,
conversationDescription,
addToFavoritesButton,
participantsListCategory,
addParticipantsAction,
dangerZoneOptions,
categorySharedItems,
conversationSettings,
leaveConversationAction,
deleteConversationAction,
clearConversationHistory,
sharedItemsButton,
binding.guestAccessView.guestAccessSettings,
binding.guestAccessView.guestAccessSettingsAllowGuest,
binding.guestAccessView.guestAccessSettingsPasswordProtection,
binding.guestAccessView.shareConversationButton,
binding.guestAccessView.resendInvitationsButton,
binding.webinarInfoView.webinarSettings,
binding.webinarInfoView.webinarSettingsLobby,
binding.webinarInfoView.startTimeButton,
binding.notificationSettingsView.notificationSettings,
binding.notificationSettingsView.notificationSettingsImportantConversation,
binding.notificationSettingsView.notificationSettingsCallNotifications
).forEach(viewThemeUtils.talk::ConversationInfoCardView)
}
binding.run { binding.run {
listOf( listOf(
binding.notificationSettingsView.notificationSettingsCategory, binding.notificationSettingsView.notificationSettingsCategory,
binding.webinarInfoView.webinarSettingsCategory, binding.webinarInfoView.webinarSettingsCategory,
binding.guestAccessView.guestAccessSettingsCategory binding.guestAccessView.guestAccessSettingsCategory,
binding.categorySharedItems,
binding.conversationSettings,
binding.participantsListCategory
) )
}.forEach(viewThemeUtils.platform::colorTextView) }.forEach(viewThemeUtils.platform::colorTextView)
} }
@ -304,18 +278,17 @@ class ConversationInfoActivity :
private fun setupWebinaryView() { private fun setupWebinaryView() {
if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "webinary-lobby") && if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "webinary-lobby") &&
webinaryRoomType(conversation!!) && webinaryRoomType(conversation!!) &&
conversation!!.canModerate(conversationUser!!) conversation!!.canModerate(conversationUser)
) { ) {
binding?.webinarInfoView?.webinarSettings?.visibility = VISIBLE binding.webinarInfoView.webinarSettings.visibility = VISIBLE
val isLobbyOpenToModeratorsOnly = val isLobbyOpenToModeratorsOnly =
conversation!!.lobbyState == Conversation.LobbyState.LOBBY_STATE_MODERATORS_ONLY conversation!!.lobbyState == Conversation.LobbyState.LOBBY_STATE_MODERATORS_ONLY
(binding?.webinarInfoView?.lobbySwitch as SwitchCompat) binding.webinarInfoView.lobbySwitch.isChecked = isLobbyOpenToModeratorsOnly
.isChecked = isLobbyOpenToModeratorsOnly
reconfigureLobbyTimerView() reconfigureLobbyTimerView()
binding?.webinarInfoView?.startTimeButton?.setOnClickListener { binding.webinarInfoView.startTimeButton.setOnClickListener {
MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show { MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show {
val currentTimeCalendar = Calendar.getInstance() val currentTimeCalendar = Calendar.getInstance()
if (conversation!!.lobbyTimer != null && conversation!!.lobbyTimer != 0L) { if (conversation!!.lobbyTimer != null && conversation!!.lobbyTimer != 0L) {
@ -335,13 +308,13 @@ class ConversationInfoActivity :
} }
} }
(binding?.webinarInfoView?.lobbySwitch as SwitchCompat) binding.webinarInfoView.webinarSettingsLobby.setOnClickListener {
.setOnCheckedChangeListener { _, _ -> binding.webinarInfoView.lobbySwitch.isChecked = !binding.webinarInfoView.lobbySwitch.isChecked
reconfigureLobbyTimerView() reconfigureLobbyTimerView()
submitLobbyChanges() submitLobbyChanges()
} }
} else { } else {
binding?.webinarInfoView?.webinarSettings?.visibility = GONE binding.webinarInfoView.webinarSettings.visibility = GONE
} }
} }
@ -351,9 +324,7 @@ class ConversationInfoActivity :
} }
private fun reconfigureLobbyTimerView(dateTime: Calendar? = null) { private fun reconfigureLobbyTimerView(dateTime: Calendar? = null) {
val isChecked = val isChecked = binding.webinarInfoView.lobbySwitch.isChecked
(binding?.webinarInfoView?.lobbySwitch as SwitchCompat)
.isChecked
if (dateTime != null && isChecked) { if (dateTime != null && isChecked) {
conversation!!.lobbyTimer = ( conversation!!.lobbyTimer = (
@ -374,27 +345,24 @@ class ConversationInfoActivity :
conversation!!.lobbyTimer != Long.MIN_VALUE && conversation!!.lobbyTimer != Long.MIN_VALUE &&
conversation!!.lobbyTimer != 0L conversation!!.lobbyTimer != 0L
) { ) {
binding?.webinarInfoView?.startTimeButtonSummary?.text = ( binding.webinarInfoView.startTimeButtonSummary.text = (
dateUtils.getLocalDateTimeStringFromTimestamp( dateUtils.getLocalDateTimeStringFromTimestamp(
conversation!!.lobbyTimer!! * DateConstants.SECOND_DIVIDER conversation!!.lobbyTimer!! * DateConstants.SECOND_DIVIDER
) )
) )
} else { } else {
binding?.webinarInfoView?.startTimeButtonSummary?.setText(R.string.nc_manual) binding.webinarInfoView.startTimeButtonSummary.setText(R.string.nc_manual)
} }
if (isChecked) { if (isChecked) {
binding?.webinarInfoView?.startTimeButton?.visibility = VISIBLE binding.webinarInfoView.startTimeButton.visibility = VISIBLE
} else { } else {
binding?.webinarInfoView?.startTimeButton?.visibility = GONE binding.webinarInfoView.startTimeButton.visibility = GONE
} }
} }
fun submitLobbyChanges() { private fun submitLobbyChanges() {
val state = if ( val state = if (binding.webinarInfoView.lobbySwitch.isChecked) {
(binding?.webinarInfoView?.lobbySwitch as SwitchCompat)
.isChecked
) {
1 1
} else { } else {
0 0
@ -488,11 +456,11 @@ class ConversationInfoActivity :
if (participant.sessionId != null) { if (participant.sessionId != null) {
userItem.isOnline = !participant.sessionId.equals("0") userItem.isOnline = !participant.sessionId.equals("0")
} else { } else {
userItem.isOnline = !participant.sessionIds.isEmpty() userItem.isOnline = participant.sessionIds.isNotEmpty()
} }
if (participant.calculatedActorType == USERS && if (participant.calculatedActorType == USERS &&
participant.calculatedActorId == conversationUser!!.userId participant.calculatedActorId == conversationUser.userId
) { ) {
ownUserItem = userItem ownUserItem = userItem
ownUserItem.model.sessionId = "-1" ownUserItem.model.sessionId = "-1"
@ -510,16 +478,13 @@ class ConversationInfoActivity :
setupAdapter() setupAdapter()
binding.participantsListCategory?.visibility = VISIBLE binding.participants.visibility = VISIBLE
adapter!!.updateDataSet(userItems) adapter!!.updateDataSet(userItems)
} }
private fun getListOfParticipants() { private fun getListOfParticipants() {
var apiVersion = 1
// FIXME Fix API checking with guests? // FIXME Fix API checking with guests?
if (conversationUser != null) { val apiVersion: Int = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(ApiUtils.APIv4, 1))
apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(ApiUtils.APIv4, 1))
}
val fieldMap = HashMap<String, Boolean>() val fieldMap = HashMap<String, Boolean>()
fieldMap["includeStatus"] = true fieldMap["includeStatus"] = true
@ -528,7 +493,7 @@ class ConversationInfoActivity :
credentials, credentials,
ApiUtils.getUrlForParticipants( ApiUtils.getUrlForParticipants(
apiVersion, apiVersion,
conversationUser!!.baseUrl, conversationUser.baseUrl,
conversationToken conversationToken
), ),
fieldMap fieldMap
@ -555,7 +520,7 @@ class ConversationInfoActivity :
}) })
} }
internal fun addParticipants() { private fun addParticipants() {
val bundle = Bundle() val bundle = Bundle()
val existingParticipantsId = arrayListOf<String>() val existingParticipantsId = arrayListOf<String>()
@ -661,13 +626,11 @@ class ConversationInfoActivity :
} }
private fun fetchRoomInfo() { private fun fetchRoomInfo() {
var apiVersion = 1 val apiVersion: Int
// FIXME Fix API checking with guests? // FIXME Fix API checking with guests?
if (conversationUser != null) { apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(ApiUtils.APIv4, 1))
apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(ApiUtils.APIv4, 1))
}
ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, conversationUser!!.baseUrl, conversationToken)) ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, conversationUser.baseUrl, conversationToken))
?.subscribeOn(Schedulers.io()) ?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread()) ?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<RoomOverall> { ?.subscribe(object : Observer<RoomOverall> {
@ -682,64 +645,68 @@ class ConversationInfoActivity :
val conversationCopy = conversation val conversationCopy = conversation
if (conversationCopy!!.canModerate(conversationUser)) { if (conversationCopy!!.canModerate(conversationUser)) {
binding?.addParticipantsAction?.visibility = VISIBLE binding.addParticipantsAction.visibility = VISIBLE
if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "clear-history")) { if (CapabilitiesUtilNew.hasSpreedFeatureCapability(
binding?.clearConversationHistory?.visibility = VISIBLE conversationUser,
"clear-history"
)
) {
binding.clearConversationHistory.visibility = VISIBLE
} else { } else {
binding?.clearConversationHistory?.visibility = GONE binding.clearConversationHistory.visibility = GONE
} }
showOptionsMenu() showOptionsMenu()
} else { } else {
binding?.addParticipantsAction?.visibility = GONE binding.addParticipantsAction.visibility = GONE
binding?.clearConversationHistory?.visibility = GONE binding.clearConversationHistory.visibility = GONE
} }
if (!isDestroyed) { if (!isDestroyed) {
binding?.dangerZoneOptions?.visibility = VISIBLE binding.dangerZoneOptions.visibility = VISIBLE
setupWebinaryView() setupWebinaryView()
if (!conversation!!.canLeave()) { if (!conversation!!.canLeave()) {
binding?.leaveConversationAction?.visibility = GONE binding.leaveConversationAction.visibility = GONE
} else { } else {
binding?.leaveConversationAction?.visibility = VISIBLE binding.leaveConversationAction.visibility = VISIBLE
} }
if (!conversation!!.canDelete(conversationUser)) { if (!conversation!!.canDelete(conversationUser)) {
binding?.deleteConversationAction?.visibility = GONE binding.deleteConversationAction.visibility = GONE
} else { } else {
binding?.deleteConversationAction?.visibility = VISIBLE binding.deleteConversationAction.visibility = VISIBLE
} }
if (Conversation.ConversationType.ROOM_SYSTEM == conversation!!.type) { if (Conversation.ConversationType.ROOM_SYSTEM == conversation!!.type) {
binding?.notificationSettingsView?.callNotificationsSwitch?.visibility = GONE binding.notificationSettingsView.callNotificationsSwitch.visibility = GONE
} }
if (conversation!!.notificationCalls === null) { if (conversation!!.notificationCalls === null) {
binding?.notificationSettingsView?.callNotificationsSwitch?.visibility = GONE binding.notificationSettingsView.callNotificationsSwitch.visibility = GONE
} else { } else {
binding?.notificationSettingsView?.callNotificationsSwitch?.isChecked = binding.notificationSettingsView.callNotificationsSwitch.isChecked =
(conversationCopy.notificationCalls == 1) (conversationCopy.notificationCalls == 1)
} }
getListOfParticipants() getListOfParticipants()
binding?.progressBar?.visibility = GONE binding.progressBar.visibility = GONE
binding?.conversationInfoName?.visibility = VISIBLE binding.conversationInfoName.visibility = VISIBLE
binding?.displayNameText?.text = conversation!!.displayName binding.displayNameText.text = conversation!!.displayName
if (conversation!!.description != null && !conversation!!.description!!.isEmpty()) { if (conversation!!.description != null && conversation!!.description!!.isNotEmpty()) {
binding?.descriptionText?.text = conversation!!.description binding.descriptionText.text = conversation!!.description
binding?.conversationDescription?.visibility = VISIBLE binding.conversationDescription.visibility = VISIBLE
} }
loadConversationAvatar() loadConversationAvatar()
adjustNotificationLevelUI() adjustNotificationLevelUI()
initExpiringMessageOption() initExpiringMessageOption()
binding?.let { binding.let {
GuestAccessHelper( GuestAccessHelper(
this@ConversationInfoActivity, this@ConversationInfoActivity,
it, it,
@ -748,7 +715,7 @@ class ConversationInfoActivity :
).setupGuestAccess() ).setupGuestAccess()
} }
binding?.notificationSettingsView?.notificationSettings?.visibility = VISIBLE binding.notificationSettingsView.notificationSettings.visibility = VISIBLE
} }
} }
@ -774,25 +741,22 @@ class ConversationInfoActivity :
binding.conversationSettingsDropdown binding.conversationSettingsDropdown
.setSimpleItems(resources.getStringArray(R.array.message_expiring_descriptions)) .setSimpleItems(resources.getStringArray(R.array.message_expiring_descriptions))
binding.conversationSettingsDropdown.setOnItemClickListener { _, _, position, _ -> binding.conversationSettingsDropdown.setOnItemClickListener { _, _, position, _ ->
val value = resources.getStringArray(R.array.message_expiring_values)[position] val v: String = resources.getStringArray(R.array.message_expiring_values)[position]
databaseStorageModule!!.saveString("conversation_settings_dropdown", value) databaseStorageModule!!.saveString("conversation_settings_dropdown", v)
} }
binding?.conversationSettingsDropdown?.visibility = VISIBLE binding.conversationSettingsDropdown.visibility = VISIBLE
binding?.conversationInfoExpireMessagesExplanation?.visibility = VISIBLE binding.conversationInfoExpireMessagesExplanation.visibility = VISIBLE
} else { } else {
binding?.conversationSettings?.visibility = GONE binding.conversationSettings.visibility = GONE
} }
} }
private fun adjustNotificationLevelUI() { private fun adjustNotificationLevelUI() {
if (conversation != null) { if (conversation != null) {
if ( if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "notification-levels")) {
conversationUser != null && binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown.isEnabled = true
CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "notification-levels") binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown.alpha = 1.0f
) {
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.isEnabled = true
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.alpha = 1.0f
if (conversation!!.notificationLevel != Conversation.NotificationLevel.DEFAULT) { if (conversation!!.notificationLevel != Conversation.NotificationLevel.DEFAULT) {
val stringValue: String = val stringValue: String =
@ -803,35 +767,36 @@ class ConversationInfoActivity :
else -> resources.getString(R.string.nc_notify_me_mention) else -> resources.getString(R.string.nc_notify_me_mention)
} }
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.setText( binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown.setText(
stringValue stringValue
) )
} else { } else {
setProperNotificationValue(conversation) setProperNotificationValue(conversation)
} }
} else { } else {
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.isEnabled = false binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown.isEnabled = false
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.alpha = LOW_EMPHASIS_OPACITY binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown.alpha =
LOW_EMPHASIS_OPACITY
setProperNotificationValue(conversation) setProperNotificationValue(conversation)
} }
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown
?.setSimpleItems(resources.getStringArray(R.array.message_notification_levels)) .setSimpleItems(resources.getStringArray(R.array.message_notification_levels))
} }
} }
private fun setProperNotificationValue(conversation: Conversation?) { private fun setProperNotificationValue(conversation: Conversation?) {
if (conversation!!.type == Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) { if (conversation!!.type == Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) {
if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "mention-flag")) { if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "mention-flag")) {
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.setText( binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown.setText(
resources.getString(R.string.nc_notify_me_always) resources.getString(R.string.nc_notify_me_always)
) )
} else { } else {
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.setText( binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown.setText(
resources.getString(R.string.nc_notify_me_mention) resources.getString(R.string.nc_notify_me_mention)
) )
} }
} else { } else {
binding?.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.setText( binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown.setText(
resources.getString(R.string.nc_notify_me_mention) resources.getString(R.string.nc_notify_me_mention)
) )
} }
@ -840,11 +805,23 @@ class ConversationInfoActivity :
private fun loadConversationAvatar() { private fun loadConversationAvatar() {
when (conversation!!.type) { when (conversation!!.type) {
Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL -> if (!TextUtils.isEmpty(conversation!!.name)) { Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL -> if (!TextUtils.isEmpty(conversation!!.name)) {
conversation!!.name?.let { binding.avatarImage.loadUserAvatar(conversationUser, it, true, false) } conversation!!.name?.let {
binding.avatarImage.loadUserAvatar(
conversationUser,
it,
true,
false
)
}
} }
Conversation.ConversationType.ROOM_GROUP_CALL, Conversation.ConversationType.ROOM_PUBLIC_CALL -> { Conversation.ConversationType.ROOM_GROUP_CALL, Conversation.ConversationType.ROOM_PUBLIC_CALL -> {
binding.avatarImage.loadConversationAvatar(conversationUser, conversation!!, false, viewThemeUtils) binding.avatarImage.loadConversationAvatar(
conversationUser,
conversation!!,
false,
viewThemeUtils
)
} }
Conversation.ConversationType.ROOM_SYSTEM -> { Conversation.ConversationType.ROOM_SYSTEM -> {
@ -884,7 +861,7 @@ class ConversationInfoActivity :
credentials, credentials,
ApiUtils.getUrlForRoomModerators( ApiUtils.getUrlForRoomModerators(
apiVersion, apiVersion,
conversationUser!!.baseUrl, conversationUser.baseUrl,
conversation!!.token conversation!!.token
), ),
participant.attendeeId participant.attendeeId
@ -899,7 +876,7 @@ class ConversationInfoActivity :
credentials, credentials,
ApiUtils.getUrlForRoomModerators( ApiUtils.getUrlForRoomModerators(
apiVersion, apiVersion,
conversationUser!!.baseUrl, conversationUser.baseUrl,
conversation!!.token conversation!!.token
), ),
participant.attendeeId participant.attendeeId
@ -959,7 +936,7 @@ class ConversationInfoActivity :
} }
} }
fun removeAttendeeFromConversation(apiVersion: Int, participant: Participant) { private fun removeAttendeeFromConversation(apiVersion: Int, participant: Participant) {
if (apiVersion >= ApiUtils.APIv4) { if (apiVersion >= ApiUtils.APIv4) {
ncApi.removeAttendeeFromConversation( ncApi.removeAttendeeFromConversation(
credentials, credentials,
@ -1057,6 +1034,7 @@ class ConversationInfoActivity :
} }
} }
@SuppressLint("CheckResult")
override fun onItemClick(view: View?, position: Int): Boolean { override fun onItemClick(view: View?, position: Int): Boolean {
if (!conversation!!.canModerate(conversationUser)) { if (!conversation!!.canModerate(conversationUser)) {
return true return true
@ -1204,26 +1182,28 @@ class ConversationInfoActivity :
return true return true
} }
fun setUpNotificationSettings(module: DatabaseStorageModule) { private fun setUpNotificationSettings(module: DatabaseStorageModule) {
// set up listeners binding.notificationSettingsView.notificationSettingsImportantConversation.setOnClickListener {
binding.notificationSettingsView?.importantConversationSwitch?.setOnCheckedChangeListener { _, isChecked -> val isChecked = binding.notificationSettingsView.importantConversationSwitch.isChecked
module.saveBoolean("important_conversation_switch", isChecked) binding.notificationSettingsView.importantConversationSwitch.isChecked = !isChecked
module.saveBoolean("important_conversation_switch", !isChecked)
} }
binding.notificationSettingsView.notificationSettingsCallNotifications.setOnClickListener {
binding.notificationSettingsView?.callNotificationsSwitch?.setOnCheckedChangeListener { _, isChecked -> val isChecked = binding.notificationSettingsView.callNotificationsSwitch.isChecked
module.saveBoolean("call_notifications_switch", isChecked) binding.notificationSettingsView.callNotificationsSwitch.isChecked = !isChecked
module.saveBoolean("call_notifications_switch", !isChecked)
} }
binding.notificationSettingsView.conversationInfoMessageNotificationsDropdown
.setOnItemClickListener { _, _, position, _ ->
val value = resources.getStringArray(R.array.message_notification_levels_entry_values)[position]
Log.i(TAG, "saved $value to module from $position")
module.saveString("conversation_info_message_notifications_dropdown", value)
}
binding.notificationSettingsView?.conversationInfoMessageNotificationsDropdown?.setOnItemClickListener { binding.notificationSettingsView.importantConversationSwitch.isChecked = module
_, _, position, _ ->
val value = resources.getStringArray(R.array.message_notification_levels_entry_values)[position]
module.saveString("conversation_info_message_notifications_dropdown", value)
}
binding.notificationSettingsView?.importantConversationSwitch?.isChecked = module
.getBoolean("important_conversation_switch", false) .getBoolean("important_conversation_switch", false)
binding.notificationSettingsView?.callNotificationsSwitch?.isChecked = module binding.notificationSettingsView.callNotificationsSwitch.isChecked = module
.getBoolean("call_notifications_switch", true) .getBoolean("call_notifications_switch", true)
} }
@ -1232,9 +1212,7 @@ class ConversationInfoActivity :
private const val NOTIFICATION_LEVEL_ALWAYS: Int = 1 private const val NOTIFICATION_LEVEL_ALWAYS: Int = 1
private const val NOTIFICATION_LEVEL_MENTION: Int = 2 private const val NOTIFICATION_LEVEL_MENTION: Int = 2
private const val NOTIFICATION_LEVEL_NEVER: Int = 3 private const val NOTIFICATION_LEVEL_NEVER: Int = 3
private const val ID_DELETE_CONVERSATION_DIALOG = 0 private const val LOW_EMPHASIS_OPACITY: Float = 0.38f
private const val ID_CLEAR_CHAT_DIALOG = 1
private val LOW_EMPHASIS_OPACITY: Float = 0.38f
} }
/** /**

View File

@ -1,13 +1,11 @@
package com.nextcloud.talk.conversationinfo package com.nextcloud.talk.conversationinfo
import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SwitchCompat
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.data.user.model.User
@ -34,15 +32,6 @@ class GuestAccessHelper(
private val context = activity.context private val context = activity.context
fun setupGuestAccess() { fun setupGuestAccess() {
val guestAccessAllowSwitch = (
binding.guestAccessView.allowGuestsSwitch
as SwitchCompat
)
val guestAccessPasswordSwitch = (
binding.guestAccessView.passwordProtectionSwitch
as SwitchCompat
)
if (conversation.canModerate(conversationUser)) { if (conversation.canModerate(conversationUser)) {
binding.guestAccessView.guestAccessSettings.visibility = View.VISIBLE binding.guestAccessView.guestAccessSettings.visibility = View.VISIBLE
} else { } else {
@ -50,29 +39,34 @@ class GuestAccessHelper(
} }
if (conversation.type == Conversation.ConversationType.ROOM_PUBLIC_CALL) { if (conversation.type == Conversation.ConversationType.ROOM_PUBLIC_CALL) {
guestAccessAllowSwitch.isChecked = true binding.guestAccessView.allowGuestsSwitch.isChecked = true
showAllOptions() showAllOptions()
if (conversation.hasPassword) { if (conversation.hasPassword) {
guestAccessPasswordSwitch.isChecked = true binding.guestAccessView.passwordProtectionSwitch.isChecked = true
} }
} else { } else {
guestAccessAllowSwitch.isChecked = false binding.guestAccessView.allowGuestsSwitch.isChecked = false
hideAllOptions()
} }
binding.guestAccessView.allowGuestsSwitch.setOnClickListener { binding.guestAccessView.guestAccessSettingsAllowGuest.setOnClickListener {
val isChecked = binding.guestAccessView.allowGuestsSwitch.isChecked
binding.guestAccessView.allowGuestsSwitch.isChecked = !isChecked
conversationsRepository.allowGuests( conversationsRepository.allowGuests(
conversation.token!!, conversation.token!!,
!guestAccessAllowSwitch.isChecked !isChecked
).subscribeOn(Schedulers.io()) ).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(AllowGuestsResultObserver()) .observeOn(AndroidSchedulers.mainThread()).subscribe(AllowGuestsResultObserver())
} }
binding.guestAccessView.passwordProtectionSwitch.setOnClickListener { binding.guestAccessView.guestAccessSettingsPasswordProtection.setOnClickListener {
if (guestAccessPasswordSwitch.isChecked) { val isChecked = binding.guestAccessView.passwordProtectionSwitch.isChecked
binding.guestAccessView.passwordProtectionSwitch.isChecked = !isChecked
if (isChecked) {
conversationsRepository.password("", conversation.token!!).subscribeOn(Schedulers.io()) conversationsRepository.password("", conversation.token!!).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(PasswordResultObserver(false)) .observeOn(AndroidSchedulers.mainThread()).subscribe(PasswordResultObserver(false))
} else { } else {
showPasswordDialog(guestAccessPasswordSwitch) showPasswordDialog()
} }
} }
@ -86,8 +80,7 @@ class GuestAccessHelper(
} }
} }
@SuppressLint("InflateParams") private fun showPasswordDialog() {
private fun showPasswordDialog(guestAccessPasswordSwitch: SwitchCompat) {
val builder = MaterialAlertDialogBuilder(activity) val builder = MaterialAlertDialogBuilder(activity)
builder.apply { builder.apply {
val dialogPassword = DialogPasswordBinding.inflate(LayoutInflater.from(context)) val dialogPassword = DialogPasswordBinding.inflate(LayoutInflater.from(context))
@ -102,7 +95,7 @@ class GuestAccessHelper(
.subscribe(PasswordResultObserver(true)) .subscribe(PasswordResultObserver(true))
} }
setNegativeButton(R.string.nc_cancel) { _, _ -> setNegativeButton(R.string.nc_cancel) { _, _ ->
guestAccessPasswordSwitch.isChecked = false binding.guestAccessView.passwordProtectionSwitch.isChecked = false
} }
} }
createDialog(builder) createDialog(builder)
@ -179,10 +172,7 @@ class GuestAccessHelper(
} }
override fun onComplete() { override fun onComplete() {
( binding.guestAccessView.allowGuestsSwitch.isChecked = allowGuestsResult.allow
binding.guestAccessView.allowGuestsSwitch
as SwitchCompat
).isChecked = allowGuestsResult.allow
if (allowGuestsResult.allow) { if (allowGuestsResult.allow) {
showAllOptions() showAllOptions()
} else { } else {
@ -225,12 +215,7 @@ class GuestAccessHelper(
} }
override fun onComplete() { override fun onComplete() {
val guestAccessPasswordSwitch = ( binding.guestAccessView.passwordProtectionSwitch.isChecked = passwordResult.passwordSet && setPassword
binding.guestAccessView.passwordProtectionSwitch
as SwitchCompat
)
guestAccessPasswordSwitch.isChecked = passwordResult.passwordSet && setPassword
if (passwordResult.passwordIsWeak) { if (passwordResult.passwordIsWeak) {
val builder = MaterialAlertDialogBuilder(activity) val builder = MaterialAlertDialogBuilder(activity)
builder.apply { builder.apply {

View File

@ -50,7 +50,6 @@ import android.text.TextWatcher
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import android.widget.Checkable
import android.widget.EditText import android.widget.EditText
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.Toast import android.widget.Toast
@ -61,6 +60,7 @@ import androidx.work.OneTimeWorkRequest
import androidx.work.WorkInfo import androidx.work.WorkInfo
import androidx.work.WorkManager import androidx.work.WorkManager
import autodagger.AutoInjector import autodagger.AutoInjector
import com.afollestad.materialdialogs.utils.MDUtil.getStringArray
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
@ -90,7 +90,6 @@ import com.nextcloud.talk.utils.NotificationUtils.getMessageRingtoneUri
import com.nextcloud.talk.utils.SecurityUtils import com.nextcloud.talk.utils.SecurityUtils
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
import com.nextcloud.talk.utils.preferences.MagicUserInputModule
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -98,10 +97,9 @@ import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody
import java.net.URI import java.net.URI
import java.net.URISyntaxException import java.net.URISyntaxException
import java.util.Arrays
import java.util.Locale import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@ -145,26 +143,22 @@ class SettingsActivity : BaseActivity() {
getCurrentUser() getCurrentUser()
registerChangeListeners() // setupSettingsScreen()
setupSettingsScreen()
setupLicenceSetting() setupLicenceSetting()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
binding.settingsIncognitoKeyboard.visibility = View.GONE binding.settingsIncognitoKeyboard.visibility = View.GONE
} }
binding.settingsScreenLock.setSummary( binding.settingsScreenLockSummary.text = String.format(
String.format( Locale.getDefault(),
Locale.getDefault(), resources!!.getString(R.string.nc_settings_screen_lock_desc),
resources!!.getString(R.string.nc_settings_screen_lock_desc), resources!!.getString(R.string.nc_app_product_name)
resources!!.getString(R.string.nc_app_product_name)
)
) )
setupPrivacyUrl() setupPrivacyUrl()
setupSourceCodeUrl() setupSourceCodeUrl()
binding.settingsVersion.setSummary("v" + BuildConfig.VERSION_NAME) binding.settingsVersionSummary.text = String.format("v" + BuildConfig.VERSION_NAME)
setupSoundSettings() setupSoundSettings()
@ -185,51 +179,53 @@ class SettingsActivity : BaseActivity() {
} }
if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) { if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) {
binding.settingsClientCert.setTitle(R.string.nc_client_cert_change) binding.settingsClientCertTitle.setText(R.string.nc_client_cert_change)
} else { } else {
binding.settingsClientCert.setTitle(R.string.nc_client_cert_setup) binding.settingsClientCertTitle.setText(R.string.nc_client_cert_setup)
} }
setupCheckables() setupCheckables()
setupScreenLockSetting() setupScreenLockSetting()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
binding.settingsNotificationsCategory.setTitle( binding.settingsNotificationsTitle.text = resources!!.getString(
resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo) R.string.nc_settings_notification_sounds_post_oreo
) )
} }
val callRingtoneUri = getCallRingtoneUri(context, (appPreferences)) val callRingtoneUri = getCallRingtoneUri(context, (appPreferences))
binding.settingsCallSound.setSummary(getRingtoneName(context, callRingtoneUri)) binding.callsRingtone.text = getRingtoneName(context, callRingtoneUri)
val messageRingtoneUri = getMessageRingtoneUri(context, (appPreferences)) val messageRingtoneUri = getMessageRingtoneUri(context, (appPreferences))
binding.settingsMessageSound.setSummary(getRingtoneName(context, messageRingtoneUri)) binding.messagesRingtone.text = getRingtoneName(context, messageRingtoneUri)
setupProxyTypeSettings() setupProxyTypeSettings()
setupProxyCredentialSettings() setupProxyCredentialSettings()
registerChangeListeners()
if (currentUser != null) { if (currentUser != null) {
binding.baseUrlText.text = Uri.parse(currentUser!!.baseUrl).host binding.domainText.text = Uri.parse(currentUser!!.baseUrl).host
setupServerAgeWarning() setupServerAgeWarning()
if (currentUser!!.displayName != null) { if (currentUser!!.displayName != null) {
binding.displayNameText.text = currentUser!!.displayName binding.nameText.text = currentUser!!.displayName
} }
DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false) DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false)
setupProfileQueryDisposable() setupProfileQueryDisposable()
binding.settingsRemoveAccount.addPreferenceClickListener { binding.settingsRemoveAccount.setOnClickListener {
showRemoveAccountWarning() showRemoveAccountWarning()
} }
} }
setupMessageView() setupMessageView()
binding.avatarContainer.setOnClickListener { binding.settingsName.visibility = View.VISIBLE
binding.settingsName.setOnClickListener {
val intent = Intent(this, ProfileActivity::class.java) val intent = Intent(this, ProfileActivity::class.java)
startActivity(intent) startActivity(intent)
} }
// themeCategories() themeTitles()
// themeSwitchPreferences() themeSwitchPreferences()
} }
private fun loadCapabilitiesAndUpdateSettings() { private fun loadCapabilitiesAndUpdateSettings() {
@ -298,7 +294,7 @@ class SettingsActivity : BaseActivity() {
private fun setupSourceCodeUrl() { private fun setupSourceCodeUrl() {
if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_source_code_url))) { if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_source_code_url))) {
binding.settingsSourceCode.addPreferenceClickListener { binding.settingsSourceCode.setOnClickListener {
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
@ -313,7 +309,7 @@ class SettingsActivity : BaseActivity() {
private fun setupPrivacyUrl() { private fun setupPrivacyUrl() {
if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_privacy_url))) { if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_privacy_url))) {
binding.settingsPrivacy.addPreferenceClickListener { binding.settingsPrivacy.setOnClickListener {
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
@ -328,7 +324,7 @@ class SettingsActivity : BaseActivity() {
private fun setupLicenceSetting() { private fun setupLicenceSetting() {
if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_gpl3_url))) { if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_gpl3_url))) {
binding.settingsLicence.addPreferenceClickListener { binding.settingsLicence.setOnClickListener {
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
@ -341,17 +337,6 @@ class SettingsActivity : BaseActivity() {
} }
} }
private fun setupSettingsScreen() {
val listWithIntFields: MutableList<String> = ArrayList()
listWithIntFields.add("proxy_port")
binding.settingsScreen.setUserInputModule(MagicUserInputModule(this, listWithIntFields))
binding.settingsScreen.setVisibilityController(
R.id.settings_proxy_use_credentials,
Arrays.asList(R.id.settings_proxy_username_edit, R.id.settings_proxy_password_edit),
true
)
}
private fun setupClientCertView() { private fun setupClientCertView() {
var host: String? = null var host: String? = null
var port = -1 var port = -1
@ -360,11 +345,12 @@ class SettingsActivity : BaseActivity() {
uri = URI(currentUser!!.baseUrl) uri = URI(currentUser!!.baseUrl)
host = uri.host host = uri.host
port = uri.port port = uri.port
Log.d(TAG, "uri is $uri")
} catch (e: URISyntaxException) { } catch (e: URISyntaxException) {
Log.e(TAG, "Failed to create uri") Log.e(TAG, "Failed to create uri")
} }
binding.settingsClientCert.addPreferenceClickListener { binding.settingsClientCert.setOnClickListener {
KeyChain.choosePrivateKeyAlias( KeyChain.choosePrivateKeyAlias(
this, this,
{ alias: String? -> { alias: String? ->
@ -372,16 +358,16 @@ class SettingsActivity : BaseActivity() {
runOnUiThread { runOnUiThread {
if (finalAlias != null) { if (finalAlias != null) {
binding.settingsClientCert.setTitle(R.string.nc_client_cert_change) binding.settingsClientCertTitle.setText(R.string.nc_client_cert_change)
} else { } else {
binding.settingsClientCert.setTitle(R.string.nc_client_cert_setup) binding.settingsClientCertTitle.setText(R.string.nc_client_cert_setup)
} }
} }
if (finalAlias == null) { if (finalAlias == null) {
finalAlias = "" finalAlias = ""
} }
Log.d(TAG, "host: $host and port: $port")
currentUser!!.clientCertificate = finalAlias currentUser!!.clientCertificate = finalAlias
userManager.updateOrCreateUser(currentUser!!) userManager.updateOrCreateUser(currentUser!!)
}, },
@ -406,12 +392,28 @@ class SettingsActivity : BaseActivity() {
screenSecurityChangeListener = it screenSecurityChangeListener = it
} }
) )
var pos = getStringArray(R.array.screen_lock_timeout_entry_values).indexOf(appPreferences.screenLockTimeout)
binding.settingsScreenLockTimeoutLayoutDropdown.setText(
getStringArray(R.array.screen_lock_timeout_descriptions)[pos]
)
binding.settingsScreenLockTimeoutLayoutDropdown.setSimpleItems(R.array.screen_lock_timeout_descriptions)
binding.settingsScreenLockTimeoutLayoutDropdown.setOnItemClickListener { _, _, position, _ ->
val entryVal: String = resources.getStringArray(R.array.screen_lock_timeout_entry_values)[position]
appPreferences.screenLockTimeout = entryVal
}
appPreferences.registerScreenLockListener(ScreenLockListener().also { screenLockChangeListener = it }) appPreferences.registerScreenLockListener(ScreenLockListener().also { screenLockChangeListener = it })
appPreferences.registerScreenLockTimeoutListener( appPreferences.registerScreenLockTimeoutListener(
ScreenLockTimeoutListener().also { ScreenLockTimeoutListener().also {
screenLockTimeoutChangeListener = it screenLockTimeoutChangeListener = it
} }
) )
pos = getStringArray(R.array.theme_entry_values).indexOf(appPreferences.theme)
binding.settingsTheme.setText(getStringArray(R.array.theme_descriptions)[pos])
binding.settingsTheme.setSimpleItems(R.array.theme_descriptions)
binding.settingsTheme.setOnItemClickListener { _, _, position, _ ->
val entryVal: String = getStringArray(R.array.theme_entry_values)[position]
appPreferences.theme = entryVal
}
appPreferences.registerThemeChangeListener(ThemeChangeListener().also { themeChangeListener = it }) appPreferences.registerThemeChangeListener(ThemeChangeListener().also { themeChangeListener = it })
appPreferences.registerPhoneBookIntegrationChangeListener( appPreferences.registerPhoneBookIntegrationChangeListener(
PhoneBookIntegrationChangeListener(this).also { PhoneBookIntegrationChangeListener(this).also {
@ -423,6 +425,9 @@ class SettingsActivity : BaseActivity() {
readPrivacyChangeListener = it readPrivacyChangeListener = it
} }
) )
binding.settingsPrivacy.setOnClickListener {
readPrivacyChangeListener!!.onChanged(!binding.settingsReadPrivacySwitch.isChecked)
}
appPreferences.registerTypingStatusChangeListener( appPreferences.registerTypingStatusChangeListener(
TypingStatusChangeListener().also { TypingStatusChangeListener().also {
typingStatusChangeListener = it typingStatusChangeListener = it
@ -465,7 +470,7 @@ class SettingsActivity : BaseActivity() {
private fun removeCurrentAccount() { private fun removeCurrentAccount() {
val otherUserExists = userManager.scheduleUserForDeletionWithId(currentUser!!.id!!).blockingGet() val otherUserExists = userManager.scheduleUserForDeletionWithId(currentUser!!.id!!).blockingGet()
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build() val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build()
WorkManager.getInstance().enqueue(accountRemovalWork) WorkManager.getInstance(this).enqueue(accountRemovalWork)
if (otherUserExists) { if (otherUserExists) {
// TODO: find better solution once Conductor is removed // TODO: find better solution once Conductor is removed
finish() finish()
@ -488,33 +493,69 @@ class SettingsActivity : BaseActivity() {
} }
} }
// private fun themeSwitchPreferences() { private fun themeSwitchPreferences() {
// binding.run { binding.run {
// listOf( listOf(
// settingsScreenLock, settingsScreenLockSwitch,
// settingsScreenSecurity, settingsScreenSecuritySwitch,
// settingsIncognitoKeyboard, settingsIncognitoKeyboardSwitch,
// settingsPhoneBookIntegration, settingsPhoneBookIntegrationSwitch,
// settingsReadPrivacy, settingsReadPrivacySwitch,
// settingsTypingStatus, settingsTypingStatusSwitch,
// settingsProxyUseCredentials settingsProxyUseCredentialsSwitch
// ).forEach(viewThemeUtils.talk::colorSwitchPreference) ).forEach(viewThemeUtils.talk::colorSwitch)
// } }
// } }
//
// private fun themeCategories() { private fun themeTitles() {
// binding.run { binding.run {
// listOf( listOf(
// settingsNotificationsCategory, settingsNotificationsTitle,
// settingsAboutCategory, settingsAboutTitle,
// settingsAdvancedCategory, settingsAdvancedTitle,
// settingsAppearanceCategory, settingsAppearanceTitle,
// settingsPrivacyCategory settingsPrivacyTitle
// ).forEach(viewThemeUtils.talk::colorPreferenceCategory) ).forEach(viewThemeUtils.platform::colorTextView)
// } }
// } }
private fun setupProxyTypeSettings() { private fun setupProxyTypeSettings() {
if (appPreferences.proxyType == null) {
appPreferences.proxyType = resources.getString(R.string.nc_no_proxy)
}
binding.settingsProxyChoice.setText(appPreferences.proxyType)
binding.settingsProxyChoice.setSimpleItems(R.array.proxy_type_descriptions)
binding.settingsProxyChoice.setOnItemClickListener { _, _, position, _ ->
val entryVal = getStringArray(R.array.proxy_type_descriptions)[position]
appPreferences.proxyType = entryVal
}
binding.settingsProxyHostEdit.setText(appPreferences.proxyHost)
binding.settingsProxyHostEdit.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus) {
appPreferences.proxyHost = binding.settingsProxyHostEdit.text.toString()
}
}
binding.settingsProxyPortEdit.setText(appPreferences.proxyPort)
binding.settingsProxyPortEdit.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus) {
appPreferences.proxyPort = binding.settingsProxyPortEdit.text.toString()
}
}
binding.settingsProxyUsernameEdit.setText(appPreferences.proxyUsername)
binding.settingsProxyUsernameEdit.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus) {
appPreferences.proxyUsername = binding.settingsProxyUsernameEdit.text.toString()
}
}
binding.settingsProxyPasswordEdit.setText(appPreferences.proxyPassword)
binding.settingsProxyPasswordEdit.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus) {
appPreferences.proxyPassword = binding.settingsProxyPasswordEdit.text.toString()
}
}
if (("No proxy" == appPreferences.proxyType) || appPreferences.proxyType == null) { if (("No proxy" == appPreferences.proxyType) || appPreferences.proxyType == null) {
hideProxySettings() hideProxySettings()
} else { } else {
@ -537,7 +578,7 @@ class SettingsActivity : BaseActivity() {
binding.messageText.let { binding.messageText.let {
viewThemeUtils.platform.colorTextView(it, ColorRole.PRIMARY) viewThemeUtils.platform.colorTextView(it, ColorRole.PRIMARY)
it.text = resources!!.getString(R.string.nc_settings_account_updated) it.text = resources!!.getString(R.string.nc_settings_account_updated)
binding.messageView.visibility = View.VISIBLE binding.messageText.visibility = View.VISIBLE
} }
} }
@ -545,10 +586,10 @@ class SettingsActivity : BaseActivity() {
binding.messageText.let { binding.messageText.let {
it.setTextColor(resources!!.getColor(R.color.nc_darkRed, null)) it.setTextColor(resources!!.getColor(R.color.nc_darkRed, null))
it.text = resources!!.getString(R.string.nc_settings_wrong_account) it.text = resources!!.getString(R.string.nc_settings_wrong_account)
binding.messageView.visibility = View.VISIBLE binding.messageText.visibility = View.VISIBLE
viewThemeUtils.platform.colorTextView(it, ColorRole.PRIMARY) viewThemeUtils.platform.colorTextView(it, ColorRole.PRIMARY)
it.text = resources!!.getString(R.string.nc_Server_account_imported) it.text = resources!!.getString(R.string.nc_Server_account_imported)
binding.messageView.visibility = View.VISIBLE binding.messageText.visibility = View.VISIBLE
} }
} }
@ -556,7 +597,7 @@ class SettingsActivity : BaseActivity() {
binding.messageText.let { binding.messageText.let {
viewThemeUtils.platform.colorTextView(it, ColorRole.PRIMARY) viewThemeUtils.platform.colorTextView(it, ColorRole.PRIMARY)
it.text = resources!!.getString(R.string.nc_Server_account_imported) it.text = resources!!.getString(R.string.nc_Server_account_imported)
binding.messageView.visibility = View.VISIBLE binding.messageText.visibility = View.VISIBLE
} }
} }
@ -564,14 +605,14 @@ class SettingsActivity : BaseActivity() {
binding.messageText.let { binding.messageText.let {
it.setTextColor(resources!!.getColor(R.color.nc_darkRed, null)) it.setTextColor(resources!!.getColor(R.color.nc_darkRed, null))
it.text = resources!!.getString(R.string.nc_server_failed_to_import_account) it.text = resources!!.getString(R.string.nc_server_failed_to_import_account)
binding.messageView.visibility = View.VISIBLE binding.messageText.visibility = View.VISIBLE
} }
} }
else -> binding.messageView.visibility = View.GONE else -> binding.messageText.visibility = View.GONE
} }
ApplicationWideMessageHolder.getInstance().messageType = null ApplicationWideMessageHolder.getInstance().messageType = null
binding.messageView.animate() binding.messageText.animate()
?.translationY(0f) ?.translationY(0f)
?.alpha(0.0f) ?.alpha(0.0f)
?.setDuration(DURATION) ?.setDuration(DURATION)
@ -579,11 +620,11 @@ class SettingsActivity : BaseActivity() {
?.setListener(object : AnimatorListenerAdapter() { ?.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) { override fun onAnimationEnd(animation: Animator) {
super.onAnimationEnd(animation) super.onAnimationEnd(animation)
binding.messageView.visibility = View.GONE binding.messageText.visibility = View.GONE
} }
}) })
} else { } else {
binding.messageView.visibility = View.GONE binding.messageText.visibility = View.GONE
} }
} }
@ -611,7 +652,7 @@ class SettingsActivity : BaseActivity() {
if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) { if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) {
currentUser!!.displayName = displayName currentUser!!.displayName = displayName
userManager.updateOrCreateUser(currentUser!!) userManager.updateOrCreateUser(currentUser!!)
binding.displayNameText.text = currentUser!!.displayName binding.nameText.text = currentUser!!.displayName
} }
}, },
{ dispose(profileQueryDisposable) }, { dispose(profileQueryDisposable) },
@ -648,42 +689,82 @@ class SettingsActivity : BaseActivity() {
} }
private fun setupCheckables() { private fun setupCheckables() {
(binding.settingsScreenSecurity.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsScreenSecuritySwitch.isChecked = appPreferences.isScreenSecured
appPreferences.isScreenSecured
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
(binding.settingsIncognitoKeyboard.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsIncognitoKeyboardSwitch.isChecked = appPreferences.isKeyboardIncognito
appPreferences.isKeyboardIncognito
} }
(binding.settingsIncognitoKeyboard.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsIncognitoKeyboardSwitch.isChecked = appPreferences.isKeyboardIncognito
appPreferences.isKeyboardIncognito
if (CapabilitiesUtilNew.isReadStatusAvailable(currentUser!!)) { if (CapabilitiesUtilNew.isReadStatusAvailable(currentUser!!)) {
(binding.settingsReadPrivacy.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsReadPrivacySwitch.isChecked = !CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!)
!CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!)
} else { } else {
binding.settingsReadPrivacy.visibility = View.GONE binding.settingsReadPrivacy.visibility = View.GONE
} }
setupTypingStatusSetting() setupTypingStatusSetting()
(binding.settingsPhoneBookIntegration.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsPhoneBookIntegrationSwitch.isChecked = appPreferences.isPhoneBookIntegrationEnabled
appPreferences.isPhoneBookIntegrationEnabled
binding.settingsProxyUseCredentialsSwitch.isChecked = appPreferences.proxyCredentials
binding.settingsProxyUseCredentials.setOnClickListener {
val isChecked = binding.settingsProxyUseCredentialsSwitch.isChecked
binding.settingsProxyUseCredentialsSwitch.isChecked = !isChecked
appPreferences.setProxyNeedsCredentials(!isChecked)
}
binding.settingsScreenLockSwitch.isChecked = appPreferences.isScreenLocked
binding.settingsScreenLock.setOnClickListener {
val isChecked = binding.settingsScreenLockSwitch.isChecked
binding.settingsScreenLockSwitch.isChecked = !isChecked
appPreferences.setScreenLock(!isChecked)
}
binding.settingsReadPrivacy.setOnClickListener {
val isChecked = binding.settingsReadPrivacySwitch.isChecked
binding.settingsReadPrivacySwitch.isChecked = !isChecked
appPreferences.setReadPrivacy(!isChecked)
}
binding.settingsIncognitoKeyboard.setOnClickListener {
val isChecked = binding.settingsIncognitoKeyboardSwitch.isChecked
binding.settingsIncognitoKeyboardSwitch.isChecked = !isChecked
appPreferences.setIncognitoKeyboard(!isChecked)
}
binding.settingsPhoneBookIntegration.setOnClickListener {
val isChecked = binding.settingsPhoneBookIntegrationSwitch.isChecked
binding.settingsPhoneBookIntegrationSwitch.isChecked = !isChecked
appPreferences.setPhoneBookIntegration(!isChecked)
}
binding.settingsScreenSecurity.setOnClickListener {
val isChecked = binding.settingsScreenSecuritySwitch.isChecked
binding.settingsScreenSecuritySwitch.isChecked = !isChecked
appPreferences.setScreenSecurity(!isChecked)
}
binding.settingsTypingStatus.setOnClickListener {
val isChecked = binding.settingsTypingStatusSwitch.isChecked
binding.settingsTypingStatusSwitch.isChecked = !isChecked
appPreferences.setTypingStatus(!isChecked)
}
} }
private fun setupTypingStatusSetting() { private fun setupTypingStatusSetting() {
if (currentUser!!.externalSignalingServer?.externalSignalingServer?.isNotEmpty() == true) { if (currentUser!!.externalSignalingServer?.externalSignalingServer?.isNotEmpty() == true) {
binding.settingsTypingStatusOnlyWithHpb.visibility = View.GONE binding.settingsTypingStatusOnlyWithHpb.visibility = View.GONE
Log.i(TAG, "Typing Status Available: ${CapabilitiesUtilNew.isTypingStatusAvailable(currentUser!!)}")
if (CapabilitiesUtilNew.isTypingStatusAvailable(currentUser!!)) { if (CapabilitiesUtilNew.isTypingStatusAvailable(currentUser!!)) {
(binding.settingsTypingStatus.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsTypingStatusSwitch.isChecked = !CapabilitiesUtilNew.isTypingStatusPrivate(currentUser!!)
!CapabilitiesUtilNew.isTypingStatusPrivate(currentUser!!)
} else { } else {
binding.settingsTypingStatus.visibility = View.GONE binding.settingsTypingStatus.visibility = View.GONE
} }
} else { } else {
(binding.settingsTypingStatus.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = false Log.i(TAG, "Typing Status not Available")
binding.settingsTypingStatusSwitch.isChecked = false
binding.settingsTypingStatusOnlyWithHpb.visibility = View.VISIBLE binding.settingsTypingStatusOnlyWithHpb.visibility = View.VISIBLE
binding.settingsTypingStatus.isEnabled = false binding.settingsTypingStatus.isEnabled = false
binding.settingsTypingStatusOnlyWithHpb.alpha = DISABLED_ALPHA binding.settingsTypingStatusOnlyWithHpb.alpha = DISABLED_ALPHA
@ -696,9 +777,8 @@ class SettingsActivity : BaseActivity() {
if (keyguardManager.isKeyguardSecure) { if (keyguardManager.isKeyguardSecure) {
binding.settingsScreenLock.isEnabled = true binding.settingsScreenLock.isEnabled = true
binding.settingsScreenLockTimeout.isEnabled = true binding.settingsScreenLockTimeout.isEnabled = true
(binding.settingsScreenLock.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsScreenLockSwitch.isChecked = appPreferences.isScreenLocked
appPreferences.isScreenLocked binding.settingsScreenLockTimeoutLayoutDropdown.isEnabled = appPreferences.isScreenLocked
binding.settingsScreenLockTimeout.isEnabled = appPreferences.isScreenLocked
if (appPreferences.isScreenLocked) { if (appPreferences.isScreenLocked) {
binding.settingsScreenLockTimeout.alpha = ENABLED_ALPHA binding.settingsScreenLockTimeout.alpha = ENABLED_ALPHA
} else { } else {
@ -707,10 +787,10 @@ class SettingsActivity : BaseActivity() {
binding.settingsScreenLock.alpha = ENABLED_ALPHA binding.settingsScreenLock.alpha = ENABLED_ALPHA
} else { } else {
binding.settingsScreenLock.isEnabled = false binding.settingsScreenLock.isEnabled = false
binding.settingsScreenLockTimeout.isEnabled = false binding.settingsScreenLockTimeoutLayoutDropdown.isEnabled = false
appPreferences.removeScreenLock() appPreferences.removeScreenLock()
appPreferences.removeScreenLockTimeout() appPreferences.removeScreenLockTimeout()
(binding.settingsScreenLock.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = false binding.settingsScreenLockSwitch.isChecked = false
binding.settingsScreenLock.alpha = DISABLED_ALPHA binding.settingsScreenLock.alpha = DISABLED_ALPHA
binding.settingsScreenLockTimeout.alpha = DISABLED_ALPHA binding.settingsScreenLockTimeout.alpha = DISABLED_ALPHA
} }
@ -736,35 +816,35 @@ class SettingsActivity : BaseActivity() {
appPreferences.removeProxyCredentials() appPreferences.removeProxyCredentials()
appPreferences.removeProxyUsername() appPreferences.removeProxyUsername()
appPreferences.removeProxyPassword() appPreferences.removeProxyPassword()
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_host_edit)?.visibility = View.GONE binding.settingsProxyHostLayout.visibility = View.GONE
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_port_edit)?.visibility = View.GONE binding.settingsProxyPortLayout.visibility = View.GONE
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_use_credentials)?.visibility = binding.settingsProxyUseCredentials.visibility =
View.GONE View.GONE
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_username_edit)?.visibility = View.GONE hideProxyCredentials()
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_password_edit)?.visibility = View.GONE
} }
private fun showProxySettings() { private fun showProxySettings() {
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_host_edit)?.visibility = binding.settingsProxyHostLayout.visibility =
View.VISIBLE View.VISIBLE
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_port_edit)?.visibility = binding.settingsProxyPortLayout.visibility =
View.VISIBLE View.VISIBLE
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_use_credentials)?.visibility = binding.settingsProxyUseCredentials.visibility =
View.VISIBLE View.VISIBLE
if (binding.settingsProxyUseCredentialsSwitch.isChecked) showProxyCredentials()
} }
private fun showProxyCredentials() { private fun showProxyCredentials() {
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_username_edit)?.visibility = binding.settingsProxyUsernameLayout.visibility =
View.VISIBLE View.VISIBLE
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_password_edit)?.visibility = binding.settingsProxyPasswordLayout.visibility =
View.VISIBLE View.VISIBLE
} }
private fun hideProxyCredentials() { private fun hideProxyCredentials() {
appPreferences.removeProxyUsername() appPreferences.removeProxyUsername()
appPreferences.removeProxyPassword() appPreferences.removeProxyPassword()
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_username_edit)?.visibility = View.GONE binding.settingsProxyUsernameLayout.visibility = View.GONE
binding.settingsScreen.findViewById<View>(R.id.settings_proxy_password_edit)?.visibility = View.GONE binding.settingsProxyPasswordLayout.visibility = View.GONE
} }
private fun dispose(disposable: Disposable?) { private fun dispose(disposable: Disposable?) {
@ -801,13 +881,12 @@ class SettingsActivity : BaseActivity() {
grantResults[0] == PackageManager.PERMISSION_GRANTED grantResults[0] == PackageManager.PERMISSION_GRANTED
) { ) {
WorkManager WorkManager
.getInstance() .getInstance(this)
.enqueue(OneTimeWorkRequest.Builder(ContactAddressBookWorker::class.java).build()) .enqueue(OneTimeWorkRequest.Builder(ContactAddressBookWorker::class.java).build())
checkForPhoneNumber() checkForPhoneNumber()
} else { } else {
appPreferences.setPhoneBookIntegration(false) appPreferences.setPhoneBookIntegration(false)
(binding.settingsPhoneBookIntegration.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsPhoneBookIntegrationSwitch.isChecked = appPreferences.isPhoneBookIntegrationEnabled
appPreferences.isPhoneBookIntegrationEnabled
Toast.makeText( Toast.makeText(
context, context,
context.resources.getString(R.string.no_phone_book_integration_due_to_permissions), context.resources.getString(R.string.no_phone_book_integration_due_to_permissions),
@ -860,15 +939,19 @@ class SettingsActivity : BaseActivity() {
hideProxySettings() hideProxySettings()
} else { } else {
when (newValue) { when (newValue) {
"HTTP" -> "HTTP" -> {
binding.settingsProxyPortEdit.value = "3128" binding.settingsProxyPortEdit.setText(getString(R.string.nc_settings_http_value))
appPreferences.proxyPort = "3128"
"DIRECT" -> }
binding.settingsProxyPortEdit.value = "8080"
"SOCKS" ->
binding.settingsProxyPortEdit.value = "1080"
"DIRECT" -> {
binding.settingsProxyPortEdit.setText(getString(R.string.nc_settings_direct_value))
appPreferences.proxyPort = "8080"
}
"SOCKS" -> {
binding.settingsProxyPortEdit.setText(getString(R.string.nc_settings_socks_value))
appPreferences.proxyPort = "1080"
}
else -> { else -> {
} }
} }
@ -1033,7 +1116,7 @@ class SettingsActivity : BaseActivity() {
ncApi.setReadStatusPrivacy( ncApi.setReadStatusPrivacy(
ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token), ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token),
ApiUtils.getUrlForUserSettings(currentUser!!.baseUrl), ApiUtils.getUrlForUserSettings(currentUser!!.baseUrl),
RequestBody.create("application/json".toMediaTypeOrNull(), json) json.toRequestBody("application/json".toMediaTypeOrNull())
) )
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
@ -1048,8 +1131,7 @@ class SettingsActivity : BaseActivity() {
override fun onError(e: Throwable) { override fun onError(e: Throwable) {
appPreferences.setReadPrivacy(!newValue) appPreferences.setReadPrivacy(!newValue)
(binding.settingsReadPrivacy.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsReadPrivacySwitch.isChecked = !newValue
!newValue
} }
override fun onComplete() { override fun onComplete() {
@ -1066,7 +1148,7 @@ class SettingsActivity : BaseActivity() {
ncApi.setTypingStatusPrivacy( ncApi.setTypingStatusPrivacy(
ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token), ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token),
ApiUtils.getUrlForUserSettings(currentUser!!.baseUrl), ApiUtils.getUrlForUserSettings(currentUser!!.baseUrl),
RequestBody.create("application/json".toMediaTypeOrNull(), json) json.toRequestBody("application/json".toMediaTypeOrNull())
) )
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
@ -1076,13 +1158,13 @@ class SettingsActivity : BaseActivity() {
} }
override fun onNext(genericOverall: GenericOverall) { override fun onNext(genericOverall: GenericOverall) {
// unused atm loadCapabilitiesAndUpdateSettings()
Log.i(TAG, "onNext called typing status set")
} }
override fun onError(e: Throwable) { override fun onError(e: Throwable) {
appPreferences.setTypingStatus(!newValue) appPreferences.setTypingStatus(!newValue)
(binding.settingsTypingStatus.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = binding.settingsTypingStatusSwitch.isChecked = !newValue
!newValue
} }
override fun onComplete() { override fun onComplete() {

View File

@ -49,7 +49,6 @@ import com.nextcloud.talk.R
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.DrawableUtils import com.nextcloud.talk.utils.DrawableUtils
import com.vanniktech.emoji.EmojiTextView import com.vanniktech.emoji.EmojiTextView
import com.yarolegovich.mp.MaterialPreferenceCategory
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -139,17 +138,9 @@ class TalkSpecificViewThemeUtils @Inject constructor(
} }
} }
fun colorPreferenceCategory(category: MaterialPreferenceCategory) {
withScheme(category) { scheme ->
category.setTitleColor(scheme.primary)
}
}
fun colorSwitch(preference: MaterialSwitch) { fun colorSwitch(preference: MaterialSwitch) {
val switch = preference as SwitchCompat val switch = preference as SwitchCompat
if (switch != null) { appcompat.colorSwitchCompat(switch)
appcompat.colorSwitchCompat(switch)
}
} }
fun setCheckedBackground(emoji: EmojiTextView) { fun setCheckedBackground(emoji: EmojiTextView) {
@ -252,35 +243,6 @@ class TalkSpecificViewThemeUtils @Inject constructor(
} }
} }
fun ConversationInfoCardView(cardView: MaterialCardView) {
withScheme(cardView) { scheme ->
val background = cardView.context.getColor(R.color.bg_default)
cardView.backgroundTintList =
ColorStateList(
arrayOf(
intArrayOf(android.R.attr.state_checked),
intArrayOf(-android.R.attr.state_checked)
),
intArrayOf(
scheme.primary,
background
)
)
cardView.setStrokeColor(
ColorStateList(
arrayOf(
intArrayOf(android.R.attr.state_checked),
intArrayOf(-android.R.attr.state_checked)
),
intArrayOf(
scheme.primary,
background
)
)
)
}
}
companion object { companion object {
private val THEMEABLE_PLACEHOLDER_IDS = listOf( private val THEMEABLE_PLACEHOLDER_IDS = listOf(
R.drawable.ic_mimetype_package_x_generic, R.drawable.ic_mimetype_package_x_generic,
@ -290,6 +252,5 @@ class TalkSpecificViewThemeUtils @Inject constructor(
private val ALPHA_80_INT: Int = (255 * 0.8).roundToInt() private val ALPHA_80_INT: Int = (255 * 0.8).roundToInt()
private const val HALF_ALPHA_INT: Int = 255 / 2 private const val HALF_ALPHA_INT: Int = 255 / 2
private const val SEARCH_TEXT_SIZE: Float = 16f
} }
} }

View File

@ -24,6 +24,8 @@
package com.nextcloud.talk.utils.preferences; package com.nextcloud.talk.utils.preferences;
import android.annotation.SuppressLint;
import com.nextcloud.talk.R; import com.nextcloud.talk.R;
import net.orange_box.storebox.annotations.method.ClearMethod; import net.orange_box.storebox.annotations.method.ClearMethod;
@ -37,7 +39,7 @@ import net.orange_box.storebox.annotations.option.SaveOption;
import net.orange_box.storebox.enums.SaveMode; import net.orange_box.storebox.enums.SaveMode;
import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener; import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener;
@SuppressLint("NonConstantResourceId")
@SaveOption(SaveMode.APPLY) @SaveOption(SaveMode.APPLY)
public interface AppPreferences { public interface AppPreferences {
@ -253,7 +255,7 @@ public interface AppPreferences {
String getScreenLockTimeout(); String getScreenLockTimeout();
@KeyByString("screen_lock_timeout") @KeyByString("screen_lock_timeout")
void setScreenLockTimeout(int value); void setScreenLockTimeout(String value);
@KeyByString("screen_lock_timeout") @KeyByString("screen_lock_timeout")
@RemoveMethod @RemoveMethod
@ -271,6 +273,9 @@ public interface AppPreferences {
@DefaultValue(R.string.nc_default_theme) @DefaultValue(R.string.nc_default_theme)
String getTheme(); String getTheme();
@KeyByResource(R.string.nc_settings_theme_key)
void setTheme(String newValue);
@KeyByResource(R.string.nc_settings_theme_key) @KeyByResource(R.string.nc_settings_theme_key)
@RemoveMethod @RemoveMethod
void removeTheme(); void removeTheme();

View File

@ -1,114 +0,0 @@
/*
* Nextcloud Talk application
*
* @author Mario Danic
* Copyright (C) 2017 Mario Danic <mario@lovelyhq.com>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.nextcloud.talk.utils.preferences;
import android.app.Dialog;
import android.content.Context;
import android.os.Build;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.nextcloud.talk.R;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.ui.theme.ViewThemeUtils;
import com.yarolegovich.mp.io.StandardUserInputModule;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import autodagger.AutoInjector;
@AutoInjector(NextcloudTalkApplication.class)
public class MagicUserInputModule extends StandardUserInputModule {
@Inject
AppPreferences appPreferences;
@Inject
ViewThemeUtils viewThemeUtils;
private List<String> keysWithIntegerInput = new ArrayList<>();
public MagicUserInputModule(Context context) {
super(context);
NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this);
}
public MagicUserInputModule(Context context, List<String> keysWithIntegerInput) {
super(context);
NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this);
this.keysWithIntegerInput = keysWithIntegerInput;
}
@Override
public void showEditTextInput(
String key,
CharSequence title,
CharSequence defaultValue,
final Listener<String> listener) {
final View view = LayoutInflater.from(context).inflate(R.layout.dialog_edittext, null);
final EditText inputField = view.findViewById(R.id.mp_text_input);
viewThemeUtils.platform.colorEditText(inputField);
int paddingStartEnd = Math.round(view.getResources().getDimension(R.dimen.standard_padding));
int paddingTopBottom = Math.round(view.getResources().getDimension(R.dimen.dialog_padding_top_bottom));
view.setPadding(paddingStartEnd, paddingTopBottom, paddingStartEnd, paddingTopBottom);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && appPreferences.getIsKeyboardIncognito()) {
inputField.setImeOptions(inputField.getImeOptions() | EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING);
}
if (defaultValue != null) {
inputField.setText(defaultValue);
inputField.setSelection(defaultValue.length());
}
if (keysWithIntegerInput.contains(key)) {
inputField.setInputType(InputType.TYPE_CLASS_NUMBER);
}
final MaterialAlertDialogBuilder dialogBuilder = new MaterialAlertDialogBuilder(view.getContext())
.setTitle(title)
.setView(view);
viewThemeUtils.dialog.colorMaterialAlertDialogBackground(view.getContext(), dialogBuilder);
final Dialog dialog = dialogBuilder.show();
TextView button = view.findViewById(R.id.mp_btn_confirm);
viewThemeUtils.platform.colorPrimaryTextViewElement(button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onInput(inputField.getText().toString());
dialog.dismiss();
}
});
}
}

View File

@ -159,7 +159,7 @@ public class DatabaseStorageModule {
} else if ("conversation_info_message_notifications_dropdown".equals(key)) { } else if ("conversation_info_message_notifications_dropdown".equals(key)) {
if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "notification-levels")) { if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "notification-levels")) {
if (!TextUtils.isEmpty(messageNotificationLevel) && !messageNotificationLevel.equals(value)) { if (TextUtils.isEmpty(messageNotificationLevel) || !messageNotificationLevel.equals(value)) {
int intValue; int intValue;
switch (value) { switch (value) {
case "never": case "never":
@ -191,10 +191,7 @@ public class DatabaseStorageModule {
} }
@Override @Override
public void onNext(GenericOverall genericOverall) { public void onNext(GenericOverall genericOverall) {messageNotificationLevel = value;}
Log.i(TAG, "onNext called");
messageNotificationLevel = value;
}
@Override @Override
public void onError(Throwable e) { public void onError(Throwable e) {

View File

@ -75,18 +75,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.card.MaterialCardView <RelativeLayout
android:id="@+id/conversation_info_name" android:id="@+id/conversation_info_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:animateLayoutChanges="true"
android:visibility="gone"
tools:visibility="visible">
<RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:animateLayoutChanges="true"
android:visibility="gone"
tools:visibility="visible"
android:layout_marginStart="@dimen/standard_margin" android:layout_marginStart="@dimen/standard_margin"
android:layout_marginEnd="@dimen/standard_margin"> android:layout_marginEnd="@dimen/standard_margin">
@ -111,9 +107,7 @@
</RelativeLayout> </RelativeLayout>
</com.google.android.material.card.MaterialCardView> <LinearLayout
<com.google.android.material.card.MaterialCardView
android:id="@+id/conversation_description" android:id="@+id/conversation_description"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -126,35 +120,24 @@
android:id="@+id/description_text" android:id="@+id/description_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/standard_half_margin" android:layout_marginTop="@dimen/standard_half_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:layout_marginBottom="@dimen/standard_half_margin"
android:layout_marginStart="@dimen/standard_margin" android:layout_marginStart="@dimen/standard_margin"
android:layout_marginEnd="@dimen/standard_margin" android:layout_marginEnd="@dimen/standard_margin"
android:autoLink="web" android:autoLink="web"
tools:text="Hello world!" /> tools:text="Hello world!" />
</com.google.android.material.card.MaterialCardView> </LinearLayout>
<com.google.android.material.card.MaterialCardView <LinearLayout
android:id="@+id/add_to_favorites_button" android:id="@+id/add_to_favorites_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="@dimen/standard_half_padding" android:padding="@dimen/standard_half_padding"
android:visibility="gone" android:visibility="gone"
tools:visibility="gone"> tools:visibility="gone">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:visibility="gone">
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -173,9 +156,7 @@
android:textSize="@dimen/two_line_primary_text_size" /> android:textSize="@dimen/two_line_primary_text_size" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<LinearLayout <LinearLayout
android:id="@+id/settings" android:id="@+id/settings"
@ -206,47 +187,37 @@
</LinearLayout> </LinearLayout>
<com.google.android.material.card.MaterialCardView <LinearLayout
android:id="@+id/category_shared_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:elevation="0dp">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:orientation="vertical" android:orientation="vertical"
> >
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/category_shared_items"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/nc_shared_items" android:text="@string/nc_shared_items"
android:textColor="@color/colorPrimary" android:textSize="@dimen/headline_text_size"
android:textSize="@dimen/md_title_textsize"
android:textStyle="bold" android:textStyle="bold"
android:padding="@dimen/standard_padding"/> android:padding="@dimen/standard_padding"/>
<com.google.android.material.card.MaterialCardView <LinearLayout
android:id="@+id/shared_items_button" android:id="@+id/shared_items_button"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="@dimen/standard_half_padding"> android:padding="@dimen/standard_padding"
android:background="?android:attr/selectableItemBackground">
<com.google.android.material.button.MaterialButton <ImageView
android:layout_width="wrap_content" android:layout_width="24dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:background="@color/transparent" android:layout_marginEnd="@dimen/standard_margin"
app:icon="@drawable/ic_folder_multiple_image" android:contentDescription="@null"
app:iconGravity="textStart" android:src="@drawable/ic_folder_multiple_image"
app:iconSize="@dimen/sm_icon_height" app:tint="@color/grey_600" />
app:iconTint="@color/grey_600" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -256,31 +227,22 @@
android:textSize="@dimen/two_line_primary_text_size" /> android:textSize="@dimen/two_line_primary_text_size" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView <LinearLayout
android:id="@+id/conversation_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:elevation="0dp">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:orientation="vertical" android:orientation="vertical"
> >
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/conversation_settings"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/nc_conversation_settings" android:text="@string/nc_conversation_settings"
android:textColor="@color/colorPrimary" android:textSize="@dimen/headline_text_size"
android:textSize="@dimen/md_title_textsize"
android:textStyle="bold" android:textStyle="bold"
android:padding="@dimen/standard_padding"/> android:padding="@dimen/standard_padding"/>
@ -290,9 +252,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_half_margin" android:layout_marginTop="@dimen/standard_half_margin"
android:layout_marginHorizontal="@dimen/standard_half_margin" android:layout_marginHorizontal="@dimen/standard_margin"
android:hint="@string/nc_expire_messages" android:hint="@string/nc_expire_messages">
app:boxStrokeWidth="@dimen/zero">
<com.google.android.material.textfield.MaterialAutoCompleteTextView <com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/conversation_settings_dropdown" android:id="@+id/conversation_settings_dropdown"
@ -312,56 +273,46 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_margin" android:layout_margin="@dimen/standard_margin"
android:text="@string/nc_expire_messages_explanation" android:text="@string/nc_expire_messages_explanation"
android:textColor="@color/disabled_text" /> android:textColor="@color/disabled_text"
android:textSize="@dimen/supporting_text_text_size"/>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> <LinearLayout
android:id="@+id/participants"
<com.google.android.material.card.MaterialCardView
android:id="@+id/participants_list_category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:visibility="gone"
tools:ignore="UnknownIdInLayout"
tools:visibility="visible">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:visibility="gone"
tools:ignore="UnknownIdInLayout"
tools:visibility="visible"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/participants_list_category"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/standard_padding" android:padding="@dimen/standard_padding"
android:text="@string/nc_participants" android:text="@string/nc_participants"
android:textColor="@color/colorPrimary" android:textColor="@color/colorPrimary"
android:textSize="@dimen/md_title_textsize" android:textSize="@dimen/headline_text_size"
android:textStyle="bold" /> android:textStyle="bold" />
<com.google.android.material.card.MaterialCardView <LinearLayout
android:id="@+id/addParticipantsAction" android:id="@+id/addParticipantsAction"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="@dimen/standard_half_padding"> android:padding="@dimen/standard_padding"
android:background="?android:attr/selectableItemBackground">
<com.google.android.material.button.MaterialButton <ImageView
android:layout_width="wrap_content" android:layout_width="24dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:background="@color/transparent" android:layout_marginEnd="@dimen/standard_margin"
app:icon="@drawable/ic_account_plus" android:contentDescription="@null"
app:iconGravity="textStart" android:src="@drawable/ic_account_plus"
app:iconSize="@dimen/sm_icon_height" app:tint="@color/grey_600" />
app:iconTint="@color/grey_600" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
@ -372,28 +323,19 @@
android:textSize="@dimen/two_line_primary_text_size" /> android:textSize="@dimen/two_line_primary_text_size" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/standard_half_padding"
tools:listitem="@layout/rv_item_conversation_info_participant" /> tools:listitem="@layout/rv_item_conversation_info_participant" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> <LinearLayout
android:id="@+id/danger_zone_options"
<com.google.android.material.card.MaterialCardView
android:id="@+id/danger_zone_options"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:elevation="0dp">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:orientation="vertical" android:orientation="vertical"
> >
@ -402,140 +344,93 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/danger_zone" android:text="@string/danger_zone"
android:textColor="@color/design_default_color_error" android:textColor="@color/design_default_color_error"
android:textSize="@dimen/md_title_textsize" android:textSize="@dimen/headline_text_size"
android:textStyle="bold" android:textStyle="bold"
android:padding="@dimen/standard_padding"/> android:padding="@dimen/standard_padding"/>
<com.google.android.material.card.MaterialCardView <LinearLayout
android:id="@+id/leaveConversationAction" android:id="@+id/leaveConversationAction"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="@dimen/standard_half_padding"> android:padding="@dimen/standard_padding"
android:background="?android:attr/selectableItemBackground">
<LinearLayout <ImageView
android:layout_width="wrap_content" android:layout_width="24dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:layout_weight="1" android:layout_marginEnd="@dimen/standard_margin"
android:orientation="horizontal"> android:contentDescription="@null"
android:src="@drawable/ic_exit_to_app_black_24dp"
app:tint="@color/design_default_color_error" />
<com.google.android.material.button.MaterialButton <com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:background="@color/transparent" android:gravity="center_vertical"
app:icon="@drawable/ic_exit_to_app_black_24dp" android:text="@string/nc_leave"
app:iconGravity="textStart" android:textColor="@color/design_default_color_error"
app:iconSize="@dimen/sm_icon_height" android:textSize="@dimen/two_line_primary_text_size" />
app:iconTint="@color/design_default_color_error" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="@string/nc_leave"
android:textColor="@color/design_default_color_error"
android:textSize="@dimen/two_line_primary_text_size" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView <LinearLayout
android:id="@+id/clearConversationHistory" android:id="@+id/clearConversationHistory"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="@dimen/standard_half_padding"> android:padding="@dimen/standard_padding"
android:background="?android:attr/selectableItemBackground">
<LinearLayout <ImageView
android:layout_width="wrap_content" android:layout_width="24dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:layout_weight="1" android:layout_marginEnd="@dimen/standard_margin"
android:orientation="horizontal"> android:contentDescription="@null"
android:src="@drawable/ic_delete_black_24dp"
app:tint="@color/design_default_color_error" />
<com.google.android.material.button.MaterialButton <com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:background="@color/transparent" android:gravity="center_vertical"
app:icon="@drawable/ic_delete_black_24dp" android:text="@string/nc_clear_history"
app:iconGravity="textStart" android:textColor="@color/design_default_color_error"
app:iconSize="@dimen/sm_icon_height" android:textSize="@dimen/two_line_primary_text_size" />
app:iconTint="@color/design_default_color_error" /> </LinearLayout>
<com.google.android.material.textview.MaterialTextView <LinearLayout
android:layout_width="wrap_content" android:id="@+id/deleteConversationAction"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="@string/nc_clear_history"
android:textColor="@color/design_default_color_error"
android:textSize="@dimen/two_line_primary_text_size" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/deleteConversationAction"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin">
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="@dimen/standard_half_padding"> android:padding="@dimen/standard_padding"
android:background="?android:attr/selectableItemBackground">
<LinearLayout <ImageView
android:layout_width="wrap_content" android:layout_width="24dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:layout_weight="1" android:layout_marginEnd="@dimen/standard_margin"
android:orientation="horizontal"> android:contentDescription="@null"
android:src="@drawable/ic_delete_black_24dp"
app:tint="@color/design_default_color_error" />
<com.google.android.material.button.MaterialButton <com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:background="@color/transparent" android:gravity="center_vertical"
app:icon="@drawable/ic_delete_black_24dp" android:text="@string/nc_delete_call"
app:iconGravity="textStart" android:textColor="@color/design_default_color_error"
app:iconSize="@dimen/sm_icon_height" android:textSize="@dimen/two_line_primary_text_size" />
app:iconTint="@color/design_default_color_error" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="@string/nc_delete_call"
android:textColor="@color/design_default_color_error"
android:textSize="@dimen/two_line_primary_text_size" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
</LinearLayout> </LinearLayout>

File diff suppressed because it is too large Load Diff

View File

@ -1,81 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!--
Nextcloud Talk application
@author Tim Krüger
Copyright (C) 2022 Tim Krüger
Copyright (C) 2022 Nextcloud GmbH
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
the Free Software Foundation, either version 3 of the License, or
at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<com.yarolegovich.mp.MaterialPreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:apc="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/guest_access_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.yarolegovich.mp.MaterialPreferenceCategory
android:id="@+id/guest_access_category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
apc:cardBackgroundColor="@color/bg_default"
apc:cardElevation="0dp"
apc:mpc_title="@string/nc_guest_access">
<com.yarolegovich.mp.MaterialSwitchPreference
android:id="@+id/guest_access_allow_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
apc:mp_default_value="false"
apc:mp_key="guest_access_allowed"
apc:mp_summary="@string/nc_guest_access_allow_summary"
apc:mp_title="@string/nc_guest_access_allow_title" />
<com.yarolegovich.mp.MaterialSwitchPreference
android:id="@+id/guest_access_password_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
apc:mp_default_value="false"
apc:mp_key="guest_access_password"
apc:mp_summary="@string/nc_guest_access_password_summary"
apc:mp_title="@string/nc_guest_access_password_title"
tools:visibility="visible" />
<com.yarolegovich.mp.MaterialStandardPreference
android:id="@+id/guest_access_copy_url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
apc:mp_icon="@drawable/ic_share_variant"
apc:mp_icon_tint="@color/grey_600"
apc:mp_title="@string/nc_guest_access_share_link"
tools:visibility="visible" >
</com.yarolegovich.mp.MaterialStandardPreference>
<com.yarolegovich.mp.MaterialStandardPreference
android:id="@+id/guest_access_resend_invitations"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
apc:mp_icon="@drawable/ic_email"
apc:mp_icon_tint="@color/grey_600"
apc:mp_title="@string/nc_guest_access_resend_invitations"
tools:visibility="visible" />
</com.yarolegovich.mp.MaterialPreferenceCategory>
</com.yarolegovich.mp.MaterialPreferenceScreen>

View File

@ -2,21 +2,11 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/guest_access_settings"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
android:id="@+id/guest_access_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/guest_access_settings_category" android:id="@+id/guest_access_settings_category"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -27,22 +17,19 @@
android:paddingBottom="@dimen/standard_half_padding" android:paddingBottom="@dimen/standard_half_padding"
android:text="@string/nc_guest_access" android:text="@string/nc_guest_access"
android:textColor="@color/colorPrimary" android:textColor="@color/colorPrimary"
android:textSize="@dimen/headline_text_size"
android:textStyle="bold" /> android:textStyle="bold" />
<com.google.android.material.card.MaterialCardView
android:id="@+id/guest_access_settings_allow_guest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_quarter_margin">
<LinearLayout <LinearLayout
android:id="@+id/guest_access_settings_allow_guest"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:paddingStart="@dimen/standard_margin"
android:layout_marginTop="@dimen/standard_half_margin" android:paddingTop="@dimen/standard_margin"
android:layout_marginEnd="@dimen/standard_margin" android:paddingEnd="@dimen/standard_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:paddingBottom="@dimen/standard_half_margin"
android:orientation="horizontal"> android:orientation="horizontal"
android:background="?android:attr/selectableItemBackground">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
@ -69,26 +56,21 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/standard_margin" /> android:layout_marginStart="@dimen/standard_margin"
android:clickable="false" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/guest_access_settings_password_protection"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/guest_access_settings_password_protection"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:paddingStart="@dimen/standard_margin"
android:layout_marginTop="@dimen/standard_half_margin" android:paddingTop="@dimen/standard_half_margin"
android:layout_marginEnd="@dimen/standard_margin" android:paddingEnd="@dimen/standard_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:paddingBottom="@dimen/standard_half_margin"
android:orientation="horizontal" android:orientation="horizontal"
android:visibility="gone" android:background="?android:attr/selectableItemBackground">
tools:visibility="visible">
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -115,98 +97,68 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/standard_margin" /> android:layout_marginStart="@dimen/standard_margin"
android:clickable="false" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/share_conversation_button"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/share_conversation_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:paddingStart="@dimen/standard_margin"
android:layout_marginTop="@dimen/standard_half_margin" android:paddingTop="@dimen/standard_half_margin"
android:layout_marginEnd="@dimen/standard_margin" android:paddingEnd="@dimen/standard_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:paddingBottom="@dimen/standard_half_margin"
android:orientation="horizontal" android:orientation="horizontal"
android:visibility="gone" android:background="?android:attr/selectableItemBackground">
tools:visibility="visible">
<LinearLayout <ImageView
android:layout_width="0dp" android:layout_width="24dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:layout_weight="1" android:layout_marginEnd="@dimen/standard_margin"
android:orientation="horizontal"> android:contentDescription="@null"
android:src="@drawable/ic_share_variant"
<ImageView app:tint="@color/grey_600" />
android:layout_width="24dp"
android:layout_height="40dp" <com.google.android.material.textview.MaterialTextView
android:layout_marginEnd="@dimen/standard_margin" android:layout_width="wrap_content"
android:contentDescription="@null" android:layout_height="match_parent"
android:src="@drawable/ic_share_variant" android:gravity="center_vertical"
app:tint="@color/grey_600" /> android:text="@string/nc_guest_access_share_link"
android:textSize="@dimen/headline_text_size" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="@string/nc_guest_access_share_link"
android:textSize="@dimen/headline_text_size" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/resend_invitations_button"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/resend_invitations_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:paddingStart="@dimen/standard_margin"
android:layout_marginTop="@dimen/standard_half_margin" android:paddingTop="@dimen/standard_half_margin"
android:layout_marginEnd="@dimen/standard_margin" android:paddingEnd="@dimen/standard_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:paddingBottom="@dimen/standard_half_margin"
android:orientation="horizontal" android:orientation="horizontal"
android:visibility="gone" android:background="?android:attr/selectableItemBackground">
tools:visibility="visible">
<LinearLayout <ImageView
android:layout_width="0dp" android:layout_width="24dp"
android:layout_height="wrap_content" android:layout_height="40dp"
android:layout_weight="1" android:layout_marginEnd="@dimen/standard_margin"
android:orientation="horizontal"> android:contentDescription="@null"
android:src="@drawable/ic_email"
<ImageView app:tint="@color/grey_600" />
android:layout_width="24dp"
android:layout_height="40dp" <com.google.android.material.textview.MaterialTextView
android:layout_marginEnd="@dimen/standard_margin" android:layout_width="wrap_content"
android:contentDescription="@null" android:layout_height="match_parent"
android:src="@drawable/ic_email" android:gravity="center_vertical"
app:tint="@color/grey_600" /> android:text="@string/nc_guest_access_resend_invitations"
android:textSize="@dimen/headline_text_size" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="@string/nc_guest_access_resend_invitations"
android:textSize="@dimen/headline_text_size" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout> </LinearLayout>

View File

@ -1,21 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/notification_settings"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
android:id="@+id/notification_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/notification_settings_category" android:id="@+id/notification_settings_category"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -26,21 +16,19 @@
android:paddingBottom="@dimen/standard_half_padding" android:paddingBottom="@dimen/standard_half_padding"
android:text="@string/nc_notification_settings" android:text="@string/nc_notification_settings"
android:textColor="@color/colorPrimary" android:textColor="@color/colorPrimary"
android:textStyle="bold" /> android:textStyle="bold"
android:textSize="@dimen/headline_text_size"/>
<com.google.android.material.card.MaterialCardView
android:id="@+id/notification_settings_important_conversation"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/notification_settings_important_conversation"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:paddingStart="@dimen/standard_margin"
android:layout_marginTop="@dimen/standard_half_margin" android:layout_marginTop="@dimen/standard_half_margin"
android:layout_marginEnd="@dimen/standard_margin" android:paddingEnd="@dimen/standard_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:layout_marginBottom="@dimen/standard_half_margin"
android:orientation="horizontal"> android:orientation="horizontal"
android:background="?android:attr/selectableItemBackground">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
@ -67,10 +55,10 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/standard_margin" /> android:layout_marginStart="@dimen/standard_margin"
android:clickable="false" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/notification_settings_messages_input_layout" android:id="@+id/notification_settings_messages_input_layout"
@ -81,8 +69,7 @@
android:layout_marginTop="@dimen/standard_half_margin" android:layout_marginTop="@dimen/standard_half_margin"
android:layout_marginEnd="@dimen/standard_margin" android:layout_marginEnd="@dimen/standard_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:layout_marginBottom="@dimen/standard_half_margin"
android:hint="@string/nc_plain_old_messages" android:hint="@string/nc_plain_old_messages">
app:boxStrokeWidth="1dp">
<com.google.android.material.textfield.MaterialAutoCompleteTextView <com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/conversation_info_message_notifications_dropdown" android:id="@+id/conversation_info_message_notifications_dropdown"
@ -92,23 +79,18 @@
android:lines="1" android:lines="1"
android:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu" android:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
android:text="" /> android:text="" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.card.MaterialCardView
android:id="@+id/notification_settings_call_notifications"
android:layout_width="match_parent"
android:layout_height="56dp">
<LinearLayout <LinearLayout
android:id="@+id/notification_settings_call_notifications"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingTop="@dimen/standard_half_padding" android:paddingTop="@dimen/standard_half_padding"
android:paddingBottom="@dimen/standard_half_padding" android:paddingBottom="@dimen/standard_half_padding"
android:layout_marginStart="@dimen/standard_margin" android:paddingStart="@dimen/standard_margin"
android:layout_marginEnd="@dimen/standard_margin"> android:paddingEnd="@dimen/standard_margin"
android:background="?android:attr/selectableItemBackground">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:layout_width="0dp" android:layout_width="0dp"
@ -122,15 +104,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:layout_marginStart="@dimen/standard_margin"
android:checked="true" /> android:checked="true"
android:clickable="false" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout> </LinearLayout>

View File

@ -1,20 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/webinar_settings"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
android:id="@+id/webinar_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/webinar_settings_category" android:id="@+id/webinar_settings_category"
@ -26,25 +17,23 @@
android:paddingBottom="@dimen/standard_half_padding" android:paddingBottom="@dimen/standard_half_padding"
android:text="@string/nc_webinar" android:text="@string/nc_webinar"
android:textColor="@color/colorPrimary" android:textColor="@color/colorPrimary"
android:textStyle="bold" /> android:textStyle="bold"
android:textSize="@dimen/headline_text_size"/>
<com.google.android.material.card.MaterialCardView
android:id="@+id/webinar_settings_lobby"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/webinar_settings_lobby"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:paddingStart="@dimen/standard_margin"
android:layout_marginEnd="@dimen/standard_margin" android:paddingEnd="@dimen/standard_margin"
android:orientation="horizontal"> android:orientation="horizontal"
android:background="?android:attr/selectableItemBackground">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_half_margin" android:paddingTop="@dimen/standard_half_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:paddingBottom="@dimen/standard_half_margin"
android:layout_weight="1" android:layout_weight="1"
android:orientation="horizontal"> android:orientation="horizontal">
@ -73,25 +62,22 @@
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/standard_margin" android:layout_marginStart="@dimen/standard_margin"
android:layout_marginEnd="1dp" android:layout_marginEnd="1dp"
android:checked="true" /> android:checked="true"
android:clickable="false" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/start_time_button"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/start_time_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:paddingStart="@dimen/standard_margin"
android:layout_marginTop="@dimen/standard_half_margin" android:paddingTop="@dimen/standard_half_margin"
android:layout_marginEnd="@dimen/standard_margin" android:paddingEnd="@dimen/standard_margin"
android:layout_marginBottom="@dimen/standard_half_margin" android:paddingBottom="@dimen/standard_half_margin"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal"
android:background="?android:attr/selectableItemBackground">
<ImageView <ImageView
android:layout_width="24dp" android:layout_width="24dp"
@ -126,11 +112,4 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout> </LinearLayout>

View File

@ -1,67 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Nextcloud Talk application
~
~ @author Mario Danic
~ @author Andy Scherzinger
~ Copyright (C) 2021 Andy Scherzinger <info@andy-scherzinger.de>
~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
~
~ 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
~ the Free Software Foundation, either version 3 of the License, or
~ at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<com.yarolegovich.mp.MaterialPreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:apc="http://schemas.android.com/apk/res-auto"
android:id="@+id/notification_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.yarolegovich.mp.MaterialPreferenceCategory
android:id="@+id/notification_settings_category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
apc:cardBackgroundColor="@color/bg_default"
apc:cardElevation="0dp"
apc:mpc_title="@string/nc_notification_settings">
<com.yarolegovich.mp.MaterialSwitchPreference
android:id="@+id/conversation_info_priority_conversation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
apc:mp_default_value="false"
apc:mp_key="important_conversation"
apc:mp_title="@string/nc_important_conversation"
apc:mp_summary="@string/nc_important_conversation_desc"/>
<com.yarolegovich.mp.MaterialChoicePreference
android:id="@+id/conversation_info_message_notifications"
android:layout_width="match_parent"
android:layout_height="wrap_content"
apc:mp_entry_descriptions="@array/message_notification_levels"
apc:mp_entry_values="@array/message_notification_levels_entry_values"
apc:mp_key="message_notification_level"
apc:mp_show_value="onBottom"
apc:mp_title="@string/nc_plain_old_messages" />
<com.yarolegovich.mp.MaterialSwitchPreference
android:id="@+id/callNotifications"
android:layout_width="match_parent"
android:layout_height="wrap_content"
apc:mp_default_value="true"
apc:mp_key="call_notifications"
apc:mp_title="@string/nc_call_notifications" />
</com.yarolegovich.mp.MaterialPreferenceCategory>
</com.yarolegovich.mp.MaterialPreferenceScreen>

View File

@ -1,62 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Nextcloud Talk application
~
~ @author Mario Danic
~ @author Andy Scherzinger
~ Copyright (C) 2021 Andy Scherzinger <info@andy-scherzinger.de>
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
~
~ 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
~ the Free Software Foundation, either version 3 of the License, or
~ at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<com.yarolegovich.mp.MaterialPreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:apc="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/webinar_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.yarolegovich.mp.MaterialPreferenceCategory
android:id="@+id/conversation_info_webinar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
apc:cardBackgroundColor="@color/bg_default"
apc:cardElevation="0dp"
apc:mpc_title="@string/nc_webinar">
<com.yarolegovich.mp.MaterialSwitchPreference
android:id="@+id/conversation_info_lobby"
android:layout_width="match_parent"
android:layout_height="wrap_content"
apc:mp_default_value="false"
apc:mp_icon="@drawable/ic_room_service_black_24dp"
apc:mp_icon_tint="@color/grey_600"
apc:mp_key="conversation_lobby"
apc:mp_title="@string/nc_lobby" />
<com.yarolegovich.mp.MaterialStandardPreference
android:id="@+id/start_time_preferences"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
apc:mp_icon="@drawable/ic_timer_black_24dp"
apc:mp_icon_tint="@color/grey_600"
apc:mp_summary="@string/nc_manual"
apc:mp_title="@string/nc_start_time"
tools:visibility="visible" />
</com.yarolegovich.mp.MaterialPreferenceCategory>
</com.yarolegovich.mp.MaterialPreferenceScreen>

View File

@ -91,5 +91,6 @@
<dimen name="fab_small">40dp</dimen> <dimen name="fab_small">40dp</dimen>
<dimen name="sm_icon_height">30dp</dimen> <dimen name="sm_icon_height">30dp</dimen>
<dimen name="side_margin">16dp</dimen>
</resources> </resources>

View File

@ -153,6 +153,7 @@ How to translate with transifex:
<string name="nc_settings_read_privacy_title">Read status</string> <string name="nc_settings_read_privacy_title">Read status</string>
<string name="nc_settings_typing_status_desc">Share my typing-status and show the typing-status of others</string> <string name="nc_settings_typing_status_desc">Share my typing-status and show the typing-status of others</string>
<string name="nc_settings_typing_status_title">Typing status</string> <string name="nc_settings_typing_status_title">Typing status</string>
<string name="nc_settings_typing_status_hpb_description">Typing status is only available when using a high performance backend (HPB)</string>
<string name="nc_screen_lock_timeout_30">30 seconds</string> <string name="nc_screen_lock_timeout_30">30 seconds</string>
<string name="nc_screen_lock_timeout_60">1 minute</string> <string name="nc_screen_lock_timeout_60">1 minute</string>
@ -196,6 +197,7 @@ How to translate with transifex:
<string name="nc_new_conversation">New conversation</string> <string name="nc_new_conversation">New conversation</string>
<string name="nc_join_via_link">Join with a link</string> <string name="nc_join_via_link">Join with a link</string>
<string name="nc_list_open_conversations">List open conversations</string>
<string name="nc_join_via_web">Join via web</string> <string name="nc_join_via_web">Join via web</string>
<string name="nc_mark_as_read">Mark as read</string> <string name="nc_mark_as_read">Mark as read</string>
<string name="nc_mark_as_unread">Mark as unread</string> <string name="nc_mark_as_unread">Mark as unread</string>
@ -204,6 +206,10 @@ How to translate with transifex:
<string name="nc_forward_to_three_dots">Forward to …</string> <string name="nc_forward_to_three_dots">Forward to …</string>
<!-- Open conversations -->
<string name="nc_no_open_conversations_headline">No open conversations</string>
<string name="nc_no_open_conversations_text">No open conversations that you can join.\nEither there are no open conversations or you already joined all of them.</string>
<!-- Contacts --> <!-- Contacts -->
<string name="nc_select_participants">Select participants</string> <string name="nc_select_participants">Select participants</string>
<string name="nc_add_participants">Add participants</string> <string name="nc_add_participants">Add participants</string>
@ -559,6 +565,14 @@ How to translate with transifex:
<string name="nc_dialog_invalid_password">Invalid password</string> <string name="nc_dialog_invalid_password">Invalid password</string>
<string name="nc_dialog_reauth_or_delete">Do you want to reauthorize or delete this account?</string> <string name="nc_dialog_reauth_or_delete">Do you want to reauthorize or delete this account?</string>
<string name="nc_dialog_outdated_client">App is outdated</string>
<string name="nc_dialog_outdated_client_description">The app is too old and no longer supported by this server. Please update.</string>
<string name="nc_dialog_outdated_client_option_update">Update</string>
<string name="nc_switch_account">Switch account</string>
<string name="nc_dialog_maintenance_mode">Maintenance mode</string>
<string name="nc_dialog_maintenance_mode_description">Server is currently in maintenance mode.</string>
<string name="nc_close_app">Close app</string>
<!-- Take photo --> <!-- Take photo -->
<string name="take_photo">Take a photo</string> <string name="take_photo">Take a photo</string>
<string name="take_photo_switch_camera">Switch camera</string> <string name="take_photo_switch_camera">Switch camera</string>
@ -672,5 +686,13 @@ How to translate with transifex:
<string name="translation_error_message">Could not detect language</string> <string name="translation_error_message">Could not detect language</string>
<string name="translation_copy_translated_text">Copy translated text</string> <string name="translation_copy_translated_text">Copy translated text</string>
<string name="danger_zone">Danger Zone</string> <string name="danger_zone">Danger Zone</string>
<string name="nc_filter">Filter Conversations</string>
<string name="mentioned">Mentioned</string>
<string name="unread">Unread</string>
<string name="nc_settings_http_value">3128</string>
<string name="nc_settings_direct_value">8080</string>
<string name="nc_settings_socks_value">1080</string>
<string name="this_is_a_test_message">This is a test message</string>
<string name="v0_1">v0.1</string>
</resources> </resources>