Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35b9960b authored by Holly Sun's avatar Holly Sun
Browse files

[a11y] Fix crash when using talkback to add to home screen.

1. Fix a crash from http://cs/android-internal/packages/apps/Launcher3/src/com/android/launcher3/Launcher.java;l=1928;rcl=d677caa75de74f1c3a88367cad67ae405fd2903d. It can also be `ITEM_TYPE_SEARCH_ACTION`. Remove the `itemType` check and just use the `PendingAddItemInfo` class type.
2. Override `startConfigActivity` in `PinShortcutRequestActivityInfo`, so that `Launcher#onActivityResult` can be triggered properly from `Launcher#processShortcutFromDrop` (http://cs/android-internal/packages/apps/Launcher3/src/com/android/launcher3/Launcher.java;l=1939;rcl=d677caa75de74f1c3a88367cad67ae405fd2903d )
3. Then we call to `Launcher#completeAdd` -> `completeAddShortcut`. The original `info` passed to `processShortcutFromDrop` doesn’t have a `componentName` (new code), so remove the component non-null check from `completeAddShortcut`.

Bug: 287166186
Bug: 287167527
Bug: 287166771
Test: manual
Flag: N/A
Change-Id: Id3e1444de188f2d2af760f58e3d9814a2b7abd88
parent c84ecc0f
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -24,6 +24,8 @@ import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.os.Bundle;
import android.util.Log;
import android.util.Log;


import com.android.launcher3.util.StartActivityParams;

public class ProxyActivityStarter extends Activity {
public class ProxyActivityStarter extends Activity {


    private static final String TAG = "ProxyActivityStarter";
    private static final String TAG = "ProxyActivityStarter";
+1 −1
Original line number Original line Diff line number Diff line
@@ -120,7 +120,6 @@ import com.android.launcher3.model.WellbeingModel;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.proxy.ProxyActivityStarter;
import com.android.launcher3.proxy.ProxyActivityStarter;
import com.android.launcher3.proxy.StartActivityParams;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.statehandlers.DesktopVisibilityController;
import com.android.launcher3.statehandlers.DesktopVisibilityController;
import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory;
import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory;
@@ -152,6 +151,7 @@ import com.android.launcher3.util.RunnableList;
import com.android.launcher3.util.SplitConfigurationOptions;
import com.android.launcher3.util.SplitConfigurationOptions;
import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
import com.android.launcher3.util.StartActivityParams;
import com.android.launcher3.util.TouchController;
import com.android.launcher3.util.TouchController;
import com.android.launcher3.widget.LauncherWidgetHolder;
import com.android.launcher3.widget.LauncherWidgetHolder;
import com.android.quickstep.OverviewCommandHelper;
import com.android.quickstep.OverviewCommandHelper;
+5 −12
Original line number Original line Diff line number Diff line
@@ -1407,8 +1407,7 @@ public class Launcher extends StatefulActivity<LauncherState>
     */
     */
    protected void completeAddShortcut(Intent data, int container, int screenId, int cellX,
    protected void completeAddShortcut(Intent data, int container, int screenId, int cellX,
            int cellY, PendingRequestArgs args) {
            int cellY, PendingRequestArgs args) {
        if (args.getRequestCode() != REQUEST_CREATE_SHORTCUT
        if (args.getRequestCode() != REQUEST_CREATE_SHORTCUT) {
                || args.getPendingIntent().getComponent() == null) {
            return;
            return;
        }
        }


@@ -1916,16 +1915,10 @@ public class Launcher extends StatefulActivity<LauncherState>
        info.spanX = spanX;
        info.spanX = spanX;
        info.spanY = spanY;
        info.spanY = spanY;


        switch (info.itemType) {
        if (info instanceof PendingAddWidgetInfo) {
            case LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET:
            case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
            addAppWidgetFromDrop((PendingAddWidgetInfo) info);
            addAppWidgetFromDrop((PendingAddWidgetInfo) info);
                break;
        } else { // info can only be PendingAddShortcutInfo
            case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT:
            processShortcutFromDrop((PendingAddShortcutInfo) info);
            processShortcutFromDrop((PendingAddShortcutInfo) info);
                break;
            default:
                throw new IllegalStateException("Unknown item type: " + info.itemType);
        }
        }
    }
    }


+9 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.launcher3.dragndrop;
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.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
import static com.android.launcher3.LauncherState.EDIT_MODE;
import static com.android.launcher3.LauncherState.EDIT_MODE;
import static com.android.launcher3.LauncherState.SPRING_LOADED;
import static com.android.launcher3.LauncherState.SPRING_LOADED;
@@ -25,6 +27,7 @@ import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Activity;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.pm.LauncherApps;
import android.content.pm.LauncherApps;
import android.content.pm.LauncherApps.PinItemRequest;
import android.content.pm.LauncherApps.PinItemRequest;
import android.content.pm.PackageManager;
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.model.data.WorkspaceItemInfo;
import com.android.launcher3.pm.PinRequestHelper;
import com.android.launcher3.pm.PinRequestHelper;
import com.android.launcher3.pm.ShortcutConfigActivityInfo;
import com.android.launcher3.pm.ShortcutConfigActivityInfo;
import com.android.launcher3.util.StartActivityParams;


import java.util.function.Supplier;
import java.util.function.Supplier;


@@ -105,7 +109,11 @@ public class PinShortcutRequestActivityInfo extends ShortcutConfigActivityInfo {


    @Override
    @Override
    public boolean startConfigActivity(Activity activity, int requestCode) {
    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
    @Override
+6 −2
Original line number Original line Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 * limitations under the License.
 */
 */


package com.android.launcher3.proxy;
package com.android.launcher3.util;


import static android.app.PendingIntent.FLAG_MUTABLE;
import static android.app.PendingIntent.FLAG_MUTABLE;
import static android.app.PendingIntent.FLAG_ONE_SHOT;
import static android.app.PendingIntent.FLAG_ONE_SHOT;
@@ -34,6 +34,9 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.util.Log;
import android.util.Log;


/**
 * Wrapper class for parameters to start an activity.
 */
public class StartActivityParams implements Parcelable {
public class StartActivityParams implements Parcelable {


    private static final String TAG = "StartActivityParams";
    private static final String TAG = "StartActivityParams";
@@ -93,6 +96,7 @@ public class StartActivityParams implements Parcelable {
        parcel.writeBundle(options);
        parcel.writeBundle(options);
    }
    }


    /** Perform the operation on the pendingIntent. */
    public void deliverResult(Context context, int resultCode, Intent data) {
    public void deliverResult(Context context, int resultCode, Intent data) {
        ActivityOptions options = allowBGLaunch(ActivityOptions.makeBasic());
        ActivityOptions options = allowBGLaunch(ActivityOptions.makeBasic());
        try {
        try {
@@ -105,7 +109,7 @@ public class StartActivityParams implements Parcelable {
    }
    }


    public static final Parcelable.Creator<StartActivityParams> CREATOR =
    public static final Parcelable.Creator<StartActivityParams> CREATOR =
            new Parcelable.Creator<StartActivityParams>() {
            new Parcelable.Creator<>() {
                public StartActivityParams createFromParcel(Parcel source) {
                public StartActivityParams createFromParcel(Parcel source) {
                    return new StartActivityParams(source);
                    return new StartActivityParams(source);
                }
                }