Files
Lawnchair/quickstep/src/com/android/launcher3/taskbar/TaskbarTransitions.java
T
Tracy Zhou 027600a259 Pipe nav bar transitions logic into task bar
Bug: 349155860
Test: manual
Flag: com.android.wm.shell.enable_taskbar_on_phones
Change-Id: Idaf7ecc7b964a2c406ddf4329b64971b08f5d7de
2024-06-25 22:01:34 -07:00

136 lines
4.5 KiB
Java

/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.taskbar;
import android.view.View;
import com.android.launcher3.R;
import com.android.launcher3.taskbar.navbutton.NearestTouchFrame;
import com.android.systemui.shared.statusbar.phone.BarTransitions;
import java.io.PrintWriter;
/** Manages task bar transitions */
public class TaskbarTransitions extends BarTransitions implements
TaskbarControllers.LoggableTaskbarController {
private final TaskbarActivityContext mContext;
private boolean mWallpaperVisible;
private boolean mLightsOut;
private boolean mAutoDim;
private View mNavButtons;
private float mDarkIntensity;
private final NearestTouchFrame mView;
public TaskbarTransitions(TaskbarActivityContext context, NearestTouchFrame view) {
super(view, R.drawable.nav_background);
mContext = context;
mView = view;
}
void init() {
mView.addOnLayoutChangeListener(
(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
mNavButtons = mView.findViewById(R.id.end_nav_buttons);
applyLightsOut(false, true);
});
mNavButtons = mView.findViewById(R.id.end_nav_buttons);
applyModeBackground(-1, getMode(), false /*animate*/);
applyLightsOut(false /*animate*/, true /*force*/);
if (mContext.isPhoneButtonNavMode()) {
mBarBackground.setOverrideAlpha(1);
}
}
void setWallpaperVisibility(boolean visible) {
mWallpaperVisible = visible;
applyLightsOut(true, false);
}
@Override
public void setAutoDim(boolean autoDim) {
// Ensure we aren't in gestural nav if we are triggering auto dim
if (autoDim && !mContext.isPhoneButtonNavMode()) {
return;
}
if (mAutoDim == autoDim) return;
mAutoDim = autoDim;
applyLightsOut(true, false);
}
@Override
protected void onTransition(int oldMode, int newMode, boolean animate) {
super.onTransition(oldMode, newMode, animate);
applyLightsOut(animate, false /*force*/);
}
private void applyLightsOut(boolean animate, boolean force) {
// apply to lights out
applyLightsOut(isLightsOut(getMode()), animate, force);
}
private void applyLightsOut(boolean lightsOut, boolean animate, boolean force) {
if (!force && lightsOut == mLightsOut) return;
mLightsOut = lightsOut;
if (mNavButtons == null) return;
// ok, everyone, stop it right there
mNavButtons.animate().cancel();
// Bump percentage by 10% if dark.
float darkBump = mDarkIntensity / 10;
final float navButtonsAlpha = lightsOut ? 0.6f + darkBump : 1f;
if (!animate) {
mNavButtons.setAlpha(navButtonsAlpha);
} else {
final int duration = lightsOut ? LIGHTS_OUT_DURATION : LIGHTS_IN_DURATION;
mNavButtons.animate()
.alpha(navButtonsAlpha)
.setDuration(duration)
.start();
}
}
void onDarkIntensityChanged(float darkIntensity) {
mDarkIntensity = darkIntensity;
if (mAutoDim) {
applyLightsOut(false, true);
}
}
@Override
public void dumpLogs(String prefix, PrintWriter pw) {
pw.println(prefix + "TaskbarTransitions:");
pw.println(prefix + "\tmMode=" + getMode());
pw.println(prefix + "\tmAlwaysOpaque: " + isAlwaysOpaque());
pw.println(prefix + "\tmWallpaperVisible: " + mWallpaperVisible);
pw.println(prefix + "\tmLightsOut: " + mLightsOut);
pw.println(prefix + "\tmAutoDim: " + mAutoDim);
pw.println(prefix + "\tbg overrideAlpha: " + mBarBackground.getOverrideAlpha());
pw.println(prefix + "\tbg color: " + mBarBackground.getColor());
pw.println(prefix + "\tbg frame: " + mBarBackground.getFrame());
}
}