From b4bb78715ad0152ef0cf42f1b352991c18eb14c3 Mon Sep 17 00:00:00 2001 From: WilliamKwokX <1425183716@qq.com> Date: Fri, 15 Sep 2023 02:09:40 +0800 Subject: [PATCH] v 1.0.6 1. added instrumental test 2. renamed vm with getMVBVm 3. changed convertIfIsParcelableArray to ConvertToActual 4. undid Bundle 5. optimized save.kt and Saver.kt 6. add Container for rmb 7. changed MVBViewModel functions with operators. 8. optimized the writing style in MVBData 9. renamed a function with `convertIfIsParcelableArray`. --- .idea/androidTestResultsUserPreferences.xml | 249 ++++++++++ api/build.gradle | 18 +- .../pers/shawxingkwok/mvb/ConvertToActual.kt | 18 + .../java/pers/shawxingkwok/mvb/Initializer.kt | 49 ++ .../java/pers/shawxingkwok/mvb/Observe.kt | 47 +- .../java/pers/shawxingkwok/mvb/Rotate.kt | 35 +- .../java/pers/shawxingkwok/mvb/Synchonize.kt | 49 -- .../java/pers/shawxingkwok/mvb/Synchronize.kt | 74 +++ .../java/pers/shawxingkwok/mvb/VM.kt | 40 ++ .../java/pers/shawxingkwok/mvb/assertAll.kt | 17 + .../shawxingkwok/mvb/android/Container.kt | 3 + .../pers/shawxingkwok/mvb/android/MVBData.kt | 89 ++-- .../shawxingkwok/mvb/android/MVBViewModel.kt | 18 +- .../pers/shawxingkwok/mvb/android/Saver.kt | 63 ++- .../android/convertParcelableArrayIfNeeded.kt | 19 - .../mvb/android/convertToActual.kt | 13 + .../mvb/android/{vm.kt => getMVBVm.kt} | 18 +- .../pers/shawxingkwok/mvb/android/mvbScope.kt | 3 +- .../pers/shawxingkwok/mvb/android/save.kt | 57 +-- .../pers/shawxingkwok/mvb/ExampleUnitTest.kt | 10 - .../caches-jvm/inputs/source-to-output.tab | Bin 4096 -> 4096 bytes .../inputs/source-to-output.tab.values.at | Bin 22020 -> 8155 bytes .../jvm/kotlin/class-attributes.tab | Bin 4096 -> 4096 bytes .../jvm/kotlin/class-attributes.tab.values.at | Bin 97 -> 82 bytes .../jvm/kotlin/class-fq-name-to-source.tab | Bin 4096 -> 4096 bytes .../class-fq-name-to-source.tab.values.at | Bin 1596 -> 1140 bytes .../jvm/kotlin/internal-name-to-source.tab | Bin 4096 -> 4096 bytes .../internal-name-to-source.tab.values.at | Bin 13907 -> 5061 bytes .../cacheable/caches-jvm/jvm/kotlin/proto.tab | Bin 4096 -> 4096 bytes .../caches-jvm/jvm/kotlin/proto.tab.values.at | Bin 12209 -> 5282 bytes .../jvm/kotlin/source-to-classes.tab | Bin 4096 -> 4096 bytes .../kotlin/source-to-classes.tab.values.at | Bin 12636 -> 4661 bytes .../caches-jvm/jvm/kotlin/subtypes.tab | Bin 4096 -> 4096 bytes .../jvm/kotlin/subtypes.tab.values.at | Bin 988 -> 515 bytes .../caches-jvm/jvm/kotlin/supertypes.tab | Bin 4096 -> 4096 bytes .../jvm/kotlin/supertypes.tab.values.at | Bin 583 -> 399 bytes .../cacheable/caches-jvm/lookups/counters.tab | 2 +- .../caches-jvm/lookups/file-to-id.tab | Bin 4096 -> 4096 bytes .../lookups/file-to-id.tab.values.at | Bin 121 -> 91 bytes .../caches-jvm/lookups/id-to-file.tab | Bin 4096 -> 4096 bytes .../lookups/id-to-file.tab.keystream | Bin 4096 -> 4096 bytes .../lookups/id-to-file.tab.keystream.len | Bin 8 -> 8 bytes .../caches-jvm/lookups/id-to-file.tab.len | Bin 8 -> 8 bytes .../lookups/id-to-file.tab.values.at | Bin 1089 -> 633 bytes .../caches-jvm/lookups/id-to-file.tab_i | Bin 32768 -> 32768 bytes .../cacheable/caches-jvm/lookups/lookups.tab | Bin 16384 -> 16384 bytes .../caches-jvm/lookups/lookups.tab.values.at | Bin 29078 -> 10515 bytes .../cacheable/last-build.bin | Bin 18 -> 18 bytes .../local-state/build-history.bin | Bin 4311 -> 31 bytes .../logs/manifest-merger-debug-report.txt | 424 +++++++++--------- .../androidutil/view}/MyFragment.kt | 2 +- .../shawxingkwok/androidutil/view/Observe.kt | 6 +- .../androidutil/view/ParcelableComponent.kt | 3 +- .../mvb/demo/StopwatchFragment.kt | 6 +- gradle/libs.versions.toml | 11 + .../shawxingkwok/restoretest/MainActivity.kt | 30 +- .../src/main/res/layout/activity_main.xml | 22 +- restoretest/src/main/res/values/strings.xml | 1 + settings.gradle | 2 + 59 files changed, 904 insertions(+), 494 deletions(-) create mode 100644 api/src/androidTest/java/pers/shawxingkwok/mvb/ConvertToActual.kt create mode 100644 api/src/androidTest/java/pers/shawxingkwok/mvb/Initializer.kt delete mode 100644 api/src/androidTest/java/pers/shawxingkwok/mvb/Synchonize.kt create mode 100644 api/src/androidTest/java/pers/shawxingkwok/mvb/Synchronize.kt create mode 100644 api/src/androidTest/java/pers/shawxingkwok/mvb/VM.kt create mode 100644 api/src/androidTest/java/pers/shawxingkwok/mvb/assertAll.kt create mode 100644 api/src/main/java/pers/shawxingkwok/mvb/android/Container.kt delete mode 100644 api/src/main/java/pers/shawxingkwok/mvb/android/convertParcelableArrayIfNeeded.kt create mode 100644 api/src/main/java/pers/shawxingkwok/mvb/android/convertToActual.kt rename api/src/main/java/pers/shawxingkwok/mvb/android/{vm.kt => getMVBVm.kt} (50%) delete mode 100644 api/src/test/java/pers/shawxingkwok/mvb/ExampleUnitTest.kt rename {api/src/androidTest/java/pers/shawxingkwok/mvb => demo/src/androidTest/java/pers/shawxingkwok/androidutil/view}/MyFragment.kt (97%) diff --git a/.idea/androidTestResultsUserPreferences.xml b/.idea/androidTestResultsUserPreferences.xml index 1dae095..7618bd9 100644 --- a/.idea/androidTestResultsUserPreferences.xml +++ b/.idea/androidTestResultsUserPreferences.xml @@ -17,6 +17,32 @@ + + + + + + + + + + + + + + @@ -31,6 +57,45 @@ + + + + + + + + + + + + + + + + + + + + + @@ -44,12 +109,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -84,6 +202,19 @@ + + + + + + + @@ -111,6 +242,19 @@ + + + + + + + @@ -124,6 +268,19 @@ + + + + + + + @@ -150,6 +307,45 @@ + + + + + + + + + + + + + + + + + + + + + @@ -163,12 +359,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/api/build.gradle b/api/build.gradle index db7d850..bb7e5d1 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -35,20 +35,26 @@ android { kotlinOptions { jvmTarget = '1.8' } - buildFeatures { - viewBinding true + packagingOptions { + exclude 'META-INF/*' } } dependencies { - implementation libs.coreKtx implementation libs.appcompat implementation(libs.bundles.shawxing) implementation libs.lifecycle.runtimeKtx implementation libs.lifecycle.viewmodel.ktx + implementation libs.coreKtx - testImplementation libs.junit - androidTestImplementation(libs.androidx.fragment.test) +// androidTestImplementation libs.mockito.core +// androidTestImplementation libs.bytebuddy.android +// androidTestImplementation libs.mockito.inline + androidTestImplementation libs.mockito.android + androidTestImplementation libs.mockk + androidTestImplementation libs.kotlin.test + androidTestImplementation libs.junit + androidTestImplementation libs.androidx.fragment.test androidTestImplementation libs.androidx.test.ext.junit androidTestImplementation libs.espresso.core } @@ -63,7 +69,7 @@ tasks.withType(KotlinCompile).configureEach{ // publish mavenPublishing { def artifactId = "mvb-android" - def version = "1.0.5" + def version = "1.0.6" def isSnapshot = false if (isSnapshot) version += "-SNAPSHOT" diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/ConvertToActual.kt b/api/src/androidTest/java/pers/shawxingkwok/mvb/ConvertToActual.kt new file mode 100644 index 0000000..9bf1e8a --- /dev/null +++ b/api/src/androidTest/java/pers/shawxingkwok/mvb/ConvertToActual.kt @@ -0,0 +1,18 @@ +package pers.shawxingkwok.mvb + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize +import org.junit.Test +import pers.shawxingkwok.mvb.android.convertToActual + +internal class ConvertToActual { + @Parcelize + class P : Parcelable + + @Test + fun start(){ + val arr = arrayOf() + val newArr = arr.convertToActual(P::class.java) + assert(newArr.javaClass.componentType == P::class.java) + } +} \ No newline at end of file diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/Initializer.kt b/api/src/androidTest/java/pers/shawxingkwok/mvb/Initializer.kt new file mode 100644 index 0000000..cd3c783 --- /dev/null +++ b/api/src/androidTest/java/pers/shawxingkwok/mvb/Initializer.kt @@ -0,0 +1,49 @@ +package pers.shawxingkwok.mvb + +import androidx.fragment.app.Fragment +import androidx.fragment.app.testing.launchFragment +import androidx.lifecycle.Lifecycle +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Test +import org.junit.runner.RunWith +import pers.shawxingkwok.mvb.android.rmb +import pers.shawxingkwok.mvb.android.save +import kotlin.test.assertFailsWith + +@RunWith(AndroidJUnit4::class) +internal class Initializer { + @Test + fun callBeforeInitialization(){ + launchFragment(initialState = Lifecycle.State.INITIALIZED).onFragment { + assertFailsWith { it.e } + assertFailsWith { it.f } + } + } + + @Test + fun callValWithoutInitialize(){ + launchFragment(initialState = Lifecycle.State.CREATED).onFragment { + assertFailsWith{ it.a } + assertFailsWith{ it.b } + } + } + + @Test + fun callVarBeforeInitialize(){ + launchFragment(initialState = Lifecycle.State.CREATED).onFragment { + assertFailsWith{ it.c } + assertFailsWith{ it.d } + } + } + + internal class MyFragment : Fragment() { + val e by rmb { 1 } + val f by save { 1 } + + val a: Int by rmb() + val b: Int by save() + + var c: Int by rmb() + var d: Int by save() + } +} \ No newline at end of file diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/Observe.kt b/api/src/androidTest/java/pers/shawxingkwok/mvb/Observe.kt index 431519f..89949a8 100644 --- a/api/src/androidTest/java/pers/shawxingkwok/mvb/Observe.kt +++ b/api/src/androidTest/java/pers/shawxingkwok/mvb/Observe.kt @@ -4,29 +4,25 @@ import android.os.Bundle import androidx.fragment.app.Fragment import androidx.fragment.app.testing.launchFragment import androidx.lifecycle.Lifecycle -import androidx.lifecycle.MutableLiveData import androidx.test.ext.junit.runners.AndroidJUnit4 import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import org.junit.Test import org.junit.runner.RunWith -import pers.shawxingkwok.androidutil.KLog import pers.shawxingkwok.mvb.android.* -private var i = 0 - @RunWith(AndroidJUnit4::class) internal class Observe { @Test fun start(){ launchFragment() - assert(i == 4) } internal class MyFragment : Fragment() { + private val names = mutableListOf() + private fun act(name: String){ - i++ - // KLog.d(name) + names += name assert(lifecycle.currentState == Lifecycle.State.STARTED) } @@ -39,5 +35,42 @@ internal class Observe { super.onCreate(savedInstanceState) z.tryEmit(1) } + + override fun onResume() { + super.onResume() + assertAll(::x, ::y, ::z, ::a){ + assert(it.name in names) + } + } + } +} + +@RunWith(AndroidJUnit4::class) +internal class Observe_ { + + @Test + fun checkObserveFlowOnResume() { + launchFragment() + } + + internal class MyFragment : Fragment(){ + val observedPropNames = mutableListOf() + + private val a by rmb { flowOf(1) }.observe(true){ + observedPropNames += "a" + assert(lifecycle.currentState == Lifecycle.State.RESUMED) + } + + private val b by save { flowOf(1) }.observe(true){ + observedPropNames += "b" + assert(lifecycle.currentState == Lifecycle.State.RESUMED) + } + + override fun onDestroy() { + super.onDestroy() + assertAll("a", "b"){ + assert(it in observedPropNames) + } + } } } \ No newline at end of file diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/Rotate.kt b/api/src/androidTest/java/pers/shawxingkwok/mvb/Rotate.kt index a4d3a25..4692875 100644 --- a/api/src/androidTest/java/pers/shawxingkwok/mvb/Rotate.kt +++ b/api/src/androidTest/java/pers/shawxingkwok/mvb/Rotate.kt @@ -2,12 +2,9 @@ package pers.shawxingkwok.mvb -import android.content.pm.ActivityInfo import android.os.Bundle import androidx.fragment.app.Fragment import androidx.fragment.app.testing.launchFragment -import androidx.lifecycle.SavedStateHandle -import androidx.lifecycle.ViewModel import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Test import org.junit.runner.RunWith @@ -15,37 +12,39 @@ import pers.shawxingkwok.ktutil.allDo import pers.shawxingkwok.mvb.android.rmb import pers.shawxingkwok.mvb.android.save +private var initializationDone = false +private var recreationDone = false + @RunWith(AndroidJUnit4::class) internal class Rotate { - @Test fun start(){ - launchFragment().onFragment{ - it.requireActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE - } + launchFragment().recreate() + assert(initializationDone) + assert(recreationDone) } internal class MyFragment : Fragment(){ - val x by rmb { 1 } - var y by rmb{ 2 } - // or lateinit - var z by rmb<_, Int>() + var x by rmb { 1 } + var y: Int by rmb() - val a by save { 1 } - var b by save { 2 } - // or lateinit - var c by save<_, Int>() + var a by save { 1 } + var b: Int by save() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - allDo(::y, ::z, ::b, ::c){ - if (savedInstanceState == null){ + if (savedInstanceState == null) + allDo(::x, ::y, ::a, ::b){ it.set(2) it.set(it.get() + 1) - }else{ + initializationDone = true + } + else { + assertAll(::x, ::y, ::a, ::b){ assert(it.get() == 3) } + recreationDone = true } } } diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/Synchonize.kt b/api/src/androidTest/java/pers/shawxingkwok/mvb/Synchonize.kt deleted file mode 100644 index b2f64f5..0000000 --- a/api/src/androidTest/java/pers/shawxingkwok/mvb/Synchonize.kt +++ /dev/null @@ -1,49 +0,0 @@ -package pers.shawxingkwok.mvb - -import android.content.pm.ActivityInfo -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import androidx.fragment.app.Fragment -import androidx.fragment.app.testing.launchFragment -import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleEventObserver -import androidx.lifecycle.LifecycleOwner -import androidx.test.ext.junit.rules.ActivityScenarioRule -import androidx.test.ext.junit.runners.AndroidJUnit4 -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import pers.shawxingkwok.androidutil.KLog -import pers.shawxingkwok.mvb.android.rmb -import pers.shawxingkwok.mvb.android.save -import java.util.concurrent.atomic.AtomicInteger - -private val times = AtomicInteger(0) - -@RunWith(AndroidJUnit4::class) -internal class Synchronize { - @Test - fun start(){ - launchFragment() - assert(times.get() == 2) - } - - internal class MyFragment : Fragment(){ - private val x by rmb { times.getAndAdd(1) } - private val y by save { times.getAndAdd(1) } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - runBlocking { - repeat(30){ - launch(Dispatchers.Default) { x; y } - } - } - } - } -} \ No newline at end of file diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/Synchronize.kt b/api/src/androidTest/java/pers/shawxingkwok/mvb/Synchronize.kt new file mode 100644 index 0000000..dcaac73 --- /dev/null +++ b/api/src/androidTest/java/pers/shawxingkwok/mvb/Synchronize.kt @@ -0,0 +1,74 @@ +package pers.shawxingkwok.mvb + +import android.os.Bundle +import androidx.fragment.app.Fragment +import androidx.fragment.app.testing.launchFragment +import androidx.lifecycle.lifecycleScope +import androidx.test.ext.junit.runners.AndroidJUnit4 +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch +import org.junit.Test +import org.junit.runner.RunWith +import pers.shawxingkwok.mvb.android.rmb +import pers.shawxingkwok.mvb.android.save +import java.util.concurrent.atomic.AtomicInteger + +@RunWith(AndroidJUnit4::class) +internal class SynchronizedVal { + @Test + fun start(){ + launchFragment() + } + + internal class MyFragment : Fragment(){ + val times = AtomicInteger(0) + + private val x by rmb { times.getAndAdd(1) } + private val y by save { times.getAndAdd(1) } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + lifecycleScope.launch { + coroutineScope { + repeat(30) { + launch(Dispatchers.Default) { x; y } + } + } + assert(times.get() == 2) + } + } + } +} + +@RunWith(AndroidJUnit4::class) +internal class NotSynchronizedVar { + @Test + fun start(){ + launchFragment() + } + + internal class MyFragment : Fragment(){ + private var x by rmb { 0 } + private var y by save { 0 } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val dest = 1000 + lifecycleScope.launch { + repeat(10) { + launch(Dispatchers.Default) { + repeat(dest / 10) { + x++; y++ + } + } + } + } + .invokeOnCompletion { + assert(x != dest) + assert(y != dest) + } + } + } +} \ No newline at end of file diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/VM.kt b/api/src/androidTest/java/pers/shawxingkwok/mvb/VM.kt new file mode 100644 index 0000000..4617164 --- /dev/null +++ b/api/src/androidTest/java/pers/shawxingkwok/mvb/VM.kt @@ -0,0 +1,40 @@ +package pers.shawxingkwok.mvb + +import android.os.Bundle +import androidx.fragment.app.Fragment +import androidx.fragment.app.testing.launchFragment +import androidx.lifecycle.lifecycleScope +import androidx.test.ext.junit.runners.AndroidJUnit4 +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch +import org.junit.Test +import org.junit.runner.RunWith +import pers.shawxingkwok.mvb.android.MVBViewModel +import pers.shawxingkwok.mvb.android.getMVBVm + +@RunWith(AndroidJUnit4::class) +internal class VM { + @Test + fun start(){ + launchFragment() + } + + class MyFragment : Fragment(){ + private val viewModels = mutableSetOf() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + lifecycleScope.launch { + coroutineScope { + repeat(1000) { + launch(Dispatchers.Default) { + viewModels += getMVBVm() + } + } + } + assert(viewModels.size == 1) + } + } + } +} \ No newline at end of file diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/assertAll.kt b/api/src/androidTest/java/pers/shawxingkwok/mvb/assertAll.kt new file mode 100644 index 0000000..aafec65 --- /dev/null +++ b/api/src/androidTest/java/pers/shawxingkwok/mvb/assertAll.kt @@ -0,0 +1,17 @@ +package pers.shawxingkwok.mvb + +internal inline fun assertAll(vararg args: T, act: (T) -> Unit){ + val throwables = mutableListOf>() + + args.forEach { + try { + act(it) + }catch (t: Throwable){ + throwables += it to t + } + } + + assert(throwables.none()){ + throwables.joinToString(prefix = "\n", separator = "\n") + } +} \ No newline at end of file diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/Container.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/Container.kt new file mode 100644 index 0000000..c4ac846 --- /dev/null +++ b/api/src/main/java/pers/shawxingkwok/mvb/android/Container.kt @@ -0,0 +1,3 @@ +package pers.shawxingkwok.mvb.android + +internal open class Container(var value: Any?) \ No newline at end of file diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/MVBData.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/MVBData.kt index f33e729..b337b78 100644 --- a/api/src/main/java/pers/shawxingkwok/mvb/android/MVBData.kt +++ b/api/src/main/java/pers/shawxingkwok/mvb/android/MVBData.kt @@ -2,12 +2,10 @@ package pers.shawxingkwok.mvb.android import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ViewModelStoreOwner -import pers.shawxingkwok.ktutil.fastLazy import kotlin.properties.ReadWriteProperty import kotlin.reflect.KMutableProperty import kotlin.reflect.KProperty -@Suppress("UNCHECKED_CAST") public open class MVBData internal constructor( private val thisRef: LV, private val initialize: (() -> T)? = null @@ -16,80 +14,51 @@ public open class MVBData internal constructor( { internal val actionsOnDelegate = mutableListOf<(LV, KProperty<*>, String, () -> T) -> Unit>() - internal lateinit var key: String - private set - - internal open val saver: Saver? = null - - @Volatile - private var isInitialized: Boolean = false - - internal val vm by fastLazy(thisRef::getMVBVm) + internal open fun getContainer(key: String, vm: MVBViewModel, getV: () -> Any?) = + vm.map.getOrPut(key){ + Container(getV()) + } public operator fun provideDelegate(thisRef: LV, property: KProperty<*>) : ReadWriteProperty{ - val isMutable = property is KMutableProperty<*> - val propPath = thisRef::class.qualifiedName + "." + property.name - key = propPath - require(isMutable || initialize != null){ - "$propPath can't be immutable with a null `initialize`." - } + val isMutable = property is KMutableProperty<*> - var t: T? = null + val container by lazy( + mode = if (isMutable) LazyThreadSafetyMode.NONE else LazyThreadSafetyMode.SYNCHRONIZED + ){ + getContainer(propPath, thisRef.getMVBVm()) { + if (isMutable) + UNINITIALIZED + else { + requireNotNull(initialize) { + "$propPath can't be immutable with a null `initialize`." + } + initialize.invoke() + } + } + } return object : ReadWriteProperty{ override fun getValue(thisRef: LV, property: KProperty<*>): T { - if (!isInitialized) - synchronized(this){ - if (isInitialized) return@synchronized - - val saver = saver - try { - when{ - saver == null -> { - val v = vm.getValue(key) - - t = - if (v !== UNINITIALIZED) { - v as T - } else - initialize!!().also { vm.setValue(key, it) } - } - - saver.value == UNINITIALIZED -> saver.value = initialize!!() - } - } catch (e: NullPointerException) { - checkNotNull(initialize){ - "At $propPath, the lambda 'initialize' is null, which means you should set " + - "the value before you get it." - } - throw e - } - - isInitialized = true + if (isMutable && container.value === UNINITIALIZED) { + checkNotNull(initialize){ + "At $propPath, the lambda 'initialize' is null, which means you should set " + + "the value before you get it." } - - if (saver != null) - return saver!!.value as T - else - return t as T + container.value = initialize.invoke() + } + @Suppress("UNCHECKED_CAST") + return container.value as T } override fun setValue(thisRef: LV, property: KProperty<*>, value: T) { - isInitialized = true - - t = value - - if (saver != null) - saver!!.value = value - else - vm.setValue(key, value) + container.value = value } } .also { delegate -> actionsOnDelegate.forEach { - it(thisRef, property, key){ + it(thisRef, property, propPath) { delegate.getValue(thisRef, property) } } diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/MVBViewModel.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/MVBViewModel.kt index 0d64f57..5f49184 100644 --- a/api/src/main/java/pers/shawxingkwok/mvb/android/MVBViewModel.kt +++ b/api/src/main/java/pers/shawxingkwok/mvb/android/MVBViewModel.kt @@ -2,21 +2,13 @@ package pers.shawxingkwok.mvb.android import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import java.util.concurrent.ConcurrentHashMap internal class MVBViewModel(val state: SavedStateHandle) : ViewModel() { - private object NULL + // viewModelScope is not thread-safe. + val scope by lazy{ viewModelScope } - private val data = ConcurrentHashMap() - - fun getValue(key: String): Any? = - when(val v = data[key]){ - null -> UNINITIALIZED - NULL -> null - else -> v - } - - fun setValue(key: String, value: Any?){ - data[key] = value ?: NULL - } + // keeps data from `rmb` + val map = ConcurrentHashMap() } \ No newline at end of file diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/Saver.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/Saver.kt index 4cf1819..b874d15 100644 --- a/api/src/main/java/pers/shawxingkwok/mvb/android/Saver.kt +++ b/api/src/main/java/pers/shawxingkwok/mvb/android/Saver.kt @@ -1,59 +1,52 @@ package pers.shawxingkwok.mvb.android -import android.annotation.SuppressLint import android.os.Parcel import android.os.Parcelable import pers.shawxingkwok.ktutil.updateIf import kotlin.reflect.KClass internal class Saver( - var value: Any?, - var convert: ((Any?) -> Any?)? = null + private val parcelableComponent: KClass?, + value: Any?, + var recovered: Boolean, + var convert: ((Any?) -> Any?)? = null, ) - : Parcelable + : Container(value), Parcelable { override fun describeContents(): Int = 0 override fun writeToParcel(dest: Parcel, flags: Int) { - if (value === UNINITIALIZED) return - dest.writeValue(true) + dest.writeSerializable(parcelableComponent?.java) val v: Any? = if (convert != null) convert!!(value) else value dest.writeValue(v) } companion object CREATOR : Parcelable.Creator { - private var parcelableComponent: KClass? = null - private var parcelableLoader: ClassLoader? = null - private var recover: ((Any?) -> Any?)? = null - - fun prepare(parcelableComponent: KClass?, recover: ((Any?) -> Any?)?){ - this.parcelableComponent = parcelableComponent - parcelableLoader = parcelableComponent?.java?.classLoader - this.recover = recover - } - - fun clear(){ - parcelableComponent = null - parcelableLoader = null - recover = null - } - override fun createFromParcel(parcel: Parcel): Saver { - @SuppressLint("ParcelClassLoader") - val tag = parcel.readValue(null) + @Suppress("UNCHECKED_CAST") + val parcelableJavaComponent = + // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) + // parcel.readSerializable(Class::class.java.classLoader, Class::class.java) as Class? + // else + @Suppress("DEPRECATION") + parcel.readSerializable() as Class? val value: Any? = - if (tag == null) - UNINITIALIZED - else - parcel.readValue(parcelableLoader) - // convert Parcelable[] to the actual. - // However, the inner Parcelable[] can't be parsed here. - // This problem could only be fixed by the authority. - .convertParcelableArrayIfNeeded(parcelableComponent) - .updateIf({ recover != null }){ recover!!(it) } - - return Saver(value) + parcel.readValue(parcelableJavaComponent?.classLoader) + .updateIf({ it is Array<*> && it.javaClass.componentType == Parcelable::class.java }){ + // convert Parcelable[] to the actual. + // However, the inner Parcelable[] can't be parsed here. + // This problem could only be fixed by the authority. + + requireNotNull(parcelableJavaComponent){ + "The parcelable component misses." + } + + @Suppress("UNCHECKED_CAST") + (it as Array).convertToActual(parcelableJavaComponent) + } + + return Saver(parcelableJavaComponent?.kotlin, value, false) } override fun newArray(size: Int): Array = arrayOfNulls(size) diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/convertParcelableArrayIfNeeded.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/convertParcelableArrayIfNeeded.kt deleted file mode 100644 index 32d33d2..0000000 --- a/api/src/main/java/pers/shawxingkwok/mvb/android/convertParcelableArrayIfNeeded.kt +++ /dev/null @@ -1,19 +0,0 @@ -package pers.shawxingkwok.mvb.android - -import android.os.Parcelable -import java.util.* -import kotlin.reflect.KClass - -// TODO(rename with `convertIfIsParcelableArray` in the next version) -@Suppress("UNCHECKED_CAST") -@PublishedApi -internal fun T.convertParcelableArrayIfNeeded(parcelableComponent: KClass?): T = - if (this is Array<*> && javaClass.componentType == Parcelable::class.java) { - requireNotNull(parcelableComponent){ - "The parcelable component misses." - } - val newArrClass = java.lang.reflect.Array.newInstance(parcelableComponent.java, size).javaClass as Class> - Arrays.copyOf(this, size, newArrClass) as T - } - else - this \ No newline at end of file diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/convertToActual.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/convertToActual.kt new file mode 100644 index 0000000..222f99d --- /dev/null +++ b/api/src/main/java/pers/shawxingkwok/mvb/android/convertToActual.kt @@ -0,0 +1,13 @@ +package pers.shawxingkwok.mvb.android + +import android.os.Parcelable + +@Suppress("UNCHECKED_CAST") +public fun Array.convertToActual(parcelableJavaComponent: Class): Array { + val newArr = java.lang.reflect.Array.newInstance(parcelableJavaComponent, size) as Array + + for (i in newArr.indices) + newArr[i] = get(i) + + return newArr as Array +} \ No newline at end of file diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/vm.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/getMVBVm.kt similarity index 50% rename from api/src/main/java/pers/shawxingkwok/mvb/android/vm.kt rename to api/src/main/java/pers/shawxingkwok/mvb/android/getMVBVm.kt index 4a466bd..a020684 100644 --- a/api/src/main/java/pers/shawxingkwok/mvb/android/vm.kt +++ b/api/src/main/java/pers/shawxingkwok/mvb/android/getMVBVm.kt @@ -1,12 +1,22 @@ package pers.shawxingkwok.mvb.android +import android.os.Looper import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelStoreOwner +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking -@Synchronized -internal fun ViewModelStoreOwner.getMVBVm(): MVBViewModel = +private fun ViewModelStoreOwner._getMVBVm(): MVBViewModel = try { ViewModelProvider(this)[MVBViewModel::class.java] } catch (e: IllegalStateException) { - error("Mvb values are kept in a viewModel which is not accessible at the moment.\n$e") - } \ No newline at end of file + error("Mvb values are kept in a viewModel which is not accessible at the moment because of $e") + } + +internal fun ViewModelStoreOwner.getMVBVm(): MVBViewModel = + if (Looper.myLooper() != Looper.getMainLooper()) + runBlocking(Dispatchers.Main){ + _getMVBVm() + } + else + _getMVBVm() \ No newline at end of file diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/mvbScope.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/mvbScope.kt index 7e2fb74..8ac8bfc 100644 --- a/api/src/main/java/pers/shawxingkwok/mvb/android/mvbScope.kt +++ b/api/src/main/java/pers/shawxingkwok/mvb/android/mvbScope.kt @@ -1,10 +1,9 @@ package pers.shawxingkwok.mvb.android import androidx.lifecycle.ViewModelStoreOwner -import androidx.lifecycle.viewModelScope import kotlinx.coroutines.CoroutineScope /** * See [doc](https://shawxingkwok.github.io/ITWorks/docs/multiplatform/mvb/android/#mvbscope). */ -public val ViewModelStoreOwner.mvbScope: CoroutineScope get() = getMVBVm().viewModelScope \ No newline at end of file +public val ViewModelStoreOwner.mvbScope: CoroutineScope get() = getMVBVm().scope \ No newline at end of file diff --git a/api/src/main/java/pers/shawxingkwok/mvb/android/save.kt b/api/src/main/java/pers/shawxingkwok/mvb/android/save.kt index 303fdc8..3a6fe93 100644 --- a/api/src/main/java/pers/shawxingkwok/mvb/android/save.kt +++ b/api/src/main/java/pers/shawxingkwok/mvb/android/save.kt @@ -1,13 +1,13 @@ -@file:Suppress("DEPRECATION", "UNCHECKED_CAST") +@file:Suppress("UNCHECKED_CAST") package pers.shawxingkwok.mvb.android import android.os.* -import androidx.core.os.bundleOf import androidx.lifecycle.* import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow +import pers.shawxingkwok.ktutil.updateIf import java.io.Serializable import java.util.* import kotlin.reflect.KClass @@ -35,30 +35,25 @@ public class SavableMVBData @PublishedApi internal constructor( @PublishedApi internal var convert: ((Any?) -> Any?)? = null @PublishedApi internal var recover: ((Any?) -> Any?)? = null - override val saver by lazy(Saver.CREATOR){ - val state = vm.state - when(val bundle = state.get(key)){ - null -> Saver(UNINITIALIZED, convert).also { state[key] = bundleOf("" to it) } - else -> { - Saver.prepare( - parcelableComponent = parcelableComponent ?: savedType.parcelableComponent, - recover = recover, - ) - - val saver = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) - bundle.getParcelable("", Saver::class.java)!! - else - bundle.getParcelable("")!! - - Saver.clear() - - // update [convert] to remove any possible reference to old [thisRef]. - saver.convert = convert - saver + override fun getContainer(key: String, vm: MVBViewModel, getV: () -> Any?): Saver = + synchronized(vm.state) { + vm.state.get(key)?.let { return@synchronized it } + + val parcelableComponent = parcelableComponent ?: savedType.parcelableComponent + val saver = Saver(parcelableComponent, getV(), true) + vm.state[key] = saver + saver + } + .also { + if (!it.recovered) { + it.recovered = true + if (recover != null) + it.value = recover!!(it.value) } + + // always update [convert] to remove any possible reference to the old [thisRef]. + it.convert = convert } - } } /** @@ -124,7 +119,6 @@ public inline fun LV.saveMutableStateFlow( /** * See [doc](https://shawxingkwok.github.io/ITWorks/docs/multiplatform/mvb/android/#save). */ -@Suppress("NAME_SHADOWING") public inline fun LV.saveMutableSharedFlow( parcelableComponent: KClass? = null, replay: Int = 0, @@ -143,9 +137,16 @@ public inline fun LV.saveMutableSharedFlow( recover = { cache -> val flow = MutableSharedFlow(replay, extraBufferCapacity, onBufferOverflow) - val parcelableComponent = parcelableComponent ?: T::class.parcelableComponent - - cache.map{ it.convertParcelableArrayIfNeeded(parcelableComponent) } + // This function is from "io.github.shawxingkwok:kt-util:1.0.2" + cache.updateIf({ + val componentType = T::class.java.componentType ?: return@updateIf false + Parcelable::class.java.isAssignableFrom(componentType) + }){ + it.map { arr -> + val componentType = T::class.java.componentType as Class + (arr as Array).convertToActual(componentType) as T + } + } .forEach(flow::tryEmit) flow diff --git a/api/src/test/java/pers/shawxingkwok/mvb/ExampleUnitTest.kt b/api/src/test/java/pers/shawxingkwok/mvb/ExampleUnitTest.kt deleted file mode 100644 index b90da22..0000000 --- a/api/src/test/java/pers/shawxingkwok/mvb/ExampleUnitTest.kt +++ /dev/null @@ -1,10 +0,0 @@ -package pers.shawxingkwok.mvb - -import org.junit.Test - -internal class ExampleUnitTest{ - @Test - fun start(){ - println(null + "i") - } -} \ No newline at end of file diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab index 677034459976d7f2504ca9645f5ee8e0ea047ef2..66a7f21f74a7379a253966ecb96a0a1cd465696f 100644 GIT binary patch delta 68 zcmZorXi#9C?X#PYVIr%(Bm)pILNSO90_;G{JJHvkOZ@-;|MP&HPah^ulVf@N;Q#-P L2krSM7H|Rp$s`hk delta 68 zcmZorXi#9C?X#PYbt0?2q%Z>m10xgzDKKCMk_r=j?YUMT`Tu_&kkhtp;xsvylB56s MZ#-zvKe2!l0LW$$%>V!Z diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at index 52ea58d630ec54ff53afeecd9cade47480b099f5..d589074e3aef4e913d1085de86afbdbd3701afd6 100644 GIT binary patch delta 8 PcmZo!!+6_%!)+q5*9`3P}I} diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab index 843edce02c4440937c85bc2058d2526c0a25f576..364353199ed1b1680d679a467eeb91b27d1823c8 100644 GIT binary patch delta 72 zcmZorXi#9C?X#PYVIr%(Bm)pILNSO90^C3>I?*>=^3ebP|4#xr`+@W)AiW1j>i|{n J+_=}79{@E96xjd( delta 72 zcmZorXi#9C?X#PYbt0?2Bo6}v10xgzDKOv$lJh6}hD$E_|Ns9V+HkI`abnMu`I?*>=YRSL<|4#xrfk65bkY)nXIzZKn K{%+jo#18;9M-+De delta 73 zcmZorXi#9C?X#PYbt0?2q!0rG10xgzDKOv$l7$m}!==i9{r`Uw$O-)S|Nkc-ZSnj6 Pe;uG|m0uh8Iq?GkK~WTI diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at index acdaf987b238f4661c1ffd77cbb3831569c68371..b7583ceff759cd067b62aaec9a06328c94b199b4 100644 GIT binary patch delta 7 OcmdnP^MzwW2@3!XQv&S( delta 69 zcmeyuv4>|v2@7)|L%`&XjIMlcMTzOTsd*)O*(Grdu|Of4$u>+)*rekb;=s~#n3Mo6 CUKa-d diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab index 8d18f89c3342b2c3c2b51ca0b4698cd86a99b5b1..1db68e283a46acfaf8c64354c97743ac028a2875 100644 GIT binary patch literal 4096 zcmeIwJ1B)=9LMp$`@wNp6r~hG78w*7)X8v?36nAylxtXI5z0Uo8AL2%B4rSRG8o8$ z%|K)@DEG^8_w#+@l*w#({`I_{=hoBH?|r7L*OQGZ^FHB9{q6)K%?9X-@@9VTiD2xt zaCvLpKZD=%;q|}V<@_u*j9?Heu?s_=(hSbyDb`?~cR1GK(ucH+^_aw6O+aY#DCQOxj}m0}&9J#v2>M}NFo1(x8=gVc#*xPV0%kzlraFSTO_ z9-tosiDrv;(h^o-y5H>lR_euJ+{S$LCz);CkQ+AP6h`9-&Rvr$uONUOczPur;s9o+ zm}OxbZd^*M*nq88u~pk9+NGdF5ky3A5kW9GSc=dL;?T5{lelQ>N2aPBq7Dv%iwII} zmwTuvt>P0{Ea~R){e2+N~yD+;hWiW;>pYZ)SkIQMPBw*Hx{dh^RNu0t!(5xOK znE576;Rnp(GpsB!TUe92F@k$|x+;|yn~mdptii9CPH{olgPr^|4#xrcHjR0{{*C;efj@i a2dH|=$N&G+fpo*`|Nl2$)aRdAzzG175*#f6 delta 86 zcmZorXi#9C?X#PYVcu}8!VgV-rb3Ypa diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at index a18e29c577d9fd5a27ed7e5c5dc6764324e0eb55..8b9de65f65c48394bd680a723cad5c2304cb6e36 100644 GIT binary patch delta 7 OcmdlOzesb#A`t)%P6I*! delta 31 kcmZ3axiNmjB9YD7EYnyg*NZ4`mgMf_1oJj$^O>^&0J_-rzzV!6} O|Jy)X^4i92Ui<(fq!Y&g diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at index 6ba74c55c983f3b0c0b07cf0dbaacc5cc584723b..81410193b9f141b2f43efa976d193fdb47f93718 100644 GIT binary patch delta 7 OcmcbUv{hw;sSp4T`~wdF delta 36 scmdn0awlnnsSwLoc?O-yjI27FcQc+~-@KReAp7QS#vkmPIk?K$0sC?d7XSbN diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab index c1bfc310d182ecd9bd5f88e52e9ad834920562e7..08d57418a9f5824906fe874c29b5f2ba9bbe3d45 100644 GIT binary patch delta 71 zcmZorXiyNG?X#PY0SMSY1PDwNRF(wMj8F_>g8)bY_e5WFrgQ%%wyCjL{QLiZ<3@je GMg{;|Aq^7% delta 71 zcmZorXiyNG?X#PYnSp_U4TwQt>O?_hNe&=`5sE>AAOKP@VWO`&Q}3UNZE7rRfB*mA KxY3`VkpTdI3=P2m diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at index 2121c5d3bd28c885980dd454262bf46f55a2297e..63fdabb10293897a2ae1c746e860b33a378c4b12 100644 GIT binary patch delta 7 Ocmcb^-psOrnF#<2>;fPF delta 75 zcmZo>xx>DJnTbXB61&dCMCpnCg3MDHAS@q7n20V^M2LyOa$=$pr(;TDK}l+nb@s#r KYvv4FsB!=+R~6p? diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab index ee2f66c5cd5d85bf23083ea9ad0e03abc2eb6d90..727c194a46da9ac6c9d764bb5cc649b5a9d5ccb7 100644 GIT binary patch delta 65 zcmZorXi#9C?X#PYVIr%(Bm)pILNSO90-QiBJJHu)$p8QU{|kT|Js^DxNdNk`aa|BU E0F+}8m10xgzDKOv!lKUq5`V0N~`~Uv}AjkjT|Npmu^v%B; I*9Gwd0J*&qL;wH) diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at index 0110d5878001658f3c90dcf92ef220e54131b79a..24f7f307ee5a86290e88c71e2d7bbbd61c362c95 100644 GIT binary patch delta 7 OcmX@k($Bo1pAi5HmI9st delta 16 WcmeBYKF+eCpK;=bvWXiMfd~LQ69*Xp diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab index 9153a30..3d952e7 100644 --- a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +++ b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab @@ -1,2 +1,2 @@ -12 +7 0 \ No newline at end of file diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab index 5e286ba695860d598672cc69fd109e84a8a81276..e365ceecdd7f2f924d703f71473d8754354b8b1d 100644 GIT binary patch delta 78 zcmZorXi#9C?X#PYVIr%(Bm)pILNSO90_;F6Jki%*X3zis{|$h$+kkW}klp~KZv*L7 NKzidrd;W<9oB*=M7)}5H delta 78 zcmZorXi#9C?X#PYbt0?2q!9Y2 P?g7#p58CrjEZ_tHw6Pc^ diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at index 09947d11cdfdfc2105bf384a33da41b1d5ac8ca7..25454f32baadef9abd2a46657e796ddb67161bb6 100644 GIT binary patch delta 4 Lcmb=7o)8TH1atww delta 35 bcma#9oDeO?!T<#9V3Gq&a)L=NFv$%7L9GHG diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab index df14575d891a39000916da145569399807590aa4..be196eb5721c755eb0e1f344787f83fce3fb9ab3 100644 GIT binary patch literal 4096 zcmeH@-3>r66h{4fkcfQ@;Kfj0E#So>5<6H!3_+cy+ISKJd|z^VZZ9o4bHCORDedCZ zxMl$ZWr&@;--#JhAq8Fa?EHKPPrsXu`|X(#Ca{GmJT7B0IKdot(0*q>-T%-kG9Uvo XAOkWW12P~3G9UvoAOkWW13wJhXM`cp literal 4096 zcmeH@!3}~y5Jgv1R5Zjh7fbNqkrt@N3b@*U7fPWAYoHKdd=r;F(t!Ubvu|bzo5|~% zzTAfp4phqZ*A1YhjDT?QgH+UpYbxbTcaPI@-=?qY&4>5>pBKzv4Yv^34!&nI-_hqh t()acG2p^N#Db59aj%L2k4FW|5WIzUFKn7$$24p}6WIzUFKnDKaz!&TOH3t9y diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream index 82dcce2b420f9ba63317e4a82aff093b2c8afbc0..2459ed687d441aba38ffb9935e376d2ba65878a1 100644 GIT binary patch delta 19 acmZorXi#8hU}R!uVP)GW_?~~F0v7-yr~}vl delta 24 fcmZorXi(r`U}R!uVP#|I;N;@oDEOX#q5>-bERX~R diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len index 1ff194f2e9051d3504a0a2f471c66d87c2e41e59..379d85ced69049230006887a8ba1241e30c6e7df 100644 GIT binary patch literal 8 LcmZQz00VXa01p5N literal 8 LcmZQz00SNX02BZX diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len index a363176c8cf9dbf2868dabc2a7c34c549945aa8a..817b326d9eb94f6a38f5e047201a69ab944ef476 100644 GIT binary patch literal 8 LcmZQz0D~O>0Kfpb literal 8 LcmZQz0D}hr0O$bW diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at index eaea8d6cb98f9e603664e4b8a6a9b157752c0d06..20c15e656bff04252f60eb14b510322ff440ce27 100644 GIT binary patch delta 7 OcmX@e@snjkB@+M*ZvyfF delta 55 vcmey#a*$&~B@=TXL%`%5M%T%4jNHs|46#7A&E)TlO(^2=3~^xba3&=H)=Cf0 diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i index 8452381f854a744c97503a27560db444c9db7697..0667ccd230691e805561eaf82040d187c95dd0f2 100644 GIT binary patch delta 19 acmZo@U}|V!Vq##M$Yi&%q^Evjg9!jRhXzvs delta 54 ycmZo@U}|V!Vq)N)$YiIwgMop89f%JAF$WNz0Afxcz5v8rKzsv;xi>n_t_J}9a0w{@ diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab b/demo/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab index e5b5a91f433ec786857c3bb437dfc8d4f1d09564..601bec3edb7dda7fe30ad2b130db257250daeb35 100644 GIT binary patch literal 16384 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 PZvwpu^d|6sD}nz44js9y literal 16384 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 diff --git a/demo/build/kotlin/compileDebugKotlin/cacheable/last-build.bin b/demo/build/kotlin/compileDebugKotlin/cacheable/last-build.bin index e7a0543d63d33a45c2502c1ada17c254e8f042ea..90e3a45fb925c81e8a0528cfd8f70c0d69d42129 100644 GIT binary patch literal 18 YcmZ4UmVvdLhk=2yYq6eVAp;Nq05VAgFaQ7m literal 18 YcmZ4UmVvdLhk=2yt7Gf$84N%G06IYheEpru6O zFZcx-#0StY>zsW~Odxk-t()_?cr$PI&70ZJKjGFXz)e^`_~Ly$*}omNAMh7H%zk|L z@a-OWAsj44shK|Ft7EB>bXBA*ujecldBKV@k&0*gF<%-{vX`Z7{!dGu%=au2}Ow0^7Vwx2zq_*HyW^B?9gM|)*-MxHL zaR1s>1#jXoQ*X~@umB!kyADIOONC8P^GsXiLP_brOrK}F@Xf7{eJf}*kBU>Yq3UUNmD0(Z1ro>n-HcZLp6 zVgflqV7(r{YWKUaB{>z@p1q)dIQ#a?UeIp<=_a>X-B(}FukhO}?>0Qex(JiNmf*|p JPqqZj^9P;kLOTEe diff --git a/demo/build/outputs/logs/manifest-merger-debug-report.txt b/demo/build/outputs/logs/manifest-merger-debug-report.txt index 938dbed..085e444 100644 --- a/demo/build/outputs/logs/manifest-merger-debug-report.txt +++ b/demo/build/outputs/logs/manifest-merger-debug-report.txt @@ -4,56 +4,56 @@ ADDED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:2:1-26:12 INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:2:1-26:12 INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:2:1-26:12 -MERGED from [com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.1.0] /Users/william/.gradle/caches/transforms-3/f90fad5196541eca1f585bd33ce0c308/transformed/viewbinding-nonreflection-ktx-2.1.0/AndroidManifest.xml:2:1-7:12 +MERGED from [com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.1.0] /Users/william/.gradle/caches/transforms-3/934c3c1bbe22588ee6b026cd97e4dd8f/transformed/viewbinding-nonreflection-ktx-2.1.0/AndroidManifest.xml:2:1-7:12 MERGED from [:api] /Users/william/IdeaProjects/library/MVB/api/build/intermediates/merged_manifest/debug/AndroidManifest.xml:2:1-7:12 -MERGED from [io.github.shawxingkwok:android-util-view:1.0.8] /Users/william/.gradle/caches/transforms-3/8d6c79f439e6cb17dd31d435c8538560/transformed/android-util-view-1.0.8/AndroidManifest.xml:2:1-7:12 -MERGED from [androidx.databinding:databinding-adapters:4.2.1] /Users/william/.gradle/caches/transforms-3/b0bde3a70dfb6dbfd87be4920351c017/transformed/databinding-adapters-4.2.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.databinding:databinding-runtime:4.2.1] /Users/william/.gradle/caches/transforms-3/9dea30880016b4bab692df3339f7eac7/transformed/databinding-runtime-4.2.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.databinding:viewbinding:7.4.2] /Users/william/.gradle/caches/transforms-3/54427404d4ca75ebc80859a5de6345d4/transformed/viewbinding-7.4.2/AndroidManifest.xml:2:1-7:12 -MERGED from [io.github.shawxingkwok:android-util-core:1.0.1] /Users/william/.gradle/caches/transforms-3/f2302e3a9bc9412f1386bd77b3a4e36b/transformed/android-util-core-1.0.1/AndroidManifest.xml:2:1-8:12 -MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/50a58ec07edc5e64d9ba360e7b335260/transformed/material-1.9.0/AndroidManifest.xml:17:1-26:12 -MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/2261a49531d6a4c06523672f7d6e52b1/transformed/constraintlayout-2.1.4/AndroidManifest.xml:2:1-11:12 -MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/william/.gradle/caches/transforms-3/936c29078521b5a004923a30f719210f/transformed/appcompat-resources-1.6.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/william/.gradle/caches/transforms-3/a8cf4600b83e473257cd282282bdefe4/transformed/appcompat-1.6.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.viewpager2:viewpager2:1.0.0] /Users/william/.gradle/caches/transforms-3/09b45fcef11f321970d6bb31d4449915/transformed/viewpager2-1.0.0/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.fragment:fragment:1.3.6] /Users/william/.gradle/caches/transforms-3/796b2c1c6acbc51ea501c4354d28c3d5/transformed/fragment-1.3.6/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.activity:activity:1.6.0] /Users/william/.gradle/caches/transforms-3/46cb9b733f8ee7d19dd4524d5e56e58b/transformed/activity-1.6.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/william/.gradle/caches/transforms-3/7b245d7020ac5e1ecf422b792403e8c3/transformed/emoji2-views-helper-1.2.0/AndroidManifest.xml:2:1-7:12 -MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:17:1-35:12 -MERGED from [androidx.savedstate:savedstate:1.2.1] /Users/william/.gradle/caches/transforms-3/434de4efa7546164feae20db84e91cc7/transformed/savedstate-1.2.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.dynamicanimation:dynamicanimation:1.0.0] /Users/william/.gradle/caches/transforms-3/29963e0c0f2b6248eb296c5f5c9f82bc/transformed/dynamicanimation-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] /Users/william/.gradle/caches/transforms-3/c64491efda79551c708450bfec8262d4/transformed/legacy-support-core-utils-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.loader:loader:1.0.0] /Users/william/.gradle/caches/transforms-3/1c07059dc3ca0905b4747d1523030705/transformed/loader-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.lifecycle:lifecycle-livedata:2.6.1] /Users/william/.gradle/caches/transforms-3/3eab73dd0aae9aa4071af7af54d5e831/transformed/lifecycle-livedata-2.6.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.6.1] /Users/william/.gradle/caches/transforms-3/137525875e3452741b08e81db9dc6cf4/transformed/lifecycle-livedata-core-2.6.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:17:1-35:12 -MERGED from [androidx.lifecycle:lifecycle-runtime-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/ada95da77bf5a1cc8166bd8a907f351f/transformed/lifecycle-runtime-ktx-2.6.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1] /Users/william/.gradle/caches/transforms-3/3d4d89a54556879d21485ca84e3c3934/transformed/lifecycle-viewmodel-savedstate-2.6.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.core:core-ktx:1.10.1] /Users/william/.gradle/caches/transforms-3/46d68fb3eca9c7f7c4545311915434c1/transformed/core-ktx-1.10.1/AndroidManifest.xml:2:1-7:12 -MERGED from [androidx.drawerlayout:drawerlayout:1.1.1] /Users/william/.gradle/caches/transforms-3/44582b63ff9861eccf2d2293ce7dcf31/transformed/drawerlayout-1.1.1/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.1.0] /Users/william/.gradle/caches/transforms-3/593d30596a57429c890d725dbf12e2ab/transformed/coordinatorlayout-1.1.0/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.transition:transition:1.2.0] /Users/william/.gradle/caches/transforms-3/467dba190cccf2709a7813ef37bb95bb/transformed/transition-1.2.0/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/william/.gradle/caches/transforms-3/b7a3fe0134f4107fdf8706e37a0540c5/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/william/.gradle/caches/transforms-3/46f75f9181a594d5b702827cbd754668/transformed/vectordrawable-1.1.0/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/william/.gradle/caches/transforms-3/add7cfe72adb8e2fe6edc15ad92c4f4f/transformed/viewpager-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.recyclerview:recyclerview:1.1.0] /Users/william/.gradle/caches/transforms-3/314b4be711c5b7bd405babf4f3ff3be3/transformed/recyclerview-1.1.0/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.customview:customview:1.1.0] /Users/william/.gradle/caches/transforms-3/470275a4cf0a860359a070236e33fa40/transformed/customview-1.1.0/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:17:1-30:12 -MERGED from [androidx.lifecycle:lifecycle-runtime:2.6.1] /Users/william/.gradle/caches/transforms-3/cf2be6bfad30ca4aa28729847cdd8086/transformed/lifecycle-runtime-2.6.1/AndroidManifest.xml:2:1-7:12 -MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.6.1] /Users/william/.gradle/caches/transforms-3/73bd455e7f6485e923280e0613f01671/transformed/lifecycle-viewmodel-2.6.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/a4bbfcab1df537f85c77c9bf5d2ee761/transformed/lifecycle-viewmodel-ktx-2.6.1/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/william/.gradle/caches/transforms-3/43135f343cb419dec49ba280c077cfb7/transformed/cursoradapter-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.cardview:cardview:1.0.0] /Users/william/.gradle/caches/transforms-3/47c0be75ab605667774fcc4a024139ac/transformed/cardview-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/william/.gradle/caches/transforms-3/ff18035182dbd7d06a6441b142091ee2/transformed/interpolator-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/32006f33a780552c7e3a54264c98aa7e/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:17:1-27:12 -MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:17:1-55:12 -MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/8ee2154752a02afcb8432d0f22049e3b/transformed/startup-runtime-1.1.1/AndroidManifest.xml:17:1-33:12 -MERGED from [androidx.tracing:tracing:1.0.0] /Users/william/.gradle/caches/transforms-3/4c958b4453aac1d266d94a82be11f1ad/transformed/tracing-1.0.0/AndroidManifest.xml:17:1-24:12 -MERGED from [androidx.arch.core:core-runtime:2.2.0] /Users/william/.gradle/caches/transforms-3/7afe4d1c29fce7f7d8270f3ff060fcc2/transformed/core-runtime-2.2.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.documentfile:documentfile:1.0.0] /Users/william/.gradle/caches/transforms-3/d073559dc2b76b61c99c92605f29cca3/transformed/documentfile-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] /Users/william/.gradle/caches/transforms-3/b359ef0b42759fd92b33d0bbb006ac1d/transformed/localbroadcastmanager-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.print:print:1.0.0] /Users/william/.gradle/caches/transforms-3/b8f1552f504d18eda482ce5b561c62e7/transformed/print-1.0.0/AndroidManifest.xml:17:1-22:12 -MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/william/.gradle/caches/transforms-3/1fe2c14345ac1b64d0365b80354bdf84/transformed/annotation-experimental-1.3.0/AndroidManifest.xml:17:1-22:12 +MERGED from [io.github.shawxingkwok:android-util-view:1.0.8] /Users/william/.gradle/caches/transforms-3/59277119e721c7714588701d6e567923/transformed/android-util-view-1.0.8/AndroidManifest.xml:2:1-7:12 +MERGED from [androidx.databinding:databinding-adapters:4.2.1] /Users/william/.gradle/caches/transforms-3/1672e31114efcb1860016b54613f3a83/transformed/databinding-adapters-4.2.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.databinding:databinding-runtime:4.2.1] /Users/william/.gradle/caches/transforms-3/607a63d8a3a9cc43b3cd07c8c6185006/transformed/databinding-runtime-4.2.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.databinding:viewbinding:7.4.2] /Users/william/.gradle/caches/transforms-3/cf2346604e3dd4a6e4256ecfe1fef4fb/transformed/viewbinding-7.4.2/AndroidManifest.xml:2:1-7:12 +MERGED from [io.github.shawxingkwok:android-util-core:1.0.1] /Users/william/.gradle/caches/transforms-3/c64f6ffd65dc512dc408dd1a4ad68656/transformed/android-util-core-1.0.1/AndroidManifest.xml:2:1-8:12 +MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/6c4da21f7461681397396b376f3c636b/transformed/material-1.9.0/AndroidManifest.xml:17:1-26:12 +MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/9d44991d9f578bd2ea9a8c68006fc3b2/transformed/constraintlayout-2.1.4/AndroidManifest.xml:2:1-11:12 +MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/william/.gradle/caches/transforms-3/3ecd725d8921886934c5255a7d198a3a/transformed/appcompat-resources-1.6.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/william/.gradle/caches/transforms-3/27fefee92c9a894975ae8e26f491cab7/transformed/appcompat-1.6.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.viewpager2:viewpager2:1.0.0] /Users/william/.gradle/caches/transforms-3/5c148a4e9269fc88c0db11938fbaa72c/transformed/viewpager2-1.0.0/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.fragment:fragment:1.3.6] /Users/william/.gradle/caches/transforms-3/841508cd6a2b3c61e7ff994e6185b924/transformed/fragment-1.3.6/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.activity:activity:1.6.0] /Users/william/.gradle/caches/transforms-3/1e01d21ecd5478b6cbdd559b95e3cf02/transformed/activity-1.6.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/william/.gradle/caches/transforms-3/1498f1d3b609a58003240d4b81a80bf0/transformed/emoji2-views-helper-1.2.0/AndroidManifest.xml:2:1-7:12 +MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:17:1-35:12 +MERGED from [androidx.savedstate:savedstate:1.2.1] /Users/william/.gradle/caches/transforms-3/c7c8e2b48f30594e920c01621502f915/transformed/savedstate-1.2.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.dynamicanimation:dynamicanimation:1.0.0] /Users/william/.gradle/caches/transforms-3/cbbb567c1d04ddd6fed224e4677cda23/transformed/dynamicanimation-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] /Users/william/.gradle/caches/transforms-3/f74983d6ebc7e5c91bf3ac596371736b/transformed/legacy-support-core-utils-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.loader:loader:1.0.0] /Users/william/.gradle/caches/transforms-3/5cad54bcb579bcbf6782f8f5caa10fec/transformed/loader-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.lifecycle:lifecycle-livedata:2.6.1] /Users/william/.gradle/caches/transforms-3/e4450545343105dad2494ad2bc18ce86/transformed/lifecycle-livedata-2.6.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.6.1] /Users/william/.gradle/caches/transforms-3/b4ac00736e9cbede55ba00321fb01e63/transformed/lifecycle-livedata-core-2.6.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:17:1-35:12 +MERGED from [androidx.lifecycle:lifecycle-runtime-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/1e0e397dbdb680f7774210bf8b1f9a04/transformed/lifecycle-runtime-ktx-2.6.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1] /Users/william/.gradle/caches/transforms-3/38ed6a3d11a989a581c2775b74ee76bc/transformed/lifecycle-viewmodel-savedstate-2.6.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.core:core-ktx:1.10.1] /Users/william/.gradle/caches/transforms-3/dad0a392f709c6a3a8f38d03c1a89af1/transformed/core-ktx-1.10.1/AndroidManifest.xml:2:1-7:12 +MERGED from [androidx.drawerlayout:drawerlayout:1.1.1] /Users/william/.gradle/caches/transforms-3/b5caab96b381265fcca310549e1f4a6a/transformed/drawerlayout-1.1.1/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.1.0] /Users/william/.gradle/caches/transforms-3/bfc83456dd71122784c935fa1fb80cfa/transformed/coordinatorlayout-1.1.0/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.transition:transition:1.2.0] /Users/william/.gradle/caches/transforms-3/ec94a177b564fb669064c4d59ac25ff7/transformed/transition-1.2.0/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/william/.gradle/caches/transforms-3/1ecf9b1ec09c8e423bd26f10243cded7/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/william/.gradle/caches/transforms-3/4bbd1ab2a5583af82340da80d16e5c67/transformed/vectordrawable-1.1.0/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/william/.gradle/caches/transforms-3/b9659de07e4c138567d24012d102b8ad/transformed/viewpager-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.recyclerview:recyclerview:1.1.0] /Users/william/.gradle/caches/transforms-3/439899cc903b35082403408a42c9108f/transformed/recyclerview-1.1.0/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.customview:customview:1.1.0] /Users/william/.gradle/caches/transforms-3/0694708cda6f4f025db692a3e03eed82/transformed/customview-1.1.0/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:17:1-30:12 +MERGED from [androidx.lifecycle:lifecycle-runtime:2.6.1] /Users/william/.gradle/caches/transforms-3/de7aeb6d057595d7aa24972cd595bced/transformed/lifecycle-runtime-2.6.1/AndroidManifest.xml:2:1-7:12 +MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.6.1] /Users/william/.gradle/caches/transforms-3/9923668b33ec453af9d7196c1b923808/transformed/lifecycle-viewmodel-2.6.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/c772e7a2f87ea9520c8500768e8c1ff3/transformed/lifecycle-viewmodel-ktx-2.6.1/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/william/.gradle/caches/transforms-3/ca9ed38e9d34feaf7c98fbbb7ebcc9dd/transformed/cursoradapter-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.cardview:cardview:1.0.0] /Users/william/.gradle/caches/transforms-3/a33095467b254ed28e0ab100131f3134/transformed/cardview-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/william/.gradle/caches/transforms-3/46b855c1c7a7528bb092add11515ed0f/transformed/interpolator-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/71fdcd4507a3822ad33bb8bd050d9777/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:17:1-27:12 +MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:17:1-55:12 +MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/25a16c30bfd44f463ea6c88662c83356/transformed/startup-runtime-1.1.1/AndroidManifest.xml:17:1-33:12 +MERGED from [androidx.tracing:tracing:1.0.0] /Users/william/.gradle/caches/transforms-3/d834119c6bb4f8f4fd37805039fda4fd/transformed/tracing-1.0.0/AndroidManifest.xml:17:1-24:12 +MERGED from [androidx.arch.core:core-runtime:2.2.0] /Users/william/.gradle/caches/transforms-3/8455c8d07e0dc79bc24dd4b49a4b77f9/transformed/core-runtime-2.2.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.documentfile:documentfile:1.0.0] /Users/william/.gradle/caches/transforms-3/db04f64b4e155b1aa84bcc06dd613641/transformed/documentfile-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] /Users/william/.gradle/caches/transforms-3/8e2d5123c058835e87c116a368bfa802/transformed/localbroadcastmanager-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.print:print:1.0.0] /Users/william/.gradle/caches/transforms-3/6d3f2765ab1545636081ae38fcc4a046/transformed/print-1.0.0/AndroidManifest.xml:17:1-22:12 +MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/william/.gradle/caches/transforms-3/ff24c63ebe37f88151450d4be8245cf8/transformed/annotation-experimental-1.3.0/AndroidManifest.xml:17:1-22:12 INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:2:1-26:12 INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:2:1-26:12 INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:2:1-26:12 @@ -75,24 +75,24 @@ INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManif ADDED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:2:11-69 application ADDED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:5:5-24:19 -MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/50a58ec07edc5e64d9ba360e7b335260/transformed/material-1.9.0/AndroidManifest.xml:24:5-20 -MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/50a58ec07edc5e64d9ba360e7b335260/transformed/material-1.9.0/AndroidManifest.xml:24:5-20 -MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/2261a49531d6a4c06523672f7d6e52b1/transformed/constraintlayout-2.1.4/AndroidManifest.xml:9:5-20 -MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/2261a49531d6a4c06523672f7d6e52b1/transformed/constraintlayout-2.1.4/AndroidManifest.xml:9:5-20 -MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:23:5-33:19 -MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:23:5-33:19 -MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:23:5-33:19 -MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:23:5-33:19 -MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:28:5-89 -MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:28:5-89 -MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/32006f33a780552c7e3a54264c98aa7e/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:24:5-25:19 -MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/32006f33a780552c7e3a54264c98aa7e/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:24:5-25:19 -MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:23:5-53:19 -MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:23:5-53:19 -MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/8ee2154752a02afcb8432d0f22049e3b/transformed/startup-runtime-1.1.1/AndroidManifest.xml:25:5-31:19 -MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/8ee2154752a02afcb8432d0f22049e3b/transformed/startup-runtime-1.1.1/AndroidManifest.xml:25:5-31:19 +MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/6c4da21f7461681397396b376f3c636b/transformed/material-1.9.0/AndroidManifest.xml:24:5-20 +MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/6c4da21f7461681397396b376f3c636b/transformed/material-1.9.0/AndroidManifest.xml:24:5-20 +MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/9d44991d9f578bd2ea9a8c68006fc3b2/transformed/constraintlayout-2.1.4/AndroidManifest.xml:9:5-20 +MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/9d44991d9f578bd2ea9a8c68006fc3b2/transformed/constraintlayout-2.1.4/AndroidManifest.xml:9:5-20 +MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:23:5-33:19 +MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:23:5-33:19 +MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:23:5-33:19 +MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:23:5-33:19 +MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:28:5-89 +MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:28:5-89 +MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/71fdcd4507a3822ad33bb8bd050d9777/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:24:5-25:19 +MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/71fdcd4507a3822ad33bb8bd050d9777/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:24:5-25:19 +MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:23:5-53:19 +MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:23:5-53:19 +MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/25a16c30bfd44f463ea6c88662c83356/transformed/startup-runtime-1.1.1/AndroidManifest.xml:25:5-31:19 +MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/25a16c30bfd44f463ea6c88662c83356/transformed/startup-runtime-1.1.1/AndroidManifest.xml:25:5-31:19 android:appComponentFactory - ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:28:18-86 + ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:28:18-86 android:supportsRtl ADDED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml:12:13-39 android:label @@ -131,106 +131,106 @@ uses-sdk INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml reason: use-sdk injection requested INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml -MERGED from [com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.1.0] /Users/william/.gradle/caches/transforms-3/f90fad5196541eca1f585bd33ce0c308/transformed/viewbinding-nonreflection-ktx-2.1.0/AndroidManifest.xml:5:5-44 -MERGED from [com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.1.0] /Users/william/.gradle/caches/transforms-3/f90fad5196541eca1f585bd33ce0c308/transformed/viewbinding-nonreflection-ktx-2.1.0/AndroidManifest.xml:5:5-44 +MERGED from [com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.1.0] /Users/william/.gradle/caches/transforms-3/934c3c1bbe22588ee6b026cd97e4dd8f/transformed/viewbinding-nonreflection-ktx-2.1.0/AndroidManifest.xml:5:5-44 +MERGED from [com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx:2.1.0] /Users/william/.gradle/caches/transforms-3/934c3c1bbe22588ee6b026cd97e4dd8f/transformed/viewbinding-nonreflection-ktx-2.1.0/AndroidManifest.xml:5:5-44 MERGED from [:api] /Users/william/IdeaProjects/library/MVB/api/build/intermediates/merged_manifest/debug/AndroidManifest.xml:5:5-44 MERGED from [:api] /Users/william/IdeaProjects/library/MVB/api/build/intermediates/merged_manifest/debug/AndroidManifest.xml:5:5-44 -MERGED from [io.github.shawxingkwok:android-util-view:1.0.8] /Users/william/.gradle/caches/transforms-3/8d6c79f439e6cb17dd31d435c8538560/transformed/android-util-view-1.0.8/AndroidManifest.xml:5:5-44 -MERGED from [io.github.shawxingkwok:android-util-view:1.0.8] /Users/william/.gradle/caches/transforms-3/8d6c79f439e6cb17dd31d435c8538560/transformed/android-util-view-1.0.8/AndroidManifest.xml:5:5-44 -MERGED from [androidx.databinding:databinding-adapters:4.2.1] /Users/william/.gradle/caches/transforms-3/b0bde3a70dfb6dbfd87be4920351c017/transformed/databinding-adapters-4.2.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.databinding:databinding-adapters:4.2.1] /Users/william/.gradle/caches/transforms-3/b0bde3a70dfb6dbfd87be4920351c017/transformed/databinding-adapters-4.2.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.databinding:databinding-runtime:4.2.1] /Users/william/.gradle/caches/transforms-3/9dea30880016b4bab692df3339f7eac7/transformed/databinding-runtime-4.2.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.databinding:databinding-runtime:4.2.1] /Users/william/.gradle/caches/transforms-3/9dea30880016b4bab692df3339f7eac7/transformed/databinding-runtime-4.2.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.databinding:viewbinding:7.4.2] /Users/william/.gradle/caches/transforms-3/54427404d4ca75ebc80859a5de6345d4/transformed/viewbinding-7.4.2/AndroidManifest.xml:5:5-44 -MERGED from [androidx.databinding:viewbinding:7.4.2] /Users/william/.gradle/caches/transforms-3/54427404d4ca75ebc80859a5de6345d4/transformed/viewbinding-7.4.2/AndroidManifest.xml:5:5-44 -MERGED from [io.github.shawxingkwok:android-util-core:1.0.1] /Users/william/.gradle/caches/transforms-3/f2302e3a9bc9412f1386bd77b3a4e36b/transformed/android-util-core-1.0.1/AndroidManifest.xml:6:5-44 -MERGED from [io.github.shawxingkwok:android-util-core:1.0.1] /Users/william/.gradle/caches/transforms-3/f2302e3a9bc9412f1386bd77b3a4e36b/transformed/android-util-core-1.0.1/AndroidManifest.xml:6:5-44 -MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/50a58ec07edc5e64d9ba360e7b335260/transformed/material-1.9.0/AndroidManifest.xml:20:5-22:41 -MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/50a58ec07edc5e64d9ba360e7b335260/transformed/material-1.9.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/2261a49531d6a4c06523672f7d6e52b1/transformed/constraintlayout-2.1.4/AndroidManifest.xml:5:5-7:41 -MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/2261a49531d6a4c06523672f7d6e52b1/transformed/constraintlayout-2.1.4/AndroidManifest.xml:5:5-7:41 -MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/william/.gradle/caches/transforms-3/936c29078521b5a004923a30f719210f/transformed/appcompat-resources-1.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/william/.gradle/caches/transforms-3/936c29078521b5a004923a30f719210f/transformed/appcompat-resources-1.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/william/.gradle/caches/transforms-3/a8cf4600b83e473257cd282282bdefe4/transformed/appcompat-1.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/william/.gradle/caches/transforms-3/a8cf4600b83e473257cd282282bdefe4/transformed/appcompat-1.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.viewpager2:viewpager2:1.0.0] /Users/william/.gradle/caches/transforms-3/09b45fcef11f321970d6bb31d4449915/transformed/viewpager2-1.0.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.viewpager2:viewpager2:1.0.0] /Users/william/.gradle/caches/transforms-3/09b45fcef11f321970d6bb31d4449915/transformed/viewpager2-1.0.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.fragment:fragment:1.3.6] /Users/william/.gradle/caches/transforms-3/796b2c1c6acbc51ea501c4354d28c3d5/transformed/fragment-1.3.6/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.fragment:fragment:1.3.6] /Users/william/.gradle/caches/transforms-3/796b2c1c6acbc51ea501c4354d28c3d5/transformed/fragment-1.3.6/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.activity:activity:1.6.0] /Users/william/.gradle/caches/transforms-3/46cb9b733f8ee7d19dd4524d5e56e58b/transformed/activity-1.6.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.activity:activity:1.6.0] /Users/william/.gradle/caches/transforms-3/46cb9b733f8ee7d19dd4524d5e56e58b/transformed/activity-1.6.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/william/.gradle/caches/transforms-3/7b245d7020ac5e1ecf422b792403e8c3/transformed/emoji2-views-helper-1.2.0/AndroidManifest.xml:5:5-44 -MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/william/.gradle/caches/transforms-3/7b245d7020ac5e1ecf422b792403e8c3/transformed/emoji2-views-helper-1.2.0/AndroidManifest.xml:5:5-44 -MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:21:5-44 -MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:21:5-44 -MERGED from [androidx.savedstate:savedstate:1.2.1] /Users/william/.gradle/caches/transforms-3/434de4efa7546164feae20db84e91cc7/transformed/savedstate-1.2.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.savedstate:savedstate:1.2.1] /Users/william/.gradle/caches/transforms-3/434de4efa7546164feae20db84e91cc7/transformed/savedstate-1.2.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.dynamicanimation:dynamicanimation:1.0.0] /Users/william/.gradle/caches/transforms-3/29963e0c0f2b6248eb296c5f5c9f82bc/transformed/dynamicanimation-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.dynamicanimation:dynamicanimation:1.0.0] /Users/william/.gradle/caches/transforms-3/29963e0c0f2b6248eb296c5f5c9f82bc/transformed/dynamicanimation-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] /Users/william/.gradle/caches/transforms-3/c64491efda79551c708450bfec8262d4/transformed/legacy-support-core-utils-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] /Users/william/.gradle/caches/transforms-3/c64491efda79551c708450bfec8262d4/transformed/legacy-support-core-utils-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.loader:loader:1.0.0] /Users/william/.gradle/caches/transforms-3/1c07059dc3ca0905b4747d1523030705/transformed/loader-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.loader:loader:1.0.0] /Users/william/.gradle/caches/transforms-3/1c07059dc3ca0905b4747d1523030705/transformed/loader-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-livedata:2.6.1] /Users/william/.gradle/caches/transforms-3/3eab73dd0aae9aa4071af7af54d5e831/transformed/lifecycle-livedata-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-livedata:2.6.1] /Users/william/.gradle/caches/transforms-3/3eab73dd0aae9aa4071af7af54d5e831/transformed/lifecycle-livedata-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.6.1] /Users/william/.gradle/caches/transforms-3/137525875e3452741b08e81db9dc6cf4/transformed/lifecycle-livedata-core-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.6.1] /Users/william/.gradle/caches/transforms-3/137525875e3452741b08e81db9dc6cf4/transformed/lifecycle-livedata-core-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:21:5-44 -MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:21:5-44 -MERGED from [androidx.lifecycle:lifecycle-runtime-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/ada95da77bf5a1cc8166bd8a907f351f/transformed/lifecycle-runtime-ktx-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-runtime-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/ada95da77bf5a1cc8166bd8a907f351f/transformed/lifecycle-runtime-ktx-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1] /Users/william/.gradle/caches/transforms-3/3d4d89a54556879d21485ca84e3c3934/transformed/lifecycle-viewmodel-savedstate-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1] /Users/william/.gradle/caches/transforms-3/3d4d89a54556879d21485ca84e3c3934/transformed/lifecycle-viewmodel-savedstate-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.core:core-ktx:1.10.1] /Users/william/.gradle/caches/transforms-3/46d68fb3eca9c7f7c4545311915434c1/transformed/core-ktx-1.10.1/AndroidManifest.xml:5:5-44 -MERGED from [androidx.core:core-ktx:1.10.1] /Users/william/.gradle/caches/transforms-3/46d68fb3eca9c7f7c4545311915434c1/transformed/core-ktx-1.10.1/AndroidManifest.xml:5:5-44 -MERGED from [androidx.drawerlayout:drawerlayout:1.1.1] /Users/william/.gradle/caches/transforms-3/44582b63ff9861eccf2d2293ce7dcf31/transformed/drawerlayout-1.1.1/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.drawerlayout:drawerlayout:1.1.1] /Users/william/.gradle/caches/transforms-3/44582b63ff9861eccf2d2293ce7dcf31/transformed/drawerlayout-1.1.1/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.1.0] /Users/william/.gradle/caches/transforms-3/593d30596a57429c890d725dbf12e2ab/transformed/coordinatorlayout-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.1.0] /Users/william/.gradle/caches/transforms-3/593d30596a57429c890d725dbf12e2ab/transformed/coordinatorlayout-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.transition:transition:1.2.0] /Users/william/.gradle/caches/transforms-3/467dba190cccf2709a7813ef37bb95bb/transformed/transition-1.2.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.transition:transition:1.2.0] /Users/william/.gradle/caches/transforms-3/467dba190cccf2709a7813ef37bb95bb/transformed/transition-1.2.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/william/.gradle/caches/transforms-3/b7a3fe0134f4107fdf8706e37a0540c5/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/william/.gradle/caches/transforms-3/b7a3fe0134f4107fdf8706e37a0540c5/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/william/.gradle/caches/transforms-3/46f75f9181a594d5b702827cbd754668/transformed/vectordrawable-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/william/.gradle/caches/transforms-3/46f75f9181a594d5b702827cbd754668/transformed/vectordrawable-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/william/.gradle/caches/transforms-3/add7cfe72adb8e2fe6edc15ad92c4f4f/transformed/viewpager-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/william/.gradle/caches/transforms-3/add7cfe72adb8e2fe6edc15ad92c4f4f/transformed/viewpager-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.recyclerview:recyclerview:1.1.0] /Users/william/.gradle/caches/transforms-3/314b4be711c5b7bd405babf4f3ff3be3/transformed/recyclerview-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.recyclerview:recyclerview:1.1.0] /Users/william/.gradle/caches/transforms-3/314b4be711c5b7bd405babf4f3ff3be3/transformed/recyclerview-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.customview:customview:1.1.0] /Users/william/.gradle/caches/transforms-3/470275a4cf0a860359a070236e33fa40/transformed/customview-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.customview:customview:1.1.0] /Users/william/.gradle/caches/transforms-3/470275a4cf0a860359a070236e33fa40/transformed/customview-1.1.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-runtime:2.6.1] /Users/william/.gradle/caches/transforms-3/cf2be6bfad30ca4aa28729847cdd8086/transformed/lifecycle-runtime-2.6.1/AndroidManifest.xml:5:5-44 -MERGED from [androidx.lifecycle:lifecycle-runtime:2.6.1] /Users/william/.gradle/caches/transforms-3/cf2be6bfad30ca4aa28729847cdd8086/transformed/lifecycle-runtime-2.6.1/AndroidManifest.xml:5:5-44 -MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.6.1] /Users/william/.gradle/caches/transforms-3/73bd455e7f6485e923280e0613f01671/transformed/lifecycle-viewmodel-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.6.1] /Users/william/.gradle/caches/transforms-3/73bd455e7f6485e923280e0613f01671/transformed/lifecycle-viewmodel-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/a4bbfcab1df537f85c77c9bf5d2ee761/transformed/lifecycle-viewmodel-ktx-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/a4bbfcab1df537f85c77c9bf5d2ee761/transformed/lifecycle-viewmodel-ktx-2.6.1/AndroidManifest.xml:20:5-44 -MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/william/.gradle/caches/transforms-3/43135f343cb419dec49ba280c077cfb7/transformed/cursoradapter-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/william/.gradle/caches/transforms-3/43135f343cb419dec49ba280c077cfb7/transformed/cursoradapter-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.cardview:cardview:1.0.0] /Users/william/.gradle/caches/transforms-3/47c0be75ab605667774fcc4a024139ac/transformed/cardview-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.cardview:cardview:1.0.0] /Users/william/.gradle/caches/transforms-3/47c0be75ab605667774fcc4a024139ac/transformed/cardview-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/william/.gradle/caches/transforms-3/ff18035182dbd7d06a6441b142091ee2/transformed/interpolator-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/william/.gradle/caches/transforms-3/ff18035182dbd7d06a6441b142091ee2/transformed/interpolator-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/32006f33a780552c7e3a54264c98aa7e/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/32006f33a780552c7e3a54264c98aa7e/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:21:5-44 -MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:21:5-44 -MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/8ee2154752a02afcb8432d0f22049e3b/transformed/startup-runtime-1.1.1/AndroidManifest.xml:21:5-23:41 -MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/8ee2154752a02afcb8432d0f22049e3b/transformed/startup-runtime-1.1.1/AndroidManifest.xml:21:5-23:41 -MERGED from [androidx.tracing:tracing:1.0.0] /Users/william/.gradle/caches/transforms-3/4c958b4453aac1d266d94a82be11f1ad/transformed/tracing-1.0.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.tracing:tracing:1.0.0] /Users/william/.gradle/caches/transforms-3/4c958b4453aac1d266d94a82be11f1ad/transformed/tracing-1.0.0/AndroidManifest.xml:20:5-22:41 -MERGED from [androidx.arch.core:core-runtime:2.2.0] /Users/william/.gradle/caches/transforms-3/7afe4d1c29fce7f7d8270f3ff060fcc2/transformed/core-runtime-2.2.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.arch.core:core-runtime:2.2.0] /Users/william/.gradle/caches/transforms-3/7afe4d1c29fce7f7d8270f3ff060fcc2/transformed/core-runtime-2.2.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.documentfile:documentfile:1.0.0] /Users/william/.gradle/caches/transforms-3/d073559dc2b76b61c99c92605f29cca3/transformed/documentfile-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.documentfile:documentfile:1.0.0] /Users/william/.gradle/caches/transforms-3/d073559dc2b76b61c99c92605f29cca3/transformed/documentfile-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] /Users/william/.gradle/caches/transforms-3/b359ef0b42759fd92b33d0bbb006ac1d/transformed/localbroadcastmanager-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] /Users/william/.gradle/caches/transforms-3/b359ef0b42759fd92b33d0bbb006ac1d/transformed/localbroadcastmanager-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.print:print:1.0.0] /Users/william/.gradle/caches/transforms-3/b8f1552f504d18eda482ce5b561c62e7/transformed/print-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.print:print:1.0.0] /Users/william/.gradle/caches/transforms-3/b8f1552f504d18eda482ce5b561c62e7/transformed/print-1.0.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/william/.gradle/caches/transforms-3/1fe2c14345ac1b64d0365b80354bdf84/transformed/annotation-experimental-1.3.0/AndroidManifest.xml:20:5-44 -MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/william/.gradle/caches/transforms-3/1fe2c14345ac1b64d0365b80354bdf84/transformed/annotation-experimental-1.3.0/AndroidManifest.xml:20:5-44 +MERGED from [io.github.shawxingkwok:android-util-view:1.0.8] /Users/william/.gradle/caches/transforms-3/59277119e721c7714588701d6e567923/transformed/android-util-view-1.0.8/AndroidManifest.xml:5:5-44 +MERGED from [io.github.shawxingkwok:android-util-view:1.0.8] /Users/william/.gradle/caches/transforms-3/59277119e721c7714588701d6e567923/transformed/android-util-view-1.0.8/AndroidManifest.xml:5:5-44 +MERGED from [androidx.databinding:databinding-adapters:4.2.1] /Users/william/.gradle/caches/transforms-3/1672e31114efcb1860016b54613f3a83/transformed/databinding-adapters-4.2.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.databinding:databinding-adapters:4.2.1] /Users/william/.gradle/caches/transforms-3/1672e31114efcb1860016b54613f3a83/transformed/databinding-adapters-4.2.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.databinding:databinding-runtime:4.2.1] /Users/william/.gradle/caches/transforms-3/607a63d8a3a9cc43b3cd07c8c6185006/transformed/databinding-runtime-4.2.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.databinding:databinding-runtime:4.2.1] /Users/william/.gradle/caches/transforms-3/607a63d8a3a9cc43b3cd07c8c6185006/transformed/databinding-runtime-4.2.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.databinding:viewbinding:7.4.2] /Users/william/.gradle/caches/transforms-3/cf2346604e3dd4a6e4256ecfe1fef4fb/transformed/viewbinding-7.4.2/AndroidManifest.xml:5:5-44 +MERGED from [androidx.databinding:viewbinding:7.4.2] /Users/william/.gradle/caches/transforms-3/cf2346604e3dd4a6e4256ecfe1fef4fb/transformed/viewbinding-7.4.2/AndroidManifest.xml:5:5-44 +MERGED from [io.github.shawxingkwok:android-util-core:1.0.1] /Users/william/.gradle/caches/transforms-3/c64f6ffd65dc512dc408dd1a4ad68656/transformed/android-util-core-1.0.1/AndroidManifest.xml:6:5-44 +MERGED from [io.github.shawxingkwok:android-util-core:1.0.1] /Users/william/.gradle/caches/transforms-3/c64f6ffd65dc512dc408dd1a4ad68656/transformed/android-util-core-1.0.1/AndroidManifest.xml:6:5-44 +MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/6c4da21f7461681397396b376f3c636b/transformed/material-1.9.0/AndroidManifest.xml:20:5-22:41 +MERGED from [com.google.android.material:material:1.9.0] /Users/william/.gradle/caches/transforms-3/6c4da21f7461681397396b376f3c636b/transformed/material-1.9.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/9d44991d9f578bd2ea9a8c68006fc3b2/transformed/constraintlayout-2.1.4/AndroidManifest.xml:5:5-7:41 +MERGED from [androidx.constraintlayout:constraintlayout:2.1.4] /Users/william/.gradle/caches/transforms-3/9d44991d9f578bd2ea9a8c68006fc3b2/transformed/constraintlayout-2.1.4/AndroidManifest.xml:5:5-7:41 +MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/william/.gradle/caches/transforms-3/3ecd725d8921886934c5255a7d198a3a/transformed/appcompat-resources-1.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.appcompat:appcompat-resources:1.6.1] /Users/william/.gradle/caches/transforms-3/3ecd725d8921886934c5255a7d198a3a/transformed/appcompat-resources-1.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/william/.gradle/caches/transforms-3/27fefee92c9a894975ae8e26f491cab7/transformed/appcompat-1.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.appcompat:appcompat:1.6.1] /Users/william/.gradle/caches/transforms-3/27fefee92c9a894975ae8e26f491cab7/transformed/appcompat-1.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.viewpager2:viewpager2:1.0.0] /Users/william/.gradle/caches/transforms-3/5c148a4e9269fc88c0db11938fbaa72c/transformed/viewpager2-1.0.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.viewpager2:viewpager2:1.0.0] /Users/william/.gradle/caches/transforms-3/5c148a4e9269fc88c0db11938fbaa72c/transformed/viewpager2-1.0.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.fragment:fragment:1.3.6] /Users/william/.gradle/caches/transforms-3/841508cd6a2b3c61e7ff994e6185b924/transformed/fragment-1.3.6/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.fragment:fragment:1.3.6] /Users/william/.gradle/caches/transforms-3/841508cd6a2b3c61e7ff994e6185b924/transformed/fragment-1.3.6/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.activity:activity:1.6.0] /Users/william/.gradle/caches/transforms-3/1e01d21ecd5478b6cbdd559b95e3cf02/transformed/activity-1.6.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.activity:activity:1.6.0] /Users/william/.gradle/caches/transforms-3/1e01d21ecd5478b6cbdd559b95e3cf02/transformed/activity-1.6.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/william/.gradle/caches/transforms-3/1498f1d3b609a58003240d4b81a80bf0/transformed/emoji2-views-helper-1.2.0/AndroidManifest.xml:5:5-44 +MERGED from [androidx.emoji2:emoji2-views-helper:1.2.0] /Users/william/.gradle/caches/transforms-3/1498f1d3b609a58003240d4b81a80bf0/transformed/emoji2-views-helper-1.2.0/AndroidManifest.xml:5:5-44 +MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:21:5-44 +MERGED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:21:5-44 +MERGED from [androidx.savedstate:savedstate:1.2.1] /Users/william/.gradle/caches/transforms-3/c7c8e2b48f30594e920c01621502f915/transformed/savedstate-1.2.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.savedstate:savedstate:1.2.1] /Users/william/.gradle/caches/transforms-3/c7c8e2b48f30594e920c01621502f915/transformed/savedstate-1.2.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.dynamicanimation:dynamicanimation:1.0.0] /Users/william/.gradle/caches/transforms-3/cbbb567c1d04ddd6fed224e4677cda23/transformed/dynamicanimation-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.dynamicanimation:dynamicanimation:1.0.0] /Users/william/.gradle/caches/transforms-3/cbbb567c1d04ddd6fed224e4677cda23/transformed/dynamicanimation-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] /Users/william/.gradle/caches/transforms-3/f74983d6ebc7e5c91bf3ac596371736b/transformed/legacy-support-core-utils-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.legacy:legacy-support-core-utils:1.0.0] /Users/william/.gradle/caches/transforms-3/f74983d6ebc7e5c91bf3ac596371736b/transformed/legacy-support-core-utils-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.loader:loader:1.0.0] /Users/william/.gradle/caches/transforms-3/5cad54bcb579bcbf6782f8f5caa10fec/transformed/loader-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.loader:loader:1.0.0] /Users/william/.gradle/caches/transforms-3/5cad54bcb579bcbf6782f8f5caa10fec/transformed/loader-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-livedata:2.6.1] /Users/william/.gradle/caches/transforms-3/e4450545343105dad2494ad2bc18ce86/transformed/lifecycle-livedata-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-livedata:2.6.1] /Users/william/.gradle/caches/transforms-3/e4450545343105dad2494ad2bc18ce86/transformed/lifecycle-livedata-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.6.1] /Users/william/.gradle/caches/transforms-3/b4ac00736e9cbede55ba00321fb01e63/transformed/lifecycle-livedata-core-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-livedata-core:2.6.1] /Users/william/.gradle/caches/transforms-3/b4ac00736e9cbede55ba00321fb01e63/transformed/lifecycle-livedata-core-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:21:5-44 +MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:21:5-44 +MERGED from [androidx.lifecycle:lifecycle-runtime-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/1e0e397dbdb680f7774210bf8b1f9a04/transformed/lifecycle-runtime-ktx-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-runtime-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/1e0e397dbdb680f7774210bf8b1f9a04/transformed/lifecycle-runtime-ktx-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1] /Users/william/.gradle/caches/transforms-3/38ed6a3d11a989a581c2775b74ee76bc/transformed/lifecycle-viewmodel-savedstate-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1] /Users/william/.gradle/caches/transforms-3/38ed6a3d11a989a581c2775b74ee76bc/transformed/lifecycle-viewmodel-savedstate-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.core:core-ktx:1.10.1] /Users/william/.gradle/caches/transforms-3/dad0a392f709c6a3a8f38d03c1a89af1/transformed/core-ktx-1.10.1/AndroidManifest.xml:5:5-44 +MERGED from [androidx.core:core-ktx:1.10.1] /Users/william/.gradle/caches/transforms-3/dad0a392f709c6a3a8f38d03c1a89af1/transformed/core-ktx-1.10.1/AndroidManifest.xml:5:5-44 +MERGED from [androidx.drawerlayout:drawerlayout:1.1.1] /Users/william/.gradle/caches/transforms-3/b5caab96b381265fcca310549e1f4a6a/transformed/drawerlayout-1.1.1/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.drawerlayout:drawerlayout:1.1.1] /Users/william/.gradle/caches/transforms-3/b5caab96b381265fcca310549e1f4a6a/transformed/drawerlayout-1.1.1/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.1.0] /Users/william/.gradle/caches/transforms-3/bfc83456dd71122784c935fa1fb80cfa/transformed/coordinatorlayout-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.coordinatorlayout:coordinatorlayout:1.1.0] /Users/william/.gradle/caches/transforms-3/bfc83456dd71122784c935fa1fb80cfa/transformed/coordinatorlayout-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.transition:transition:1.2.0] /Users/william/.gradle/caches/transforms-3/ec94a177b564fb669064c4d59ac25ff7/transformed/transition-1.2.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.transition:transition:1.2.0] /Users/william/.gradle/caches/transforms-3/ec94a177b564fb669064c4d59ac25ff7/transformed/transition-1.2.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/william/.gradle/caches/transforms-3/1ecf9b1ec09c8e423bd26f10243cded7/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.vectordrawable:vectordrawable-animated:1.1.0] /Users/william/.gradle/caches/transforms-3/1ecf9b1ec09c8e423bd26f10243cded7/transformed/vectordrawable-animated-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/william/.gradle/caches/transforms-3/4bbd1ab2a5583af82340da80d16e5c67/transformed/vectordrawable-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.vectordrawable:vectordrawable:1.1.0] /Users/william/.gradle/caches/transforms-3/4bbd1ab2a5583af82340da80d16e5c67/transformed/vectordrawable-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/william/.gradle/caches/transforms-3/b9659de07e4c138567d24012d102b8ad/transformed/viewpager-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.viewpager:viewpager:1.0.0] /Users/william/.gradle/caches/transforms-3/b9659de07e4c138567d24012d102b8ad/transformed/viewpager-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.recyclerview:recyclerview:1.1.0] /Users/william/.gradle/caches/transforms-3/439899cc903b35082403408a42c9108f/transformed/recyclerview-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.recyclerview:recyclerview:1.1.0] /Users/william/.gradle/caches/transforms-3/439899cc903b35082403408a42c9108f/transformed/recyclerview-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.customview:customview:1.1.0] /Users/william/.gradle/caches/transforms-3/0694708cda6f4f025db692a3e03eed82/transformed/customview-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.customview:customview:1.1.0] /Users/william/.gradle/caches/transforms-3/0694708cda6f4f025db692a3e03eed82/transformed/customview-1.1.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-runtime:2.6.1] /Users/william/.gradle/caches/transforms-3/de7aeb6d057595d7aa24972cd595bced/transformed/lifecycle-runtime-2.6.1/AndroidManifest.xml:5:5-44 +MERGED from [androidx.lifecycle:lifecycle-runtime:2.6.1] /Users/william/.gradle/caches/transforms-3/de7aeb6d057595d7aa24972cd595bced/transformed/lifecycle-runtime-2.6.1/AndroidManifest.xml:5:5-44 +MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.6.1] /Users/william/.gradle/caches/transforms-3/9923668b33ec453af9d7196c1b923808/transformed/lifecycle-viewmodel-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-viewmodel:2.6.1] /Users/william/.gradle/caches/transforms-3/9923668b33ec453af9d7196c1b923808/transformed/lifecycle-viewmodel-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/c772e7a2f87ea9520c8500768e8c1ff3/transformed/lifecycle-viewmodel-ktx-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1] /Users/william/.gradle/caches/transforms-3/c772e7a2f87ea9520c8500768e8c1ff3/transformed/lifecycle-viewmodel-ktx-2.6.1/AndroidManifest.xml:20:5-44 +MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/william/.gradle/caches/transforms-3/ca9ed38e9d34feaf7c98fbbb7ebcc9dd/transformed/cursoradapter-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.cursoradapter:cursoradapter:1.0.0] /Users/william/.gradle/caches/transforms-3/ca9ed38e9d34feaf7c98fbbb7ebcc9dd/transformed/cursoradapter-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.cardview:cardview:1.0.0] /Users/william/.gradle/caches/transforms-3/a33095467b254ed28e0ab100131f3134/transformed/cardview-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.cardview:cardview:1.0.0] /Users/william/.gradle/caches/transforms-3/a33095467b254ed28e0ab100131f3134/transformed/cardview-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/william/.gradle/caches/transforms-3/46b855c1c7a7528bb092add11515ed0f/transformed/interpolator-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.interpolator:interpolator:1.0.0] /Users/william/.gradle/caches/transforms-3/46b855c1c7a7528bb092add11515ed0f/transformed/interpolator-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/71fdcd4507a3822ad33bb8bd050d9777/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.versionedparcelable:versionedparcelable:1.1.1] /Users/william/.gradle/caches/transforms-3/71fdcd4507a3822ad33bb8bd050d9777/transformed/versionedparcelable-1.1.1/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:21:5-44 +MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:21:5-44 +MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/25a16c30bfd44f463ea6c88662c83356/transformed/startup-runtime-1.1.1/AndroidManifest.xml:21:5-23:41 +MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/25a16c30bfd44f463ea6c88662c83356/transformed/startup-runtime-1.1.1/AndroidManifest.xml:21:5-23:41 +MERGED from [androidx.tracing:tracing:1.0.0] /Users/william/.gradle/caches/transforms-3/d834119c6bb4f8f4fd37805039fda4fd/transformed/tracing-1.0.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.tracing:tracing:1.0.0] /Users/william/.gradle/caches/transforms-3/d834119c6bb4f8f4fd37805039fda4fd/transformed/tracing-1.0.0/AndroidManifest.xml:20:5-22:41 +MERGED from [androidx.arch.core:core-runtime:2.2.0] /Users/william/.gradle/caches/transforms-3/8455c8d07e0dc79bc24dd4b49a4b77f9/transformed/core-runtime-2.2.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.arch.core:core-runtime:2.2.0] /Users/william/.gradle/caches/transforms-3/8455c8d07e0dc79bc24dd4b49a4b77f9/transformed/core-runtime-2.2.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.documentfile:documentfile:1.0.0] /Users/william/.gradle/caches/transforms-3/db04f64b4e155b1aa84bcc06dd613641/transformed/documentfile-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.documentfile:documentfile:1.0.0] /Users/william/.gradle/caches/transforms-3/db04f64b4e155b1aa84bcc06dd613641/transformed/documentfile-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] /Users/william/.gradle/caches/transforms-3/8e2d5123c058835e87c116a368bfa802/transformed/localbroadcastmanager-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] /Users/william/.gradle/caches/transforms-3/8e2d5123c058835e87c116a368bfa802/transformed/localbroadcastmanager-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.print:print:1.0.0] /Users/william/.gradle/caches/transforms-3/6d3f2765ab1545636081ae38fcc4a046/transformed/print-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.print:print:1.0.0] /Users/william/.gradle/caches/transforms-3/6d3f2765ab1545636081ae38fcc4a046/transformed/print-1.0.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/william/.gradle/caches/transforms-3/ff24c63ebe37f88151450d4be8245cf8/transformed/annotation-experimental-1.3.0/AndroidManifest.xml:20:5-44 +MERGED from [androidx.annotation:annotation-experimental:1.3.0] /Users/william/.gradle/caches/transforms-3/ff24c63ebe37f88151450d4be8245cf8/transformed/annotation-experimental-1.3.0/AndroidManifest.xml:20:5-44 INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml android:targetSdkVersion @@ -242,92 +242,92 @@ INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManif ADDED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml INJECTED from /Users/william/IdeaProjects/library/MVB/demo/src/main/AndroidManifest.xml provider#androidx.startup.InitializationProvider -ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:24:9-32:20 -MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:24:9-32:20 -MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:24:9-32:20 -MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:24:9-32:20 -MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:24:9-32:20 -MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/8ee2154752a02afcb8432d0f22049e3b/transformed/startup-runtime-1.1.1/AndroidManifest.xml:26:9-30:34 -MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/8ee2154752a02afcb8432d0f22049e3b/transformed/startup-runtime-1.1.1/AndroidManifest.xml:26:9-30:34 +ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:24:9-32:20 +MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:24:9-32:20 +MERGED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:24:9-32:20 +MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:24:9-32:20 +MERGED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:24:9-32:20 +MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/25a16c30bfd44f463ea6c88662c83356/transformed/startup-runtime-1.1.1/AndroidManifest.xml:26:9-30:34 +MERGED from [androidx.startup:startup-runtime:1.1.1] /Users/william/.gradle/caches/transforms-3/25a16c30bfd44f463ea6c88662c83356/transformed/startup-runtime-1.1.1/AndroidManifest.xml:26:9-30:34 tools:node - ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:28:13-31 + ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:28:13-31 android:authorities - ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:26:13-68 + ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:26:13-68 android:exported - ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:27:13-37 + ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:27:13-37 android:name - ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:25:13-67 + ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:25:13-67 meta-data#androidx.emoji2.text.EmojiCompatInitializer -ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:29:13-31:52 +ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:29:13-31:52 android:value - ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:31:17-49 + ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:31:17-49 android:name - ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/ab570db86e53e04f03dd0eaef8ab881c/transformed/emoji2-1.2.0/AndroidManifest.xml:30:17-75 + ADDED from [androidx.emoji2:emoji2:1.2.0] /Users/william/.gradle/caches/transforms-3/a5e1b52f53265e7849cc9de71f663cbf/transformed/emoji2-1.2.0/AndroidManifest.xml:30:17-75 meta-data#androidx.lifecycle.ProcessLifecycleInitializer -ADDED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:29:13-31:52 +ADDED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:29:13-31:52 android:value - ADDED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:31:17-49 + ADDED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:31:17-49 android:name - ADDED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/238cb2563cdd5589ba0cfab8b74a4fdb/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:30:17-78 + ADDED from [androidx.lifecycle:lifecycle-process:2.6.1] /Users/william/.gradle/caches/transforms-3/26406e73db575286ec2c4ef740490092/transformed/lifecycle-process-2.6.1/AndroidManifest.xml:30:17-78 permission#${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION -ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:22:5-24:47 +ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:22:5-24:47 android:protectionLevel - ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:24:9-44 + ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:24:9-44 android:name - ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:23:9-81 + ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:23:9-81 permission#pers.shawxingkwok.mvb.demo.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION -ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:22:5-24:47 +ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:22:5-24:47 android:protectionLevel - ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:24:9-44 + ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:24:9-44 android:name - ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:23:9-81 + ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:23:9-81 uses-permission#${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION -ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:26:5-97 +ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:26:5-97 android:name - ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:26:22-94 + ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:26:22-94 uses-permission#pers.shawxingkwok.mvb.demo.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION -ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:26:5-97 +ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:26:5-97 android:name - ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/2aa66864e4015faf0ffd1e6833eff3dc/transformed/core-1.10.1/AndroidManifest.xml:26:22-94 + ADDED from [androidx.core:core:1.10.1] /Users/william/.gradle/caches/transforms-3/33bd895c771aa6e7209cb3e5e1458d89/transformed/core-1.10.1/AndroidManifest.xml:26:22-94 meta-data#androidx.profileinstaller.ProfileInstallerInitializer -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:29:13-31:52 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:29:13-31:52 android:value - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:31:17-49 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:31:17-49 android:name - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:30:17-85 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:30:17-85 receiver#androidx.profileinstaller.ProfileInstallReceiver -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:34:9-52:20 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:34:9-52:20 android:enabled - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:37:13-35 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:37:13-35 android:exported - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:38:13-36 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:38:13-36 android:permission - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:39:13-57 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:39:13-57 android:directBootAware - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:36:13-44 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:36:13-44 android:name - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:35:13-76 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:35:13-76 intent-filter#action:name:androidx.profileinstaller.action.INSTALL_PROFILE -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:40:13-42:29 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:40:13-42:29 action#androidx.profileinstaller.action.INSTALL_PROFILE -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:41:17-91 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:41:17-91 android:name - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:41:25-88 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:41:25-88 intent-filter#action:name:androidx.profileinstaller.action.SKIP_FILE -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:43:13-45:29 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:43:13-45:29 action#androidx.profileinstaller.action.SKIP_FILE -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:44:17-85 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:44:17-85 android:name - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:44:25-82 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:44:25-82 intent-filter#action:name:androidx.profileinstaller.action.SAVE_PROFILE -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:46:13-48:29 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:46:13-48:29 action#androidx.profileinstaller.action.SAVE_PROFILE -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:47:17-88 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:47:17-88 android:name - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:47:25-85 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:47:25-85 intent-filter#action:name:androidx.profileinstaller.action.BENCHMARK_OPERATION -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:49:13-51:29 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:49:13-51:29 action#androidx.profileinstaller.action.BENCHMARK_OPERATION -ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:50:17-95 +ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:50:17-95 android:name - ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/626975d49d80da6769fd6a538ad8fe24/transformed/profileinstaller-1.3.0/AndroidManifest.xml:50:25-92 + ADDED from [androidx.profileinstaller:profileinstaller:1.3.0] /Users/william/.gradle/caches/transforms-3/e68dce4d891e3e774584de6c65ce4ae9/transformed/profileinstaller-1.3.0/AndroidManifest.xml:50:25-92 diff --git a/api/src/androidTest/java/pers/shawxingkwok/mvb/MyFragment.kt b/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/MyFragment.kt similarity index 97% rename from api/src/androidTest/java/pers/shawxingkwok/mvb/MyFragment.kt rename to demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/MyFragment.kt index 75ee3bd..387a5e0 100644 --- a/api/src/androidTest/java/pers/shawxingkwok/mvb/MyFragment.kt +++ b/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/MyFragment.kt @@ -1,6 +1,6 @@ @file:Suppress("unused") -package pers.shawxingkwok.mvb +package pers.shawxingkwok.androidutil.view import androidx.fragment.app.Fragment import kotlinx.coroutines.flow.MutableStateFlow diff --git a/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/Observe.kt b/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/Observe.kt index 1a127f2..cfff7ec 100644 --- a/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/Observe.kt +++ b/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/Observe.kt @@ -10,8 +10,6 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.update import pers.shawxingkwok.mvb.android.observe import pers.shawxingkwok.mvb.android.rmb @@ -42,8 +40,8 @@ class Observe { .observe { // ... } - // The lambda is active from STARTED by default, - // whereas you could also change it to RESUMED when observing `Flow`. + // The lambda is active between STARTED and STOPPED by default, + // whereas you could also change it to `RESUMED & PAUSED` when observing `Flow`. .observe(repeatOnResumed = true) { } } } diff --git a/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/ParcelableComponent.kt b/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/ParcelableComponent.kt index a5c6c03..fbe9243 100644 --- a/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/ParcelableComponent.kt +++ b/demo/src/androidTest/java/pers/shawxingkwok/androidutil/view/ParcelableComponent.kt @@ -15,12 +15,13 @@ internal class ParcelableComponent { /** * Pass `KClass` (`User::class` in this case) when ultimately - * saved as `List`/`SparseArray`. + * saved in `ArrayList`/`SparseArray`/`HashMap`. * * 'ultimately' means saved types change with `transform`. */ val userList by save(User::class) { mutableListOf() } val userSparseArr by save(User::class) { SparseArray() } + val userMap by save(User::class){ mutableMapOf() } /** * `User::class` could be automatically recognized in cases below. diff --git a/demo/src/main/java/pers/shawxingkwok/mvb/demo/StopwatchFragment.kt b/demo/src/main/java/pers/shawxingkwok/mvb/demo/StopwatchFragment.kt index 2921db5..5acced5 100644 --- a/demo/src/main/java/pers/shawxingkwok/mvb/demo/StopwatchFragment.kt +++ b/demo/src/main/java/pers/shawxingkwok/mvb/demo/StopwatchFragment.kt @@ -20,6 +20,7 @@ import kotlin.concurrent.timer @SuppressLint("SetTextI18n") class StopwatchFragment : Fragment(R.layout.fragment_main) { + //region static processing: binding, adapter private val binding by binding(FragmentMainBinding::bind) private val adapter = StopwatchAdapter() @@ -29,8 +30,9 @@ class StopwatchFragment : Fragment(R.layout.fragment_main) { binding.rv.layoutManager = LinearLayoutManager(requireContext()) setFixedListeners() } + //endregion - //region bridge + //region bridge: duration, intervals, isRunning private val duration by saveMutableStateFlow { 0 } .observe { binding.tvDuration.text = StopwatchUtil.formatDuration(it) @@ -47,7 +49,7 @@ class StopwatchFragment : Fragment(R.layout.fragment_main) { // `isRunning` is not saved because it's best to be false when the app is restored. private val isRunning by rmb { MutableStateFlow(false) } - // if true, update duration and adapter periodically + // if true, update duration and intervals periodically .observe { when{ !it -> { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f28984a..1a7aa41 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,6 +5,7 @@ compileSdk = "33" minSdk = "21" targetSdk = "33" lifecycle = "2.6.1" +mockito = "5.5.0" [plugins] publish = { id = "com.vanniktech.maven.publish", version = "0.25.2" } @@ -25,6 +26,15 @@ lifecycle-runtimeKtx = { group = "androidx.lifecycle", name = "lifecycle-runtime lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-ktx", version.ref = "lifecycle" } lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycle" } material3 = { group = "androidx.compose.material3", name = "material3" } + +mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" } +mockito-android = { module = "org.mockito:mockito-android", version.ref = "mockito" } +mockito-inline = { module = "org.mockito:mockito-inline", version = "5.2.0" } +mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "4.1.0" } +mockito-dexmaker = { module = "com.linkedin.dexmaker:dexmaker-mockito", version = "2.12.1" } +mockk = { group = "io.mockk", name = "mockk", version = "1.12.8" } +bytebuddy-android = { module = 'net.bytebuddy:byte-buddy-android', version = '1.14.8' } + viewbindingKtx = { module = "com.github.DylanCaiCoding.ViewBindingKTX:viewbinding-nonreflection-ktx", version = "2.1.0" } shawxing-ktUtil = { group = "io.github.shawxingkwok", name = "kt-util", version = "1.0.2" } @@ -32,6 +42,7 @@ shawxing-androidUtilCore = { group = "io.github.shawxingkwok", name = "android-u shawxing-androidUtilView = { group = "io.github.shawxingkwok", name = "android-util-view", version = "1.0.8" } junit = { group = "junit", name = "junit", version = "4.13.2" } +#jupiter-params = { group = "org.junit.jupiter", name = "junit-jupiter-params", version = "5.8.2" } androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version = "1.1.5" } espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version = "3.5.1" } androidx-fragment-test = { group = "androidx.fragment", name = "fragment-testing", version = "1.6.1" } diff --git a/restoretest/src/main/java/pers/shawxingkwok/restoretest/MainActivity.kt b/restoretest/src/main/java/pers/shawxingkwok/restoretest/MainActivity.kt index 76b5343..7555b28 100644 --- a/restoretest/src/main/java/pers/shawxingkwok/restoretest/MainActivity.kt +++ b/restoretest/src/main/java/pers/shawxingkwok/restoretest/MainActivity.kt @@ -6,11 +6,9 @@ import android.os.Bundle import android.util.SparseArray import androidx.activity.ComponentActivity import pers.shawxingkwok.androidutil.KLog -import pers.shawxingkwok.mvb.android.save -import pers.shawxingkwok.mvb.android.saveMutableLiveData -import pers.shawxingkwok.mvb.android.saveMutableSharedFlow -import pers.shawxingkwok.mvb.android.saveMutableStateFlow +import pers.shawxingkwok.mvb.android.* import java.math.BigDecimal +import java.util.concurrent.atomic.AtomicInteger inline fun Any?.isArray() = this is Array<*> && javaClass.componentType == T::class.java @@ -32,18 +30,22 @@ class MainActivity : ComponentActivity() { val liveData by saveMutableLiveData { 0 } val emptyLiveData by saveMutableLiveData<_, Int>() val nullableLiveData by saveMutableLiveData<_, Int?> { 1 } - val sparseArray by save(P::class) { SparseArray

() } + val sparseArray by save(P::class) { SparseArray

() } var number by save { BigDecimal(0.0) } - val ints by save { intArrayOf(0) } - val ps by save { arrayOf(P(0)) } + val ps by save { arrayOf(P(0), null)} val _ps by save(P::class) { listOf(arrayOf(P(0))) } val qs by save { arrayOf(Q1(), Q2()) } val _qs by save { listOf(arrayOf(Q1(), Q2())) } + val compound by save(P::class) { arrayListOf(P(0), 0) } + + val addedTimes = AtomicInteger() + + val map by save(P::class) { mapOf("p" to P(0)) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -58,12 +60,14 @@ class MainActivity : ComponentActivity() { sparseArray.append(0, P(0)) number += BigDecimal(1) ints[0]++ - ps[0].i++ + (compound.first() as P).i = 1 + compound[1] = 1 + (ps[0] as P).i++ _ps[0][0].i++ qs[0].i++ _qs.first()[0].i++ + map.values.first().i = 1 }else { - assert(stateFlow.value == 1) assert(emptyLiveData.value == null) assert(liveData.value == 1) @@ -76,8 +80,12 @@ class MainActivity : ComponentActivity() { assert(ps.isArray

()) assert(qs.isArray()) assert(_qs.first().isArray()) - // This parcelable bug should be fixed by the authority - KLog.d(_ps.first().isArray()) + assert((compound[0] as P).i == 1) + assert(compound[1] == 1) + assert(map.values.first().i == 1) + // This parcelable bug should be fixed by the authority. + // In the other hand, List> does not follow Parcelize rules at present. + KLog.d("List> is allowed: ${_ps.first().isArray()}") KLog.d("done") } } diff --git a/restoretest/src/main/res/layout/activity_main.xml b/restoretest/src/main/res/layout/activity_main.xml index eccb41e..248747d 100644 --- a/restoretest/src/main/res/layout/activity_main.xml +++ b/restoretest/src/main/res/layout/activity_main.xml @@ -6,7 +6,8 @@ xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + tools:ignore="ExtraText">