diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c9d62a77e67efe4d65360e80f891d2f362dd0fa7..23987aca5baa6a6e467b95dca88a3660a7c71c62 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,7 +45,6 @@ <activity android:name=".ui.chat.ChatActivity" android:exported="true" - android:label="@string/app_name" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize"> <intent-filter> @@ -257,13 +256,11 @@ <activity android:name=".ui.setup.accounts.selection.AccountSelectionActivity" android:exported="false" - android:label="@string/app_name" android:parentActivityName=".ui.chat.ChatActivity" android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.setup.accounts.setup.AccountSetupActivity" android:exported="false" - android:label="@string/app_name" android:parentActivityName=".ui.setup.accounts.selection.AccountSelectionActivity" android:windowSoftInputMode="adjustResize" /> @@ -271,7 +268,6 @@ <activity android:name=".ui.setup.accounts.edit.AccountEditActivity" android:exported="false" - android:label="@string/app_name" android:parentActivityName=".ui.setup.accounts.selection.AccountSelectionActivity" android:windowSoftInputMode="adjustResize" /> <activity diff --git a/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityBaseModule.kt b/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityBaseModule.kt index 77abda2837e5ea4446b9a01e2fc7ca1a3d1e4c34..1a2eeaf7f3613d9e38dd4c57d6b3e3b8cd7e2963 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityBaseModule.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/dagger/ActivityBaseModule.kt @@ -35,47 +35,39 @@ import de.kuschku.quasseldroid.viewmodel.QueryCreateViewModel object ActivityBaseModule { @ActivityScope @Provides - @JvmStatic fun bindContext(activity: FragmentActivity): Context = activity @ActivityScope @Provides - @JvmStatic fun provideViewModelProvider(activity: FragmentActivity) = ViewModelProvider(activity) @ActivityScope @Provides - @JvmStatic fun provideQuasselViewModel(viewModelProvider: ViewModelProvider) = viewModelProvider[QuasselViewModel::class.java] @ActivityScope @Provides - @JvmStatic fun provideChatViewModel(viewModelProvider: ViewModelProvider) = viewModelProvider[ChatViewModel::class.java] @ActivityScope @Provides - @JvmStatic fun provideEditorViewModel(viewModelProvider: ViewModelProvider) = viewModelProvider[EditorViewModel::class.java] @ActivityScope @Provides - @JvmStatic fun provideAccountViewModel(viewModelProvider: ViewModelProvider) = viewModelProvider[AccountViewModel::class.java] @ActivityScope @Provides - @JvmStatic fun provideQueryCreateViewModel(viewModelProvider: ViewModelProvider) = viewModelProvider[QueryCreateViewModel::class.java] @ActivityScope @Provides - @JvmStatic fun provideArchiveViewModel(viewModelProvider: ViewModelProvider) = viewModelProvider[ArchiveViewModel::class.java] } diff --git a/app/src/main/java/de/kuschku/quasseldroid/dagger/AppModule.kt b/app/src/main/java/de/kuschku/quasseldroid/dagger/AppModule.kt index 379c68200d85ca1ecf9eed598c2b4d4ecdda36a4..76588430c2bbc1c344cc57bab93209d4e4159574 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/dagger/AppModule.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/dagger/AppModule.kt @@ -29,11 +29,9 @@ import retrofit2.converter.gson.GsonConverterFactory @Module object AppModule { @Provides - @JvmStatic fun provideGson() = GsonBuilder().setPrettyPrinting().create() @Provides - @JvmStatic fun provideMatrixApi() = Retrofit.Builder() .baseUrl("https://matrix.org/") .addConverterFactory(GsonConverterFactory.create(GsonBuilder().setLenient().create())) diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt index e123819c41d91fe451f56bce1e91591e85bdd75b..e4f65134789a781e636d7b51e03e77d200b78db1 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt @@ -118,7 +118,8 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C ChatActivity.intent(context.applicationContext, bufferId = buffer.id).apply { flags = Intent.FLAG_ACTIVITY_CLEAR_TOP }, - 0 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) 0 + else PendingIntent.FLAG_MUTABLE ) val remoteInput = RemoteInput.Builder("reply_content") @@ -132,7 +133,8 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C context, bufferId = buffer.id ), - 0 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) 0 + else PendingIntent.FLAG_MUTABLE ) val markReadPendingIntent = PendingIntent.getService( @@ -143,7 +145,8 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C bufferId = buffer.id, markReadMessage = notifications.last().messageId ), - 0 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) 0 + else PendingIntent.FLAG_MUTABLE ) val deletePendingIntent = PendingIntent.getService( @@ -154,7 +157,8 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C bufferId = buffer.id, hideMessage = notifications.last().messageId ), - 0 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) 0 + else PendingIntent.FLAG_MUTABLE ) val notification = NotificationCompat.Builder( @@ -248,14 +252,16 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C ChatActivity.intent(context.applicationContext).apply { flags = Intent.FLAG_ACTIVITY_CLEAR_TOP }, - 0 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) 0 + else PendingIntent.FLAG_MUTABLE ) val pendingIntentDisconnect = PendingIntent.getService( context, System.currentTimeMillis().toInt(), QuasselService.intent(context.applicationContext, disconnect = true), - 0 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) 0 + else PendingIntent.FLAG_MUTABLE ) val notification = NotificationCompat.Builder( diff --git a/app/src/main/java/de/kuschku/quasseldroid/ssl/QuasselTrustManager.kt b/app/src/main/java/de/kuschku/quasseldroid/ssl/QuasselTrustManager.kt index 732a24ca37783043f4336e10b33a172db8942211..6dca0ebd6100277c1679cfb2648adf43a1756535 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ssl/QuasselTrustManager.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ssl/QuasselTrustManager.kt @@ -19,6 +19,7 @@ package de.kuschku.quasseldroid.ssl +import android.annotation.SuppressLint import de.kuschku.libquassel.connection.QuasselSecurityException import de.kuschku.quasseldroid.ssl.custom.QuasselCertificateManager import java.security.GeneralSecurityException @@ -28,6 +29,7 @@ import javax.net.ssl.KeyManagerFactory import javax.net.ssl.TrustManagerFactory import javax.net.ssl.X509TrustManager +@SuppressLint("CustomX509TrustManager") class QuasselTrustManager private constructor( private val certificateManager: QuasselCertificateManager, private val trustManager: X509TrustManager? diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt index 06dad9d4cdcf4334725f46dafa8d3a451b2c7018..028c5095e9bba3a5eb5eab0df696ba8532dd31c9 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt @@ -706,9 +706,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc getString(R.string.label_error_connection, errorName, errorCode), Toast.LENGTH_LONG).show() } - it is ConnectException && - Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && - cause is ErrnoException -> { + it is ConnectException && cause is ErrnoException -> { val errorCode = OsConstants.errnoName(cause.errno) val errorName = OsConstants.strerror(cause.errno) @@ -936,6 +934,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc } override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) chatViewModel.onSaveInstanceState(outState) outState.putLong(KEY_CONNECTED_ACCOUNT, connectedAccount.id) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt index edb24889b403207cc2e308adff3437f9868bec80..2f1d1e6bab417cdf90109302172ca2f40fc46332 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt @@ -48,6 +48,7 @@ import de.kuschku.quasseldroid.util.helper.toLiveData import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment import de.kuschku.quasseldroid.viewmodel.helper.QuasselViewModelHelper import io.reactivex.Observable +import io.reactivex.disposables.Disposable import javax.inject.Inject class ChannelCreateFragment : ServiceBoundSettingsFragment() { @@ -180,8 +181,8 @@ class ChannelCreateFragment : ServiceBoundSettingsFragment() { sendInput(statusBuffer, "/join $channelName") modelHelper.networks.safeSwitchMap { it[selectedNetworkId]?.liveIrcChannel(channelName) - ?: Observable.empty() - }.subscribe { + ?: Observable.empty() + }.toLiveData().observe(viewLifecycleOwner) { if (it.ircUsers().size <= 1) { if (isInviteOnly) { sendInput(statusBuffer, "/mode $channelName +i") @@ -199,8 +200,8 @@ class ChannelCreateFragment : ServiceBoundSettingsFragment() { activity?.let { it.finish() ChatActivity.launch(it, - networkId = selectedNetworkId, - channel = channelName + networkId = selectedNetworkId, + channel = channelName ) } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/ServiceBoundSetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/ServiceBoundSetupActivity.kt index 49c8f53f433ee6bfb451a49099cbaa201c635f49..1c62eb25fddd86745ab7d469382040af5f7ff343 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/ServiceBoundSetupActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/ServiceBoundSetupActivity.kt @@ -137,9 +137,7 @@ abstract class ServiceBoundSetupActivity : } fun updateRecentsHeader() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { - updateRecentsHeaderIfExisting(title.toString(), icon, recentsHeaderColor) - } + updateRecentsHeader(title.toString(), icon, recentsHeaderColor) } override fun setTitle(title: CharSequence?) { @@ -200,8 +198,7 @@ abstract class ServiceBoundSetupActivity : else viewPager.setCurrentItem(viewPager.currentItem + 1, true) } - isValid.observeSticky( - this, Observer { + isValid.observeSticky(this) { if (it == true) { button.show() adapter.lastValidItem = viewPager.currentItem @@ -209,7 +206,7 @@ abstract class ServiceBoundSetupActivity : button.hide() adapter.lastValidItem = viewPager.currentItem - 1 } - }) + } viewPager.addOnPageChangeListener(pageChangeListener) pageChanged() updateRecentsHeader() diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt index 8d2cbde440bab72cf91bea3055b55180742b2c1a..9c9cbaf08aa1e683b6d458a8f3e2190fd79b32d5 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/SetupActivity.kt @@ -21,13 +21,11 @@ package de.kuschku.quasseldroid.ui.setup import android.content.Context import android.content.pm.PackageManager -import android.os.Build import android.os.Bundle import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.appcompat.widget.ActionMenuView import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.Observer import androidx.viewpager.widget.ViewPager import butterknife.BindView import butterknife.ButterKnife @@ -39,7 +37,11 @@ import de.kuschku.quasseldroid.ui.clientsettings.about.AboutActivity import de.kuschku.quasseldroid.ui.clientsettings.client.ClientSettingsActivity import de.kuschku.quasseldroid.ui.clientsettings.crash.CrashActivity import de.kuschku.quasseldroid.ui.clientsettings.whitelist.WhitelistActivity -import de.kuschku.quasseldroid.util.helper.* +import de.kuschku.quasseldroid.util.helper.observeSticky +import de.kuschku.quasseldroid.util.helper.or +import de.kuschku.quasseldroid.util.helper.safeSwitchMap +import de.kuschku.quasseldroid.util.helper.setTooltip +import de.kuschku.quasseldroid.util.helper.updateRecentsHeader import de.kuschku.quasseldroid.util.ui.LocaleHelper abstract class SetupActivity : DaggerAppCompatActivity() { @@ -99,9 +101,7 @@ abstract class SetupActivity : DaggerAppCompatActivity() { } fun updateRecentsHeader() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { - updateRecentsHeaderIfExisting(title.toString(), icon, recentsHeaderColor) - } + updateRecentsHeader(title.toString(), icon, recentsHeaderColor) } override fun setTitle(title: CharSequence?) { @@ -161,8 +161,7 @@ abstract class SetupActivity : DaggerAppCompatActivity() { else viewPager.setCurrentItem(viewPager.currentItem + 1, true) } - isValid.observeSticky( - this, Observer { + isValid.observeSticky(this) { if (it == true) { button.show() adapter.lastValidItem = viewPager.currentItem @@ -170,7 +169,7 @@ abstract class SetupActivity : DaggerAppCompatActivity() { button.hide() adapter.lastValidItem = viewPager.currentItem - 1 } - }) + } viewPager.addOnPageChangeListener(pageChangeListener) pageChanged() updateRecentsHeader() diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/ActivityHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/ActivityHelper.kt index e10d716903afa4dcb89623fe416e4a250b89b8d0..b02431a0dd2a9330e8cac3f6f108adbbed9f0bc0 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/helper/ActivityHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/ActivityHelper.kt @@ -19,12 +19,11 @@ package de.kuschku.quasseldroid.util.helper -import android.annotation.TargetApi import android.app.Activity import android.app.ActivityManager -import android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Build +import androidx.annotation.ColorInt import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.annotation.StringRes @@ -38,11 +37,13 @@ import androidx.annotation.StringRes * @param colorPrimary The color used as background for the header of the recents card - passed as Android * Color Resource */ -fun Activity.updateRecentsHeaderIfExisting(label: String, @DrawableRes icon: Int, - @ColorRes colorPrimary: Int) { - val iconRaw = BitmapFactory.decodeResource(resources, icon) +fun Activity.updateRecentsHeader( + label: String, + @DrawableRes icon: Int, + @ColorRes colorPrimary: Int +) { val colorPrimaryRaw = resources.getColorBackport(colorPrimary, theme) - updateRecentsHeaderIfExisting(label, iconRaw, colorPrimaryRaw) + updateRecentsHeaderInternal(label, icon, colorPrimaryRaw) } /** @@ -54,26 +55,14 @@ fun Activity.updateRecentsHeaderIfExisting(label: String, @DrawableRes icon: Int * @param colorPrimary The color used as background for the header of the recents card - passed as Android * Color Resource */ -fun Activity.updateRecentsHeaderIfExisting(@StringRes label: Int, @DrawableRes icon: Int, - @ColorRes colorPrimary: Int) { +fun Activity.updateRecentsHeader( + @StringRes label: Int, + @DrawableRes icon: Int, + @ColorRes colorPrimary: Int +) { val labelRaw = resources.getString(label) - val iconRaw = BitmapFactory.decodeResource(resources, icon) val colorPrimaryRaw = resources.getColorBackport(colorPrimary, theme) - updateRecentsHeaderIfExisting(labelRaw, iconRaw, colorPrimaryRaw) -} - -/** - * Modifies the display of an {@see Activity} in the Android Recents menu if the current version - * of Android supports doing so. - * - * @param label The text shown in recents as label - * @param icon The icon displayed in recents - * @param colorPrimary The color used as background for the header of the recents card - */ -fun Activity.updateRecentsHeaderIfExisting(label: String, icon: Bitmap, colorPrimary: Int) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - updateRecentsHeader(label, icon, colorPrimary) - } + updateRecentsHeaderInternal(labelRaw, icon, colorPrimaryRaw) } /** @@ -82,10 +71,17 @@ fun Activity.updateRecentsHeaderIfExisting(label: String, icon: Bitmap, colorPri * @param label The text shown in recents as label * @param icon The icon displayed in recents * @param colorPrimary The color used as background for the header of the recents card - * @since Lollipop */ -@TargetApi(Build.VERSION_CODES.LOLLIPOP) -private fun Activity.updateRecentsHeader(label: String, icon: Bitmap, - colorPrimary: Int) { - setTaskDescription(ActivityManager.TaskDescription(label, icon, colorPrimary)) +private fun Activity.updateRecentsHeaderInternal( + label: String, + @DrawableRes icon: Int, + @ColorInt colorPrimary: Int +) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + setTaskDescription(ActivityManager.TaskDescription(label, icon, colorPrimary)) + } else { + val iconRaw = BitmapFactory.decodeResource(resources, icon) + @Suppress("DEPRECATION") + setTaskDescription(ActivityManager.TaskDescription(label, iconRaw, colorPrimary)) + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt index de466fa46e17bac35d45aeea572b0e5fc2ed7822..6e8fdc31028150d7ba1d1292f4a72502a7006db4 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt @@ -39,7 +39,7 @@ import de.kuschku.quasseldroid.settings.ConnectionSettings import de.kuschku.quasseldroid.settings.Settings import de.kuschku.quasseldroid.util.helper.editCommit import de.kuschku.quasseldroid.util.helper.sharedPreferences -import de.kuschku.quasseldroid.util.helper.updateRecentsHeaderIfExisting +import de.kuschku.quasseldroid.util.helper.updateRecentsHeader import de.kuschku.quasseldroid.util.ui.ThemedActivity import de.kuschku.quasseldroid.viewmodel.QuasselViewModel import io.reactivex.subjects.BehaviorSubject @@ -105,9 +105,7 @@ abstract class ServiceBoundActivity : } fun updateRecentsHeader() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { - updateRecentsHeaderIfExisting(title.toString(), icon, recentsHeaderColor) - } + updateRecentsHeader(title.toString(), icon, recentsHeaderColor) } override fun setTitle(title: CharSequence?) { diff --git a/app/src/main/res/drawable-v21/bg_menuitem_dark.xml b/app/src/main/res/drawable-v21/bg_menuitem_dark.xml deleted file mode 100644 index 39762f7d4f014d6bb0ff20581c2d9bf7a9eee5a7..0000000000000000000000000000000000000000 --- a/app/src/main/res/drawable-v21/bg_menuitem_dark.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - Quasseldroid - Quassel client for Android - - Copyright (c) 2020 Janne Mareike Koschinski - Copyright (c) 2020 The Quassel Project - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License version 3 as published - by the Free Software Foundation. - - 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/>. - --> - -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_selected="true"> - <shape android:shape="rectangle"> - <solid android:color="@color/ripple_dark" /> - </shape> - </item> - <item> - <ripple android:color="@color/ripple_dark" /> - </item> -</selector> diff --git a/app/src/main/res/drawable-v21/bg_menuitem_light.xml b/app/src/main/res/drawable-v21/bg_menuitem_light.xml deleted file mode 100644 index 5baa69c49d33beecaf9c3428a1e62d8c87d4ecc2..0000000000000000000000000000000000000000 --- a/app/src/main/res/drawable-v21/bg_menuitem_light.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - Quasseldroid - Quassel client for Android - - Copyright (c) 2020 Janne Mareike Koschinski - Copyright (c) 2020 The Quassel Project - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License version 3 as published - by the Free Software Foundation. - - 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/>. - --> - -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_selected="true"> - <shape android:shape="rectangle"> - <solid android:color="@color/ripple_light" /> - </shape> - </item> - <item> - <ripple android:color="@color/ripple_light" /> - </item> -</selector> diff --git a/app/src/main/res/drawable-v21/bg_menuitem_rounded_dark.xml b/app/src/main/res/drawable-v21/bg_menuitem_rounded_dark.xml deleted file mode 100644 index fa3e24dfe486895993507dc3ad5eb09828437478..0000000000000000000000000000000000000000 --- a/app/src/main/res/drawable-v21/bg_menuitem_rounded_dark.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - Quasseldroid - Quassel client for Android - - Copyright (c) 2020 Janne Mareike Koschinski - Copyright (c) 2020 The Quassel Project - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License version 3 as published - by the Free Software Foundation. - - 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/>. - --> - -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_selected="true"> - <shape android:shape="rectangle"> - <corners android:radius="@dimen/button_corner_radius" /> - <solid android:color="@color/ripple_dark" /> - </shape> - </item> - <item> - <ripple android:color="@color/ripple_dark"> - <item android:id="@android:id/mask"> - <shape> - <corners android:radius="@dimen/button_corner_radius" /> - <solid android:color="#fff" /> - </shape> - </item> - </ripple> - </item> -</selector> diff --git a/app/src/main/res/drawable-v21/bg_menuitem_rounded_light.xml b/app/src/main/res/drawable-v21/bg_menuitem_rounded_light.xml deleted file mode 100644 index fdc934f88d36da3c5ce05196dd3bf10630149242..0000000000000000000000000000000000000000 --- a/app/src/main/res/drawable-v21/bg_menuitem_rounded_light.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- - Quasseldroid - Quassel client for Android - - Copyright (c) 2020 Janne Mareike Koschinski - Copyright (c) 2020 The Quassel Project - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License version 3 as published - by the Free Software Foundation. - - 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/>. - --> - -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_selected="true"> - <shape> - <corners android:radius="@dimen/button_corner_radius" /> - <solid android:color="@color/ripple_light" /> - </shape> - </item> - <item> - <ripple android:color="@color/ripple_light"> - <item android:id="@android:id/mask"> - <shape> - <corners android:radius="@dimen/button_corner_radius" /> - <solid android:color="#fff" /> - </shape> - </item> - </ripple> - </item> -</selector> diff --git a/app/src/main/res/drawable/bg_menuitem_dark.xml b/app/src/main/res/drawable/bg_menuitem_dark.xml index f535f846684497ce20e43a828b57f511235afd96..39762f7d4f014d6bb0ff20581c2d9bf7a9eee5a7 100644 --- a/app/src/main/res/drawable/bg_menuitem_dark.xml +++ b/app/src/main/res/drawable/bg_menuitem_dark.xml @@ -23,9 +23,7 @@ <solid android:color="@color/ripple_dark" /> </shape> </item> - <item android:state_pressed="true"> - <shape android:shape="rectangle"> - <solid android:color="@color/ripple_dark" /> - </shape> + <item> + <ripple android:color="@color/ripple_dark" /> </item> </selector> diff --git a/app/src/main/res/drawable/bg_menuitem_light.xml b/app/src/main/res/drawable/bg_menuitem_light.xml index 33dc5abe5aba98dce0ff57b011ecdc2329c9c504..5baa69c49d33beecaf9c3428a1e62d8c87d4ecc2 100644 --- a/app/src/main/res/drawable/bg_menuitem_light.xml +++ b/app/src/main/res/drawable/bg_menuitem_light.xml @@ -23,9 +23,7 @@ <solid android:color="@color/ripple_light" /> </shape> </item> - <item android:state_pressed="true"> - <shape android:shape="rectangle"> - <solid android:color="@color/ripple_light" /> - </shape> + <item> + <ripple android:color="@color/ripple_light" /> </item> </selector> diff --git a/app/src/main/res/drawable/bg_menuitem_rounded_dark.xml b/app/src/main/res/drawable/bg_menuitem_rounded_dark.xml index d632e1afb8b208099c575b0cd4ac8578e2bace9b..fa3e24dfe486895993507dc3ad5eb09828437478 100644 --- a/app/src/main/res/drawable/bg_menuitem_rounded_dark.xml +++ b/app/src/main/res/drawable/bg_menuitem_rounded_dark.xml @@ -24,10 +24,14 @@ <solid android:color="@color/ripple_dark" /> </shape> </item> - <item android:state_pressed="true"> - <shape android:shape="rectangle"> - <corners android:radius="@dimen/button_corner_radius" /> - <solid android:color="@color/ripple_dark" /> - </shape> + <item> + <ripple android:color="@color/ripple_dark"> + <item android:id="@android:id/mask"> + <shape> + <corners android:radius="@dimen/button_corner_radius" /> + <solid android:color="#fff" /> + </shape> + </item> + </ripple> </item> </selector> diff --git a/app/src/main/res/drawable/bg_menuitem_rounded_light.xml b/app/src/main/res/drawable/bg_menuitem_rounded_light.xml index cc57283dd3f5adb684599c30b69ea90a8e028e77..fdc934f88d36da3c5ce05196dd3bf10630149242 100644 --- a/app/src/main/res/drawable/bg_menuitem_rounded_light.xml +++ b/app/src/main/res/drawable/bg_menuitem_rounded_light.xml @@ -19,15 +19,19 @@ <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true"> - <shape android:shape="rectangle"> + <shape> <corners android:radius="@dimen/button_corner_radius" /> <solid android:color="@color/ripple_light" /> </shape> </item> - <item android:state_pressed="true"> - <shape android:shape="rectangle"> - <corners android:radius="@dimen/button_corner_radius" /> - <solid android:color="@color/ripple_light" /> - </shape> + <item> + <ripple android:color="@color/ripple_light"> + <item android:id="@android:id/mask"> + <shape> + <corners android:radius="@dimen/button_corner_radius" /> + <solid android:color="#fff" /> + </shape> + </item> + </ripple> </item> </selector> diff --git a/app/src/main/res/layout/dialog_colorchooser_custom.xml b/app/src/main/res/layout/dialog_colorchooser_custom.xml index 348f547e6f1112c915732e2591f085061d3b86eb..fded56d58822489297e48bc68512096c2f7ca1ce 100644 --- a/app/src/main/res/layout/dialog_colorchooser_custom.xml +++ b/app/src/main/res/layout/dialog_colorchooser_custom.xml @@ -61,7 +61,8 @@ android:textColor="?colorTextPrimary" android:textColorHint="?colorTextSecondary" android:textSize="@dimen/md_title_textsize" - tools:ignore="HardcodedText" /> + tools:ignore="HardcodedText" + android:importantForAutofill="no" /> </LinearLayout> diff --git a/app/src/main/res/layout/widget_core_account_add.xml b/app/src/main/res/layout/widget_core_account_add.xml index 4762aab26dd98c78899fe5872b9654df1417d5fa..5a23b2e5a748f10416ad37d465ce6067d6d468a8 100644 --- a/app/src/main/res/layout/widget_core_account_add.xml +++ b/app/src/main/res/layout/widget_core_account_add.xml @@ -35,7 +35,7 @@ android:layout_height="32dp" android:layout_gravity="center_vertical" android:layout_marginEnd="16dp" - android:tint="#727272" + app:tint="#727272" app:srcCompat="@drawable/ic_add" tools:ignore="ContentDescription" /> diff --git a/app/src/main/res/values-fr-rCA/strings_messages.xml b/app/src/main/res/values-fr-rCA/strings_messages.xml index a7419f730faaea9ef23fb00d69d2a579aa7dc151..0dd804a8bb5a59900cff7999d81db0843b84581e 100644 --- a/app/src/main/res/values-fr-rCA/strings_messages.xml +++ b/app/src/main/res/values-fr-rCA/strings_messages.xml @@ -17,12 +17,12 @@ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<resources> - <plurals name="message_netsplit_join"> +<resources xmlns:tools="http://schemas.android.com/tools"> + <plurals name="message_netsplit_join" tools:ignore="MissingQuantity"> <item quantity="one">Netsplit entre %1$s et %2$s est terminé: %3$d nouvel utilisateur: %4$s</item> <item quantity="other">Netsplit entre %1$s et %2$s est terminé: %3$d nouveaux utilisateurs: %4$s</item> </plurals> - <plurals name="message_netsplit_quit"> + <plurals name="message_netsplit_quit" tools:ignore="MissingQuantity"> <item quantity="one">Netsplit entre %1$s et %2$s: %3$d utilisateur a quitté: %4$s</item> <item quantity="other">Netsplit entre %1$s et %2$s: %3$d utilisateurs ont quittés: %4$s</item> </plurals> diff --git a/app/src/main/res/values-v21/themes_base.xml b/app/src/main/res/values-v21/themes_base.xml deleted file mode 100644 index a03970453035ad03d1c689abc2ac6b68f2338738..0000000000000000000000000000000000000000 --- a/app/src/main/res/values-v21/themes_base.xml +++ /dev/null @@ -1,45 +0,0 @@ -<!-- - Quasseldroid - Quassel client for Android - - Copyright (c) 2020 Janne Mareike Koschinski - Copyright (c) 2020 The Quassel Project - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License version 3 as published - by the Free Software Foundation. - - 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/>. - --> - -<resources> - - <style name="Theme.AppTheme.NoActionBar" parent="Theme.MaterialComponents.NoActionBar.Bridge"> - <item name="colorPrimary">@color/colorPrimary</item> - <item name="colorPrimaryDark">@color/colorPrimaryDark</item> - <item name="colorAccent">@color/colorAccent</item> - <item name="android:windowDrawsSystemBarBackgrounds">true</item> - <item name="android:statusBarColor">?attr/colorPrimaryDark</item> - </style> - - <style name="Theme.AppTheme.Light.NoActionBar" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge"> - <item name="colorPrimary">@color/colorPrimary</item> - <item name="colorPrimaryDark">@color/colorPrimaryDark</item> - <item name="colorAccent">@color/colorAccent</item> - <item name="android:windowDrawsSystemBarBackgrounds">true</item> - <item name="android:statusBarColor">?attr/colorPrimaryDark</item> - </style> - - <style name="Base.ChatTheme" parent="Theme.AppTheme.NoActionBar"> - <item name="android:statusBarColor">#0000</item> - </style> - - <style name="Base.ChatTheme.Light" parent="Theme.AppTheme.Light.NoActionBar"> - <item name="android:statusBarColor">#0000</item> - </style> -</resources> diff --git a/app/src/main/res/values/themes_base.xml b/app/src/main/res/values/themes_base.xml index 15d454569f5c2eb6ad3cfa72fc3573deda8f42f1..6cd4fb69a0f8c9d751816db38d59ca0be22d6b07 100644 --- a/app/src/main/res/values/themes_base.xml +++ b/app/src/main/res/values/themes_base.xml @@ -37,25 +37,29 @@ <item name="backgroundMenuItemRounded">@drawable/bg_menuitem_rounded_light</item> </style> - <style name="Theme.AppTheme.NoActionBar" parent="Theme.AppTheme"> - <item name="windowActionBar">false</item> - <item name="windowNoTitle">true</item> - - <item name="backgroundMenuItem">@drawable/bg_menuitem_dark</item> - <item name="backgroundMenuItemRounded">@drawable/bg_menuitem_rounded_dark</item> + <style name="Theme.AppTheme.NoActionBar" parent="Theme.MaterialComponents.NoActionBar.Bridge"> + <item name="colorPrimary">@color/colorPrimary</item> + <item name="colorPrimaryDark">@color/colorPrimaryDark</item> + <item name="colorAccent">@color/colorAccent</item> + <item name="android:windowDrawsSystemBarBackgrounds">true</item> + <item name="android:statusBarColor">?attr/colorPrimaryDark</item> </style> - <style name="Theme.AppTheme.Light.NoActionBar" parent="Theme.AppTheme.Light"> - <item name="windowActionBar">false</item> - <item name="windowNoTitle">true</item> - - <item name="backgroundMenuItem">@drawable/bg_menuitem_light</item> - <item name="backgroundMenuItemRounded">@drawable/bg_menuitem_rounded_light</item> + <style name="Theme.AppTheme.Light.NoActionBar" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge"> + <item name="colorPrimary">@color/colorPrimary</item> + <item name="colorPrimaryDark">@color/colorPrimaryDark</item> + <item name="colorAccent">@color/colorAccent</item> + <item name="android:windowDrawsSystemBarBackgrounds">true</item> + <item name="android:statusBarColor">?attr/colorPrimaryDark</item> </style> - <style name="Theme.Base.ChatTheme" parent="Theme.AppTheme.NoActionBar" /> + <style name="Base.ChatTheme" parent="Theme.AppTheme.NoActionBar"> + <item name="android:statusBarColor">#0000</item> + </style> - <style name="Theme.Base.ChatTheme.Light" parent="Theme.AppTheme.Light.NoActionBar" /> + <style name="Base.ChatTheme.Light" parent="Theme.AppTheme.Light.NoActionBar"> + <item name="android:statusBarColor">#0000</item> + </style> <style name="Theme.SetupTheme" parent="Theme.AppTheme.Light"> <item name="windowActionBar">false</item> diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/RpcHandler.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/RpcHandler.kt index 1305599f707f5dea4fc1d0f938e56d5ffbe973bf..c90094aa6fafda8f44d9a3205ba2223e6499cb3f 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/RpcHandler.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/RpcHandler.kt @@ -39,6 +39,15 @@ class RpcHandler( private val backlogStorage: BacklogStorage? = null, private val notificationManager: NotificationManager? = null ) : SyncableObject(session.proxy, "RpcHandler"), IRpcHandler { + override fun deinit() { + super.deinit() + session = ISession.NULL + } + + init { + initialized = true + } + override fun displayStatusMsg(net: String?, msg: String?) { } diff --git a/lib/src/main/java/de/kuschku/libquassel/ssl/TrustManagers.kt b/lib/src/main/java/de/kuschku/libquassel/ssl/TrustManagers.kt index 736030725dc15ad88896bc9beb17b1dd15a751df..31c8901c03db9da1e0d02c2873000094b6149b86 100644 --- a/lib/src/main/java/de/kuschku/libquassel/ssl/TrustManagers.kt +++ b/lib/src/main/java/de/kuschku/libquassel/ssl/TrustManagers.kt @@ -35,6 +35,7 @@ object TrustManagers { fun trustAll() = TrustAllX509TrustManager() + @Suppress("CustomX509TrustManager") class TrustAllX509TrustManager : X509TrustManager { override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) = Unit override fun checkServerTrusted(p0: Array<out X509Certificate>?, p1: String?) = Unit diff --git a/lib/src/test/java/de/kuschku/libquassel/integration/BufferViewConfigTest.kt b/lib/src/test/java/de/kuschku/libquassel/integration/BufferViewConfigTest.kt index 3ed2abb4b850172a54f4cd1dc97be8e2ae08ddc5..2c46068fe8e4f9f0e91cd3c4e8fe37805fef3a3f 100644 --- a/lib/src/test/java/de/kuschku/libquassel/integration/BufferViewConfigTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/integration/BufferViewConfigTest.kt @@ -20,9 +20,9 @@ package de.kuschku.libquassel.integration import de.kuschku.libquassel.protocol.BufferId -import de.kuschku.libquassel.protocol.QType +import de.kuschku.libquassel.protocol.QuasselType import de.kuschku.libquassel.protocol.QVariant_ -import de.kuschku.libquassel.protocol.Type +import de.kuschku.libquassel.protocol.QtType import de.kuschku.libquassel.util.TestSession import de.kuschku.libquassel.util.setupTestSession import de.kuschku.libquassel.util.with @@ -46,8 +46,8 @@ class BufferViewConfigTest { bufferViewConfig.insertBufferSorted(bufferSyncer.bufferInfo(BufferId(4))!!, bufferSyncer) }.does { callSync(bufferViewConfig, "requestAddBuffer", listOf( - QVariant_.of(BufferId(4), QType.BufferId), - QVariant_.of(2, Type.Int) + QVariant_.of(BufferId(4), QuasselType.BufferId), + QVariant_.of(2, QtType.Int) )) } } diff --git a/lib/src/test/java/de/kuschku/libquassel/integration/SampleIntegrationTest.kt b/lib/src/test/java/de/kuschku/libquassel/integration/SampleIntegrationTest.kt index a005fe23fc82f2dca52b8f7a7ece6bc335ff12ef..0f5b8680bd87413ab0846fc3f9f3144469726b04 100644 --- a/lib/src/test/java/de/kuschku/libquassel/integration/SampleIntegrationTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/integration/SampleIntegrationTest.kt @@ -20,9 +20,9 @@ package de.kuschku.libquassel.integration import de.kuschku.libquassel.protocol.NetworkId -import de.kuschku.libquassel.protocol.QType +import de.kuschku.libquassel.protocol.QuasselType import de.kuschku.libquassel.protocol.QVariant_ -import de.kuschku.libquassel.protocol.Type +import de.kuschku.libquassel.protocol.QtType import de.kuschku.libquassel.util.withTestSession import org.junit.Test @@ -30,15 +30,15 @@ class SampleIntegrationTest { @Test fun test() = withTestSession { ensure { - rpcHandler.changePassword(0L, "user", "pass", "p@ssword1") + rpcHandler.changePassword(0UL, "user", "pass", "p@ssword1") }.does { callRpc( "2changePassword(PeerPtr,QString,QString,QString)", listOf( - QVariant_.of(0L, QType.PeerPtr), - QVariant_.of("user", Type.QString), - QVariant_.of("pass", Type.QString), - QVariant_.of("p@ssword1", Type.QString) + QVariant_.of(0UL, QuasselType.PeerPtr), + QVariant_.of("user", QtType.QString), + QVariant_.of("pass", QtType.QString), + QVariant_.of("p@ssword1", QtType.QString) ) ) } diff --git a/lib/src/test/java/de/kuschku/libquassel/quassel/syncables/NetworkTest.kt b/lib/src/test/java/de/kuschku/libquassel/quassel/syncables/NetworkTest.kt index 6487778721399ce5bdd70665d903720413a91a04..c0636744335e055099cd6dd6ec4b209930afeb3d 100644 --- a/lib/src/test/java/de/kuschku/libquassel/quassel/syncables/NetworkTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/quassel/syncables/NetworkTest.kt @@ -81,10 +81,10 @@ class NetworkTest { original.addSupport("CHANTYPES", "#") original.addSupport("CHARSET", "ascii") original.addSupport("ELIST", "MU") - original.addSupport("ESILENCE", null) + original.addSupport("ESILENCE", "") original.addSupport("EXCEPTS", "e") original.addSupport("EXTBAN", ",ABCNOQRSTUcjmprsz") - original.addSupport("FNC", null) + original.addSupport("FNC", "") original.addSupport("INVEX", "I") for (i in 0 until 8) { original.newIrcUser(randomString() + "!" + randomString() + "@" + randomString()).apply { @@ -208,10 +208,10 @@ class NetworkTest { original.addSupport("CHANTYPES", "#") original.addSupport("CHARSET", "ascii") original.addSupport("ELIST", "MU") - original.addSupport("ESILENCE", null) + original.addSupport("ESILENCE", "") original.addSupport("EXCEPTS", "e") original.addSupport("EXTBAN", ",ABCNOQRSTUcjmprsz") - original.addSupport("FNC", null) + original.addSupport("FNC", "") original.addSupport("INVEX", "I") for (i in 0 until 8) { original.newIrcUser(randomString() + "!" + randomString() + "@" + randomString()).apply { diff --git a/lib/src/test/java/de/kuschku/libquassel/util/TestSession.kt b/lib/src/test/java/de/kuschku/libquassel/util/TestSession.kt index 382f211d6fb4697ef5d6ccff363e4b53f608e9ca..aec1e47e8b26a37632e1be49943e54b5b21d58c7 100644 --- a/lib/src/test/java/de/kuschku/libquassel/util/TestSession.kt +++ b/lib/src/test/java/de/kuschku/libquassel/util/TestSession.kt @@ -21,11 +21,33 @@ package de.kuschku.libquassel.util import de.kuschku.libquassel.connection.ConnectionState import de.kuschku.libquassel.connection.Features -import de.kuschku.libquassel.protocol.* +import de.kuschku.libquassel.protocol.IdentityId +import de.kuschku.libquassel.protocol.Message_Type +import de.kuschku.libquassel.protocol.Message_Types +import de.kuschku.libquassel.protocol.MsgId +import de.kuschku.libquassel.protocol.NetworkId +import de.kuschku.libquassel.protocol.QVariantList +import de.kuschku.libquassel.protocol.QVariantMap import de.kuschku.libquassel.protocol.message.HandshakeMessage import de.kuschku.libquassel.protocol.message.SignalProxyMessage import de.kuschku.libquassel.quassel.BufferInfo -import de.kuschku.libquassel.quassel.syncables.* +import de.kuschku.libquassel.quassel.syncables.AliasManager +import de.kuschku.libquassel.quassel.syncables.BacklogManager +import de.kuschku.libquassel.quassel.syncables.BufferSyncer +import de.kuschku.libquassel.quassel.syncables.BufferViewConfig +import de.kuschku.libquassel.quassel.syncables.BufferViewManager +import de.kuschku.libquassel.quassel.syncables.CertManager +import de.kuschku.libquassel.quassel.syncables.CoreInfo +import de.kuschku.libquassel.quassel.syncables.DccConfig +import de.kuschku.libquassel.quassel.syncables.HighlightRuleManager +import de.kuschku.libquassel.quassel.syncables.Identity +import de.kuschku.libquassel.quassel.syncables.IgnoreListManager +import de.kuschku.libquassel.quassel.syncables.IrcChannel +import de.kuschku.libquassel.quassel.syncables.IrcListHelper +import de.kuschku.libquassel.quassel.syncables.IrcUser +import de.kuschku.libquassel.quassel.syncables.Network +import de.kuschku.libquassel.quassel.syncables.NetworkConfig +import de.kuschku.libquassel.quassel.syncables.RpcHandler import de.kuschku.libquassel.quassel.syncables.interfaces.IAliasManager import de.kuschku.libquassel.quassel.syncables.interfaces.ISyncableObject import de.kuschku.libquassel.session.ISession @@ -91,6 +113,7 @@ class TestSession : ProtocolHandler({ throw it }), ISession { } fun callRpc(slotName: String, params: QVariantList?) { + println(rpc) val matchingNames = rpc.filter { it.slotName == slotName } diff --git a/lint.xml b/lint.xml index 89a5ad06a7cfbea2af6f04be4d6976138203b931..eab67bd5e6f29d10e42082945d8a9195c76e4777 100644 --- a/lint.xml +++ b/lint.xml @@ -34,6 +34,8 @@ <!-- Can’t request a translation without a release, can’t release without translation --> <issue id="MissingTranslation" severity="informational" /> + <!-- Because we don’t use app bundles and never will use them --> + <issue id="AppBundleLocaleChanges" severity="informational" /> <!-- Because this tries to apply english orthography to other locales --> <issue id="Typos" severity="ignore" /> @@ -42,4 +44,10 @@ <!-- We’re not using AGP 5 yet, and once we are, we’ll use compose anyway --> <issue id="NonConstantResourceId" severity="informational" /> + + <!-- It’s only used for testing --> + <issue id="TrustAllX509TrustManager" severity="informational" /> + + <!-- TODO for the future --> + <issue id="DataExtractionRules" severity="informational" /> </lint> diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt index 2b0a4e74c95f641cfebc104f7e7fe7855bbc195c..9d7a6ae22d0b75a689ecd2c50d70c4a212f9851d 100644 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt +++ b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt @@ -41,7 +41,9 @@ class DisplayCollector(application: Application) : @Suppress("DEPRECATION") override fun collect(context: CrashContext, config: Boolean): DisplayInfo { - val display = context.application.display ?: windowManager.defaultDisplay + val display = + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) windowManager.defaultDisplay + else context.application.display ?: windowManager.defaultDisplay val hdrCapabilities = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val capabilitiesEnum = getHdrCapabilitiesEnum() display.hdrCapabilities.supportedHdrTypes.map(capabilitiesEnum::get) diff --git a/ui_spinner/src/main/java/de/kuschku/ui/spinner/CutoutDrawable.java b/ui_spinner/src/main/java/de/kuschku/ui/spinner/CutoutDrawable.java index 64b865c4cc56bc50e34817684a7e5736d889dd53..e54b577e76d6c362567df3a87c6f605cbc52b7db 100644 --- a/ui_spinner/src/main/java/de/kuschku/ui/spinner/CutoutDrawable.java +++ b/ui_spinner/src/main/java/de/kuschku/ui/spinner/CutoutDrawable.java @@ -111,12 +111,7 @@ class CutoutDrawable extends MaterialShapeDrawable { } private void saveCanvasLayer(@NonNull Canvas canvas) { - if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { - savedLayer = canvas.saveLayer(0, 0, canvas.getWidth(), canvas.getHeight(), null); - } else { - savedLayer = - canvas.saveLayer(0, 0, canvas.getWidth(), canvas.getHeight(), null, Canvas.ALL_SAVE_FLAG); - } + savedLayer = canvas.saveLayer(0, 0, canvas.getWidth(), canvas.getHeight(), null); } private void postDraw(@NonNull Canvas canvas) { diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt index 1af17ba2123a4b31105315cba0f437b2011cf0e3..80fe823a1c729416cc97694dfc6f735a70625cd4 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt @@ -1735,20 +1735,7 @@ object EmojiData { "\u2139\uFE0F" to "\u2139", // INFORMATION_SOURCE "\u3297\uFE0F" to "\u3297", // CONGRATULATIONS "\u3299\uFE0F" to "\u3299" // SECRET - ) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - mapOf( - "\uD83C\uDDEF\uD83C\uDDF5" to "\uDBB9\uDCE5", // JP - "\uD83C\uDDF0\uD83C\uDDF7" to "\uDBB9\uDCEE", // KR - "\uD83C\uDDE9\uD83C\uDDEA" to "\uDBB9\uDCE8", // DE - "\uD83C\uDDE8\uD83C\uDDF3" to "\uDBB9\uDCED", // CN - "\uD83C\uDDFA\uD83C\uDDF8" to "\uDBB9\uDCE6", // US - "\uD83C\uDDEB\uD83C\uDDF7" to "\uDBB9\uDCE7", // FR - "\uD83C\uDDEA\uD83C\uDDF8" to "\uDBB9\uDCEB", // ES - "\uD83C\uDDEE\uD83C\uDDF9" to "\uDBB9\uDCE9", // IT - "\uD83C\uDDF7\uD83C\uDDFA" to "\uDBB9\uDCEC", // RU - "\uD83C\uDDEC\uD83C\uDDE7" to "\uDBB9\uDCEA" // GB - ) - } else emptyMap() + ) val emojis = conversionMap.values.toSet() + rawEmojiMap.values.toSet() + "\u200d" + "\ufe0f" diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/util/helper/LiveDataHelper.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/util/helper/LiveDataHelper.kt index b2ebd431b89750250f22b1d56f5f54b271756ac4..2fa4491c8ad76f9cffaf08cbeabd866cfd581567 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/util/helper/LiveDataHelper.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/util/helper/LiveDataHelper.kt @@ -20,6 +20,7 @@ package de.kuschku.quasseldroid.util.helper +import android.annotation.SuppressLint import androidx.annotation.MainThread import androidx.lifecycle.* import io.reactivex.Observable @@ -33,6 +34,7 @@ inline fun <X, Y> LiveData<X?>.safeSwitchMap( this, object : Observer<X?> { var mSource: LiveData<Y>? = null + @SuppressLint("NullSafeMutableLiveData") override fun onChanged(x: X?) { val newLiveData = if (x == null) null else func(x) if (mSource === newLiveData) { @@ -59,6 +61,7 @@ inline fun <X, Y> LiveData<X>.switchMapNotNull( this, object : Observer<X> { var mSource: LiveData<Y>? = null + @SuppressLint("NullSafeMutableLiveData") override fun onChanged(x: X?) { val newLiveData = if (x == null) null else func(x) if (mSource === newLiveData) {