Tootsearchのサービス終了。ほか依存関係の更新やdeprecated警告の対応など

This commit is contained in:
tateisu 2022-12-27 00:04:32 +09:00
parent 4a0b98cb56
commit 373415874c
21 changed files with 133 additions and 106 deletions

View File

@ -31,11 +31,11 @@ android {
kotlinOptions { kotlinOptions {
jvmTarget = jvm_target jvmTarget = jvm_target
freeCompilerArgs += [ freeCompilerArgs += [
"-Xopt-in=kotlin.ExperimentalStdlibApi", // "-opt-in=kotlin.ExperimentalStdlibApi",
"-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", // "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi", // "-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi", // "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
"-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi", // "-opt-in=androidx.compose.animation.ExperimentalAnimationApi",
] ]
} }
} }
@ -46,13 +46,12 @@ repositories {
dependencies { dependencies {
testImplementation "junit:junit:$junit_version" testImplementation "junit:junit:$junit_version"
androidTestImplementation 'androidx.test:runner:1.4.0' androidTestImplementation 'androidx.test:runner:1.5.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
api project(':apng') api project(':apng')
// 'api' // 'api'
// 'implementation' // 'implementation'
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
} }

View File

@ -135,7 +135,7 @@ dependencies {
// targetSdkVersion 31 androidTest android:exported // targetSdkVersion 31 androidTest android:exported
// https://github.com/android/android-test/issues/1022 // https://github.com/android/android-test/issues/1022
androidTestImplementation "androidx.test:core:1.4.0" androidTestImplementation "androidx.test:core:$androidx_test_version"
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0-alpha4', { androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0-alpha4', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'
@ -176,7 +176,7 @@ dependencies {
kapt 'androidx.annotation:annotation:1.5.0' kapt 'androidx.annotation:annotation:1.5.0'
// https://firebase.google.com/support/release-notes/android // https://firebase.google.com/support/release-notes/android
implementation "com.google.firebase:firebase-messaging:23.1.0" implementation "com.google.firebase:firebase-messaging:23.1.1"
implementation "org.jetbrains.kotlin:kotlin-reflect" implementation "org.jetbrains.kotlin:kotlin-reflect"
testImplementation "org.jetbrains.kotlin:kotlin-test" testImplementation "org.jetbrains.kotlin:kotlin-test"
@ -231,7 +231,7 @@ dependencies {
implementation 'com.astuetz:pagerslidingtabstrip:1.0.1' implementation 'com.astuetz:pagerslidingtabstrip:1.0.1'
implementation 'com.google.android.exoplayer:exoplayer:2.18.1' implementation 'com.google.android.exoplayer:exoplayer:2.18.2'
/* /*
WARNING: [Processor] Library '…\exoplayer-ui-2.12.0.aar' contains references to both AndroidX and old support library. This seems like the library is partially migrated. Jetifier will try to rewrite the library anyway. WARNING: [Processor] Library '…\exoplayer-ui-2.12.0.aar' contains references to both AndroidX and old support library. This seems like the library is partially migrated. Jetifier will try to rewrite the library anyway.
Example of androidX reference: 'androidx/core/app/NotificationCompat$Builder' Example of androidX reference: 'androidx/core/app/NotificationCompat$Builder'
@ -267,7 +267,7 @@ dependencies {
// optional - Test helpers for LiveData // optional - Test helpers for LiveData
testImplementation "androidx.arch.core:core-testing:$arch_version" testImplementation "androidx.arch.core:core-testing:$arch_version"
implementation 'androidx.work:work-runtime-ktx:2.8.0-beta01' implementation 'androidx.work:work-runtime-ktx:2.8.0-rc01'
def roomVersion = "2.4.3" def roomVersion = "2.4.3"
implementation "androidx.room:room-runtime:$roomVersion" implementation "androidx.room:room-runtime:$roomVersion"

View File

@ -1,16 +1,15 @@
package com.bumptech.glide.load.resource.gif package com.bumptech.glide.load.resource.gif
import android.annotation.SuppressLint import android.annotation.SuppressLint
import com.bumptech.glide.gifdecoder.GifDecoder.TOTAL_ITERATION_COUNT_FOREVER
import android.content.Context import android.content.Context
import android.graphics.* import android.graphics.*
import android.graphics.drawable.Animatable import android.graphics.drawable.Animatable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import androidx.annotation.VisibleForTesting
import android.view.Gravity import android.view.Gravity
import androidx.annotation.VisibleForTesting
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.gifdecoder.GifDecoder import com.bumptech.glide.gifdecoder.GifDecoder
import com.bumptech.glide.gifdecoder.GifDecoder.TOTAL_ITERATION_COUNT_FOREVER
import com.bumptech.glide.load.Transformation import com.bumptech.glide.load.Transformation
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
import com.bumptech.glide.util.Preconditions import com.bumptech.glide.util.Preconditions
@ -349,10 +348,10 @@ class MyGifDrawable internal constructor(
return p return p
} }
override fun getOpacity(): Int {
// We can't tell, so default to transparent to be safe. // We can't tell, so default to transparent to be safe.
return PixelFormat.TRANSPARENT @Suppress("DeprecatedCallableAddReplaceWith")
} @Deprecated("deprecated in API level 29.")
override fun getOpacity() = PixelFormat.TRANSPARENT
// See #1087. // See #1087.
private fun findCallback(): Callback? { private fun findCallback(): Callback? {

View File

@ -61,7 +61,8 @@ class ActHighlightWordEdit
} }
} }
override fun onBackPressed() { override fun onCreate(savedInstanceState: Bundle?) {
backPressed{
AlertDialog.Builder(this) AlertDialog.Builder(this)
.setCancelable(true) .setCancelable(true)
.setMessage(R.string.discard_changes) .setMessage(R.string.discard_changes)
@ -69,8 +70,6 @@ class ActHighlightWordEdit
.setNegativeButton(R.string.yes) { _, _ -> finish() } .setNegativeButton(R.string.yes) { _, _ -> finish() }
.show() .show()
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
arNotificationSound.register(this) arNotificationSound.register(this)
App1.setActivityTheme(this) App1.setActivityTheme(this)

View File

@ -295,7 +295,7 @@ class ActMain : AppCompatActivity(),
val arActText = ActivityResultHandler(log) { r -> val arActText = ActivityResultHandler(log) { r ->
when (r.resultCode) { when (r.resultCode) {
ActText.RESULT_SEARCH_MSP -> searchFromActivityResult(r.data, ColumnType.SEARCH_MSP) ActText.RESULT_SEARCH_MSP -> searchFromActivityResult(r.data, ColumnType.SEARCH_MSP)
ActText.RESULT_SEARCH_TS -> searchFromActivityResult(r.data, ColumnType.SEARCH_TS) // ActText.RESULT_SEARCH_TS -> searchFromActivityResult(r.data, ColumnType.SEARCH_TS)
ActText.RESULT_SEARCH_NOTESTOCK -> searchFromActivityResult( ActText.RESULT_SEARCH_NOTESTOCK -> searchFromActivityResult(
r.data, r.data,
ColumnType.SEARCH_NOTESTOCK ColumnType.SEARCH_NOTESTOCK
@ -315,6 +315,7 @@ class ActMain : AppCompatActivity(),
// ライフサイクルイベント // ライフサイクルイベント
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
backPressed { onBackPressedImpl() }
log.d("onCreate") log.d("onCreate")
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
refActMain = WeakReference(this) refActMain = WeakReference(this)
@ -617,8 +618,6 @@ class ActMain : AppCompatActivity(),
} }
} }
override fun onBackPressed() = onBackPressedImpl()
override fun onClick(v: View) = onClickImpl(v) override fun onClick(v: View) = onClickImpl(v)
override fun onMyClickableSpanClicked(viewClicked: View, span: MyClickableSpan) = override fun onMyClickableSpanClicked(viewClicked: View, span: MyClickableSpan) =

View File

@ -25,7 +25,7 @@ class ActText : AppCompatActivity() {
internal val log = LogCategory("ActText") internal val log = LogCategory("ActText")
internal const val RESULT_SEARCH_MSP = RESULT_FIRST_USER + 1 internal const val RESULT_SEARCH_MSP = RESULT_FIRST_USER + 1
internal const val RESULT_SEARCH_TS = RESULT_FIRST_USER + 2 // internal const val RESULT_SEARCH_TS = RESULT_FIRST_USER + 2
internal const val RESULT_SEARCH_NOTESTOCK = RESULT_FIRST_USER + 3 internal const val RESULT_SEARCH_NOTESTOCK = RESULT_FIRST_USER + 3
internal const val EXTRA_TEXT = "text" internal const val EXTRA_TEXT = "text"
@ -83,7 +83,7 @@ class ActText : AppCompatActivity() {
selection, selection,
) )
R.id.btnSearchTS -> searchToot(RESULT_SEARCH_TS) // R.id.btnSearchTS -> searchToot(RESULT_SEARCH_TS)
R.id.btnSearchNotestock -> searchToot(RESULT_SEARCH_NOTESTOCK) R.id.btnSearchNotestock -> searchToot(RESULT_SEARCH_NOTESTOCK)

View File

@ -5,8 +5,6 @@ import android.view.View
import android.widget.TextView import android.widget.TextView
import androidx.core.view.GravityCompat import androidx.core.view.GravityCompat
import jp.juggler.subwaytooter.ActMain import jp.juggler.subwaytooter.ActMain
import jp.juggler.subwaytooter.pref.PrefB
import jp.juggler.subwaytooter.pref.PrefI
import jp.juggler.subwaytooter.R import jp.juggler.subwaytooter.R
import jp.juggler.subwaytooter.action.openColumnList import jp.juggler.subwaytooter.action.openColumnList
import jp.juggler.subwaytooter.action.openPost import jp.juggler.subwaytooter.action.openPost
@ -19,10 +17,11 @@ import jp.juggler.subwaytooter.columnviewholder.ViewHolderHeaderBase
import jp.juggler.subwaytooter.columnviewholder.ViewHolderItem import jp.juggler.subwaytooter.columnviewholder.ViewHolderItem
import jp.juggler.subwaytooter.dialog.ActionsDialog import jp.juggler.subwaytooter.dialog.ActionsDialog
import jp.juggler.subwaytooter.itemviewholder.ItemViewHolder import jp.juggler.subwaytooter.itemviewholder.ItemViewHolder
import jp.juggler.subwaytooter.pref.PrefB
import jp.juggler.subwaytooter.pref.PrefI
import jp.juggler.subwaytooter.span.MyClickableSpan import jp.juggler.subwaytooter.span.MyClickableSpan
import jp.juggler.subwaytooter.util.openCustomTab import jp.juggler.subwaytooter.util.openCustomTab
import jp.juggler.util.* import jp.juggler.util.*
import java.util.*
private val log = LogCategory("ActMainActions") private val log = LogCategory("ActMainActions")
@ -61,22 +60,24 @@ fun ActMain.onBackPressedImpl() {
} }
// カラムが1個以上ある場合は設定に合わせて挙動を変える // カラムが1個以上ある場合は設定に合わせて挙動を変える
when (PrefI.ipBackButtonAction(pref)) { when (PrefI.ipBackButtonAction.invoke(pref)) {
PrefI.BACK_EXIT_APP -> finish() PrefI.BACK_EXIT_APP -> finish()
PrefI.BACK_OPEN_COLUMN_LIST -> openColumnList() PrefI.BACK_OPEN_COLUMN_LIST -> openColumnList()
PrefI.BACK_CLOSE_COLUMN -> { PrefI.BACK_CLOSE_COLUMN -> {
val closeableColumnList = getClosableColumnList() val closeableColumnList = getClosableColumnList()
when (closeableColumnList.size) { when (closeableColumnList.size) {
0 -> when { 0 -> when {
PrefB.bpExitAppWhenCloseProtectedColumn(pref) && PrefB.bpDontConfirmBeforeCloseColumn(pref) -> finish() PrefB.bpExitAppWhenCloseProtectedColumn(pref) &&
PrefB.bpDontConfirmBeforeCloseColumn.invoke(pref) ->
finish()
else -> showToast(false, R.string.missing_closeable_column) else -> showToast(false, R.string.missing_closeable_column)
} }
1 -> closeColumn(closeableColumnList.first()) 1 -> closeColumn(closeableColumnList.first())
else -> showToast(false, R.string.cant_close_column_by_back_button_when_multiple_column_shown) else -> showToast(false,
R.string.cant_close_column_by_back_button_when_multiple_column_shown)
} }
} }
// ActAppSetting.BACK_ASK_ALWAYS else /* PrefI.BACK_ASK_ALWAYS */ -> {
else -> {
val closeableColumnList = getClosableColumnList() val closeableColumnList = getClosableColumnList()
val dialog = ActionsDialog() val dialog = ActionsDialog()
if (closeableColumnList.size == 1) { if (closeableColumnList.size == 1) {

View File

@ -2,7 +2,6 @@ package jp.juggler.subwaytooter.actmain
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.drawable.StateListDrawable import android.graphics.drawable.StateListDrawable
import android.os.Build import android.os.Build
import android.os.Handler import android.os.Handler
@ -382,9 +381,9 @@ class SideMenuAdapter(
Item(icon = R.drawable.ic_search, title = R.string.mastodon_search_portal) { Item(icon = R.drawable.ic_search, title = R.string.mastodon_search_portal) {
addColumn(defaultInsertPosition, SavedAccount.na, ColumnType.SEARCH_MSP, "") addColumn(defaultInsertPosition, SavedAccount.na, ColumnType.SEARCH_MSP, "")
}, },
Item(icon = R.drawable.ic_search, title = R.string.tootsearch) { // Item(icon = R.drawable.ic_search, title = R.string.tootsearch) {
addColumn(defaultInsertPosition, SavedAccount.na, ColumnType.SEARCH_TS, "") // addColumn(defaultInsertPosition, SavedAccount.na, ColumnType.SEARCH_TS, "")
}, // },
Item(icon = R.drawable.ic_search, title = R.string.notestock) { Item(icon = R.drawable.ic_search, title = R.string.notestock) {
addColumn(defaultInsertPosition, SavedAccount.na, ColumnType.SEARCH_NOTESTOCK, "") addColumn(defaultInsertPosition, SavedAccount.na, ColumnType.SEARCH_NOTESTOCK, "")
}, },

View File

@ -41,6 +41,8 @@ class MediaBackgroundDrawable(
paint.colorFilter = colorFilter paint.colorFilter = colorFilter
} }
@Suppress("DeprecatedCallableAddReplaceWith")
@Deprecated("deprecated in API level 29.")
override fun getOpacity() = when (paint.alpha) { override fun getOpacity() = when (paint.alpha) {
255 -> PixelFormat.OPAQUE 255 -> PixelFormat.OPAQUE
0 -> PixelFormat.TRANSPARENT 0 -> PixelFormat.TRANSPARENT

View File

@ -13,6 +13,8 @@ class PollPlotDrawable(
override fun setAlpha(alpha: Int) { override fun setAlpha(alpha: Int) {
} }
@Suppress("DeprecatedCallableAddReplaceWith")
@Deprecated("deprecated in API level 29.")
override fun getOpacity(): Int = PixelFormat.TRANSLUCENT override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
override fun setColorFilter(colorFilter: ColorFilter?) { override fun setColorFilter(colorFilter: ColorFilter?) {

View File

@ -29,6 +29,8 @@ class PreviewCardBorder : Drawable() {
canvas.drawRoundRect(left, top, right, bottom, round, round, paint) canvas.drawRoundRect(left, top, right, bottom, round, round, paint)
} }
@Suppress("DeprecatedCallableAddReplaceWith")
@Deprecated("deprecated in API level 29.")
override fun getOpacity(): Int = PixelFormat.TRANSLUCENT override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
override fun setAlpha(alpha: Int) = Unit override fun setAlpha(alpha: Int) = Unit

View File

@ -84,7 +84,7 @@ class PollingWorker2(
workManager.enqueueUniquePeriodicWork( workManager.enqueueUniquePeriodicWork(
WORK_NAME, WORK_NAME,
ExistingPeriodicWorkPolicy.REPLACE, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE,
workRequest workRequest
).await() ).await()

View File

@ -1,7 +1,7 @@
package jp.juggler.subwaytooter.search package jp.juggler.subwaytooter.search
import jp.juggler.subwaytooter.* import android.content.Context
import jp.juggler.subwaytooter.column.addWithFilterStatus import jp.juggler.subwaytooter.R
import jp.juggler.subwaytooter.api.TootApiClient import jp.juggler.subwaytooter.api.TootApiClient
import jp.juggler.subwaytooter.api.TootApiResult import jp.juggler.subwaytooter.api.TootApiResult
import jp.juggler.subwaytooter.api.TootParser import jp.juggler.subwaytooter.api.TootParser
@ -10,8 +10,11 @@ import jp.juggler.subwaytooter.api.entity.ServiceType
import jp.juggler.subwaytooter.api.entity.TootStatus import jp.juggler.subwaytooter.api.entity.TootStatus
import jp.juggler.subwaytooter.column.ColumnTask_Loading import jp.juggler.subwaytooter.column.ColumnTask_Loading
import jp.juggler.subwaytooter.column.ColumnTask_Refresh import jp.juggler.subwaytooter.column.ColumnTask_Refresh
import jp.juggler.util.* import jp.juggler.subwaytooter.column.addWithFilterStatus
import okhttp3.Request import jp.juggler.util.JsonArray
import jp.juggler.util.JsonObject
import jp.juggler.util.LogCategory
import jp.juggler.util.cast
object TootsearchHelper { object TootsearchHelper {
@ -26,21 +29,33 @@ object TootsearchHelper {
private fun getNextId(root: JsonObject, oldSize: Int): String? = private fun getNextId(root: JsonObject, oldSize: Int): String? =
getHits(root)?.size?.takeIf { it > 0 }?.let { (oldSize + it) }?.toString() getHits(root)?.size?.takeIf { it > 0 }?.let { (oldSize + it) }?.toString()
private suspend fun TootApiClient.search(query: String, from: Int?): TootApiResult? { @Suppress(
val result = TootApiResult.makeWithCaption("Tootsearch") "unused",
if (result.error != null) return result "RedundantNullableReturnType",
if (!sendRequest(result) { "RedundantSuspendModifier",
val url = StringBuilder().apply { "UNUSED_PARAMETER",
append("https://tootsearch.chotto.moe/api/v1/search?sort=") )
append("created_at:desc".encodePercent()) private suspend fun TootApiClient.search(
append("&q=").append(query.encodePercent()) context: Context,
if (from != null) append("&from=").append(from.toString()) query: String,
}.toString() from: Int?,
): TootApiResult? {
return TootApiResult("Tootsearch discontinued service on 2022/12/25.")
Request.Builder().url(url).build() // val result = TootApiResult.makeWithCaption("Tootsearch")
}) return result // if (result.error != null) return result
// if (!sendRequest(result) {
return parseJson(result) // val url = StringBuilder().apply {
// append("https://tootsearch.chotto.moe/api/v1/search?sort=")
// append("created_at:desc".encodePercent())
// append("&q=").append(query.encodePercent())
// if (from != null) append("&from=").append(from.toString())
// }.toString()
//
// Request.Builder().url(url).build()
// }) return result
//
// return parseJson(result)
} }
private fun parseList(parser: TootParser, root: JsonObject) = private fun parseList(parser: TootParser, root: JsonObject) =
@ -66,7 +81,11 @@ object TootsearchHelper {
listTmp = java.util.ArrayList() listTmp = java.util.ArrayList()
TootApiResult() TootApiResult()
} else { } else {
client.search(column.searchQuery, null)?.also { result -> client.search(
context = context,
query = column.searchQuery,
from = null
)?.also { result ->
result.jsonObject?.let { root -> result.jsonObject?.let { root ->
column.idOld = EntityId.mayNull(getNextId(root, 0)) column.idOld = EntityId.mayNull(getNextId(root, 0))
listTmp = addWithFilterStatus( listTmp = addWithFilterStatus(
@ -92,7 +111,11 @@ object TootsearchHelper {
listTmp = ArrayList() listTmp = ArrayList()
TootApiResult(context.getString(R.string.end_of_list)) TootApiResult(context.getString(R.string.end_of_list))
} else { } else {
client.search(q, oldSize)?.also { result -> client.search(
context = context,
query = q,
from = oldSize,
)?.also { result ->
result.jsonObject?.let { root -> result.jsonObject?.let { root ->
column.idOld = EntityId.mayNull(getNextId(root, oldSize)) column.idOld = EntityId.mayNull(getNextId(root, oldSize))
listTmp = addWithFilterStatus(listTmp, parseList(parser, root)) listTmp = addWithFilterStatus(listTmp, parseList(parser, root))

View File

@ -17,10 +17,10 @@
android:title="@string/search_web" android:title="@string/search_web"
app:showAsAction="never" /> app:showAsAction="never" />
<item <!-- <item-->
android:id="@+id/btnSearchTS" <!-- android:id="@+id/btnSearchTS"-->
android:title="@string/toot_search_ts" <!-- android:title="@string/toot_search_ts"-->
app:showAsAction="never" /> <!-- app:showAsAction="never" />-->
<item <item
android:id="@+id/btnSearchNotestock" android:id="@+id/btnSearchNotestock"

View File

@ -5,7 +5,7 @@ buildscript {
ext.min_sdk_version = 26 ext.min_sdk_version = 26
ext.target_sdk_version = 32 ext.target_sdk_version = 32
ext.compile_sdk_version = 33 ext.compile_sdk_version = 33
ext.build_tools_version = "33.0.0" ext.build_tools_version = "33.0.1"
ext.appcompat_version = "1.5.1" ext.appcompat_version = "1.5.1"
ext.lifecycle_version = "2.5.1" ext.lifecycle_version = "2.5.1"
@ -24,6 +24,8 @@ buildscript {
ext.koin_version = '3.1.3' ext.koin_version = '3.1.3'
ext.androidx_test_version = '1.5.0'
repositories { repositories {
google() google()
mavenCentral() mavenCentral()

View File

@ -26,11 +26,11 @@ android {
kotlinOptions { kotlinOptions {
jvmTarget = jvm_target jvmTarget = jvm_target
freeCompilerArgs += [ freeCompilerArgs += [
"-Xopt-in=kotlin.ExperimentalStdlibApi", "-opt-in=kotlin.ExperimentalStdlibApi",
"-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi", //"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi", //"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
"-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi", //"-opt-in=androidx.compose.animation.ExperimentalAnimationApi",
] ]
} }
} }
@ -42,7 +42,7 @@ dependencies {
testImplementation "junit:junit:$junit_version" testImplementation "junit:junit:$junit_version"
androidTestImplementation "androidx.test:core:1.4.0" androidTestImplementation "androidx.test:core:$androidx_test_version"
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0-alpha4', { androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0-alpha4', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'

View File

@ -132,7 +132,7 @@ class ColorPanelView @JvmOverloads constructor(
public override fun onRestoreInstanceState(state: Parcelable) { public override fun onRestoreInstanceState(state: Parcelable) {
if (state is Bundle) { if (state is Bundle) {
color = state.getInt("color") color = state.getInt("color")
super.onRestoreInstanceState(state.getParcelable("instanceState")) super.onRestoreInstanceState(state.getParcelableCompat("instanceState"))
} else { } else {
super.onRestoreInstanceState(state) super.onRestoreInstanceState(state)
} }

View File

@ -37,7 +37,7 @@ import kotlin.math.min
class ColorPickerView @JvmOverloads constructor( class ColorPickerView @JvmOverloads constructor(
context: Context, context: Context,
attrs: AttributeSet? = null, attrs: AttributeSet? = null,
defStyle: Int = 0 defStyle: Int = 0,
) : View(context, attrs, defStyle) { ) : View(context, attrs, defStyle) {
companion object { companion object {
@ -215,7 +215,6 @@ class ColorPickerView @JvmOverloads constructor(
*/ */
var onColorChangedListener: OnColorChangedListener? = null var onColorChangedListener: OnColorChangedListener? = null
public override fun onSaveInstanceState(): Parcelable { public override fun onSaveInstanceState(): Parcelable {
val state = Bundle() val state = Bundle()
state.putParcelable("instanceState", super.onSaveInstanceState()) state.putParcelable("instanceState", super.onSaveInstanceState())
@ -228,20 +227,19 @@ class ColorPickerView @JvmOverloads constructor(
return state return state
} }
public override fun onRestoreInstanceState(stateArg: Parcelable) { public override fun onRestoreInstanceState(state: Parcelable) {
var state: Parcelable? = stateArg
if (state is Bundle) { if (state is Bundle) {
val bundle = state alpha = state.getInt("alpha")
alpha = bundle.getInt("alpha") hue = state.getFloat("hue")
hue = bundle.getFloat("hue") sat = state.getFloat("sat")
sat = bundle.getFloat("sat") bri = state.getFloat("val")
bri = bundle.getFloat("val") showAlphaPanel = state.getBoolean("show_alpha")
showAlphaPanel = bundle.getBoolean("show_alpha") alphaSliderText = state.getString("alpha_text")
alphaSliderText = bundle.getString("alpha_text") super.onRestoreInstanceState(state.getParcelableCompat("instanceState"))
state = bundle.getParcelable("instanceState") } else {
}
super.onRestoreInstanceState(state) super.onRestoreInstanceState(state)
} }
}
init { init {
//Load those if set in xml resource file. //Load those if set in xml resource file.

View File

@ -0,0 +1,13 @@
package com.jrummyapps.android.colorpicker
import android.os.Build
import android.os.Bundle
import android.os.Parcelable
inline fun <reified T : Parcelable> Bundle.getParcelableCompat(key: String) =
if (Build.VERSION.SDK_INT >= 33) {
getParcelable(key, T::class.java)
} else {
@Suppress("DEPRECATION")
getParcelable(key)
}

View File

@ -16,7 +16,6 @@ android {
versionCode 1 versionCode 1
versionName "1.0" versionName "1.0"
// testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
} }
@ -29,15 +28,5 @@ android {
kotlinOptions { kotlinOptions {
jvmTarget = jvm_target jvmTarget = jvm_target
freeCompilerArgs += [
"-Xopt-in=kotlin.ExperimentalStdlibApi",
"-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi",
"-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi",
]
} }
} }
dependencies {
}

View File

@ -37,8 +37,8 @@ android {
kotlinOptions { kotlinOptions {
jvmTarget = jvm_target jvmTarget = jvm_target
freeCompilerArgs += [ freeCompilerArgs += [
"-Xopt-in=kotlin.ExperimentalStdlibApi", "-opt-in=kotlin.ExperimentalStdlibApi",
"-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
// "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi", // "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi",
// "-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi", // "-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi",
// "-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi", // "-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi",
@ -56,8 +56,8 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
testImplementation "junit:junit:$junit_version" testImplementation "junit:junit:$junit_version"
androidTestImplementation 'androidx.test:runner:1.4.0' androidTestImplementation 'androidx.test:runner:1.5.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinx_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinx_coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_coroutines_version"