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

This commit is contained in:
TreeHugger Robot
2017-03-30 19:18:00 +00:00
committed by Android (Google) Code Review
3 changed files with 45 additions and 19 deletions

View File

@@ -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();
}
}
}

View File

@@ -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());

View File

@@ -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) {