From f0c6a508f930c7dab1ec95fa6b322abdc6609bbe Mon Sep 17 00:00:00 2001 From: Mark Renouf Date: Fri, 26 Jan 2024 12:03:59 -0500 Subject: 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 --- .../android/intentresolver/v2/ext/ParcelableExt.kt | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tests/shared/src/com/android/intentresolver/v2/ext/ParcelableExt.kt (limited to 'tests/shared/src') 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 T.toParcelAndBack(): T { + val creator: Parcelable.Creator = getCreator() + val parcel = Parcel.obtain() + writeToParcel(parcel, 0) + parcel.setDataPosition(0) + return creator.createFromParcel(parcel) +} + +inline fun getCreator(): Parcelable.Creator { + return getCreator(T::class.java) +} + +inline fun getCreator(clazz: Class): Parcelable.Creator { + return try { + val field: Field = clazz.getDeclaredField("CREATOR") + @Suppress("UNCHECKED_CAST") + field.get(null) as Parcelable.Creator + } catch (e: NoSuchFieldException) { + error("$clazz is a Parcelable without CREATOR") + } catch (e: IllegalAccessException) { + error("CREATOR in $clazz::class is not accessible") + } +} -- cgit v1.2.3-59-g8ed1b