style(lint): Migrate to KTX extension function

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2025-03-18 17:05:06 +01:00
parent 7e804f1738
commit db944ec1bd
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
37 changed files with 142 additions and 143 deletions

View File

@ -12,7 +12,6 @@ import android.accounts.Account
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.security.KeyChain import android.security.KeyChain
import android.text.TextUtils import android.text.TextUtils
@ -22,22 +21,24 @@ import android.view.View
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.widget.TextView import android.widget.TextView
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.core.net.toUri
import autodagger.AutoInjector import autodagger.AutoInjector
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.activities.BaseActivity import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.databinding.ActivityServerSelectionBinding import com.nextcloud.talk.databinding.ActivityServerSelectionBinding
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall
import com.nextcloud.talk.models.json.generic.Status import com.nextcloud.talk.models.json.generic.Status
import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.AccountUtils import com.nextcloud.talk.utils.AccountUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.CapabilitiesUtil
import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.UriUtils
import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.bundle.BundleKeys
import com.nextcloud.talk.utils.bundle.BundleKeys.ADD_ADDITIONAL_ACCOUNT import com.nextcloud.talk.utils.bundle.BundleKeys.ADD_ADDITIONAL_ACCOUNT
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_ACCOUNT_IMPORT import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_ACCOUNT_IMPORT
import com.nextcloud.talk.utils.CapabilitiesUtil
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
@ -45,7 +46,6 @@ import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import java.security.cert.CertificateException import java.security.cert.CertificateException
import javax.inject.Inject import javax.inject.Inject
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
class ServerSelectionActivity : BaseActivity() { class ServerSelectionActivity : BaseActivity() {
@ -198,10 +198,7 @@ class ServerSelectionActivity : BaseActivity() {
binding.importOrChooseProviderText.setOnClickListener { binding.importOrChooseProviderText.setOnClickListener {
val browserIntent = Intent( val browserIntent = Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
Uri.parse( resources!!.getString(R.string.nc_providers_url).toUri()
resources!!
.getString(R.string.nc_providers_url)
)
) )
startActivity(browserIntent) startActivity(browserIntent)
} }

View File

@ -12,8 +12,8 @@ import android.accounts.Account
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import androidx.core.graphics.drawable.toDrawable
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import autodagger.AutoInjector import autodagger.AutoInjector
@ -21,6 +21,7 @@ import com.nextcloud.talk.R
import com.nextcloud.talk.activities.BaseActivity import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.adapters.items.AdvancedUserItem import com.nextcloud.talk.adapters.items.AdvancedUserItem
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.ActivitySwitchAccountBinding import com.nextcloud.talk.databinding.ActivitySwitchAccountBinding
import com.nextcloud.talk.models.ImportAccount import com.nextcloud.talk.models.ImportAccount
@ -38,7 +39,6 @@ import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import org.osmdroid.config.Configuration import org.osmdroid.config.Configuration
import java.net.CookieManager import java.net.CookieManager
import javax.inject.Inject import javax.inject.Inject
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
/** /**
* Parts related to account import were either copied from or inspired by the great work done by David Luhmer at: * Parts related to account import were either copied from or inspired by the great work done by David Luhmer at:
@ -108,7 +108,7 @@ class SwitchAccountActivity : BaseActivity() {
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable())
supportActionBar?.title = resources!!.getString(R.string.nc_select_an_account) supportActionBar?.title = resources!!.getString(R.string.nc_select_an_account)
} }

View File

@ -49,6 +49,9 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.graphics.drawable.DrawableCompat import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.graphics.toColorInt
import androidx.core.net.toUri
import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import autodagger.AutoInjector import autodagger.AutoInjector
import com.bluelinelabs.logansquare.LoganSquare import com.bluelinelabs.logansquare.LoganSquare
@ -1262,7 +1265,7 @@ class CallActivity : CallBaseActivity() {
.subHeadingTvColor(resources.getColor(R.color.bg_default, null)) .subHeadingTvColor(resources.getColor(R.color.bg_default, null))
.subHeadingTvSize(SPOTLIGHT_SUBHEADING_SIZE) .subHeadingTvSize(SPOTLIGHT_SUBHEADING_SIZE)
.subHeadingTvText(resources.getString(R.string.nc_push_to_talk_desc)) .subHeadingTvText(resources.getString(R.string.nc_push_to_talk_desc))
.maskColor(Color.parseColor("#dc000000")) .maskColor("#dc000000".toColorInt())
.target(binding!!.microphoneButton) .target(binding!!.microphoneButton)
.lineAnimDuration(FADE_IN_ANIMATION_DURATION) .lineAnimDuration(FADE_IN_ANIMATION_DURATION)
.enableDismissAfterShown(true) .enableDismissAfterShown(true)
@ -2532,7 +2535,7 @@ class CallActivity : CallBaseActivity() {
val screenWidthPx = displayMetrics.widthPixels val screenWidthPx = displayMetrics.widthPixels
val screenWidthDp = DisplayUtils.convertPixelToDp(screenWidthPx.toFloat(), applicationContext).toInt() val screenWidthDp = DisplayUtils.convertPixelToDp(screenWidthPx.toFloat(), applicationContext).toInt()
var newXafterRotate = 0f var newXafterRotate = 0f
val newYafterRotate: Float = if (binding!!.callInfosLinearLayout.visibility == View.VISIBLE) { val newYafterRotate: Float = if (binding!!.callInfosLinearLayout.isVisible) {
Y_POS_CALL_INFO Y_POS_CALL_INFO
} else { } else {
Y_POS_NO_CALL_INFO Y_POS_NO_CALL_INFO
@ -2825,7 +2828,7 @@ class CallActivity : CallBaseActivity() {
val ringtoneUri: Uri? = if (isIncomingCallFromNotification) { val ringtoneUri: Uri? = if (isIncomingCallFromNotification) {
getCallRingtoneUri(applicationContext, appPreferences) getCallRingtoneUri(applicationContext, appPreferences)
} else { } else {
Uri.parse("android.resource://" + applicationContext.packageName + "/raw/tr110_1_kap8_3_freiton1") ("android.resource://" + applicationContext.packageName + "/raw/tr110_1_kap8_3_freiton1").toUri()
} }
if (ringtoneUri != null) { if (ringtoneUri != null) {
mediaPlayer = MediaPlayer() mediaPlayer = MediaPlayer()

View File

@ -8,9 +8,9 @@
package com.nextcloud.talk.adapters.items package com.nextcloud.talk.adapters.items
import android.accounts.Account import android.accounts.Account
import android.net.Uri
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
import androidx.core.net.toUri
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.items.AdvancedUserItem.UserItemViewHolder import com.nextcloud.talk.adapters.items.AdvancedUserItem.UserItemViewHolder
@ -75,9 +75,9 @@ class AdvancedUserItem(
holder.binding.userName.text = model.displayName holder.binding.userName.text = model.displayName
} }
if (user != null && !TextUtils.isEmpty(user.baseUrl)) { if (user != null && !TextUtils.isEmpty(user.baseUrl)) {
val host = Uri.parse(user.baseUrl).host val host = user.baseUrl!!.toUri().host
if (!TextUtils.isEmpty(host)) { if (!TextUtils.isEmpty(host)) {
holder.binding.account.text = Uri.parse(user.baseUrl).host holder.binding.account.text = user.baseUrl!!.toUri().host
} else { } else {
holder.binding.account.text = user.baseUrl holder.binding.account.text = user.baseUrl
} }

View File

@ -10,11 +10,11 @@ package com.nextcloud.talk.adapters.messages
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
@ -100,7 +100,7 @@ class IncomingDeckCardViewHolder(incomingView: View, payload: Any) : MessageHold
} }
binding.cardView.setOnClickListener { binding.cardView.setOnClickListener {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(cardLink)) val browserIntent = Intent(Intent.ACTION_VIEW, cardLink!!.toUri())
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(browserIntent) context.startActivity(browserIntent)
} }

View File

@ -12,13 +12,13 @@ package com.nextcloud.talk.adapters.messages
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.util.Log import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import android.view.MotionEvent import android.view.MotionEvent
import android.view.View import android.view.View
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewClient import android.webkit.WebViewClient
import androidx.core.net.toUri
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
@ -223,7 +223,7 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) :
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
return if (url != null && UriUtils.hasHttpProtocolPrefixed(url) return if (url != null && UriUtils.hasHttpProtocolPrefixed(url)
) { ) {
view?.context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) view?.context?.startActivity(Intent(Intent.ACTION_VIEW, url.toUri()))
true true
} else { } else {
false false
@ -259,7 +259,7 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) :
private fun openGeoLink() { private fun openGeoLink() {
if (!locationGeoLink.isNullOrEmpty()) { if (!locationGeoLink.isNullOrEmpty()) {
val geoLinkWithMarker = addMarkerToGeoLink(locationGeoLink!!) val geoLinkWithMarker = addMarkerToGeoLink(locationGeoLink!!)
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(geoLinkWithMarker)) val browserIntent = Intent(Intent.ACTION_VIEW, geoLinkWithMarker.toUri())
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(browserIntent) context.startActivity(browserIntent)
} else { } else {

View File

@ -8,13 +8,13 @@ package com.nextcloud.talk.adapters.messages
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import androidx.core.net.toUri
import coil.load import coil.load
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.databinding.ReferenceInsideMessageBinding
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ReferenceInsideMessageBinding
import com.nextcloud.talk.models.json.opengraph.OpenGraphOverall import com.nextcloud.talk.models.json.opengraph.OpenGraphOverall
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import io.reactivex.Observer import io.reactivex.Observer
@ -82,7 +82,7 @@ class LinkPreview {
} }
binding.referenceWrapper.setOnClickListener { binding.referenceWrapper.setOnClickListener {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(referenceLink)) val browserIntent = Intent(Intent.ACTION_VIEW, referenceLink!!.toUri())
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(browserIntent) context.startActivity(browserIntent)
} }

View File

@ -11,12 +11,12 @@ package com.nextcloud.talk.adapters.messages
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
@ -121,7 +121,7 @@ class OutcomingDeckCardViewHolder(
binding.checkMark.contentDescription = readStatusContentDescriptionString binding.checkMark.contentDescription = readStatusContentDescriptionString
binding.cardView.setOnClickListener { binding.cardView.setOnClickListener {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(cardLink)) val browserIntent = Intent(Intent.ACTION_VIEW, cardLink!!.toUri())
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(browserIntent) context.startActivity(browserIntent)
} }

View File

@ -11,7 +11,6 @@ package com.nextcloud.talk.adapters.messages
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.util.Log import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import android.view.MotionEvent import android.view.MotionEvent
@ -19,6 +18,7 @@ import android.view.View
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewClient import android.webkit.WebViewClient
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.core.net.toUri
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.google.android.flexbox.FlexboxLayout import com.google.android.flexbox.FlexboxLayout
@ -160,7 +160,7 @@ class OutcomingLocationMessageViewHolder(incomingView: View) :
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
return if (url != null && UriUtils.hasHttpProtocolPrefixed(url) return if (url != null && UriUtils.hasHttpProtocolPrefixed(url)
) { ) {
view?.context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) view?.context?.startActivity(Intent(Intent.ACTION_VIEW, url.toUri()))
true true
} else { } else {
false false
@ -259,7 +259,7 @@ class OutcomingLocationMessageViewHolder(incomingView: View) :
private fun openGeoLink() { private fun openGeoLink() {
if (!locationGeoLink.isNullOrEmpty()) { if (!locationGeoLink.isNullOrEmpty()) {
val geoLinkWithMarker = addMarkerToGeoLink(locationGeoLink!!) val geoLinkWithMarker = addMarkerToGeoLink(locationGeoLink!!)
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(geoLinkWithMarker)) val browserIntent = Intent(Intent.ACTION_VIEW, geoLinkWithMarker.toUri())
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(browserIntent) context.startActivity(browserIntent)
} else { } else {

View File

@ -13,7 +13,6 @@ import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Handler import android.os.Handler
import android.util.Base64 import android.util.Base64
import android.util.Log import android.util.Log
@ -21,6 +20,7 @@ import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import androidx.emoji2.widget.EmojiTextView import androidx.emoji2.widget.EmojiTextView
import autodagger.AutoInjector import autodagger.AutoInjector
import com.google.android.material.card.MaterialCardView import com.google.android.material.card.MaterialCardView
@ -29,12 +29,12 @@ import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.filebrowser.models.BrowserFile
import com.nextcloud.talk.filebrowser.webdav.ReadFilesystemOperation
import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding
import com.nextcloud.talk.extensions.loadChangelogBotAvatar import com.nextcloud.talk.extensions.loadChangelogBotAvatar
import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.extensions.loadFederatedUserAvatar
import com.nextcloud.talk.filebrowser.models.BrowserFile
import com.nextcloud.talk.filebrowser.webdav.ReadFilesystemOperation
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DateUtils
@ -140,7 +140,7 @@ abstract class PreviewMessageViewHolder(itemView: View?, payload: Any?) :
} else { } else {
if (message.messageType == ChatMessage.MessageType.SINGLE_LINK_IMAGE_MESSAGE.name) { if (message.messageType == ChatMessage.MessageType.SINGLE_LINK_IMAGE_MESSAGE.name) {
clickView!!.setOnClickListener { clickView!!.setOnClickListener {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(message.imageUrl)) val browserIntent = Intent(Intent.ACTION_VIEW, message.imageUrl!!.toUri())
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context!!.startActivity(browserIntent) context!!.startActivity(browserIntent)
} }

View File

@ -9,7 +9,6 @@ package com.nextcloud.talk.adapters.messages
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.text.Spannable import android.text.Spannable
import android.text.SpannableString import android.text.SpannableString
import android.text.TextPaint import android.text.TextPaint
@ -18,13 +17,14 @@ import android.text.style.ClickableSpan
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import autodagger.AutoInjector import autodagger.AutoInjector
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.databinding.ItemSystemMessageBinding
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemSystemMessageBinding
import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DateUtils
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
@ -96,7 +96,7 @@ class SystemMessageViewHolder(itemView: View) : MessageHolders
if (newStartIndex != -1) { if (newStartIndex != -1) {
val clickableSpan = object : ClickableSpan() { val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) { override fun onClick(widget: View) {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(link)) val browserIntent = Intent(Intent.ACTION_VIEW, link.toUri())
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context?.startActivity(browserIntent) context?.startActivity(browserIntent)
} }

View File

@ -24,8 +24,6 @@ import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.AssetFileDescriptor import android.content.res.AssetFileDescriptor
import android.database.Cursor import android.database.Cursor
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
@ -58,6 +56,8 @@ import androidx.core.content.PermissionChecker
import androidx.core.content.PermissionChecker.PERMISSION_GRANTED import androidx.core.content.PermissionChecker.PERMISSION_GRANTED
import androidx.core.graphics.ColorUtils import androidx.core.graphics.ColorUtils
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import androidx.core.graphics.drawable.toDrawable
import androidx.core.net.toUri
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.text.bold import androidx.core.text.bold
import androidx.emoji2.text.EmojiCompat import androidx.emoji2.text.EmojiCompat
@ -1022,24 +1022,20 @@ class ChatActivity :
} }
if (uiState.userAbsence.replacementUserDisplayName != null) { if (uiState.userAbsence.replacementUserDisplayName != null) {
var imageUri = Uri.parse( var imageUri = ApiUtils.getUrlForAvatar(
ApiUtils.getUrlForAvatar( conversationUser?.baseUrl,
uiState.userAbsence
.replacementUserId,
false
).toUri()
if (DisplayUtils.isDarkModeOn(context)) {
imageUri = ApiUtils.getUrlForAvatarDarkTheme(
conversationUser?.baseUrl, conversationUser?.baseUrl,
uiState.userAbsence uiState
.userAbsence
.replacementUserId, .replacementUserId,
false false
) ).toUri()
)
if (DisplayUtils.isDarkModeOn(context)) {
imageUri = Uri.parse(
ApiUtils.getUrlForAvatarDarkTheme(
conversationUser?.baseUrl,
uiState
.userAbsence
.replacementUserId,
false
)
)
} }
binding.outOfOfficeContainer.findViewById<TextView>(R.id.absenceReplacement).text = binding.outOfOfficeContainer.findViewById<TextView>(R.id.absenceReplacement).text =
context.resources.getString(R.string.user_absence_replacement) context.resources.getString(R.string.user_absence_replacement)
@ -1168,7 +1164,7 @@ class ChatActivity :
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable())
setActionBarTitle() setActionBarTitle()
viewThemeUtils.material.themeToolbar(binding.chatToolbar) viewThemeUtils.material.themeToolbar(binding.chatToolbar)
} }
@ -1511,7 +1507,7 @@ class ChatActivity :
) )
viewThemeUtils.talk.themeStatusDrawable(context, status) viewThemeUtils.talk.themeStatusDrawable(context, status)
binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_avatar) binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_avatar)
.setImageDrawable(BitmapDrawable(resources, bitmap)) .setImageDrawable(bitmap.toDrawable(resources))
binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_status) binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_status)
.setImageDrawable(status) .setImageDrawable(status)
binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_status).contentDescription = binding.chatToolbar.findViewById<ImageView>(R.id.chat_toolbar_status).contentDescription =
@ -1967,7 +1963,7 @@ class ChatActivity :
val filenamesWithLineBreaks = StringBuilder("\n") val filenamesWithLineBreaks = StringBuilder("\n")
for (file in filesToUpload) { for (file in filesToUpload) {
val filename = FileUtils.getFileName(Uri.parse(file), context) val filename = FileUtils.getFileName(file.toUri(), context)
filenamesWithLineBreaks.append(filename).append("\n") filenamesWithLineBreaks.append(filename).append("\n")
} }
@ -2043,7 +2039,7 @@ class ChatActivity :
val filenamesWithLineBreaks = StringBuilder("\n") val filenamesWithLineBreaks = StringBuilder("\n")
for (file in filesToUpload) { for (file in filesToUpload) {
val filename = FileUtils.getFileName(Uri.parse(file), context) val filename = FileUtils.getFileName(file.toUri(), context)
filenamesWithLineBreaks.append(filename).append("\n") filenamesWithLineBreaks.append(filename).append("\n")
} }

View File

@ -8,7 +8,6 @@
package com.nextcloud.talk.chat package com.nextcloud.talk.chat
import android.content.res.Resources import android.content.res.Resources
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
@ -40,6 +39,8 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.appcompat.view.ContextThemeWrapper import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toDrawable
import androidx.core.view.isVisible
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import androidx.emoji2.widget.EmojiTextView import androidx.emoji2.widget.EmojiTextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@ -476,7 +477,7 @@ class MessageInputFragment : Fragment() {
binding.fragmentMessageInputView.messageSendButton.visibility = binding.fragmentMessageInputView.messageSendButton.visibility =
if (binding.fragmentMessageInputView.inputEditText.text.isEmpty() || if (binding.fragmentMessageInputView.inputEditText.text.isEmpty() ||
binding.fragmentEditView.editMessageView.visibility == View.VISIBLE binding.fragmentEditView.editMessageView.isVisible
) { ) {
View.GONE View.GONE
} else { } else {
@ -608,7 +609,7 @@ class MessageInputFragment : Fragment() {
private fun setupMentionAutocomplete() { private fun setupMentionAutocomplete() {
val elevation = MENTION_AUTO_COMPLETE_ELEVATION val elevation = MENTION_AUTO_COMPLETE_ELEVATION
resources.let { resources.let {
val backgroundDrawable = ColorDrawable(it.getColor(R.color.bg_default, null)) val backgroundDrawable = it.getColor(R.color.bg_default, null).toDrawable()
val presenter = MentionAutocompletePresenter( val presenter = MentionAutocompletePresenter(
requireContext(), requireContext(),
chatActivity.roomToken, chatActivity.roomToken,

View File

@ -13,7 +13,6 @@ package com.nextcloud.talk.conversationinfo
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
@ -27,6 +26,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.toDrawable
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@ -321,7 +321,7 @@ class ConversationInfoActivity :
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(android.R.color.transparent, null).toDrawable())
supportActionBar?.title = if (hasAvatarSpacing) { supportActionBar?.title = if (hasAvatarSpacing) {
" " + resources!!.getString(R.string.nc_conversation_menu_conversation_info) " " + resources!!.getString(R.string.nc_conversation_menu_conversation_info)
} else { } else {

View File

@ -8,7 +8,6 @@
package com.nextcloud.talk.conversationinfoedit package com.nextcloud.talk.conversationinfoedit
import android.app.Activity import android.app.Activity
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.text.InputFilter import android.text.InputFilter
import android.text.TextUtils import android.text.TextUtils
@ -18,6 +17,7 @@ import android.view.MenuItem
import android.view.View import android.view.View
import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.graphics.drawable.toDrawable
import androidx.core.net.toFile import androidx.core.net.toFile
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
@ -252,7 +252,7 @@ class ConversationInfoEditActivity : BaseActivity() {
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(android.R.color.transparent, null).toDrawable())
supportActionBar?.title = resources!!.getString(R.string.nc_conversation_menu_conversation_info) supportActionBar?.title = resources!!.getString(R.string.nc_conversation_menu_conversation_info)
viewThemeUtils.material.themeToolbar(binding.conversationInfoEditToolbar) viewThemeUtils.material.themeToolbar(binding.conversationInfoEditToolbar)
@ -319,7 +319,7 @@ class ConversationInfoEditActivity : BaseActivity() {
conversation!!.name conversation!!.name
) )
) { ) {
conversation!!.name?.let { binding.avatarImage.loadUserAvatar(conversationUser, it, true, false) } conversation!!.name.let { binding.avatarImage.loadUserAvatar(conversationUser, it, true, false) }
} }
ConversationEnums.ConversationType.ROOM_GROUP_CALL, ConversationEnums.ConversationType.ROOM_PUBLIC_CALL -> { ConversationEnums.ConversationType.ROOM_GROUP_CALL, ConversationEnums.ConversationType.ROOM_PUBLIC_CALL -> {

View File

@ -19,9 +19,7 @@ import android.content.ActivityNotFoundException
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
@ -42,6 +40,8 @@ import androidx.annotation.OptIn
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.core.graphics.drawable.toDrawable
import androidx.core.net.toUri
import androidx.core.view.MenuItemCompat import androidx.core.view.MenuItemCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
@ -638,7 +638,7 @@ class ConversationsListActivity :
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable())
supportActionBar?.title = resources!!.getString(R.string.nc_app_product_name) supportActionBar?.title = resources!!.getString(R.string.nc_app_product_name)
viewThemeUtils.material.themeToolbar(binding.conversationListToolbar) viewThemeUtils.material.themeToolbar(binding.conversationListToolbar)
} }
@ -1473,7 +1473,7 @@ class ConversationsListActivity :
if (platformPermissionUtil.isFilesPermissionGranted()) { if (platformPermissionUtil.isFilesPermissionGranted()) {
val fileNamesWithLineBreaks = StringBuilder("\n") val fileNamesWithLineBreaks = StringBuilder("\n")
for (file in filesToShare!!) { for (file in filesToShare!!) {
val filename = FileUtils.getFileName(Uri.parse(file), context) val filename = FileUtils.getFileName(file.toUri(), context)
fileNamesWithLineBreaks.append(filename).append("\n") fileNamesWithLineBreaks.append(filename).append("\n")
} }
val confirmationQuestion: String = if (filesToShare!!.size == 1) { val confirmationQuestion: String = if (filesToShare!!.size == 1) {
@ -1900,11 +1900,11 @@ class ConversationsListActivity :
.setPositiveButton(R.string.nc_dialog_outdated_client_option_update) { _, _ -> .setPositiveButton(R.string.nc_dialog_outdated_client_option_update) { _, _ ->
try { try {
startActivity( startActivity(
Intent(Intent.ACTION_VIEW, Uri.parse(CLIENT_UPGRADE_MARKET_LINK + packageName)) Intent(Intent.ACTION_VIEW, (CLIENT_UPGRADE_MARKET_LINK + packageName).toUri())
) )
} catch (e: ActivityNotFoundException) { } catch (e: ActivityNotFoundException) {
startActivity( startActivity(
Intent(Intent.ACTION_VIEW, Uri.parse(CLIENT_UPGRADE_GPLAY_LINK + packageName)) Intent(Intent.ACTION_VIEW, (CLIENT_UPGRADE_GPLAY_LINK + packageName).toUri())
) )
} }
} }

View File

@ -10,7 +10,6 @@ import android.annotation.SuppressLint
import android.content.ClipData import android.content.ClipData
import android.content.ClipboardManager import android.content.ClipboardManager
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Build.MANUFACTURER import android.os.Build.MANUFACTURER
import android.os.Build.MODEL import android.os.Build.MODEL
@ -28,6 +27,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.core.net.toUri
import autodagger.AutoInjector import autodagger.AutoInjector
import com.nextcloud.talk.BuildConfig import com.nextcloud.talk.BuildConfig
import com.nextcloud.talk.R import com.nextcloud.talk.R
@ -35,8 +35,8 @@ import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
import com.nextcloud.talk.components.StandardAppBar
import com.nextcloud.talk.components.SetupSystemBars import com.nextcloud.talk.components.SetupSystemBars
import com.nextcloud.talk.components.StandardAppBar
import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.BrandingUtils import com.nextcloud.talk.utils.BrandingUtils
import com.nextcloud.talk.utils.ClosedInterfaceImpl import com.nextcloud.talk.utils.ClosedInterfaceImpl
@ -151,7 +151,7 @@ class DiagnoseActivity : BaseActivity() {
val intent = Intent(Intent.ACTION_SENDTO).apply { val intent = Intent(Intent.ACTION_SENDTO).apply {
val appName = context.resources.getString(R.string.nc_app_product_name) val appName = context.resources.getString(R.string.nc_app_product_name)
data = Uri.parse("mailto:") data = "mailto:".toUri()
putExtra(Intent.EXTRA_SUBJECT, appName) putExtra(Intent.EXTRA_SUBJECT, appName)
putExtra(Intent.EXTRA_TEXT, text) putExtra(Intent.EXTRA_TEXT, text)
} }
@ -166,7 +166,7 @@ class DiagnoseActivity : BaseActivity() {
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
Uri.parse(resources!!.getString(R.string.nc_talk_android_issues_url)) resources!!.getString(R.string.nc_talk_android_issues_url).toUri()
) )
) )
} }

View File

@ -11,18 +11,17 @@
package com.nextcloud.talk.extensions package com.nextcloud.talk.extensions
import android.content.Context import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Color import android.graphics.Color
import android.graphics.Paint import android.graphics.Paint
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.graphics.drawable.LayerDrawable import android.graphics.drawable.LayerDrawable
import android.util.Log import android.util.Log
import android.widget.ImageView import android.widget.ImageView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.createBitmap
import androidx.core.graphics.drawable.toDrawable
import coil.annotation.ExperimentalCoilApi import coil.annotation.ExperimentalCoilApi
import coil.imageLoader import coil.imageLoader
import coil.load import coil.load
@ -326,7 +325,7 @@ fun ImageView.loadChangelogBotAvatar(): io.reactivex.disposables.Disposable {
fun ImageView.loadBotsAvatar(): io.reactivex.disposables.Disposable { fun ImageView.loadBotsAvatar(): io.reactivex.disposables.Disposable {
val layers = arrayOfNulls<Drawable>(2) val layers = arrayOfNulls<Drawable>(2)
layers[0] = ColorDrawable(context.getColor(R.color.black)) layers[0] = context.getColor(R.color.black).toDrawable()
layers[1] = TextDrawable(context, ">") layers[1] = TextDrawable(context, ">")
val layerDrawable = LayerDrawable(layers) val layerDrawable = LayerDrawable(layers)
val data: Any = layerDrawable val data: Any = layerDrawable
@ -386,7 +385,7 @@ fun ImageView.loadGuestAvatar(baseUrl: String, name: String, big: Boolean): io.r
@Suppress("MagicNumber") @Suppress("MagicNumber")
private fun createTextDrawable(context: Context, letter: String): Drawable { private fun createTextDrawable(context: Context, letter: String): Drawable {
val size = 100 val size = 100
val bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888) val bitmap = createBitmap(size, size)
val canvas = Canvas(bitmap) val canvas = Canvas(bitmap)
val paint = Paint().apply { val paint = Paint().apply {
@ -406,7 +405,7 @@ private fun createTextDrawable(context: Context, letter: String): Drawable {
val yPos = (canvas.height / 2 - (textPaint.descent() + textPaint.ascent()) / 2) val yPos = (canvas.height / 2 - (textPaint.descent() + textPaint.ascent()) / 2)
canvas.drawText(letter.take(1), xPos, yPos, textPaint) canvas.drawText(letter.take(1), xPos, yPos, textPaint)
return BitmapDrawable(context.resources, bitmap) return bitmap.toDrawable(context.resources)
} }
private class DisposableWrapper(private val disposable: coil.request.Disposable) : io.reactivex.disposables private class DisposableWrapper(private val disposable: coil.request.Disposable) : io.reactivex.disposables

View File

@ -7,10 +7,10 @@
package com.nextcloud.talk.invitation package com.nextcloud.talk.invitation
import android.content.Intent import android.content.Intent
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.core.graphics.drawable.toDrawable
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import autodagger.AutoInjector import autodagger.AutoInjector
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
@ -168,7 +168,7 @@ class InvitationsActivity : BaseActivity() {
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable())
viewThemeUtils.material.themeToolbar(binding.invitationsToolbar) viewThemeUtils.material.themeToolbar(binding.invitationsToolbar)
} }
} }

View File

@ -15,7 +15,6 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.graphics.Bitmap import android.graphics.Bitmap
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
@ -33,6 +32,7 @@ import androidx.core.app.Person
import androidx.core.app.RemoteInput import androidx.core.app.RemoteInput
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import androidx.core.net.toUri
import androidx.emoji2.text.EmojiCompat import androidx.emoji2.text.EmojiCompat
import androidx.work.Data import androidx.work.Data
import androidx.work.Worker import androidx.work.Worker
@ -272,7 +272,7 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
val soundUri = getCallRingtoneUri(applicationContext, appPreferences) val soundUri = getCallRingtoneUri(applicationContext, appPreferences)
val notificationChannelId = NotificationUtils.NotificationChannels.NOTIFICATION_CHANNEL_CALLS_V4.name val notificationChannelId = NotificationUtils.NotificationChannels.NOTIFICATION_CHANNEL_CALLS_V4.name
val uri = Uri.parse(signatureVerification.user!!.baseUrl!!) val uri = signatureVerification.user!!.baseUrl!!.toUri()
val baseUrl = uri.host val baseUrl = uri.host
val notification = val notification =
@ -499,7 +499,7 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
0 0
} }
val pendingIntent = PendingIntent.getActivity(context, requestCode, intent, intentFlag) val pendingIntent = PendingIntent.getActivity(context, requestCode, intent, intentFlag)
val uri = Uri.parse(signatureVerification.user!!.baseUrl!!) val uri = signatureVerification.user!!.baseUrl!!.toUri()
val baseUrl = uri.host val baseUrl = uri.host
var contentTitle: CharSequence? = "" var contentTitle: CharSequence? = ""

View File

@ -19,6 +19,7 @@ import android.os.Bundle
import android.os.SystemClock import android.os.SystemClock
import android.util.Log import android.util.Log
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.net.toUri
import androidx.work.Data import androidx.work.Data
import androidx.work.ExistingWorkPolicy import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequest import androidx.work.OneTimeWorkRequest
@ -110,7 +111,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa
require(sourceFile.isNotEmpty()) require(sourceFile.isNotEmpty())
checkNotNull(roomToken) checkNotNull(roomToken)
val sourceFileUri = Uri.parse(sourceFile) val sourceFileUri = sourceFile.toUri()
fileName = FileUtils.getFileName(sourceFileUri, context) fileName = FileUtils.getFileName(sourceFileUri, context)
file = FileUtils.getFileFromUri(context, sourceFileUri) file = FileUtils.getFileFromUri(context, sourceFileUri)
val remotePath = getRemotePath(currentUser) val remotePath = getRemotePath(currentUser)

View File

@ -9,7 +9,6 @@ package com.nextcloud.talk.location
import android.app.SearchManager import android.app.SearchManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.text.InputType import android.text.InputType
import android.util.Log import android.util.Log
@ -17,6 +16,7 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.graphics.drawable.toDrawable
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -132,7 +132,7 @@ class GeocodingActivity :
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable())
supportActionBar?.title = "" supportActionBar?.title = ""
viewThemeUtils.material.themeToolbar(binding.geocodingToolbar) viewThemeUtils.material.themeToolbar(binding.geocodingToolbar)
} }

View File

@ -13,7 +13,6 @@ import android.app.SearchManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.graphics.drawable.ColorDrawable
import android.location.Location import android.location.Location
import android.location.LocationListener import android.location.LocationListener
import android.location.LocationManager import android.location.LocationManager
@ -28,6 +27,7 @@ import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.content.PermissionChecker import androidx.core.content.PermissionChecker
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.toDrawable
import androidx.core.view.MenuItemCompat import androidx.core.view.MenuItemCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import autodagger.AutoInjector import autodagger.AutoInjector
@ -178,7 +178,7 @@ class LocationPickerActivity :
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(android.R.color.transparent, null).toDrawable())
supportActionBar?.title = context.getString(R.string.nc_share_location) supportActionBar?.title = context.getString(R.string.nc_share_location)
viewThemeUtils.material.themeToolbar(binding.locationPickerToolbar) viewThemeUtils.material.themeToolbar(binding.locationPickerToolbar)
} }

View File

@ -7,9 +7,9 @@
package com.nextcloud.talk.openconversations package com.nextcloud.talk.openconversations
import android.content.Intent import android.content.Intent
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.graphics.drawable.toDrawable
import androidx.core.widget.doOnTextChanged import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import autodagger.AutoInjector import autodagger.AutoInjector
@ -143,7 +143,7 @@ class ListOpenConversationsActivity : BaseActivity() {
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable())
viewThemeUtils.material.themeToolbar(binding.openConversationsToolbar) viewThemeUtils.material.themeToolbar(binding.openConversationsToolbar)
} }
} }

View File

@ -11,8 +11,6 @@ package com.nextcloud.talk.profile
import android.app.Activity import android.app.Activity
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.text.Editable import android.text.Editable
import android.text.TextUtils import android.text.TextUtils
@ -27,7 +25,9 @@ import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toDrawable
import androidx.core.net.toFile import androidx.core.net.toFile
import androidx.core.net.toUri
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import autodagger.AutoInjector import autodagger.AutoInjector
@ -208,7 +208,7 @@ class ProfileActivity : BaseActivity() {
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(android.R.color.transparent, null).toDrawable())
supportActionBar?.title = context.getString(R.string.nc_profile_personal_info_title) supportActionBar?.title = context.getString(R.string.nc_profile_personal_info_title)
viewThemeUtils.material.themeToolbar(binding.profileToolbar) viewThemeUtils.material.themeToolbar(binding.profileToolbar)
} }
@ -313,7 +313,7 @@ class ProfileActivity : BaseActivity() {
private fun showUserProfile() { private fun showUserProfile() {
if (currentUser!!.baseUrl != null) { if (currentUser!!.baseUrl != null) {
binding.userinfoBaseurl.text = Uri.parse(currentUser!!.baseUrl!!).host binding.userinfoBaseurl.text = currentUser!!.baseUrl!!.toUri().host
} }
DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false) DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false)
if (!TextUtils.isEmpty(userInfo?.displayName)) { if (!TextUtils.isEmpty(userInfo?.displayName)) {

View File

@ -20,7 +20,6 @@ import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.graphics.PorterDuff import android.graphics.PorterDuff
import android.graphics.drawable.ColorDrawable
import android.media.RingtoneManager import android.media.RingtoneManager
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
@ -35,6 +34,8 @@ import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.toDrawable
import androidx.core.net.toUri
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.work.OneTimeWorkRequest import androidx.work.OneTimeWorkRequest
@ -199,7 +200,7 @@ class SettingsActivity :
registerChangeListeners() registerChangeListeners()
if (currentUser != null) { if (currentUser != null) {
binding.domainText.text = Uri.parse(currentUser!!.baseUrl).host binding.domainText.text = currentUser!!.baseUrl!!.toUri().host
setupServerAgeWarning() setupServerAgeWarning()
if (currentUser!!.displayName != null) { if (currentUser!!.displayName != null) {
binding.nameText.text = currentUser!!.displayName binding.nameText.text = currentUser!!.displayName
@ -260,7 +261,7 @@ class SettingsActivity :
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(android.R.color.transparent, null).toDrawable())
supportActionBar?.title = context.getString(R.string.nc_settings) supportActionBar?.title = context.getString(R.string.nc_settings)
viewThemeUtils.material.themeToolbar(binding.settingsToolbar) viewThemeUtils.material.themeToolbar(binding.settingsToolbar)
} }
@ -441,7 +442,7 @@ class SettingsActivity :
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
Uri.parse(resources.getString(R.string.notification_checklist_url)) resources.getString(R.string.notification_checklist_url).toUri()
) )
) )
} }
@ -449,7 +450,7 @@ class SettingsActivity :
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
Uri.parse(resources.getString(R.string.dontkillmyapp_url)) resources.getString(R.string.dontkillmyapp_url).toUri()
) )
) )
} }
@ -503,7 +504,7 @@ class SettingsActivity :
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
Uri.parse(resources!!.getString(R.string.nc_source_code_url)) resources!!.getString(R.string.nc_source_code_url).toUri()
) )
) )
} }
@ -525,7 +526,7 @@ class SettingsActivity :
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
Uri.parse(resources!!.getString(R.string.nc_privacy_url)) resources!!.getString(R.string.nc_privacy_url).toUri()
) )
) )
} }
@ -540,7 +541,7 @@ class SettingsActivity :
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
Uri.parse(resources!!.getString(R.string.nc_gpl3_url)) resources!!.getString(R.string.nc_gpl3_url).toUri()
) )
) )
} }

View File

@ -7,8 +7,8 @@
*/ */
package com.nextcloud.talk.shareditems.repositories package com.nextcloud.talk.shareditems.repositories
import android.net.Uri
import android.util.Log import android.util.Log
import androidx.core.net.toUri
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
@ -135,7 +135,7 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi, pr
actorParameters["id"]!!, actorParameters["id"]!!,
actorParameters["name"]!!, actorParameters["name"]!!,
dateTime, dateTime,
Uri.parse(objectParameters["id"]!!.replace("geo:", "geo:0,0?z=11&q=")) objectParameters["id"]!!.replace("geo:", "geo:0,0?z=11&q=").toUri()
) )
} }
@ -146,7 +146,7 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi, pr
actorParameters["id"]!!, actorParameters["id"]!!,
actorParameters["name"]!!, actorParameters["name"]!!,
dateTime, dateTime,
Uri.parse(objectParameters["link"]!!) objectParameters["link"]!!.toUri()
) )
} }
@ -168,7 +168,7 @@ class SharedItemsRepositoryImpl @Inject constructor(private val ncApi: NcApi, pr
return ncApi.getSharedItemsOverview( return ncApi.getSharedItemsOverview(
credentials, credentials,
ApiUtils.getUrlForChatSharedItemsOverview(1, parameters.baseUrl!!, parameters.roomToken), ApiUtils.getUrlForChatSharedItemsOverview(1, parameters.baseUrl, parameters.roomToken),
1 1
).map { ).map {
val types = mutableSetOf<SharedItemType>() val types = mutableSetOf<SharedItemType>()

View File

@ -11,13 +11,13 @@ import android.app.AlertDialog
import android.content.ClipData import android.content.ClipData
import android.content.ClipboardManager import android.content.ClipboardManager
import android.content.Context import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.text.method.ScrollingMovementMethod import android.text.method.ScrollingMovementMethod
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import androidx.core.graphics.drawable.toDrawable
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import autodagger.AutoInjector import autodagger.AutoInjector
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -130,7 +130,7 @@ class TranslateActivity : BaseActivity() {
} }
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent, null))) supportActionBar?.setIcon(resources!!.getColor(R.color.transparent, null).toDrawable())
supportActionBar?.title = resources!!.getString(R.string.translation) supportActionBar?.title = resources!!.getString(R.string.translation)
viewThemeUtils.material.themeToolbar(binding.translationToolbar) viewThemeUtils.material.themeToolbar(binding.translationToolbar)
} }

