Merge changes I7261cf87,Icabfcf47,I09e6b032,I252cf139,If85ade73, ... into nyc-dev
* changes:
Revert "Death to synchronous transactions (2/2)"
Fix a few weird state issues from race-conditions
Fix lifecycle bug in when calling positionTask
Animation fixes when task is not resumed
Keep stack from mReuseTask
Final fixes for growing recents transition
diff --git a/Android.mk b/Android.mk
index f875be2..da53db7 100644
--- a/Android.mk
+++ b/Android.mk
@@ -331,7 +331,7 @@
core/java/com/android/internal/textservice/ISpellCheckerSessionListener.aidl \
core/java/com/android/internal/textservice/ITextServicesManager.aidl \
core/java/com/android/internal/textservice/ITextServicesSessionListener.aidl \
- core/java/com/android/internal/view/IDropPermissions.aidl \
+ core/java/com/android/internal/view/IDragAndDropPermissions.aidl \
core/java/com/android/internal/view/IInputContext.aidl \
core/java/com/android/internal/view/IInputContextCallback.aidl \
core/java/com/android/internal/view/IInputMethod.aidl \
diff --git a/api/current.txt b/api/current.txt
index 00a2b7a..91340a9 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3580,7 +3580,7 @@
method public boolean releaseInstance();
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
- method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
+ method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
method public final void requestKeyboardShortcutsHelper();
method public final void requestPermissions(java.lang.String[], int);
method public boolean requestVisibleBehind(boolean);
@@ -40973,6 +40973,10 @@
field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
}
+ public final class DragAndDropPermissions {
+ method public void release();
+ }
+
public class DragEvent implements android.os.Parcelable {
method public int describeContents();
method public int getAction();
@@ -40992,10 +40996,6 @@
field public static final android.os.Parcelable.Creator<android.view.DragEvent> CREATOR;
}
- public final class DropPermissions {
- method public void release();
- }
-
public class FocusFinder {
method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]);
method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int);
diff --git a/api/system-current.txt b/api/system-current.txt
index f017bb0..39f87ad 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3699,7 +3699,7 @@
method public boolean releaseInstance();
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
- method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
+ method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
method public final void requestKeyboardShortcutsHelper();
method public final void requestPermissions(java.lang.String[], int);
method public boolean requestVisibleBehind(boolean);
@@ -43924,6 +43924,10 @@
field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
}
+ public final class DragAndDropPermissions {
+ method public void release();
+ }
+
public class DragEvent implements android.os.Parcelable {
method public int describeContents();
method public int getAction();
@@ -43943,10 +43947,6 @@
field public static final android.os.Parcelable.Creator<android.view.DragEvent> CREATOR;
}
- public final class DropPermissions {
- method public void release();
- }
-
public class FocusFinder {
method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]);
method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int);
diff --git a/api/test-current.txt b/api/test-current.txt
index d5ecfd1..84ce5a5 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -3580,7 +3580,7 @@
method public boolean releaseInstance();
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
- method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
+ method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
method public final void requestKeyboardShortcutsHelper();
method public final void requestPermissions(java.lang.String[], int);
method public boolean requestVisibleBehind(boolean);
@@ -41050,6 +41050,10 @@
field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
}
+ public final class DragAndDropPermissions {
+ method public void release();
+ }
+
public class DragEvent implements android.os.Parcelable {
method public int describeContents();
method public int getAction();
@@ -41069,10 +41073,6 @@
field public static final android.os.Parcelable.Creator<android.view.DragEvent> CREATOR;
}
- public final class DropPermissions {
- method public void release();
- }
-
public class FocusFinder {
method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]);
method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int);
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 9bd648f..5ea3903 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -85,8 +85,8 @@
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.ContextThemeWrapper;
+import android.view.DragAndDropPermissions;
import android.view.DragEvent;
-import android.view.DropPermissions;
import android.view.InputDevice;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
@@ -6505,16 +6505,16 @@
}
/**
- * Create {@link DropPermissions} object bound to this activity and controlling the access
- * permissions for content URIs associated with the {@link DragEvent}.
+ * Create {@link DragAndDropPermissions} object bound to this activity and controlling the
+ * access permissions for content URIs associated with the {@link DragEvent}.
* @param event Drag event
- * @return The DropPermissions object used to control access to the content URIs. Null if
- * no content URIs are associated with the event or if permissions could not be granted.
+ * @return The {@link DragAndDropPermissions} object used to control access to the content URIs.
+ * Null if no content URIs are associated with the event or if permissions could not be granted.
*/
- public DropPermissions requestDropPermissions(DragEvent event) {
- DropPermissions dropPermissions = DropPermissions.obtain(event);
- if (dropPermissions != null && dropPermissions.take(getActivityToken())) {
- return dropPermissions;
+ public DragAndDropPermissions requestDragAndDropPermissions(DragEvent event) {
+ DragAndDropPermissions dragAndDropPermissions = DragAndDropPermissions.obtain(event);
+ if (dragAndDropPermissions != null && dragAndDropPermissions.take(getActivityToken())) {
+ return dragAndDropPermissions;
}
return null;
}
diff --git a/core/java/android/view/DropPermissions.java b/core/java/android/view/DragAndDropPermissions.java
similarity index 69%
rename from core/java/android/view/DropPermissions.java
rename to core/java/android/view/DragAndDropPermissions.java
index 5411dad..a3dbdb1 100644
--- a/core/java/android/view/DropPermissions.java
+++ b/core/java/android/view/DragAndDropPermissions.java
@@ -19,51 +19,52 @@
import android.app.ActivityManagerNative;
import android.os.IBinder;
import android.os.RemoteException;
-import com.android.internal.view.IDropPermissions;
+import com.android.internal.view.IDragAndDropPermissions;
import dalvik.system.CloseGuard;
/**
- * {@link DropPermissions} controls the access permissions for the content URIs associated with a
- * {@link DragEvent}.
+ * {@link DragAndDropPermissions} controls the access permissions for the content URIs associated
+ * with a {@link DragEvent}.
* <p>
* Permission are granted when this object is created by {@link
- * android.app.Activity#requestDropPermissions(DragEvent) Activity.requestDropPermissions}.
+ * android.app.Activity#requestDragAndDropPermissions(DragEvent)
+ * Activity.requestDragAndDropPermissions}.
* Which permissions are granted is defined by the set of flags passed to {@link
* View#startDragAndDrop(android.content.ClipData, View.DragShadowBuilder, Object, int)
* View.startDragAndDrop} by the app that started the drag operation.
* <p>
* The life cycle of the permissions is bound to the activity used to call {@link
- * android.app.Activity#requestDropPermissions(DragEvent) requestDropPermissions}. The
+ * android.app.Activity#requestDragAndDropPermissions(DragEvent) requestDragAndDropPermissions}. The
* permissions are revoked when this activity is destroyed, or when {@link #release()} is called,
* whichever occurs first.
*/
-public final class DropPermissions {
+public final class DragAndDropPermissions {
- private final IDropPermissions mDropPermissions;
+ private final IDragAndDropPermissions mDragAndDropPermissions;
private IBinder mPermissionOwnerToken;
private final CloseGuard mCloseGuard = CloseGuard.get();
/**
- * Create a new {@link DropPermissions} object to control the access permissions for content
- * URIs associated with {@link DragEvent}.
+ * Create a new {@link DragAndDropPermissions} object to control the access permissions for
+ * content URIs associated with {@link DragEvent}.
* @param dragEvent Drag event
- * @return {@link DropPermissions} object or null if there are no content URIs associated with
- * the {@link DragEvent}.
+ * @return {@link DragAndDropPermissions} object or null if there are no content URIs associated
+ * with the {@link DragEvent}.
* @hide
*/
- public static DropPermissions obtain(DragEvent dragEvent) {
- if (dragEvent.getDropPermissions() == null) {
+ public static DragAndDropPermissions obtain(DragEvent dragEvent) {
+ if (dragEvent.getDragAndDropPermissions() == null) {
return null;
}
- return new DropPermissions(dragEvent.getDropPermissions());
+ return new DragAndDropPermissions(dragEvent.getDragAndDropPermissions());
}
/** @hide */
- private DropPermissions(IDropPermissions dropPermissions) {
- mDropPermissions = dropPermissions;
+ private DragAndDropPermissions(IDragAndDropPermissions dragAndDropPermissions) {
+ mDragAndDropPermissions = dragAndDropPermissions;
}
/**
@@ -74,7 +75,7 @@
*/
public boolean take(IBinder activityToken) {
try {
- mDropPermissions.take(activityToken);
+ mDragAndDropPermissions.take(activityToken);
} catch (RemoteException e) {
return false;
}
@@ -91,7 +92,7 @@
try {
mPermissionOwnerToken = ActivityManagerNative.getDefault().
newUriPermissionOwner("drop");
- mDropPermissions.takeTransient(mPermissionOwnerToken);
+ mDragAndDropPermissions.takeTransient(mPermissionOwnerToken);
} catch (RemoteException e) {
return false;
}
@@ -104,7 +105,7 @@
*/
public void release() {
try {
- mDropPermissions.release();
+ mDragAndDropPermissions.release();
mPermissionOwnerToken = null;
} catch (RemoteException e) {
}
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index 71db0b5..0dfbe70 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -21,7 +21,7 @@
import android.os.Parcel;
import android.os.Parcelable;
-import com.android.internal.view.IDropPermissions;
+import com.android.internal.view.IDragAndDropPermissions;
//TODO: Improve Javadoc
/**
@@ -130,7 +130,7 @@
float mX, mY;
ClipDescription mClipDescription;
ClipData mClipData;
- IDropPermissions mDropPermissions;
+ IDragAndDropPermissions mDragAndDropPermissions;
Object mLocalState;
boolean mDragResult;
@@ -257,13 +257,13 @@
}
private void init(int action, float x, float y, ClipDescription description, ClipData data,
- IDropPermissions dropPermissions, Object localState, boolean result) {
+ IDragAndDropPermissions dragAndDropPermissions, Object localState, boolean result) {
mAction = action;
mX = x;
mY = y;
mClipDescription = description;
mClipData = data;
- mDropPermissions = dropPermissions;
+ this.mDragAndDropPermissions = dragAndDropPermissions;
mLocalState = localState;
mDragResult = result;
}
@@ -274,13 +274,14 @@
/** @hide */
public static DragEvent obtain(int action, float x, float y, Object localState,
- ClipDescription description, ClipData data, IDropPermissions dropPermissions,
- boolean result) {
+ ClipDescription description, ClipData data,
+ IDragAndDropPermissions dragAndDropPermissions, boolean result) {
final DragEvent ev;
synchronized (gRecyclerLock) {
if (gRecyclerTop == null) {
ev = new DragEvent();
- ev.init(action, x, y, description, data, dropPermissions, localState, result);
+ ev.init(action, x, y, description, data, dragAndDropPermissions, localState,
+ result);
return ev;
}
ev = gRecyclerTop;
@@ -291,7 +292,7 @@
ev.mRecycled = false;
ev.mNext = null;
- ev.init(action, x, y, description, data, dropPermissions, localState, result);
+ ev.init(action, x, y, description, data, dragAndDropPermissions, localState, result);
return ev;
}
@@ -299,7 +300,7 @@
/** @hide */
public static DragEvent obtain(DragEvent source) {
return obtain(source.mAction, source.mX, source.mY, source.mLocalState,
- source.mClipDescription, source.mClipData, source.mDropPermissions,
+ source.mClipDescription, source.mClipData, source.mDragAndDropPermissions,
source.mDragResult);
}
@@ -365,8 +366,8 @@
}
/** @hide */
- public IDropPermissions getDropPermissions() {
- return mDropPermissions;
+ public IDragAndDropPermissions getDragAndDropPermissions() {
+ return mDragAndDropPermissions;
}
/**
@@ -489,11 +490,11 @@
dest.writeInt(1);
mClipDescription.writeToParcel(dest, flags);
}
- if (mDropPermissions == null) {
+ if (mDragAndDropPermissions == null) {
dest.writeInt(0);
} else {
dest.writeInt(1);
- dest.writeStrongBinder(mDropPermissions.asBinder());
+ dest.writeStrongBinder(mDragAndDropPermissions.asBinder());
}
}
@@ -515,7 +516,8 @@
event.mClipDescription = ClipDescription.CREATOR.createFromParcel(in);
}
if (in.readInt() != 0) {
- event.mDropPermissions = IDropPermissions.Stub.asInterface(in.readStrongBinder());;
+ event.mDragAndDropPermissions =
+ IDragAndDropPermissions.Stub.asInterface(in.readStrongBinder());;
}
return event;
}
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 440ef21..5d2683f 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -77,8 +77,8 @@
import android.view.ActionMode.Callback;
import android.view.ContextMenu;
import android.view.DisplayListCanvas;
+import android.view.DragAndDropPermissions;
import android.view.DragEvent;
-import android.view.DropPermissions;
import android.view.Gravity;
import android.view.InputDevice;
import android.view.LayoutInflater;
@@ -2379,9 +2379,9 @@
void onDrop(DragEvent event) {
StringBuilder content = new StringBuilder("");
- final DropPermissions dropPermissions = DropPermissions.obtain(event);
- if (dropPermissions != null) {
- dropPermissions.takeTransient();
+ final DragAndDropPermissions permissions = DragAndDropPermissions.obtain(event);
+ if (permissions != null) {
+ permissions.takeTransient();
}
try {
@@ -2393,8 +2393,8 @@
}
}
finally {
- if (dropPermissions != null) {
- dropPermissions.release();
+ if (permissions != null) {
+ permissions.release();
}
}
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index 9c9784b..3c967ac 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -1397,6 +1397,10 @@
/**
* Sets the current progress to the specified value. Does not do anything
* if the progress bar is in indeterminate mode.
+ * <p>
+ * This method will immediately update the visual position of the progress
+ * indicator. To animate the visual position to the target value, use
+ * {@link #setProgress(int, boolean)}}.
*
* @param progress the new progress, between 0 and {@link #getMax()}
*
@@ -1412,7 +1416,7 @@
/**
* Sets the current progress to the specified value, optionally animating
- * between the current and target values.
+ * the visual position between the current and target values.
* <p>
* Animation does not affect the result of {@link #getProgress()}, which
* will return the target value immediately after this method is called.
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 8097d7a..3216fba 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -1591,6 +1591,7 @@
}
}
+ @android.view.RemotableViewMethod
@Override
public void setEnabled(boolean enabled) {
if (enabled == isEnabled()) {
diff --git a/core/java/com/android/internal/view/IDropPermissions.aidl b/core/java/com/android/internal/view/IDragAndDropPermissions.aidl
similarity index 96%
rename from core/java/com/android/internal/view/IDropPermissions.aidl
rename to core/java/com/android/internal/view/IDragAndDropPermissions.aidl
index 74ff4b4..64c2d04 100644
--- a/core/java/com/android/internal/view/IDropPermissions.aidl
+++ b/core/java/com/android/internal/view/IDragAndDropPermissions.aidl
@@ -22,7 +22,7 @@
* Interface to allow a drop receiver to request permissions for URIs passed along with ClipData
* contained in DragEvent.
*/
-interface IDropPermissions {
+interface IDragAndDropPermissions {
void take(IBinder activityToken);
void takeTransient(IBinder permissionOwnerToken);
void release();
diff --git a/core/java/com/android/internal/view/menu/CascadingMenuPopup.java b/core/java/com/android/internal/view/menu/CascadingMenuPopup.java
index 5cb307f..72ed9d0 100644
--- a/core/java/com/android/internal/view/menu/CascadingMenuPopup.java
+++ b/core/java/com/android/internal/view/menu/CascadingMenuPopup.java
@@ -181,8 +181,10 @@
private View mAnchorView;
private View mShownAnchorView;
private int mLastPosition;
- private int mInitXOffset;
- private int mInitYOffset;
+ private boolean mHasXOffset;
+ private boolean mHasYOffset;
+ private int mXOffset;
+ private int mYOffset;
private boolean mForceShowIcon;
private boolean mShowTitle;
private Callback mPresenterCallback;
@@ -379,9 +381,6 @@
parentView = null;
}
- final int x;
- final int y;
- final Rect epicenterBounds;
if (parentView != null) {
// This menu is a cascading submenu anchored to a parent view.
popupWindow.setTouchModal(false);
@@ -401,6 +400,7 @@
// By now, mDropDownGravity is the resolved absolute gravity, so
// this should work in both LTR and RTL.
+ final int x;
if ((mDropDownGravity & Gravity.RIGHT) == Gravity.RIGHT) {
if (showOnRight) {
x = parentOffsetLeft + menuWidth;
@@ -415,17 +415,21 @@
}
}
- y = parentOffsetTop;
- epicenterBounds = null;
+ popupWindow.setHorizontalOffset(x);
+
+ final int y = parentOffsetTop;
+ popupWindow.setVerticalOffset(y);
} else {
- x = mInitXOffset;
- y = mInitYOffset;
- epicenterBounds = getEpicenterBounds();
+ if (mHasXOffset) {
+ popupWindow.setHorizontalOffset(mXOffset);
+ }
+ if (mHasYOffset) {
+ popupWindow.setVerticalOffset(mYOffset);
+ }
+ final Rect epicenterBounds = getEpicenterBounds();
+ popupWindow.setEpicenterBounds(epicenterBounds);
}
- popupWindow.setHorizontalOffset(x);
- popupWindow.setVerticalOffset(y);
- popupWindow.setEpicenterBounds(epicenterBounds);
final CascadingMenuInfo menuInfo = new CascadingMenuInfo(popupWindow, menu, mLastPosition);
mShowingMenus.add(menuInfo);
@@ -712,12 +716,14 @@
@Override
public void setHorizontalOffset(int x) {
- mInitXOffset = x;
+ mHasXOffset = true;
+ mXOffset = x;
}
@Override
public void setVerticalOffset(int y) {
- mInitYOffset = y;
+ mHasYOffset = true;
+ mYOffset = y;
}
@Override
diff --git a/core/java/com/android/internal/view/menu/StandardMenuPopup.java b/core/java/com/android/internal/view/menu/StandardMenuPopup.java
index 339c2bf..169caa585 100644
--- a/core/java/com/android/internal/view/menu/StandardMenuPopup.java
+++ b/core/java/com/android/internal/view/menu/StandardMenuPopup.java
@@ -108,8 +108,6 @@
private int mDropDownGravity = Gravity.NO_GRAVITY;
- private int mXOffset;
- private int mYOffset;
private boolean mShowTitle;
public StandardMenuPopup(Context context, MenuBuilder menu, View anchorView, int popupStyleAttr,
@@ -177,8 +175,6 @@
mPopup.setContentWidth(mContentWidth);
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
- mPopup.setHorizontalOffset(mXOffset);
- mPopup.setVerticalOffset(mYOffset);
mPopup.setEpicenterBounds(getEpicenterBounds());
mPopup.show();
@@ -276,7 +272,9 @@
mMenu.close(false /* closeAllMenus */);
// Show the new sub-menu popup at the same location as this popup.
- if (subPopup.tryShow(mXOffset, mYOffset)) {
+ final int horizontalOffset = mPopup.getHorizontalOffset();
+ final int verticalOffset = mPopup.getVerticalOffset();
+ if (subPopup.tryShow(horizontalOffset, verticalOffset)) {
if (mPresenterCallback != null) {
mPresenterCallback.onOpenSubMenu(subMenu);
}
@@ -338,12 +336,12 @@
@Override
public void setHorizontalOffset(int x) {
- mXOffset = x;
+ mPopup.setHorizontalOffset(x);
}
@Override
public void setVerticalOffset(int y) {
- mYOffset = y;
+ mPopup.setVerticalOffset(y);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
index 9bc85c8..fb76918 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
@@ -54,7 +54,7 @@
// TODO: Live?
}
- private void addSystemTiles(QSTileHost host) {
+ private void addSystemTiles(final QSTileHost host) {
String possible = mContext.getString(R.string.quick_settings_tiles_default)
+ ",hotspot,inversion,saver,work,cast,night";
String[] possibleTiles = possible.split(",");
@@ -93,7 +93,7 @@
mainHandler.post(new Runnable() {
@Override
public void run() {
- new QueryTilesTask().execute();
+ new QueryTilesTask().execute(host.getTiles());
}
});
}
@@ -133,9 +133,10 @@
public boolean isSystem;
}
- private class QueryTilesTask extends AsyncTask<Void, Void, Collection<TileInfo>> {
+ private class QueryTilesTask extends
+ AsyncTask<Collection<QSTile<?>>, Void, Collection<TileInfo>> {
@Override
- protected Collection<TileInfo> doInBackground(Void... params) {
+ protected Collection<TileInfo> doInBackground(Collection<QSTile<?>>... params) {
List<TileInfo> tiles = new ArrayList<>();
PackageManager pm = mContext.getPackageManager();
List<ResolveInfo> services = pm.queryIntentServicesAsUser(
@@ -143,7 +144,13 @@
for (ResolveInfo info : services) {
String packageName = info.serviceInfo.packageName;
ComponentName componentName = new ComponentName(packageName, info.serviceInfo.name);
+ final CharSequence appLabel = info.serviceInfo.applicationInfo.loadLabel(pm);
String spec = CustomTile.toSpec(componentName);
+ State state = getState(params[0], spec);
+ if (state != null) {
+ addTile(spec, appLabel, state, false);
+ continue;
+ }
if (info.serviceInfo.icon == 0) {
continue;
}
@@ -157,12 +164,22 @@
icon.mutate();
icon.setTint(mContext.getColor(android.R.color.white));
CharSequence label = info.serviceInfo.loadLabel(pm);
- final CharSequence appLabel = info.serviceInfo.applicationInfo.loadLabel(pm);
addTile(spec, icon, label != null ? label.toString() : "null", appLabel, mContext);
}
return tiles;
}
+ private State getState(Collection<QSTile<?>> tiles, String spec) {
+ for (QSTile<?> tile : tiles) {
+ if (spec.equals(tile.getTileSpec())) {
+ final QSTile.State state = tile.newTileState();
+ tile.getState().copyTo(state);
+ return state;
+ }
+ }
+ return null;
+ }
+
@Override
protected void onPostExecute(Collection<TileInfo> result) {
mTiles.addAll(result);
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 4791818..87dedc9 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -4696,26 +4696,20 @@
ceHelper.getWritableDatabase();
ceHelper.close();
if (removeOldDb) {
- // TODO STOPSHIP - backup file during testing. Remove file before the release
- Log.i(TAG, "Migration complete - creating backup of old db " + preNDatabaseFile);
- renameToBakFile(preNDatabaseFile);
+ Slog.i(TAG, "Migration complete - removing pre-N db " + preNDatabaseFile);
+ if (!SQLiteDatabase.deleteDatabase(preNDatabaseFile)) {
+ Slog.e(TAG, "Cannot remove pre-N db " + preNDatabaseFile);
+ }
}
return ceHelper;
}
- private static void renameToBakFile(File file) {
- File bakFile = new File(file.getPath() + ".bak");
- if (!file.renameTo(bakFile)) {
- Log.e(TAG, "Cannot move file to " + bakFile);
- }
- }
-
private static boolean migratePreNDbToCe(File oldDbFile, File ceDbFile) {
- Log.i(TAG, "Moving pre-N DB " + oldDbFile + " to CE " + ceDbFile);
+ Slog.i(TAG, "Moving pre-N DB " + oldDbFile + " to CE " + ceDbFile);
try {
FileUtils.copyFileOrThrow(oldDbFile, ceDbFile);
} catch (IOException e) {
- Log.e(TAG, "Cannot copy file to " + ceDbFile + " from " + oldDbFile, e);
+ Slog.e(TAG, "Cannot copy file to " + ceDbFile + " from " + oldDbFile, e);
// Try to remove potentially damaged file if I/O error occurred
deleteDbFileWarnIfFailed(ceDbFile);
return false;
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index 8a003de..30ba28a 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -353,7 +353,7 @@
stack.getDimBounds(mTmpRect);
if (mTmpRect.height() > 0 && mTmpRect.width() > 0) {
mDimLayer.setBounds(mTmpRect);
- mDimLayer.show(mDisplayContent.mService.mLayersController.getResizeDimLayer(),
+ mDimLayer.show(mService.mLayersController.getResizeDimLayer(),
alpha, 0 /* duration */);
} else {
visibleAndValid = false;
@@ -543,6 +543,9 @@
} else if (mAnimatingForIme) {
return animateForIme(now);
} else {
+ if (mDimLayer != null) {
+ mDimLayer.setLayer(mService.mLayersController.getResizeDimLayer());
+ }
return false;
}
}
diff --git a/services/core/java/com/android/server/wm/DropPermissionsHandler.java b/services/core/java/com/android/server/wm/DragAndDropPermissionsHandler.java
similarity index 91%
rename from services/core/java/com/android/server/wm/DropPermissionsHandler.java
rename to services/core/java/com/android/server/wm/DragAndDropPermissionsHandler.java
index 5889fb8..1831ff9 100644
--- a/services/core/java/com/android/server/wm/DropPermissionsHandler.java
+++ b/services/core/java/com/android/server/wm/DragAndDropPermissionsHandler.java
@@ -23,11 +23,12 @@
import android.os.IBinder;
import android.os.RemoteException;
-import com.android.internal.view.IDropPermissions;
+import com.android.internal.view.IDragAndDropPermissions;
import java.util.ArrayList;
-class DropPermissionsHandler extends IDropPermissions.Stub implements IBinder.DeathRecipient {
+class DragAndDropPermissionsHandler extends IDragAndDropPermissions.Stub
+ implements IBinder.DeathRecipient {
private final int mSourceUid;
private final String mTargetPackage;
@@ -40,8 +41,8 @@
private IBinder mActivityToken = null;
private IBinder mPermissionOwnerToken = null;
- DropPermissionsHandler(ClipData clipData, int sourceUid, String targetPackage, int mode,
- int sourceUserId, int targetUserId) {
+ DragAndDropPermissionsHandler(ClipData clipData, int sourceUid, String targetPackage, int mode,
+ int sourceUserId, int targetUserId) {
mSourceUid = sourceUid;
mTargetPackage = targetPackage;
mMode = mode;
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index ffe0336..0539b05 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -59,7 +59,7 @@
import com.android.server.wm.WindowManagerService.DragInputEventReceiver;
import com.android.server.wm.WindowManagerService.H;
-import com.android.internal.view.IDropPermissions;
+import com.android.internal.view.IDragAndDropPermissions;
import java.util.ArrayList;
@@ -484,10 +484,10 @@
final int targetUserId = UserHandle.getUserId(touchedWin.getOwningUid());
- DropPermissionsHandler dropPermissions = null;
+ DragAndDropPermissionsHandler dragAndDropPermissions = null;
if ((mFlags & View.DRAG_FLAG_GLOBAL) != 0 &&
(mFlags & DRAG_FLAGS_URI_ACCESS) != 0) {
- dropPermissions = new DropPermissionsHandler(
+ dragAndDropPermissions = new DragAndDropPermissionsHandler(
mData,
mUid,
touchedWin.getOwningPackage(),
@@ -501,7 +501,7 @@
final int myPid = Process.myPid();
final IBinder token = touchedWin.mClient.asBinder();
DragEvent evt = obtainDragEvent(touchedWin, DragEvent.ACTION_DROP, x, y,
- null, null, mData, dropPermissions, false);
+ null, null, mData, dragAndDropPermissions, false);
try {
touchedWin.mClient.dispatchDragEvent(evt);
@@ -524,12 +524,12 @@
private static DragEvent obtainDragEvent(WindowState win, int action,
float x, float y, Object localState,
ClipDescription description, ClipData data,
- IDropPermissions dropPermissions,
+ IDragAndDropPermissions dragAndDropPermissions,
boolean result) {
final float winX = win.translateToWindowX(x);
final float winY = win.translateToWindowY(y);
return DragEvent.obtain(action, winX, winY, localState, description, data,
- dropPermissions, result);
+ dragAndDropPermissions, result);
}
boolean stepAnimationLocked(long currentTimeMs) {
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 467f5b6..00de7e4 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -118,7 +118,6 @@
// Whether the stack and all its tasks is currently being drag-resized
private boolean mDragResizing;
- private final Rect mLastContentBounds = new Rect();
private final Rect mTmpAdjustedBounds = new Rect();
private boolean mAdjustedForIme;
private boolean mImeGoingAway;
@@ -974,7 +973,6 @@
contentBounds.bottom = imeTop;
}
- mLastContentBounds.set(contentBounds);
final int yOffset = displayContentRect.bottom - contentBounds.bottom;
final int dividerWidth =
@@ -1084,7 +1082,6 @@
}
if (!adjust) {
mTmpAdjustedBounds.setEmpty();
- mLastContentBounds.setEmpty();
}
setAdjustedBounds(mTmpAdjustedBounds);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 3af03c7..ff63632 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -173,6 +173,7 @@
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.WindowManager.DOCKED_BOTTOM;
import static android.view.WindowManager.DOCKED_INVALID;
+import static android.view.WindowManager.DOCKED_TOP;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
@@ -7466,6 +7467,10 @@
final boolean imeVisible = imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw();
final boolean dockVisible = isStackVisibleLocked(DOCKED_STACK_ID);
final TaskStack imeTargetStack = getImeTargetStackLocked();
+ final int imeDockSide = (dockVisible && imeTargetStack != null) ?
+ imeTargetStack.getDockSide() : DOCKED_INVALID;
+ final boolean imeOnTop = (imeDockSide == DOCKED_TOP);
+ final boolean imeOnBottom = (imeDockSide == DOCKED_BOTTOM);
// The divider could be adjusted for IME position, or be thinner than usual,
// or both. There are three possible cases:
@@ -7473,20 +7478,19 @@
// - If IME is visible, and focus is on bottom, divider is moved for IME and thinner.
// - If IME is not visible, divider is not moved and is normal width.
- if (imeVisible && dockVisible && imeTargetStack != null) {
- final boolean isFocusOnBottom = imeTargetStack.getDockSide() == DOCKED_BOTTOM;
+ if (imeVisible && dockVisible && (imeOnTop || imeOnBottom)) {
final ArrayList<TaskStack> stacks = displayContent.getStacks();
for (int i = stacks.size() - 1; i >= 0; --i) {
final TaskStack stack = stacks.get(i);
final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM;
- if (stack.isVisibleLocked() && (isFocusOnBottom || isDockedOnBottom)) {
+ if (stack.isVisibleLocked() && (imeOnBottom || isDockedOnBottom)) {
stack.setAdjustedForIme(imeWin);
} else {
stack.resetAdjustedForIme(false);
}
}
displayContent.mDividerControllerLocked.setAdjustedForIme(
- isFocusOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin);
+ imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin);
} else {
final ArrayList<TaskStack> stacks = displayContent.getStacks();
for (int i = stacks.size() - 1; i >= 0; --i) {