summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/dragndrop
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2017-03-20 15:08:06 -0700
committerSunny Goyal <sunnygoyal@google.com>2017-03-28 09:36:52 -0700
commit5a81c3806b31c7763734e287d4cf2ed11294281d (patch)
tree8fc72b6ca9b469fee3a31bb1487de2da85269c6e /src/com/android/launcher3/dragndrop
parent66485063d0681ad3d8aaaed9d902e70545512a93 (diff)
downloadandroid_packages_apps_Trebuchet-5a81c3806b31c7763734e287d4cf2ed11294281d.tar.gz
android_packages_apps_Trebuchet-5a81c3806b31c7763734e287d4cf2ed11294281d.tar.bz2
android_packages_apps_Trebuchet-5a81c3806b31c7763734e287d4cf2ed11294281d.zip
Fixing multiwindow drag operation during with rotation.
> Finishing activity when rotation preference change. This ensures that any prefenrece change is immediately applied instead of waiting for resume as the new activity is always started with proper setting. > Clearing task when starting drag in landscape mode. This ensures that a new activity instance is started in this case, which overrides previous locked rotation by launcher activity. > Handling drag request in onCreate and enabling rotation based on it. > Clearing any request from the launcher intent once the drag operation is complete Bug: 36226746 Change-Id: I69f56c13827c25f3e1bc84935cb2acc59b6bd349
Diffstat (limited to 'src/com/android/launcher3/dragndrop')
-rw-r--r--src/com/android/launcher3/dragndrop/AddItemActivity.java12
-rw-r--r--src/com/android/launcher3/dragndrop/PinItemDragListener.java23
2 files changed, 35 insertions, 0 deletions
diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java
index c2a4820c8..629f78ab3 100644
--- a/src/com/android/launcher3/dragndrop/AddItemActivity.java
+++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java
@@ -23,6 +23,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;
@@ -40,6 +41,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;
@@ -132,6 +134,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());
diff --git a/src/com/android/launcher3/dragndrop/PinItemDragListener.java b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
index fd252a26a..e71477861 100644
--- a/src/com/android/launcher3/dragndrop/PinItemDragListener.java
+++ b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
@@ -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;
@@ -244,6 +245,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() {
@@ -267,6 +275,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) {