Merge "Pass WindowContext to DisplayInfoChangeListener" into sc-dev

This commit is contained in:
Alex Chau
2021-04-26 16:50:32 +00:00
committed by Android (Google) Code Review
6 changed files with 28 additions and 22 deletions
@@ -27,12 +27,11 @@ import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SY
import android.animation.AnimatorSet; import android.animation.AnimatorSet;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
import android.app.ActivityOptions; import android.app.ActivityOptions;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentSender; import android.content.IntentSender;
import android.os.Binder;
import android.os.Bundle; import android.os.Bundle;
import android.os.CancellationSignal; import android.os.CancellationSignal;
import android.os.IBinder;
import android.view.View; import android.view.View;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -41,7 +40,6 @@ import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragOptions; import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.model.WellbeingModel; import com.android.launcher3.model.WellbeingModel;
import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.popup.SystemShortcut; import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.proxy.ProxyActivityStarter; import com.android.launcher3.proxy.ProxyActivityStarter;
import com.android.launcher3.proxy.StartActivityParams; import com.android.launcher3.proxy.StartActivityParams;
@@ -73,7 +71,6 @@ import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.ActivityOptionsCompat; import com.android.systemui.shared.system.ActivityOptionsCompat;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat; import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -240,8 +237,9 @@ public abstract class BaseQuickstepLauncher extends Launcher
} }
@Override @Override
public void onDisplayInfoChanged(DisplayController.Info info, int flags) { public void onDisplayInfoChanged(Context context, DisplayController.Info info,
super.onDisplayInfoChanged(info, flags); int flags) {
super.onDisplayInfoChanged(context, info, flags);
if ((flags & CHANGE_SIZE) != 0) { if ((flags & CHANGE_SIZE) != 0) {
addTaskbarIfNecessary(); addTaskbarIfNecessary();
} }
@@ -241,7 +241,7 @@ public class RecentsAnimationDeviceState implements
public void onNavigationModeChanged(SysUINavigationMode.Mode newMode) { public void onNavigationModeChanged(SysUINavigationMode.Mode newMode) {
mDisplayController.removeChangeListener(this); mDisplayController.removeChangeListener(this);
mDisplayController.addChangeListener(this); mDisplayController.addChangeListener(this);
onDisplayInfoChanged(mDisplayController.getInfo(), CHANGE_ALL); onDisplayInfoChanged(mContext, mDisplayController.getInfo(), CHANGE_ALL);
if (newMode == NO_BUTTON) { if (newMode == NO_BUTTON) {
mExclusionListener.register(); mExclusionListener.register();
@@ -254,7 +254,7 @@ public class RecentsAnimationDeviceState implements
} }
@Override @Override
public void onDisplayInfoChanged(Info info, int flags) { public void onDisplayInfoChanged(Context context, Info info, int flags) {
if (info.id != getDisplayId() || flags == CHANGE_FRAME_DELAY) { if (info.id != getDisplayId() || flags == CHANGE_FRAME_DELAY) {
// ignore displays that aren't running launcher and frame refresh rate changes // ignore displays that aren't running launcher and frame refresh rate changes
return; return;
@@ -225,7 +225,7 @@ public class RotationTouchHelper implements
public void onNavigationModeChanged(SysUINavigationMode.Mode newMode) { public void onNavigationModeChanged(SysUINavigationMode.Mode newMode) {
mDisplayController.removeChangeListener(this); mDisplayController.removeChangeListener(this);
mDisplayController.addChangeListener(this); mDisplayController.addChangeListener(this);
onDisplayInfoChanged(mDisplayController.getInfo(), CHANGE_ALL); onDisplayInfoChanged(mContext, mDisplayController.getInfo(), CHANGE_ALL);
mOrientationTouchTransformer.setNavigationMode(newMode, mDisplayController.getInfo(), mOrientationTouchTransformer.setNavigationMode(newMode, mDisplayController.getInfo(),
mContext.getResources()); mContext.getResources());
@@ -243,7 +243,7 @@ public class RotationTouchHelper implements
} }
@Override @Override
public void onDisplayInfoChanged(Info info, int flags) { public void onDisplayInfoChanged(Context context, Info info, int flags) {
if (info.id != mDisplayId|| flags == CHANGE_FRAME_DELAY) { if (info.id != mDisplayId|| flags == CHANGE_FRAME_DELAY) {
// ignore displays that aren't running launcher and frame refresh rate changes // ignore displays that aren't running launcher and frame refresh rate changes
return; return;
@@ -21,6 +21,7 @@ import static com.android.launcher3.util.DisplayController.CHANGE_ROTATION;
import android.app.ActivityOptions; import android.app.ActivityOptions;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.LauncherApps; import android.content.pm.LauncherApps;
import android.content.res.Configuration; import android.content.res.Configuration;
@@ -296,7 +297,7 @@ public abstract class BaseDraggingActivity extends BaseActivity
} }
@Override @Override
public void onDisplayInfoChanged(Info info, int flags) { public void onDisplayInfoChanged(Context context, Info info, int flags) {
if ((flags & CHANGE_ROTATION) != 0 && mDeviceProfile.updateIsSeascape(this)) { if ((flags & CHANGE_ROTATION) != 0 && mDeviceProfile.updateIsSeascape(this)) {
reapplyUi(); reapplyUi();
} }
@@ -203,9 +203,9 @@ public class InvariantDeviceProfile {
.apply(); .apply();
DisplayController.INSTANCE.get(context).addChangeListener( DisplayController.INSTANCE.get(context).addChangeListener(
(info, flags) -> { (displayContext, info, flags) -> {
if ((flags & (CHANGE_SIZE | CHANGE_DENSITY)) != 0) { if ((flags & (CHANGE_SIZE | CHANGE_DENSITY)) != 0) {
onConfigChanged(context); onConfigChanged(displayContext);
} }
}); });
mOverlayMonitor = new OverlayMonitor(context); mOverlayMonitor = new OverlayMonitor(context);
@@ -226,7 +226,7 @@ public class InvariantDeviceProfile {
*/ */
public InvariantDeviceProfile(Context context, Display display) { public InvariantDeviceProfile(Context context, Display display) {
// Ensure that the main device profile is initialized // Ensure that the main device profile is initialized
InvariantDeviceProfile originalProfile = INSTANCE.get(context); INSTANCE.get(context);
String gridName = getCurrentGridName(context); String gridName = getCurrentGridName(context);
// Get the display info based on default display and interpolate it to existing display // Get the display info based on default display and interpolate it to existing display
@@ -87,7 +87,7 @@ public class DisplayController implements DisplayListener, ComponentCallbacks {
new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED)); new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED));
} }
mInfo = createInfo(display); mInfo = new Info(getContext(display), display);
mDM.registerDisplayListener(this, UI_HELPER_EXECUTOR.getHandler()); mDM.registerDisplayListener(this, UI_HELPER_EXECUTOR.getHandler());
} }
@@ -125,7 +125,13 @@ public class DisplayController implements DisplayListener, ComponentCallbacks {
*/ */
public interface DisplayInfoChangeListener { public interface DisplayInfoChangeListener {
void onDisplayInfoChanged(Info info, int flags); /**
* Invoked when display info has changed.
* @param context updated context associated with the display.
* @param info updated display information.
* @param flags bitmask indicating type of change.
*/
void onDisplayInfoChanged(Context context, Info info, int flags);
} }
/** /**
@@ -172,14 +178,15 @@ public class DisplayController implements DisplayListener, ComponentCallbacks {
return mInfo; return mInfo;
} }
private Info createInfo(Display display) { private Context getContext(Display display) {
return new Info(mContext.createDisplayContext(display), display); return Utilities.ATLEAST_S ? mWindowContext : mContext.createDisplayContext(display);
} }
@AnyThread @AnyThread
private void handleInfoChange(Display display) { private void handleInfoChange(Display display) {
Info oldInfo = mInfo; Info oldInfo = mInfo;
Info newInfo = createInfo(display); Context context = getContext(display);
Info newInfo = new Info(context, display);
int change = 0; int change = 0;
if (newInfo.hasDifferentSize(oldInfo)) { if (newInfo.hasDifferentSize(oldInfo)) {
change |= CHANGE_SIZE; change |= CHANGE_SIZE;
@@ -197,13 +204,13 @@ public class DisplayController implements DisplayListener, ComponentCallbacks {
if (change != 0) { if (change != 0) {
mInfo = newInfo; mInfo = newInfo;
final int flags = change; final int flags = change;
MAIN_EXECUTOR.execute(() -> notifyChange(flags)); MAIN_EXECUTOR.execute(() -> notifyChange(context, flags));
} }
} }
private void notifyChange(int flags) { private void notifyChange(Context context, int flags) {
for (int i = mListeners.size() - 1; i >= 0; i--) { for (int i = mListeners.size() - 1; i >= 0; i--) {
mListeners.get(i).onDisplayInfoChanged(mInfo, flags); mListeners.get(i).onDisplayInfoChanged(context, mInfo, flags);
} }
} }