diff options
author | 2024-08-23 17:06:51 -0700 | |
---|---|---|
committer | 2024-09-17 12:32:53 -0700 | |
commit | a2cecbe15fd16bb6567f29e7944888633e5b4d6b (patch) | |
tree | 55edd006b7053f6200fa4281d5e9e180407d1673 /tests | |
parent | 619ddfbde2504696106c9c6704a6d667ea724b5d (diff) |
Do not store the initial intent's extra in the saved state.
CreationExtras's DEFAULT_ARGS_KEY vlaue gets saved in
SavedStateHandle for each view model the activity creates. Thus by
storing the ActivityModel in there we effectively duplicated the initial
intent's extra in the activity's saved state 4 times: DEFAULT_ARGS_KEY
contains the extras (put there by ComponentActivity) plus ActivityModel
per two view models we created.
This change makes Chooser and Resolver activities provide default
CreationExtras with empty DEFAULT_ARGS_KEY values and stores
ActivityModel in the new repository class (instead of the
SavedStateHandle instance).
Fix: 331897641
Test: manual testing with injected logging the values being put in the
activity's saved state
Test: atest IntentResolver-tests-unit
Test: atest Intentresolver-tests-activity
Flag: EXEMPT bugfix
Change-Id: Ice2e51971476b2bb963f04275d7b180c85126288
Diffstat (limited to 'tests')
4 files changed, 26 insertions, 13 deletions
diff --git a/tests/unit/src/com/android/intentresolver/ext/CreationExtrasExtTest.kt b/tests/unit/src/com/android/intentresolver/ext/CreationExtrasExtTest.kt index c09047a1..dbaee3d0 100644 --- a/tests/unit/src/com/android/intentresolver/ext/CreationExtrasExtTest.kt +++ b/tests/unit/src/com/android/intentresolver/ext/CreationExtrasExtTest.kt @@ -51,4 +51,19 @@ class CreationExtrasExtTest { assertThat(defaultArgs).parcelable<Point>("POINT1").marshallsEquallyTo(Point(1, 1)) assertThat(defaultArgs).parcelable<Point>("POINT2").marshallsEquallyTo(Point(2, 2)) } + + @Test + fun replaceDefaultArgs_replacesExisting() { + val creationExtras: CreationExtras = + MutableCreationExtras().apply { + set(DEFAULT_ARGS_KEY, bundleOf("POINT1" to Point(1, 1))) + } + + val updated = creationExtras.replaceDefaultArgs("POINT2" to Point(2, 2)) + + val defaultArgs = updated[DEFAULT_ARGS_KEY] + assertThat(defaultArgs).doesNotContainKey("POINT1") + assertThat(defaultArgs).containsKey("POINT2") + assertThat(defaultArgs).parcelable<Point>("POINT2").marshallsEquallyTo(Point(2, 2)) + } } diff --git a/tests/unit/src/com/android/intentresolver/ui/model/ActivityModelTest.kt b/tests/unit/src/com/android/intentresolver/ui/model/ActivityModelTest.kt index 737f02fe..5f86159c 100644 --- a/tests/unit/src/com/android/intentresolver/ui/model/ActivityModelTest.kt +++ b/tests/unit/src/com/android/intentresolver/ui/model/ActivityModelTest.kt @@ -21,6 +21,7 @@ import android.content.Intent.ACTION_CHOOSER import android.content.Intent.EXTRA_TEXT import android.net.Uri import com.android.intentresolver.ext.toParcelAndBack +import com.android.intentresolver.shared.model.ActivityModel import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import org.junit.Test @@ -54,7 +55,7 @@ class ActivityModelTest { intent = Intent(), launchedFromUid = 1000, launchedFromPackage = "other.example.com", - referrer = Uri.parse("android-app://app.example.com") + referrer = Uri.parse("android-app://app.example.com"), ) assertThat(launch1.referrerPackage).isEqualTo("app.example.com") @@ -67,7 +68,7 @@ class ActivityModelTest { intent = Intent(), launchedFromUid = 1000, launchedFromPackage = "example.com", - referrer = Uri.parse("http://some.other.value") + referrer = Uri.parse("http://some.other.value"), ) assertThat(launch.referrerPackage).isNull() @@ -80,7 +81,7 @@ class ActivityModelTest { intent = Intent(), launchedFromUid = 1000, launchedFromPackage = "example.com", - referrer = null + referrer = null, ) assertThat(launch.referrerPackage).isNull() diff --git a/tests/unit/src/com/android/intentresolver/ui/viewmodel/ChooserRequestTest.kt b/tests/unit/src/com/android/intentresolver/ui/viewmodel/ChooserRequestTest.kt index 01904c7f..7bd4edee 100644 --- a/tests/unit/src/com/android/intentresolver/ui/viewmodel/ChooserRequestTest.kt +++ b/tests/unit/src/com/android/intentresolver/ui/viewmodel/ChooserRequestTest.kt @@ -34,7 +34,7 @@ import androidx.core.os.bundleOf import com.android.intentresolver.ContentTypeHint import com.android.intentresolver.data.model.ChooserRequest import com.android.intentresolver.inject.FakeChooserServiceFlags -import com.android.intentresolver.ui.model.ActivityModel +import com.android.intentresolver.shared.model.ActivityModel import com.android.intentresolver.validation.Importance import com.android.intentresolver.validation.Invalid import com.android.intentresolver.validation.NoValue @@ -45,7 +45,7 @@ import org.junit.Test private fun createActivityModel( targetIntent: Intent?, referrer: Uri? = null, - additionalIntents: List<Intent>? = null + additionalIntents: List<Intent>? = null, ) = ActivityModel( Intent(ACTION_CHOOSER).apply { @@ -54,7 +54,7 @@ private fun createActivityModel( }, launchedFromUid = 10000, launchedFromPackage = "com.android.example", - referrer = referrer ?: "android-app://com.android.example".toUri() + referrer = referrer ?: "android-app://com.android.example".toUri(), ) class ChooserRequestTest { @@ -245,7 +245,7 @@ class ChooserRequestTest { val model = createActivityModel(Intent(ACTION_SEND)) model.intent.putExtra( Intent.EXTRA_CHOOSER_CONTENT_TYPE_HINT, - Intent.CHOOSER_CONTENT_TYPE_ALBUM + Intent.CHOOSER_CONTENT_TYPE_ALBUM, ) val result = readChooserRequest(model, fakeChooserServiceFlags) diff --git a/tests/unit/src/com/android/intentresolver/ui/viewmodel/ResolverRequestTest.kt b/tests/unit/src/com/android/intentresolver/ui/viewmodel/ResolverRequestTest.kt index bd80235d..70512021 100644 --- a/tests/unit/src/com/android/intentresolver/ui/viewmodel/ResolverRequestTest.kt +++ b/tests/unit/src/com/android/intentresolver/ui/viewmodel/ResolverRequestTest.kt @@ -22,8 +22,8 @@ import android.os.UserHandle import androidx.core.net.toUri import androidx.core.os.bundleOf import com.android.intentresolver.ResolverActivity.PROFILE_WORK +import com.android.intentresolver.shared.model.ActivityModel import com.android.intentresolver.shared.model.Profile.Type.WORK -import com.android.intentresolver.ui.model.ActivityModel import com.android.intentresolver.ui.model.ResolverRequest import com.android.intentresolver.validation.Invalid import com.android.intentresolver.validation.UncaughtException @@ -34,15 +34,12 @@ import org.junit.Test private val targetUri = Uri.parse("content://example.com/123") -private fun createActivityModel( - targetIntent: Intent, - referrer: Uri? = null, -) = +private fun createActivityModel(targetIntent: Intent, referrer: Uri? = null) = ActivityModel( intent = targetIntent, launchedFromUid = 10000, launchedFromPackage = "com.android.example", - referrer = referrer ?: "android-app://com.android.example".toUri() + referrer = referrer ?: "android-app://com.android.example".toUri(), ) class ResolverRequestTest { |