Animate the cast dialog
This CL animates the Cast dialog when opened from its QS tile. See b/202264918#comment6 for before/after videos. Bug: 202264918 Test: Manual Change-Id: I148074ad02b7a6495b40ab714cd2539c15188f16
This commit is contained in:
@@ -31,7 +31,6 @@ import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.View.OnAttachStateChangeListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager.LayoutParams;
|
||||
import android.widget.Button;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -40,6 +39,7 @@ import com.android.internal.app.MediaRouteDialogPresenter;
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.dagger.qualifiers.Background;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
@@ -76,6 +76,7 @@ public class CastTile extends QSTileImpl<BooleanState> {
|
||||
private final CastDetailAdapter mDetailAdapter;
|
||||
private final KeyguardStateController mKeyguard;
|
||||
private final NetworkController mNetworkController;
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
private final Callback mCallback = new Callback();
|
||||
private Dialog mDialog;
|
||||
private boolean mWifiConnected;
|
||||
@@ -94,7 +95,8 @@ public class CastTile extends QSTileImpl<BooleanState> {
|
||||
CastController castController,
|
||||
KeyguardStateController keyguardStateController,
|
||||
NetworkController networkController,
|
||||
HotspotController hotspotController
|
||||
HotspotController hotspotController,
|
||||
DialogLaunchAnimator dialogLaunchAnimator
|
||||
) {
|
||||
super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
|
||||
statusBarStateController, activityStarter, qsLogger);
|
||||
@@ -102,6 +104,7 @@ public class CastTile extends QSTileImpl<BooleanState> {
|
||||
mDetailAdapter = new CastDetailAdapter();
|
||||
mKeyguard = keyguardStateController;
|
||||
mNetworkController = networkController;
|
||||
mDialogLaunchAnimator = dialogLaunchAnimator;
|
||||
mController.observe(this, mCallback);
|
||||
mKeyguard.observe(this, mCallback);
|
||||
mNetworkController.observe(this, mSignalCallback);
|
||||
@@ -153,9 +156,15 @@ public class CastTile extends QSTileImpl<BooleanState> {
|
||||
|
||||
List<CastDevice> activeDevices = getActiveDevices();
|
||||
if (willPopDetail()) {
|
||||
mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
|
||||
showDetail(true);
|
||||
});
|
||||
if (!mKeyguard.isShowing()) {
|
||||
showDetail(view);
|
||||
} else {
|
||||
mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
|
||||
// Dismissing the keyguard will collapse the shade, so we don't animate from the
|
||||
// view here as it would not look good.
|
||||
showDetail(null /* view */);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
mController.stopCasting(activeDevices.get(0));
|
||||
}
|
||||
@@ -184,19 +193,29 @@ public class CastTile extends QSTileImpl<BooleanState> {
|
||||
|
||||
@Override
|
||||
public void showDetail(boolean show) {
|
||||
showDetail(null /* view */);
|
||||
}
|
||||
|
||||
private void showDetail(@Nullable View view) {
|
||||
mUiHandler.post(() -> {
|
||||
mDialog = MediaRouteDialogPresenter.createDialog(mContext, ROUTE_TYPE_REMOTE_DISPLAY,
|
||||
v -> {
|
||||
mDialogLaunchAnimator.disableAllCurrentDialogsExitAnimations();
|
||||
mDialog.dismiss();
|
||||
mActivityStarter
|
||||
.postStartActivityDismissingKeyguard(getLongClickIntent(), 0);
|
||||
});
|
||||
mDialog.getWindow().setType(LayoutParams.TYPE_KEYGUARD_DIALOG);
|
||||
SystemUIDialog.setShowForAllUsers(mDialog, true);
|
||||
SystemUIDialog.registerDismissListener(mDialog);
|
||||
SystemUIDialog.setWindowOnTop(mDialog);
|
||||
mUiHandler.post(() -> mDialog.show());
|
||||
mHost.collapsePanels();
|
||||
|
||||
mUiHandler.post(() -> {
|
||||
if (view != null) {
|
||||
mDialogLaunchAnimator.showFromView(mDialog, view);
|
||||
} else {
|
||||
mDialog.show();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.classifier.FalsingManagerFake;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
@@ -90,6 +91,8 @@ public class CastTileTest extends SysuiTestCase {
|
||||
private HotspotController.Callback mHotspotCallback;
|
||||
@Mock
|
||||
private QSLogger mQSLogger;
|
||||
@Mock
|
||||
private DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
|
||||
private TestableLooper mTestableLooper;
|
||||
private CastTile mCastTile;
|
||||
@@ -113,7 +116,8 @@ public class CastTileTest extends SysuiTestCase {
|
||||
mController,
|
||||
mKeyguard,
|
||||
mNetworkController,
|
||||
mHotspotController
|
||||
mHotspotController,
|
||||
mDialogLaunchAnimator
|
||||
);
|
||||
mCastTile.initialize();
|
||||
|
||||
@@ -241,6 +245,7 @@ public class CastTileTest extends SysuiTestCase {
|
||||
List<CastDevice> devices = new ArrayList<>();
|
||||
devices.add(device);
|
||||
when(mController.getCastDevices()).thenReturn(devices);
|
||||
when(mKeyguard.isShowing()).thenReturn(true);
|
||||
|
||||
enableWifiAndProcessMessages();
|
||||
mCastTile.handleClick(null /* view */);
|
||||
|
||||
Reference in New Issue
Block a user