Merge "Minor tweak, defer building PiP notification until after transition ends" into oc-dev

am: 46853ab04f

Change-Id: Ie9f3f59263b9672294de10a2500abb69d3878135
This commit is contained in:
Winson Chung
2017-05-12 04:26:32 +00:00
committed by android-build-merger
2 changed files with 44 additions and 16 deletions

View File

@@ -73,7 +73,8 @@ public class PipManager implements BasePipManager {
mTouchHandler.onActivityPinned();
mMediaController.onActivityPinned();
mMenuController.onActivityPinned();
mNotificationController.onActivityPinned(packageName);
mNotificationController.onActivityPinned(packageName,
true /* deferUntilAnimationEnds */);
SystemServicesProxy.getInstance(mContext).setPipVisibility(true);
}
@@ -104,6 +105,7 @@ public class PipManager implements BasePipManager {
mTouchHandler.setTouchEnabled(true);
mTouchHandler.onPinnedStackAnimationEnded();
mMenuController.onPinnedStackAnimationEnded();
mNotificationController.onPinnedStackAnimationEnded();
}
@Override

View File

@@ -60,6 +60,9 @@ public class PipNotificationController {
private PipMotionHelper mMotionHelper;
// Used when building a deferred notification
private String mDeferredNotificationPackageName;
private AppOpsManager.OnOpChangedListener mAppOpsChangedListener = new OnOpChangedListener() {
@Override
public void onOpChanged(String op, String packageName) {
@@ -87,10 +90,47 @@ public class PipNotificationController {
mMotionHelper = motionHelper;
}
public void onActivityPinned(String packageName) {
public void onActivityPinned(String packageName, boolean deferUntilAnimationEnds) {
// Clear any existing notification
mNotificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID);
if (deferUntilAnimationEnds) {
mDeferredNotificationPackageName = packageName;
} else {
showNotificationForApp(mDeferredNotificationPackageName);
}
// Register for changes to the app ops setting for this package while it is in PiP
registerAppOpsListener(packageName);
}
public void onPinnedStackAnimationEnded() {
if (mDeferredNotificationPackageName != null) {
showNotificationForApp(mDeferredNotificationPackageName);
mDeferredNotificationPackageName = null;
}
}
public void onActivityUnpinned(ComponentName topPipActivity) {
// Unregister for changes to the previously PiP'ed package
unregisterAppOpsListener();
// Reset the deferred notification package
mDeferredNotificationPackageName = null;
if (topPipActivity != null) {
// onActivityUnpinned() is only called after the transition is complete, so we don't
// need to defer until the animation ends to update the notification
onActivityPinned(topPipActivity.getPackageName(), false /* deferUntilAnimationEnds */);
} else {
mNotificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID);
}
}
/**
* Builds and shows the notification for the given app.
*/
private void showNotificationForApp(String packageName) {
// Build a new notification
final Notification.Builder builder =
new Notification.Builder(mContext, NotificationChannels.GENERAL)
@@ -105,20 +145,6 @@ public class PipNotificationController {
// Show the new notification
mNotificationManager.notify(NOTIFICATION_TAG, NOTIFICATION_ID, builder.build());
}
// Register for changes to the app ops setting for this package while it is in PiP
registerAppOpsListener(packageName);
}
public void onActivityUnpinned(ComponentName topPipActivity) {
// Unregister for changes to the previously PiP'ed package
unregisterAppOpsListener();
if (topPipActivity != null) {
onActivityPinned(topPipActivity.getPackageName());
} else {
mNotificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID);
}
}
/**