diff --git a/app/src/main/java/com/keylesspalace/tusky/components/login/LoginActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/login/LoginActivity.kt index 3483c255d..da2828577 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/login/LoginActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/login/LoginActivity.kt @@ -17,6 +17,7 @@ package com.keylesspalace.tusky.components.login import android.content.Context import android.content.Intent +import android.net.Uri import android.os.Bundle import android.text.method.LinkMovementMethod import android.util.Log @@ -199,17 +200,15 @@ class LoginActivity : BaseActivity() { ) { // To authorize this app and log in it's necessary to redirect to the domain given, // login there, and the server will redirect back to the app with its response. - val uri = HttpUrl.Builder() + val uri = Uri.Builder() .scheme("https") - .host(domain) - .addPathSegments(MastodonApi.ENDPOINT_AUTHORIZE) - .addQueryParameter("client_id", clientId) - .addQueryParameter("redirect_uri", oauthRedirectUri) - .addQueryParameter("response_type", "code") - .addQueryParameter("scope", OAUTH_SCOPES) + .authority(domain) + .path(MastodonApi.ENDPOINT_AUTHORIZE) + .appendQueryParameter("client_id", clientId) + .appendQueryParameter("redirect_uri", oauthRedirectUri) + .appendQueryParameter("response_type", "code") + .appendQueryParameter("scope", OAUTH_SCOPES) .build() - .toString() - .toUri() if (openInWebView) { doWebViewAuth.launch(LoginData(domain, uri, oauthRedirectUri.toUri())) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/scheduled/ScheduledStatusViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/scheduled/ScheduledStatusViewModel.kt index 774058354..2fa670f67 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/scheduled/ScheduledStatusViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/scheduled/ScheduledStatusViewModel.kt @@ -22,7 +22,6 @@ import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.cachedIn import at.connyduck.calladapter.networkresult.fold -import com.keylesspalace.tusky.appstore.EventHub import com.keylesspalace.tusky.entity.ScheduledStatus import com.keylesspalace.tusky.network.MastodonApi import dagger.hilt.android.lifecycle.HiltViewModel @@ -31,8 +30,7 @@ import kotlinx.coroutines.launch @HiltViewModel class ScheduledStatusViewModel @Inject constructor( - val mastodonApi: MastodonApi, - val eventHub: EventHub + val mastodonApi: MastodonApi ) : ViewModel() { private val pagingSourceFactory = ScheduledStatusPagingSourceFactory(mastodonApi) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/timeline/TimelineTypeMappers.kt b/app/src/main/java/com/keylesspalace/tusky/components/timeline/TimelineTypeMappers.kt index e19e8498d..b3f0de1ee 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/timeline/TimelineTypeMappers.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/timeline/TimelineTypeMappers.kt @@ -13,8 +13,6 @@ * You should have received a copy of the GNU General Public License along with Tusky; if not, * see . */ -@file:OptIn(ExperimentalStdlibApi::class) - package com.keylesspalace.tusky.components.timeline import com.keylesspalace.tusky.db.entity.HomeTimelineData diff --git a/app/src/main/java/com/keylesspalace/tusky/util/AsciiFolding.kt b/app/src/main/java/com/keylesspalace/tusky/util/AsciiFolding.kt index 8f1101d29..a0f073505 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/AsciiFolding.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/AsciiFolding.kt @@ -21,6 +21,6 @@ val unicodeToASCIIMap = "ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČ "AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz".toList() ).toMap() -fun normalizeToASCII(text: CharSequence): CharSequence { +fun normalizeToASCII(text: CharSequence): String { return String(text.map { unicodeToASCIIMap[it] ?: it }.toCharArray()) } diff --git a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt index 50d3ccfa7..68de28b8a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt @@ -48,6 +48,7 @@ import com.keylesspalace.tusky.R import com.keylesspalace.tusky.entity.HashTag import com.keylesspalace.tusky.entity.Status.Mention import com.keylesspalace.tusky.interfaces.LinkListener +import com.keylesspalace.tusky.settings.PrefKeys import java.net.URI import java.net.URISyntaxException @@ -84,7 +85,7 @@ fun setClickableText( setClickableText(span, this, mentions, tags, listener) } } - view.movementMethod = NoTrailingSpaceLinkMovementMethod.getInstance() + view.movementMethod = NoTrailingSpaceLinkMovementMethod } @VisibleForTesting @@ -170,7 +171,7 @@ fun setClickableText( @VisibleForTesting fun getTagName(text: CharSequence, tags: List?): String? { - val scrapedName = normalizeToASCII(text.subSequence(1, text.length)).toString() + val scrapedName = normalizeToASCII(text.subSequence(1, text.length)) return when (tags) { null -> scrapedName else -> tags.firstOrNull { it.name.equals(scrapedName, true) }?.name @@ -275,7 +276,7 @@ fun setClickableMentions(view: TextView, mentions: List?, listener: Lin start = end } } - view.movementMethod = NoTrailingSpaceLinkMovementMethod.getInstance() + view.movementMethod = NoTrailingSpaceLinkMovementMethod } fun createClickableText(text: String, link: String): CharSequence { @@ -294,7 +295,7 @@ fun Context.openLink(url: String) { val uri = url.toUri().normalizeScheme() val useCustomTabs = PreferenceManager.getDefaultSharedPreferences( this - ).getBoolean("customTabs", false) + ).getBoolean(PrefKeys.CUSTOM_TABS, false) if (useCustomTabs) { openLinkInCustomTab(uri, this) @@ -441,6 +442,4 @@ object NoTrailingSpaceLinkMovementMethod : LinkMovementMethod() { return super.onTouchEvent(widget, buffer, event) } - - fun getInstance() = NoTrailingSpaceLinkMovementMethod } diff --git a/app/src/main/java/com/keylesspalace/tusky/util/ListUtils.kt b/app/src/main/java/com/keylesspalace/tusky/util/ListUtils.kt index 6737d9702..12e5b73d1 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/ListUtils.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/ListUtils.kt @@ -24,13 +24,6 @@ fun > Iterable.removeDuplicatesTo(destination: return filterTo(destination, HashSet()::add) } -/** - * Copies elements to a new list, removing duplicates and preserving original order. - */ -fun Iterable.removeDuplicates(): List { - return removeDuplicatesTo(ArrayList()) -} - inline fun List.withoutFirstWhich(predicate: (T) -> Boolean): List { val index = indexOfFirst(predicate) if (index == -1) { diff --git a/app/src/main/java/com/keylesspalace/tusky/viewmodel/EditProfileViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/viewmodel/EditProfileViewModel.kt index bd1298c69..a61fe4806 100644 --- a/app/src/main/java/com/keylesspalace/tusky/viewmodel/EditProfileViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/viewmodel/EditProfileViewModel.kt @@ -65,7 +65,7 @@ class EditProfileViewModel @Inject constructor( private val mastodonApi: MastodonApi, private val eventHub: EventHub, private val application: Application, - private val instanceInfoRepo: InstanceInfoRepository + instanceInfoRepo: InstanceInfoRepository ) : ViewModel() { private val _profileData = MutableStateFlow(null as Resource?)