diff options
author | 2024-01-26 12:03:59 -0500 | |
---|---|---|
committer | 2024-01-30 13:04:58 -0500 | |
commit | f0c6a508f930c7dab1ec95fa6b322abdc6609bbe (patch) | |
tree | 3bf332372067cb24a913f5d87bb0527c172c5509 /tests/shared | |
parent | f30cb97a784ba508a82863ef74ea0135355aad0c (diff) |
Rename CallerInfo -> ActivityLaunch and inject
Rename CallerInfo to ActivityLaunch and renames some existing
properties as appropriate for clarity.
Adds the [Intent] from the activity. This completes the set of
info that is needed as inputs from the caller, containing the
extras with all request parameters.
Updates readChooserRequest require only an ActivityLaunchInfo
instance.
Injects ActivityLaunch into usage sites. This removes the direct
link of reading acitivty.intent, and will allow writing test code
which operates directly on inputs without starting an activity.
Introduces an extension method to minimize duplicated code in the
activities: CreationExtras.addDefaultArgs:
Bug: 300157408
Test: atest IntentResolver-tests-activity
Test: atest IntentResolver-tests-unit:ActivityLaunchTest
Change-Id: Ie132cb3d61e139e03316063186c3ad79d2c488ef
Diffstat (limited to 'tests/shared')
-rw-r--r-- | tests/shared/src/com/android/intentresolver/v2/ext/ParcelableExt.kt | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/shared/src/com/android/intentresolver/v2/ext/ParcelableExt.kt b/tests/shared/src/com/android/intentresolver/v2/ext/ParcelableExt.kt new file mode 100644 index 00000000..3878c39c --- /dev/null +++ b/tests/shared/src/com/android/intentresolver/v2/ext/ParcelableExt.kt @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.intentresolver.v2.ext + +import android.os.Parcel +import android.os.Parcelable +import java.lang.reflect.Field + +inline fun <reified T : Parcelable> T.toParcelAndBack(): T { + val creator: Parcelable.Creator<out T> = getCreator() + val parcel = Parcel.obtain() + writeToParcel(parcel, 0) + parcel.setDataPosition(0) + return creator.createFromParcel(parcel) +} + +inline fun <reified T : Parcelable> getCreator(): Parcelable.Creator<out T> { + return getCreator(T::class.java) +} + +inline fun <reified T : Parcelable> getCreator(clazz: Class<out T>): Parcelable.Creator<out T> { + return try { + val field: Field = clazz.getDeclaredField("CREATOR") + @Suppress("UNCHECKED_CAST") + field.get(null) as Parcelable.Creator<T> + } catch (e: NoSuchFieldException) { + error("$clazz is a Parcelable without CREATOR") + } catch (e: IllegalAccessException) { + error("CREATOR in $clazz::class is not accessible") + } +} |