Have separate DeviceProfile instances for taskbar and all apps windows.
We want to scale down the DeviceProfile for taskbar, but the all apps window should rely on the original DeviceProfile. Test: Manual Fix: 232907361 Change-Id: Ia09f674ada9e445c1d7278fa94c536ea9de13ef9 Merged-In: Ia09f674ada9e445c1d7278fa94c536ea9de13ef9
This commit is contained in:
@@ -19,7 +19,6 @@ import android.content.Context;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.DeviceProfile.DeviceProfileListenable;
|
||||
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
|
||||
import com.android.launcher3.util.Themes;
|
||||
@@ -36,8 +35,6 @@ public abstract class BaseTaskbarContext extends ContextThemeWrapper implements
|
||||
protected final LayoutInflater mLayoutInflater;
|
||||
private final List<OnDeviceProfileChangeListener> mDPChangeListeners = new ArrayList<>();
|
||||
|
||||
protected DeviceProfile mDeviceProfile;
|
||||
|
||||
public BaseTaskbarContext(Context windowContext) {
|
||||
super(windowContext, Themes.getActivityThemeRes(windowContext));
|
||||
mLayoutInflater = LayoutInflater.from(this).cloneInContext(this);
|
||||
@@ -48,19 +45,11 @@ public abstract class BaseTaskbarContext extends ContextThemeWrapper implements
|
||||
return mLayoutInflater;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final DeviceProfile getDeviceProfile() {
|
||||
return mDeviceProfile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final List<OnDeviceProfileChangeListener> getOnDeviceProfileChangeListeners() {
|
||||
return mDPChangeListeners;
|
||||
}
|
||||
|
||||
/** Updates the {@link DeviceProfile} instance to the latest representation of the screen. */
|
||||
public abstract void updateDeviceProfile(DeviceProfile dp);
|
||||
|
||||
/** Callback invoked when a drag is initiated within this context. */
|
||||
public abstract void onDragStart();
|
||||
|
||||
|
||||
@@ -522,7 +522,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
if (button.getVisibility() == View.VISIBLE) {
|
||||
parent.getDescendantRectRelativeToSelf(button, mTempRect);
|
||||
if (mHitboxExtender.extendedHitboxEnabled()) {
|
||||
mTempRect.bottom += mContext.mDeviceProfile.getTaskbarOffsetY();
|
||||
mTempRect.bottom += mContext.getDeviceProfile().getTaskbarOffsetY();
|
||||
}
|
||||
outRegion.op(mTempRect, Op.UNION);
|
||||
}
|
||||
|
||||
@@ -111,6 +111,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
|
||||
private final WindowManager mWindowManager;
|
||||
private final @Nullable RoundedCorner mLeftCorner, mRightCorner;
|
||||
private DeviceProfile mDeviceProfile;
|
||||
private WindowManager.LayoutParams mWindowLayoutParams;
|
||||
private boolean mIsFullscreen;
|
||||
// The size we should return to when we call setTaskbarWindowFullscreen(false)
|
||||
@@ -135,7 +136,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
TaskbarNavButtonController buttonController, ScopedUnfoldTransitionProgressProvider
|
||||
unfoldTransitionProgressProvider) {
|
||||
super(windowContext);
|
||||
mDeviceProfile = dp;
|
||||
mDeviceProfile = dp.copy(this);
|
||||
|
||||
final Resources resources = getResources();
|
||||
|
||||
@@ -198,7 +199,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
new TaskbarAutohideSuspendController(this),
|
||||
new TaskbarPopupController(this),
|
||||
new TaskbarForceVisibleImmersiveController(this),
|
||||
new TaskbarAllAppsController(this),
|
||||
new TaskbarAllAppsController(this, dp),
|
||||
new TaskbarInsetsController(this));
|
||||
}
|
||||
|
||||
@@ -214,8 +215,14 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceProfile getDeviceProfile() {
|
||||
return mDeviceProfile;
|
||||
}
|
||||
|
||||
/** Updates {@link DeviceProfile} instances for any Taskbar windows. */
|
||||
public void updateDeviceProfile(DeviceProfile dp) {
|
||||
mDeviceProfile = dp;
|
||||
mControllers.taskbarAllAppsController.updateDeviceProfile(dp);
|
||||
mDeviceProfile = dp.copy(this);
|
||||
updateIconSize(getResources());
|
||||
|
||||
AbstractFloatingView.closeAllOpenViewsExcept(this, false, TYPE_REBIND_SAFE);
|
||||
@@ -230,7 +237,6 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
mDeviceProfile.updateIconSize(1, resources);
|
||||
float iconScale = taskbarIconSize / mDeviceProfile.iconSizePx;
|
||||
mDeviceProfile.updateIconSize(iconScale, resources);
|
||||
mDeviceProfile.updateAllAppsIconSize(1, resources); // Leave all apps unscaled.
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
||||
@@ -148,7 +148,7 @@ public class TaskbarManager {
|
||||
// Config change might be handled without re-creating the taskbar
|
||||
if (mTaskbarActivityContext != null) {
|
||||
if (dp != null && dp.isTaskbarPresent) {
|
||||
mTaskbarActivityContext.updateDeviceProfile(dp.copy(mContext));
|
||||
mTaskbarActivityContext.updateDeviceProfile(dp);
|
||||
}
|
||||
mTaskbarActivityContext.onConfigurationChanged(configDiff);
|
||||
}
|
||||
@@ -274,8 +274,8 @@ public class TaskbarManager {
|
||||
return;
|
||||
}
|
||||
|
||||
mTaskbarActivityContext = new TaskbarActivityContext(mContext, dp.copy(mContext),
|
||||
mNavButtonController, mUnfoldProgressProvider);
|
||||
mTaskbarActivityContext = new TaskbarActivityContext(mContext, dp, mNavButtonController,
|
||||
mUnfoldProgressProvider);
|
||||
|
||||
mTaskbarActivityContext.init(mSharedState);
|
||||
if (mActivity != null) {
|
||||
|
||||
@@ -19,7 +19,6 @@ import static android.view.KeyEvent.ACTION_UP;
|
||||
import static android.view.KeyEvent.KEYCODE_BACK;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
|
||||
import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE;
|
||||
import static com.android.systemui.shared.system.ViewTreeObserverWrapper.InsetsInfo.TOUCHABLE_INSETS_REGION;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -78,14 +77,13 @@ class TaskbarAllAppsContext extends BaseTaskbarContext {
|
||||
TaskbarStashController taskbarStashController) {
|
||||
super(taskbarContext.createWindowContext(TYPE_APPLICATION_OVERLAY, null));
|
||||
mTaskbarContext = taskbarContext;
|
||||
mDeviceProfile = taskbarContext.getDeviceProfile();
|
||||
mWindowController = windowController;
|
||||
mDragController = new TaskbarDragController(this);
|
||||
mOnboardingPrefs = new OnboardingPrefs<>(this, Utilities.getPrefs(this));
|
||||
|
||||
mDragLayer = new TaskbarAllAppsDragLayer(this);
|
||||
TaskbarAllAppsSlideInView slideInView = (TaskbarAllAppsSlideInView) mLayoutInflater.inflate(
|
||||
R.layout.taskbar_all_apps, mDragLayer, false);
|
||||
mWindowController = windowController;
|
||||
mAllAppsViewController = new TaskbarAllAppsViewController(
|
||||
this,
|
||||
slideInView,
|
||||
@@ -101,6 +99,11 @@ class TaskbarAllAppsContext extends BaseTaskbarContext {
|
||||
return mAllAppsViewController;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceProfile getDeviceProfile() {
|
||||
return mWindowController.getDeviceProfile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskbarDragController getDragController() {
|
||||
return mDragController;
|
||||
@@ -141,15 +144,6 @@ class TaskbarAllAppsContext extends BaseTaskbarContext {
|
||||
return mTaskbarContext.getDotInfoForItem(info);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDeviceProfile(DeviceProfile dp) {
|
||||
mDeviceProfile = dp;
|
||||
|
||||
AbstractFloatingView.closeAllOpenViewsExcept(this, false, TYPE_REBIND_SAFE);
|
||||
|
||||
dispatchDeviceProfileChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDragStart() {}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
|
||||
import static com.android.launcher3.AbstractFloatingView.TYPE_ALL;
|
||||
import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.PixelFormat;
|
||||
@@ -31,7 +32,6 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.AbstractFloatingView;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
|
||||
import com.android.launcher3.appprediction.PredictionRowView;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.model.data.AppInfo;
|
||||
@@ -55,7 +55,7 @@ import java.util.Optional;
|
||||
* Application data may be bound while the window does not exist, so this controller will store
|
||||
* the models for the next all apps session.
|
||||
*/
|
||||
public final class TaskbarAllAppsController implements OnDeviceProfileChangeListener {
|
||||
public final class TaskbarAllAppsController {
|
||||
|
||||
private static final String WINDOW_TITLE = "Taskbar All Apps";
|
||||
|
||||
@@ -70,6 +70,7 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList
|
||||
}
|
||||
};
|
||||
|
||||
private DeviceProfile mDeviceProfile;
|
||||
private TaskbarControllers mControllers;
|
||||
/** Window context for all apps if it is open. */
|
||||
private @Nullable TaskbarAllAppsContext mAllAppsContext;
|
||||
@@ -79,7 +80,8 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList
|
||||
private int mAppsModelFlags;
|
||||
private List<ItemInfo> mPredictedApps;
|
||||
|
||||
public TaskbarAllAppsController(TaskbarActivityContext context) {
|
||||
public TaskbarAllAppsController(TaskbarActivityContext context, DeviceProfile dp) {
|
||||
mDeviceProfile = dp;
|
||||
mTaskbarContext = context;
|
||||
mProxyView = new TaskbarAllAppsProxyView(mTaskbarContext);
|
||||
mLayoutParams = createLayoutParams();
|
||||
@@ -146,7 +148,6 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList
|
||||
this,
|
||||
mControllers.taskbarStashController);
|
||||
mAllAppsContext.getDragController().init(mControllers);
|
||||
mTaskbarContext.addOnDeviceProfileChangeListener(this);
|
||||
TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener);
|
||||
Optional.ofNullable(mAllAppsContext.getSystemService(WindowManager.class))
|
||||
.ifPresent(m -> m.addView(mAllAppsContext.getDragLayer(), mLayoutParams));
|
||||
@@ -184,13 +185,25 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList
|
||||
/** Destroys the controller and any All Apps window if present. */
|
||||
public void onDestroy() {
|
||||
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mTaskStackListener);
|
||||
mTaskbarContext.removeOnDeviceProfileChangeListener(this);
|
||||
Optional.ofNullable(mAllAppsContext)
|
||||
.map(c -> c.getSystemService(WindowManager.class))
|
||||
.ifPresent(m -> m.removeView(mAllAppsContext.getDragLayer()));
|
||||
mAllAppsContext = null;
|
||||
}
|
||||
|
||||
/** Updates {@link DeviceProfile} instance for Taskbar's All Apps window. */
|
||||
public void updateDeviceProfile(DeviceProfile dp) {
|
||||
mDeviceProfile = dp;
|
||||
Optional.ofNullable(mAllAppsContext).ifPresent(c -> {
|
||||
AbstractFloatingView.closeAllOpenViewsExcept(c, false, TYPE_REBIND_SAFE);
|
||||
c.dispatchDeviceProfileChanged();
|
||||
});
|
||||
}
|
||||
|
||||
DeviceProfile getDeviceProfile() {
|
||||
return mDeviceProfile;
|
||||
}
|
||||
|
||||
private LayoutParams createLayoutParams() {
|
||||
LayoutParams layoutParams = new LayoutParams(
|
||||
TYPE_APPLICATION_OVERLAY,
|
||||
@@ -205,11 +218,6 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList
|
||||
return layoutParams;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceProfileChanged(DeviceProfile dp) {
|
||||
Optional.ofNullable(mAllAppsContext).ifPresent(c -> c.updateDeviceProfile(dp));
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy view connecting taskbar drag layer to the all apps window.
|
||||
* <p>
|
||||
|
||||
@@ -789,7 +789,7 @@ public class DeviceProfile {
|
||||
/**
|
||||
* Updates the iconSize for allApps* variants.
|
||||
*/
|
||||
public void updateAllAppsIconSize(float scale, Resources res) {
|
||||
private void updateAllAppsIconSize(float scale, Resources res) {
|
||||
allAppsBorderSpacePx = new Point(
|
||||
pxFromDp(inv.allAppsBorderSpaces[mTypeIndex].x, mMetrics, scale),
|
||||
pxFromDp(inv.allAppsBorderSpaces[mTypeIndex].y, mMetrics, scale));
|
||||
|
||||
Reference in New Issue
Block a user