From 686477182299c6e3780c096f3461267d4f7c4ddd Mon Sep 17 00:00:00 2001 From: Mark Renouf Date: Thu, 22 Feb 2024 11:33:14 -0500 Subject: Renames ActivityLaunch to ActivityModel This is a straight automated rename refactor for clarity and based on team feedback and arch guidelines for consistency. Only changing names with no functional changes. Bug: 309960444 Change-Id: Ibe93ae5fc0198432fc65d9c43922d6fb6913364d --- .../android/intentresolver/v2/ChooserActivity.java | 22 +++---- .../intentresolver/v2/ResolverActivity.java | 22 +++---- .../intentresolver/v2/ui/model/ActivityLaunch.kt | 68 ---------------------- .../v2/ui/model/ActivityLaunchModule.kt | 43 -------------- .../intentresolver/v2/ui/model/ActivityModel.kt | 68 ++++++++++++++++++++++ .../v2/ui/model/ActivityModelModule.kt | 43 ++++++++++++++ .../v2/ui/viewmodel/ChooserRequestReader.kt | 6 +- .../v2/ui/viewmodel/ChooserViewModel.kt | 12 ++-- .../v2/ui/viewmodel/ResolverRequestReader.kt | 4 +- 9 files changed, 144 insertions(+), 144 deletions(-) delete mode 100644 java/src/com/android/intentresolver/v2/ui/model/ActivityLaunch.kt delete mode 100644 java/src/com/android/intentresolver/v2/ui/model/ActivityLaunchModule.kt create mode 100644 java/src/com/android/intentresolver/v2/ui/model/ActivityModel.kt create mode 100644 java/src/com/android/intentresolver/v2/ui/model/ActivityModelModule.kt (limited to 'java/src') diff --git a/java/src/com/android/intentresolver/v2/ChooserActivity.java b/java/src/com/android/intentresolver/v2/ChooserActivity.java index 68815067..3d8bfac5 100644 --- a/java/src/com/android/intentresolver/v2/ChooserActivity.java +++ b/java/src/com/android/intentresolver/v2/ChooserActivity.java @@ -156,7 +156,7 @@ import com.android.intentresolver.v2.profiles.TabConfig; import com.android.intentresolver.v2.ui.ActionTitle; import com.android.intentresolver.v2.ui.ShareResultSender; import com.android.intentresolver.v2.ui.ShareResultSenderFactory; -import com.android.intentresolver.v2.ui.model.ActivityLaunch; +import com.android.intentresolver.v2.ui.model.ActivityModel; import com.android.intentresolver.v2.ui.model.ChooserRequest; import com.android.intentresolver.v2.ui.viewmodel.ChooserViewModel; import com.android.intentresolver.widget.ImagePreviewView; @@ -273,7 +273,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements private static final int SCROLL_STATUS_SCROLLING_VERTICAL = 1; private static final int SCROLL_STATUS_SCROLLING_HORIZONTAL = 2; - @Inject public ActivityLaunch mActivityLaunch; + @Inject public ActivityModel mActivityModel; @Inject public FeatureFlags mFeatureFlags; @Inject public android.service.chooser.FeatureFlags mChooserServiceFeatureFlags; @Inject public EventLog mEventLog; @@ -347,15 +347,15 @@ public class ChooserActivity extends Hilt_ChooserActivity implements public CreationExtras getDefaultViewModelCreationExtras() { return addDefaultArgs( super.getDefaultViewModelCreationExtras(), - new Pair<>(ActivityLaunch.ACTIVITY_LAUNCH_KEY, mActivityLaunch)); + new Pair<>(ActivityModel.ACTIVITY_MODEL_KEY, mActivityModel)); } @Override protected final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "onCreate"); - Log.i(TAG, "activityLaunch=" + mActivityLaunch.toString()); - int callerUid = mActivityLaunch.getFromUid(); + Log.i(TAG, "activityLaunch=" + mActivityModel.toString()); + int callerUid = mActivityModel.getLaunchedFromUid(); if (callerUid < 0 || UserHandle.isIsolated(callerUid)) { Log.e(TAG, "Can't start a resolver from uid " + callerUid); finish(); @@ -371,7 +371,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements mViewModel.getChooserRequest().getChosenComponentSender(); if (chosenComponentSender != null) { mShareResultSender = mShareResultSenderFactory - .create(mActivityLaunch.getFromUid(), chosenComponentSender); + .create(mActivityModel.getLaunchedFromUid(), chosenComponentSender); } mLogic = createActivityLogic(); init(); @@ -491,7 +491,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements .get(BasePreviewViewModel.class); previewViewModel.init( chooserRequest.getTargetIntent(), - mActivityLaunch.getIntent(), + mActivityModel.getIntent(), chooserRequest.getAdditionalContentUri(), chooserRequest.getFocusedItemPosition(), mChooserServiceFeatureFlags.chooserPayloadToggling()); @@ -862,9 +862,9 @@ public class ChooserActivity extends Hilt_ChooserActivity implements } } catch (RuntimeException e) { Slog.wtf(TAG, - "Unable to launch as uid " + mActivityLaunch.getFromUid() - + " package " + mActivityLaunch.getFromPackage() + ", while running in " - + ActivityThread.currentProcessName(), e); + "Unable to launch as uid " + mActivityModel.getLaunchedFromUid() + + " package " + mActivityModel.getLaunchedFromPackage() + + ", while running in " + ActivityThread.currentProcessName(), e); } } @@ -1658,7 +1658,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements return false; } - return mActivityLaunch.getIntent().getBooleanExtra(Intent.EXTRA_AUTO_LAUNCH_SINGLE_CHOICE, + return mActivityModel.getIntent().getBooleanExtra(Intent.EXTRA_AUTO_LAUNCH_SINGLE_CHOICE, true); } diff --git a/java/src/com/android/intentresolver/v2/ResolverActivity.java b/java/src/com/android/intentresolver/v2/ResolverActivity.java index 241b6735..98e82b00 100644 --- a/java/src/com/android/intentresolver/v2/ResolverActivity.java +++ b/java/src/com/android/intentresolver/v2/ResolverActivity.java @@ -113,7 +113,7 @@ import com.android.intentresolver.v2.profiles.OnProfileSelectedListener; import com.android.intentresolver.v2.profiles.TabConfig; import com.android.intentresolver.v2.profiles.ResolverMultiProfilePagerAdapter; import com.android.intentresolver.v2.ui.ActionTitle; -import com.android.intentresolver.v2.ui.model.ActivityLaunch; +import com.android.intentresolver.v2.ui.model.ActivityModel; import com.android.intentresolver.v2.ui.model.ResolverRequest; import com.android.intentresolver.v2.validation.ValidationResult; import com.android.intentresolver.widget.ResolverDrawerLayout; @@ -149,7 +149,7 @@ public class ResolverActivity extends Hilt_ResolverActivity implements ResolverListAdapter.ResolverListCommunicator { @Inject public PackageManager mPackageManager; - @Inject public ActivityLaunch mActivityLaunch; + @Inject public ActivityModel mActivityModel; @Inject public DevicePolicyResources mDevicePolicyResources; @Inject public IntentForwarding mIntentForwarding; private ResolverRequest mResolverRequest; @@ -227,7 +227,7 @@ public class ResolverActivity extends Hilt_ResolverActivity implements public CreationExtras getDefaultViewModelCreationExtras() { return addDefaultArgs( super.getDefaultViewModelCreationExtras(), - new Pair<>(ActivityLaunch.ACTIVITY_LAUNCH_KEY, mActivityLaunch)); + new Pair<>(ActivityModel.ACTIVITY_MODEL_KEY, mActivityModel)); } @Override @@ -235,14 +235,14 @@ public class ResolverActivity extends Hilt_ResolverActivity implements super.onCreate(savedInstanceState); setTheme(R.style.Theme_DeviceDefault_Resolver); Log.i(TAG, "onCreate"); - Log.i(TAG, "activityLaunch=" + mActivityLaunch.toString()); - int callerUid = mActivityLaunch.getFromUid(); + Log.i(TAG, "activityLaunch=" + mActivityModel.toString()); + int callerUid = mActivityModel.getLaunchedFromUid(); if (callerUid < 0 || UserHandle.isIsolated(callerUid)) { Log.e(TAG, "Can't start a resolver from uid " + callerUid); finish(); } - ValidationResult result = readResolverRequest(mActivityLaunch); + ValidationResult result = readResolverRequest(mActivityModel); if (!result.isSuccess()) { result.reportToLogcat(TAG); finish(); @@ -748,7 +748,7 @@ public class ResolverActivity extends Hilt_ResolverActivity implements new ResolverRankerServiceResolverComparator( this, mResolverRequest.getIntent(), - mActivityLaunch.getReferrerPackage(), + mActivityModel.getReferrerPackage(), null, null, getResolverRankerServiceUserHandleList(userHandle), @@ -756,9 +756,9 @@ public class ResolverActivity extends Hilt_ResolverActivity implements return new ResolverListController( this, mPackageManager, - mActivityLaunch.getIntent(), - mActivityLaunch.getReferrerPackage(), - mActivityLaunch.getFromUid(), + mActivityModel.getIntent(), + mActivityModel.getReferrerPackage(), + mActivityModel.getLaunchedFromUid(), resolverComparator, getQueryIntentsUser(userHandle)); } @@ -1479,7 +1479,7 @@ public class ResolverActivity extends Hilt_ResolverActivity implements } } catch (RuntimeException e) { Slog.wtf(TAG, - "Unable to launch as uid " + mActivityLaunch.getFromUid() + "Unable to launch as uid " + mActivityModel.getLaunchedFromUid() + " package " + getLaunchedFromPackage() + ", while running in " + ActivityThread.currentProcessName(), e); } diff --git a/java/src/com/android/intentresolver/v2/ui/model/ActivityLaunch.kt b/java/src/com/android/intentresolver/v2/ui/model/ActivityLaunch.kt deleted file mode 100644 index e5f342d9..00000000 --- a/java/src/com/android/intentresolver/v2/ui/model/ActivityLaunch.kt +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.ui.model - -import android.content.Intent -import android.net.Uri -import android.os.Parcel -import android.os.Parcelable -import com.android.intentresolver.v2.ext.readParcelable -import com.android.intentresolver.v2.ext.requireParcelable - -/** Contains Activity-scope information about the state at launch time. */ -data class ActivityLaunch( - /** The [Intent] received by the app */ - val intent: Intent, - /** The identifier for the sending app and user */ - val fromUid: Int, - /** The package of the sending app */ - val fromPackage: String, - /** The referrer as supplied to the activity. */ - val referrer: Uri? -) : Parcelable { - constructor( - source: Parcel - ) : this( - intent = source.requireParcelable(), - fromUid = source.readInt(), - fromPackage = requireNotNull(source.readString()), - referrer = source.readParcelable() - ) - - /** A package name from referrer, if it is an android-app URI */ - val referrerPackage = referrer?.takeIf { it.scheme == ANDROID_APP_SCHEME }?.authority - - override fun describeContents() = 0 /* flags */ - - override fun writeToParcel(dest: Parcel, flags: Int) { - dest.writeParcelable(intent, flags) - dest.writeInt(fromUid) - dest.writeString(fromPackage) - dest.writeParcelable(referrer, flags) - } - - companion object { - const val ACTIVITY_LAUNCH_KEY = "com.android.intentresolver.ACTIVITY_LAUNCH" - - @JvmField - @Suppress("unused") - val CREATOR = - object : Parcelable.Creator { - override fun newArray(size: Int) = arrayOfNulls(size) - override fun createFromParcel(source: Parcel) = ActivityLaunch(source) - } - } -} diff --git a/java/src/com/android/intentresolver/v2/ui/model/ActivityLaunchModule.kt b/java/src/com/android/intentresolver/v2/ui/model/ActivityLaunchModule.kt deleted file mode 100644 index bb8f3a54..00000000 --- a/java/src/com/android/intentresolver/v2/ui/model/ActivityLaunchModule.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.ui.model - -import android.app.Activity -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.components.ActivityComponent -import dagger.hilt.android.scopes.ActivityScoped - -@Module -@InstallIn(ActivityComponent::class) -object ActivityLaunchModule { - - @Provides - @ActivityScoped - fun callerInfo(activity: Activity): ActivityLaunch { - return ActivityLaunch( - activity.intent, - activity.launchedFromUid, - requireNotNull(activity.launchedFromPackage) { - "activity.launchedFromPackage was null. This is expected to be non-null for " + - "any system-signed application!" - }, - activity.referrer - ) - } -} diff --git a/java/src/com/android/intentresolver/v2/ui/model/ActivityModel.kt b/java/src/com/android/intentresolver/v2/ui/model/ActivityModel.kt new file mode 100644 index 00000000..02bb6640 --- /dev/null +++ b/java/src/com/android/intentresolver/v2/ui/model/ActivityModel.kt @@ -0,0 +1,68 @@ +/* + * 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.ui.model + +import android.content.Intent +import android.net.Uri +import android.os.Parcel +import android.os.Parcelable +import com.android.intentresolver.v2.ext.readParcelable +import com.android.intentresolver.v2.ext.requireParcelable + +/** Contains Activity-scope information about the state when started. */ +data class ActivityModel( + /** The [Intent] received by the app */ + val intent: Intent, + /** The identifier for the sending app and user */ + val launchedFromUid: Int, + /** The package of the sending app */ + val launchedFromPackage: String, + /** The referrer as supplied to the activity. */ + val referrer: Uri? +) : Parcelable { + constructor( + source: Parcel + ) : this( + intent = source.requireParcelable(), + launchedFromUid = source.readInt(), + launchedFromPackage = requireNotNull(source.readString()), + referrer = source.readParcelable() + ) + + /** A package name from referrer, if it is an android-app URI */ + val referrerPackage = referrer?.takeIf { it.scheme == ANDROID_APP_SCHEME }?.authority + + override fun describeContents() = 0 /* flags */ + + override fun writeToParcel(dest: Parcel, flags: Int) { + dest.writeParcelable(intent, flags) + dest.writeInt(launchedFromUid) + dest.writeString(launchedFromPackage) + dest.writeParcelable(referrer, flags) + } + + companion object { + const val ACTIVITY_MODEL_KEY = "com.android.intentresolver.ACTIVITY_MODEL" + + @JvmField + @Suppress("unused") + val CREATOR = + object : Parcelable.Creator { + override fun newArray(size: Int) = arrayOfNulls(size) + override fun createFromParcel(source: Parcel) = ActivityModel(source) + } + } +} diff --git a/java/src/com/android/intentresolver/v2/ui/model/ActivityModelModule.kt b/java/src/com/android/intentresolver/v2/ui/model/ActivityModelModule.kt new file mode 100644 index 00000000..d9fb1fa6 --- /dev/null +++ b/java/src/com/android/intentresolver/v2/ui/model/ActivityModelModule.kt @@ -0,0 +1,43 @@ +/* + * 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.ui.model + +import android.app.Activity +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.scopes.ActivityScoped + +@Module +@InstallIn(ActivityComponent::class) +object ActivityModelModule { + + @Provides + @ActivityScoped + fun activityModel(activity: Activity): ActivityModel { + return ActivityModel( + intent = activity.intent, + launchedFromUid = activity.launchedFromUid, + launchedFromPackage = requireNotNull(activity.launchedFromPackage) { + "activity.launchedFromPackage was null. This is expected to be non-null for " + + "any system-signed application!" + }, + referrer = activity.referrer + ) + } +} diff --git a/java/src/com/android/intentresolver/v2/ui/viewmodel/ChooserRequestReader.kt b/java/src/com/android/intentresolver/v2/ui/viewmodel/ChooserRequestReader.kt index e32d69b0..8fe1dba5 100644 --- a/java/src/com/android/intentresolver/v2/ui/viewmodel/ChooserRequestReader.kt +++ b/java/src/com/android/intentresolver/v2/ui/viewmodel/ChooserRequestReader.kt @@ -47,7 +47,7 @@ import com.android.intentresolver.inject.ChooserServiceFlags import com.android.intentresolver.util.hasValidIcon import com.android.intentresolver.v2.ext.hasSendAction import com.android.intentresolver.v2.ext.ifMatch -import com.android.intentresolver.v2.ui.model.ActivityLaunch +import com.android.intentresolver.v2.ui.model.ActivityModel import com.android.intentresolver.v2.ui.model.ChooserRequest import com.android.intentresolver.v2.validation.ValidationResult import com.android.intentresolver.v2.validation.types.IntentOrUri @@ -65,7 +65,7 @@ internal fun Intent.maybeAddSendActionFlags() = } fun readChooserRequest( - launch: ActivityLaunch, + launch: ActivityModel, flags: ChooserServiceFlags ): ValidationResult { val extras = launch.intent.extras ?: Bundle() @@ -162,7 +162,7 @@ fun readChooserRequest( isSendActionTarget = isSendAction, targetType = targetIntent.type, launchedFromPackage = - requireNotNull(launch.fromPackage) { + requireNotNull(launch.launchedFromPackage) { "launch.fromPackage was null, See Activity.getLaunchedFromPackage()" }, title = customTitle, diff --git a/java/src/com/android/intentresolver/v2/ui/viewmodel/ChooserViewModel.kt b/java/src/com/android/intentresolver/v2/ui/viewmodel/ChooserViewModel.kt index a03f3769..cd1a16e3 100644 --- a/java/src/com/android/intentresolver/v2/ui/viewmodel/ChooserViewModel.kt +++ b/java/src/com/android/intentresolver/v2/ui/viewmodel/ChooserViewModel.kt @@ -19,8 +19,8 @@ import android.util.Log import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import com.android.intentresolver.inject.ChooserServiceFlags -import com.android.intentresolver.v2.ui.model.ActivityLaunch -import com.android.intentresolver.v2.ui.model.ActivityLaunch.Companion.ACTIVITY_LAUNCH_KEY +import com.android.intentresolver.v2.ui.model.ActivityModel +import com.android.intentresolver.v2.ui.model.ActivityModel.Companion.ACTIVITY_MODEL_KEY import com.android.intentresolver.v2.ui.model.ChooserRequest import com.android.intentresolver.v2.validation.ValidationResult import dagger.hilt.android.lifecycle.HiltViewModel @@ -36,14 +36,14 @@ constructor( flags: ChooserServiceFlags, ) : ViewModel() { - private val mActivityLaunch: ActivityLaunch = - requireNotNull(args[ACTIVITY_LAUNCH_KEY]) { - "ActivityLaunch missing in SavedStateHandle! ($ACTIVITY_LAUNCH_KEY)" + private val mActivityModel: ActivityModel = + requireNotNull(args[ACTIVITY_MODEL_KEY]) { + "ActivityModel missing in SavedStateHandle! ($ACTIVITY_MODEL_KEY)" } /** The result of reading and validating the inputs provided in savedState. */ private val status: ValidationResult = - readChooserRequest(mActivityLaunch, flags) + readChooserRequest(mActivityModel, flags) val chooserRequest: ChooserRequest by lazy { status.getOrThrow() } diff --git a/java/src/com/android/intentresolver/v2/ui/viewmodel/ResolverRequestReader.kt b/java/src/com/android/intentresolver/v2/ui/viewmodel/ResolverRequestReader.kt index 22d76493..bbc376ea 100644 --- a/java/src/com/android/intentresolver/v2/ui/viewmodel/ResolverRequestReader.kt +++ b/java/src/com/android/intentresolver/v2/ui/viewmodel/ResolverRequestReader.kt @@ -21,7 +21,7 @@ import android.os.UserHandle import com.android.intentresolver.v2.ResolverActivity.PROFILE_PERSONAL import com.android.intentresolver.v2.ResolverActivity.PROFILE_WORK import com.android.intentresolver.v2.shared.model.Profile -import com.android.intentresolver.v2.ui.model.ActivityLaunch +import com.android.intentresolver.v2.ui.model.ActivityModel import com.android.intentresolver.v2.ui.model.ResolverRequest import com.android.intentresolver.v2.validation.Validation import com.android.intentresolver.v2.validation.ValidationResult @@ -33,7 +33,7 @@ const val EXTRA_SELECTED_PROFILE = "com.android.internal.app.ResolverActivity.EXTRA_SELECTED_PROFILE" const val EXTRA_IS_AUDIO_CAPTURE_DEVICE = "is_audio_capture_device" -fun readResolverRequest(launch: ActivityLaunch): ValidationResult { +fun readResolverRequest(launch: ActivityModel): ValidationResult { @Suppress("DEPRECATION") return validateFrom((launch.intent.extras ?: Bundle())::get) { val callingUser = optional(value(EXTRA_CALLING_USER)) -- cgit v1.2.3-59-g8ed1b