View File

@ -14,16 +14,17 @@ import android.graphics.Paint
import android.util.AttributeSet import android.util.AttributeSet
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.appcompat.widget.AppCompatSeekBar import androidx.appcompat.widget.AppCompatSeekBar
import androidx.core.graphics.toColorInt
import com.nextcloud.talk.utils.AudioUtils import com.nextcloud.talk.utils.AudioUtils
import kotlin.math.roundToInt import kotlin.math.roundToInt
class WaveformSeekBar : AppCompatSeekBar { class WaveformSeekBar : AppCompatSeekBar {
@ColorInt @ColorInt
private var primary: Int = Color.parseColor("#679ff5") private var primary: Int = "#679ff5".toColorInt()
@ColorInt @ColorInt
private var secondary: Int = Color.parseColor("#a6c6f7") private var secondary: Int = "#a6c6f7".toColorInt()
private var rawData: FloatArray = floatArrayOf() private var rawData: FloatArray = floatArrayOf()
private var waveData: FloatArray = floatArrayOf() private var waveData: FloatArray = floatArrayOf()
private var savedMeasure: Int = 0 private var savedMeasure: Int = 0

View File

@ -12,16 +12,17 @@ import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.core.net.toUri
import com.afollestad.materialdialogs.LayoutMode import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.bottomsheets.BottomSheet
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.bottomsheet.items.BasicListItemWithImage import com.nextcloud.talk.bottomsheet.items.BasicListItemWithImage
import com.nextcloud.talk.bottomsheet.items.listItemsWithImage import com.nextcloud.talk.bottomsheet.items.listItemsWithImage
import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.conversations.RoomOverall
import com.nextcloud.talk.models.json.hovercard.HoverCardAction import com.nextcloud.talk.models.json.hovercard.HoverCardAction
import com.nextcloud.talk.models.json.hovercard.HoverCardOverall import com.nextcloud.talk.models.json.hovercard.HoverCardOverall
@ -161,14 +162,14 @@ class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val viewThemeUti
private fun composeEmail(address: String, context: Context) { private fun composeEmail(address: String, context: Context) {
val addresses = arrayListOf(address) val addresses = arrayListOf(address)
val intent = Intent(Intent.ACTION_SENDTO).apply { val intent = Intent(Intent.ACTION_SENDTO).apply {
data = Uri.parse("mailto:") // only email apps should handle this data = "mailto:".toUri() // only email apps should handle this
putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_EMAIL, addresses)
} }
context.startActivity(intent) context.startActivity(intent)
} }
private fun openProfile(hyperlink: String, context: Context) { private fun openProfile(hyperlink: String, context: Context) {
val webpage: Uri = Uri.parse(hyperlink) val webpage: Uri = hyperlink.toUri()
val intent = Intent(Intent.ACTION_VIEW, webpage) val intent = Intent(Intent.ACTION_VIEW, webpage)
context.startActivity(intent) context.startActivity(intent)
} }

View File

@ -10,11 +10,11 @@ package com.nextcloud.talk.ui.dialog
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Dialog import android.app.Dialog
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.net.toUri
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import autodagger.AutoInjector import autodagger.AutoInjector
@ -78,7 +78,7 @@ class ChooseAccountShareToDialogFragment : DialogFragment() {
if (user != null) { if (user != null) {
binding!!.currentAccount.userName.text = user.displayName binding!!.currentAccount.userName.text = user.displayName
binding!!.currentAccount.ticker.visibility = View.GONE binding!!.currentAccount.ticker.visibility = View.GONE
binding!!.currentAccount.account.text = Uri.parse(user.baseUrl!!).host binding!!.currentAccount.account.text = user.baseUrl!!.toUri().host
viewThemeUtils!!.platform.colorImageView(binding!!.currentAccount.accountMenu, ColorRole.PRIMARY) viewThemeUtils!!.platform.colorImageView(binding!!.currentAccount.accountMenu, ColorRole.PRIMARY)
if (user.baseUrl != null && if (user.baseUrl != null &&
(user.baseUrl!!.startsWith("http://") || user.baseUrl!!.startsWith("https://")) (user.baseUrl!!.startsWith("http://") || user.baseUrl!!.startsWith("https://"))

View File

@ -20,7 +20,6 @@ import android.graphics.Canvas
import android.graphics.Color import android.graphics.Color
import android.graphics.Typeface import android.graphics.Typeface
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.net.Uri
import android.text.Spannable import android.text.Spannable
import android.text.SpannableString import android.text.SpannableString
import android.text.Spanned import android.text.Spanned
@ -46,7 +45,9 @@ import androidx.annotation.XmlRes
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.ColorUtils import androidx.core.graphics.ColorUtils
import androidx.core.graphics.createBitmap
import androidx.core.graphics.drawable.DrawableCompat import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.net.toUri
import androidx.emoji2.text.EmojiCompat import androidx.emoji2.text.EmojiCompat
import coil.Coil.imageLoader import coil.Coil.imageLoader
import coil.request.ImageRequest import coil.request.ImageRequest
@ -87,12 +88,12 @@ object DisplayUtils {
return currentNightMode == Configuration.UI_MODE_NIGHT_YES return currentNightMode == Configuration.UI_MODE_NIGHT_YES
} }
fun setClickableString(string: String, url: String?, textView: TextView) { fun setClickableString(string: String, url: String, textView: TextView) {
val spannableString = SpannableString(string) val spannableString = SpannableString(string)
spannableString.setSpan( spannableString.setSpan(
object : ClickableSpan() { object : ClickableSpan() {
override fun onClick(widget: View) { override fun onClick(widget: View) {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
sharedApplication!!.applicationContext.startActivity(browserIntent) sharedApplication!!.applicationContext.startActivity(browserIntent)
} }
@ -111,11 +112,7 @@ object DisplayUtils {
} }
fun getBitmap(drawable: Drawable): Bitmap { fun getBitmap(drawable: Drawable): Bitmap {
val bitmap = Bitmap.createBitmap( val bitmap = createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight)
drawable.intrinsicWidth,
drawable.intrinsicHeight,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap) val canvas = Canvas(bitmap)
drawable.setBounds(0, 0, canvas.width, canvas.height) drawable.setBounds(0, 0, canvas.width, canvas.height)
drawable.draw(canvas) drawable.draw(canvas)

View File

@ -16,6 +16,7 @@ import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.net.toUri
import androidx.emoji2.widget.EmojiTextView import androidx.emoji2.widget.EmojiTextView
import androidx.work.Data import androidx.work.Data
import androidx.work.OneTimeWorkRequest import androidx.work.OneTimeWorkRequest
@ -23,13 +24,13 @@ import androidx.work.WorkInfo
import androidx.work.WorkManager import androidx.work.WorkManager
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.messages.PreviewMessageViewHolder
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.fullscreenfile.FullScreenImageActivity import com.nextcloud.talk.fullscreenfile.FullScreenImageActivity
import com.nextcloud.talk.fullscreenfile.FullScreenMediaActivity import com.nextcloud.talk.fullscreenfile.FullScreenMediaActivity
import com.nextcloud.talk.fullscreenfile.FullScreenTextViewerActivity import com.nextcloud.talk.fullscreenfile.FullScreenTextViewerActivity
import com.nextcloud.talk.adapters.messages.PreviewMessageViewHolder
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.jobs.DownloadFileToCacheWorker import com.nextcloud.talk.jobs.DownloadFileToCacheWorker
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.utils.AccountUtils.canWeOpenFilesApp import com.nextcloud.talk.utils.AccountUtils.canWeOpenFilesApp
import com.nextcloud.talk.utils.Mimetype.AUDIO_MPEG import com.nextcloud.talk.utils.Mimetype.AUDIO_MPEG
import com.nextcloud.talk.utils.Mimetype.AUDIO_OGG import com.nextcloud.talk.utils.Mimetype.AUDIO_OGG
@ -212,7 +213,7 @@ class FileViewerUtils(private val context: Context, private val user: User) {
} else { } else {
val browserIntent = Intent( val browserIntent = Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
Uri.parse(link) link.toUri()
) )
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(browserIntent) context.startActivity(browserIntent)

View File

@ -18,6 +18,7 @@ import android.service.notification.StatusBarNotification
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
import androidx.core.net.toUri
import coil.executeBlocking import coil.executeBlocking
import coil.imageLoader import coil.imageLoader
import coil.request.ImageRequest import coil.request.ImageRequest
@ -287,14 +288,14 @@ object NotificationUtils {
// Ringtone uris are required to register the notification channels -> get uri from preferences. // Ringtone uris are required to register the notification channels -> get uri from preferences.
return if (TextUtils.isEmpty(ringtonePreferencesString)) { return if (TextUtils.isEmpty(ringtonePreferencesString)) {
Uri.parse(defaultRingtoneUri) defaultRingtoneUri.toUri()
} else { } else {
try { try {
val ringtoneSettings = val ringtoneSettings =
LoganSquare.parse(ringtonePreferencesString, RingtoneSettings::class.java) LoganSquare.parse(ringtonePreferencesString, RingtoneSettings::class.java)
ringtoneSettings.ringtoneUri ringtoneSettings.ringtoneUri
} catch (exception: IOException) { } catch (exception: IOException) {
Uri.parse(defaultRingtoneUri) defaultRingtoneUri.toUri()
} }
} }
} }

View File

@ -9,7 +9,7 @@ package com.nextcloud.talk.utils
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.net.Uri import androidx.core.net.toUri
import com.nextcloud.talk.R import com.nextcloud.talk.R
object ShareUtils { object ShareUtils {
@ -26,7 +26,7 @@ object ShareUtils {
return return
} }
val uriBuilder = Uri.parse(baseUrl) val uriBuilder = baseUrl.toUri()
.buildUpon() .buildUpon()
if (!canGeneratePrettyURL) { if (!canGeneratePrettyURL) {

View File

@ -7,7 +7,7 @@
*/ */
package com.nextcloud.talk.utils package com.nextcloud.talk.utils
import android.net.Uri import androidx.core.net.toUri
class UriUtils { class UriUtils {
companion object { companion object {
@ -17,7 +17,7 @@ class UriUtils {
fun extractInstanceInternalFileFileId(url: String): String { fun extractInstanceInternalFileFileId(url: String): String {
// https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41 // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41
return Uri.parse(url).getQueryParameter("fileid").toString() return url.toUri().getQueryParameter("fileid").toString()
} }
fun isInstanceInternalFileShareUrl(baseUrl: String, url: String): Boolean { fun isInstanceInternalFileShareUrl(baseUrl: String, url: String): Boolean {
@ -35,12 +35,12 @@ class UriUtils {
fun extractInstanceInternalFileShareFileId(url: String): String { fun extractInstanceInternalFileShareFileId(url: String): String {
// https://cloud.nextcloud.com/f/41 // https://cloud.nextcloud.com/f/41
return Uri.parse(url).lastPathSegment ?: "" return url.toUri().lastPathSegment ?: ""
} }
fun extractRoomTokenFromTalkUrl(url: String): String { fun extractRoomTokenFromTalkUrl(url: String): String {
// https://cloud.nextcloud.com/call/123456789 // https://cloud.nextcloud.com/call/123456789
return Uri.parse(url).lastPathSegment ?: "" return url.toUri().lastPathSegment ?: ""
} }
fun isInstanceInternalFileUrl(baseUrl: String, url: String): Boolean { fun isInstanceInternalFileUrl(baseUrl: String, url: String): Boolean {
@ -49,7 +49,7 @@ class UriUtils {
url.startsWith("$baseUrl/apps/files/") || url.startsWith("$baseUrl/apps/files/") ||
url.startsWith("$baseUrl/index.php/apps/files/") url.startsWith("$baseUrl/index.php/apps/files/")
) && ) &&
Uri.parse(url).queryParameterNames.contains("fileid") && url.toUri().queryParameterNames.contains("fileid") &&
Regex(""".*fileid=\d*""").matches(url) Regex(""".*fileid=\d*""").matches(url)
} }
@ -61,7 +61,7 @@ class UriUtils {
fun extractInstanceInternalFileFileIdNew(url: String): String { fun extractInstanceInternalFileFileIdNew(url: String): String {
// https://cloud.nextcloud.com/apps/files/files/41?dir=/ // https://cloud.nextcloud.com/apps/files/files/41?dir=/
return Uri.parse(url).lastPathSegment ?: "" return url.toUri().lastPathSegment ?: ""
} }
} }
} }

View File

@ -9,13 +9,13 @@ package com.nextcloud.talk.utils.message
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.Typeface import android.graphics.Typeface
import android.net.Uri
import android.text.SpannableString import android.text.SpannableString
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import android.text.Spanned import android.text.Spanned
import android.text.style.StyleSpan import android.text.style.StyleSpan
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import androidx.core.net.toUri
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
@ -139,7 +139,7 @@ class MessageUtils(val context: Context) {
"file" -> { "file" -> {
itemView.setOnClickListener { v -> itemView.setOnClickListener { v ->
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(individualHashMap["link"])) val browserIntent = Intent(Intent.ACTION_VIEW, individualHashMap["link"]!!.toUri())
context.startActivity(browserIntent) context.startActivity(browserIntent)
} }
} }