diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2023-07-14 17:49:46 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-07-14 17:49:46 +0000 |
commit | 2a749f1e60c8d4edafcf53af19469a846a0ab9d3 (patch) | |
tree | 448868f8b50b54fc99804609f75082ca5474a5cc /src | |
parent | 64746f8a29c6d8c11e15720b767fabfd64bd8cb4 (diff) | |
parent | 1a9a98005d7b9e5f913c87b6bdcc51f55787e89b (diff) | |
download | Launcher3-2a749f1e60c8d4edafcf53af19469a846a0ab9d3.tar.gz |
Merge "[a11y] Fix crash when using talkback to add to home screen." into udc-d1-dev
Diffstat (limited to 'src')
3 files changed, 131 insertions, 13 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index fed123f1b3..ce8d25a12c 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1418,8 +1418,7 @@ public class Launcher extends StatefulActivity<LauncherState> */ protected void completeAddShortcut(Intent data, int container, int screenId, int cellX, int cellY, PendingRequestArgs args) { - if (args.getRequestCode() != REQUEST_CREATE_SHORTCUT - || args.getPendingIntent().getComponent() == null) { + if (args.getRequestCode() != REQUEST_CREATE_SHORTCUT) { return; } @@ -1928,16 +1927,10 @@ public class Launcher extends StatefulActivity<LauncherState> info.spanX = spanX; info.spanY = spanY; - switch (info.itemType) { - case LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET: - case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET: - addAppWidgetFromDrop((PendingAddWidgetInfo) info); - break; - case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT: - processShortcutFromDrop((PendingAddShortcutInfo) info); - break; - default: - throw new IllegalStateException("Unknown item type: " + info.itemType); + if (info instanceof PendingAddWidgetInfo) { + addAppWidgetFromDrop((PendingAddWidgetInfo) info); + } else { // info can only be PendingAddShortcutInfo + processShortcutFromDrop((PendingAddShortcutInfo) info); } } diff --git a/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java b/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java index 7bdec1cfde..0f3cad66a2 100644 --- a/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java +++ b/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java @@ -16,6 +16,8 @@ package com.android.launcher3.dragndrop; +import static android.content.pm.LauncherApps.EXTRA_PIN_ITEM_REQUEST; + import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY; import static com.android.launcher3.LauncherState.EDIT_MODE; import static com.android.launcher3.LauncherState.SPRING_LOADED; @@ -25,6 +27,7 @@ import android.annotation.TargetApi; import android.app.Activity; import android.content.ComponentName; import android.content.Context; +import android.content.Intent; import android.content.pm.LauncherApps; import android.content.pm.LauncherApps.PinItemRequest; import android.content.pm.PackageManager; @@ -41,6 +44,7 @@ import com.android.launcher3.icons.IconCache; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.pm.PinRequestHelper; import com.android.launcher3.pm.ShortcutConfigActivityInfo; +import com.android.launcher3.util.StartActivityParams; import java.util.function.Supplier; @@ -105,7 +109,11 @@ public class PinShortcutRequestActivityInfo extends ShortcutConfigActivityInfo { @Override public boolean startConfigActivity(Activity activity, int requestCode) { - return false; + new StartActivityParams(activity, requestCode).deliverResult( + activity, + Activity.RESULT_OK, + new Intent().putExtra(EXTRA_PIN_ITEM_REQUEST, mRequestSupplier.get())); + return true; } @Override diff --git a/src/com/android/launcher3/util/StartActivityParams.java b/src/com/android/launcher3/util/StartActivityParams.java new file mode 100644 index 0000000000..6e60b2a0d1 --- /dev/null +++ b/src/com/android/launcher3/util/StartActivityParams.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2019 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.launcher3.util; + +import static android.app.PendingIntent.FLAG_MUTABLE; +import static android.app.PendingIntent.FLAG_ONE_SHOT; +import static android.app.PendingIntent.FLAG_UPDATE_CURRENT; + +import android.app.Activity; +import android.app.PendingIntent; +import android.app.PendingIntent.CanceledException; +import android.content.Context; +import android.content.Intent; +import android.content.IntentSender; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Log; + +/** + * Wrapper class for parameters to start an activity. + */ +public class StartActivityParams implements Parcelable { + + private static final String TAG = "StartActivityParams"; + + private final PendingIntent mPICallback; + public final int requestCode; + + public Intent intent; + + public IntentSender intentSender; + public Intent fillInIntent; + public int flagsMask; + public int flagsValues; + public int extraFlags; + public Bundle options; + + public StartActivityParams(Activity activity, int requestCode) { + this(activity.createPendingResult(requestCode, new Intent(), + FLAG_ONE_SHOT | FLAG_UPDATE_CURRENT | FLAG_MUTABLE), requestCode); + } + + public StartActivityParams(PendingIntent pendingIntent, int requestCode) { + this.mPICallback = pendingIntent; + this.requestCode = requestCode; + } + + private StartActivityParams(Parcel parcel) { + mPICallback = parcel.readTypedObject(PendingIntent.CREATOR); + requestCode = parcel.readInt(); + intent = parcel.readTypedObject(Intent.CREATOR); + + intentSender = parcel.readTypedObject(IntentSender.CREATOR); + fillInIntent = parcel.readTypedObject(Intent.CREATOR); + flagsMask = parcel.readInt(); + flagsValues = parcel.readInt(); + extraFlags = parcel.readInt(); + options = parcel.readBundle(); + } + + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int flags) { + parcel.writeTypedObject(mPICallback, flags); + parcel.writeInt(requestCode); + parcel.writeTypedObject(intent, flags); + + parcel.writeTypedObject(intentSender, flags); + parcel.writeTypedObject(fillInIntent, flags); + parcel.writeInt(flagsMask); + parcel.writeInt(flagsValues); + parcel.writeInt(extraFlags); + parcel.writeBundle(options); + } + + /** Perform the operation on the pendingIntent. */ + public void deliverResult(Context context, int resultCode, Intent data) { + try { + if (mPICallback != null) { + mPICallback.send(context, resultCode, data); + } + } catch (CanceledException e) { + Log.e(TAG, "Unable to send back result", e); + } + } + + public static final Parcelable.Creator<StartActivityParams> CREATOR = + new Parcelable.Creator<>() { + public StartActivityParams createFromParcel(Parcel source) { + return new StartActivityParams(source); + } + + public StartActivityParams[] newArray(int size) { + return new StartActivityParams[size]; + } + }; +} |