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

Commit 1188b89d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fixing multiwindow drag operation during with rotation." into ub-launcher3-dorval

parents c5c9cae7 5a81c380
Loading
Loading
Loading
Loading
+10 −19
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.os.Process;
import android.os.StrictMode;
import android.os.SystemClock;
@@ -444,6 +443,11 @@ public class Launcher extends BaseActivity
            mSharedPrefs.registerOnSharedPreferenceChangeListener(mRotationPrefChangeHandler);
        }

        if (PinItemDragListener.handleDragRequest(this, getIntent())) {
            // Temporarily enable the rotation
            mRotationEnabled = true;
        }

        // On large interfaces, or on devices that a user has specifically enabled screen rotation,
        // we want the screen to auto-rotate based on the current orientation
        setOrientation();
@@ -1769,15 +1773,8 @@ public class Launcher extends BaseActivity
            if (mLauncherCallbacks != null) {
                mLauncherCallbacks.onHomeIntent();
            }

            Parcelable dragExtra = intent
                    .getParcelableExtra(PinItemDragListener.EXTRA_PIN_ITEM_DRAG_LISTENER);
            if (dragExtra instanceof PinItemDragListener) {
                PinItemDragListener dragListener = (PinItemDragListener) dragExtra;
                dragListener.setLauncher(this);
                mDragLayer.setOnDragListener(dragListener);
            }
        }
        PinItemDragListener.handleDragRequest(this, intent);

        if (mLauncherCallbacks != null) {
            mLauncherCallbacks.onNewIntent(intent);
@@ -4099,22 +4096,16 @@ public class Launcher extends BaseActivity
        return ((Launcher) ((ContextWrapper) context).getBaseContext());
    }

    private class RotationPrefChangeHandler implements OnSharedPreferenceChangeListener, Runnable {
    private class RotationPrefChangeHandler implements OnSharedPreferenceChangeListener {

        @Override
        public void onSharedPreferenceChanged(
                SharedPreferences sharedPreferences, String key) {
            if (Utilities.ALLOW_ROTATION_PREFERENCE_KEY.equals(key)) {
                mRotationEnabled = Utilities.isAllowRotationPrefEnabled(getApplicationContext());
                if (!waitUntilResume(this, true)) {
                    run();
                }
                // Finish this instance of the activity. When the activity is recreated,
                // it will initialize the rotation preference again.
                finish();
            }
        }

        @Override
        public void run() {
            setOrientation();
        }
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.appwidget.AppWidgetManager;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.PointF;
@@ -47,6 +48,7 @@ import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.compat.PinItemRequestCompat;
import com.android.launcher3.model.WidgetItem;
@@ -148,6 +150,16 @@ public class AddItemActivity extends BaseActivity implements OnLongClickListener
                .setPackage(getPackageName())
                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                .putExtra(PinItemDragListener.EXTRA_PIN_ITEM_DRAG_LISTENER, listener);

        if (!getResources().getBoolean(R.bool.allow_rotation) &&
                !Utilities.isAllowRotationPrefEnabled(this) &&
                (getResources().getConfiguration().orientation ==
                        Configuration.ORIENTATION_LANDSCAPE && !isInMultiWindowMode())) {
            // If we are starting the drag in landscape even though home is locked in portrait,
            // restart the home activity to temporarily allow rotation.
            homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        }

        startActivity(homeIntent,
                ActivityOptions.makeCustomAnimation(this, 0, android.R.anim.fade_out).toBundle());

+23 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.launcher3.dragndrop;

import android.appwidget.AppWidgetManager;
import android.content.ClipDescription;
import android.content.Intent;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Bundle;
@@ -245,6 +246,13 @@ public class PinItemDragListener
    }

    private void postCleanup() {
        if (mLauncher != null) {
            // Remove any drag params from the launcher intent since the drag operation is complete.
            Intent newIntent = new Intent(mLauncher.getIntent());
            newIntent.removeExtra(EXTRA_PIN_ITEM_DRAG_LISTENER);
            mLauncher.setIntent(newIntent);
        }

        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
@@ -268,6 +276,21 @@ public class PinItemDragListener
        return null;
    }

    public static boolean handleDragRequest(Launcher launcher, Intent intent) {
        if (intent == null || !Intent.ACTION_MAIN.equals(intent.getAction())) {
            return false;
        }
        Parcelable dragExtra = intent.getParcelableExtra(EXTRA_PIN_ITEM_DRAG_LISTENER);
        if (dragExtra instanceof PinItemDragListener) {
            PinItemDragListener dragListener = (PinItemDragListener) dragExtra;
            dragListener.setLauncher(launcher);

            launcher.getDragLayer().setOnDragListener(dragListener);
            return true;
        }
        return false;
    }

    public static final Parcelable.Creator<PinItemDragListener> CREATOR =
            new Parcelable.Creator<PinItemDragListener>() {
                public PinItemDragListener createFromParcel(Parcel source) {