Merge "Reland "TextureView Vulkan support and optimized OpenGL draw""
diff --git a/api/system-current.txt b/api/system-current.txt
index 1d5f586..afce431 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -474,9 +474,6 @@
method public android.app.Vr2dDisplayProperties.Builder setEnabled(boolean);
}
- public static abstract class Vr2dDisplayProperties.Vr2dDisplayFlag implements java.lang.annotation.Annotation {
- }
-
public class VrManager {
method public int getVr2dDisplayId();
method public boolean isPersistentVrModeEnabled();
diff --git a/core/java/android/app/Vr2dDisplayProperties.java b/core/java/android/app/Vr2dDisplayProperties.java
index 2fd82b2..1752131 100644
--- a/core/java/android/app/Vr2dDisplayProperties.java
+++ b/core/java/android/app/Vr2dDisplayProperties.java
@@ -35,6 +35,7 @@
public static final int FLAG_VIRTUAL_DISPLAY_ENABLED = 1;
+ /** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef({
FLAG_VIRTUAL_DISPLAY_ENABLED
diff --git a/core/java/com/android/internal/app/ColorDisplayController.java b/core/java/com/android/internal/app/ColorDisplayController.java
index ba6cf26..7515180 100644
--- a/core/java/com/android/internal/app/ColorDisplayController.java
+++ b/core/java/com/android/internal/app/ColorDisplayController.java
@@ -112,8 +112,8 @@
private final Context mContext;
private final int mUserId;
- private final ContentObserver mContentObserver;
+ private ContentObserver mContentObserver;
private Callback mCallback;
private MetricsLogger mMetricsLogger;
@@ -124,18 +124,6 @@
public ColorDisplayController(@NonNull Context context, int userId) {
mContext = context.getApplicationContext();
mUserId = userId;
-
- mContentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
- @Override
- public void onChange(boolean selfChange, Uri uri) {
- super.onChange(selfChange, uri);
-
- final String setting = uri == null ? null : uri.getLastPathSegment();
- if (setting != null) {
- onSettingChanged(setting);
- }
- }
- };
}
/**
@@ -522,6 +510,20 @@
if (oldCallback != callback) {
mCallback = callback;
+ if (mContentObserver == null) {
+ mContentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ super.onChange(selfChange, uri);
+
+ final String setting = uri == null ? null : uri.getLastPathSegment();
+ if (setting != null) {
+ onSettingChanged(setting);
+ }
+ }
+ };
+ }
+
if (callback == null) {
// Stop listening for changes now that there IS NOT a listener.
mContext.getContentResolver().unregisterContentObserver(mContentObserver);
diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java
index 4ee951a..0b37d57 100644
--- a/core/java/com/android/internal/widget/PointerLocationView.java
+++ b/core/java/com/android/internal/widget/PointerLocationView.java
@@ -19,8 +19,8 @@
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.graphics.RectF;
import android.graphics.Paint.FontMetricsInt;
+import android.graphics.RectF;
import android.hardware.input.InputManager;
import android.hardware.input.InputManager.InputDeviceListener;
import android.os.SystemProperties;
@@ -29,12 +29,12 @@
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
+import android.view.MotionEvent.PointerCoords;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.WindowInsets;
import android.view.WindowManagerPolicyConstants.PointerEventListener;
-import android.view.MotionEvent.PointerCoords;
import java.util.ArrayList;
@@ -105,10 +105,6 @@
}
}
- private final int ESTIMATE_PAST_POINTS = 4;
- private final int ESTIMATE_FUTURE_POINTS = 2;
- private final float ESTIMATE_INTERVAL = 0.02f;
-
private final InputManager mIm;
private final ViewConfiguration mVC;
@@ -336,37 +332,14 @@
}
if (drawn) {
- // Draw movement estimate curve.
- mPaint.setARGB(128, 128, 0, 128);
- float lx = ps.mEstimator.estimateX(-ESTIMATE_PAST_POINTS * ESTIMATE_INTERVAL);
- float ly = ps.mEstimator.estimateY(-ESTIMATE_PAST_POINTS * ESTIMATE_INTERVAL);
- for (int i = -ESTIMATE_PAST_POINTS + 1; i <= ESTIMATE_FUTURE_POINTS; i++) {
- float x = ps.mEstimator.estimateX(i * ESTIMATE_INTERVAL);
- float y = ps.mEstimator.estimateY(i * ESTIMATE_INTERVAL);
- canvas.drawLine(lx, ly, x, y, mPaint);
- lx = x;
- ly = y;
- }
-
// Draw velocity vector.
mPaint.setARGB(255, 255, 64, 128);
float xVel = ps.mXVelocity * (1000 / 60);
float yVel = ps.mYVelocity * (1000 / 60);
canvas.drawLine(lastX, lastY, lastX + xVel, lastY + yVel, mPaint);
- // Draw alternate estimate.
+ // Draw velocity vector using an alternate VelocityTracker strategy.
if (mAltVelocity != null) {
- mPaint.setARGB(128, 0, 128, 128);
- lx = ps.mAltEstimator.estimateX(-ESTIMATE_PAST_POINTS * ESTIMATE_INTERVAL);
- ly = ps.mAltEstimator.estimateY(-ESTIMATE_PAST_POINTS * ESTIMATE_INTERVAL);
- for (int i = -ESTIMATE_PAST_POINTS + 1; i <= ESTIMATE_FUTURE_POINTS; i++) {
- float x = ps.mAltEstimator.estimateX(i * ESTIMATE_INTERVAL);
- float y = ps.mAltEstimator.estimateY(i * ESTIMATE_INTERVAL);
- canvas.drawLine(lx, ly, x, y, mPaint);
- lx = x;
- ly = y;
- }
-
mPaint.setARGB(255, 64, 255, 128);
xVel = ps.mAltXVelocity * (1000 / 60);
yVel = ps.mAltYVelocity * (1000 / 60);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 5258518..f845bd0 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -3345,7 +3345,7 @@
@hide
@removed -->
<permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"
- android:protectionLevel="signature" />
+ android:protectionLevel="signature|privileged" />
<!-- Allows an application to capture secure video output.
<p>Not for use by third-party applications.</p>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index c8ad31f..cf1320c 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3352,9 +3352,6 @@
to occur. The expand button will have increased touch boundaries to accomodate this. -->
<bool name="config_notificationHeaderClickableForExpand">false</bool>
- <!-- Configuration for automotive -->
- <bool name="enable_pbap_pce_profile">false</bool>
-
<!-- Default data warning level in mb -->
<integer name="default_data_warning_level_mb">2048</integer>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index e209985..48c263e 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3259,8 +3259,6 @@
<java-symbol type="style" name="Theme.DeviceDefault.QuickSettings" />
- <java-symbol type="bool" name="enable_pbap_pce_profile" />
-
<java-symbol type="integer" name="default_data_warning_level_mb" />
<java-symbol type="bool" name="config_useVideoPauseWorkaround" />
<java-symbol type="bool" name="config_sendPackageName" />
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
index 36d209e..7000f9d 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
@@ -97,8 +97,6 @@
private PanProfile mPanProfile;
private PbapClientProfile mPbapClientProfile;
private PbapServerProfile mPbapProfile;
- private final boolean mUsePbapPce;
- private final boolean mUseMapClient;
private HearingAidProfile mHearingAidProfile;
/**
@@ -115,9 +113,6 @@
mDeviceManager = deviceManager;
mEventManager = eventManager;
- mUsePbapPce = mContext.getResources().getBoolean(R.bool.enable_pbap_pce_profile);
- // MAP Client is typically used in the same situations as PBAP Client
- mUseMapClient = mContext.getResources().getBoolean(R.bool.enable_pbap_pce_profile);
// pass this reference to adapter and event manager (circular dependency)
adapter.setProfileManager(this);
@@ -130,17 +125,17 @@
void updateLocalProfiles() {
List<Integer> supportedList = BluetoothAdapter.getDefaultAdapter().getSupportedProfiles();
if (CollectionUtils.isEmpty(supportedList)) {
- if(DEBUG) Log.d(TAG, "supportedList is null");
+ if (DEBUG) Log.d(TAG, "supportedList is null");
return;
}
if (mA2dpProfile == null && supportedList.contains(BluetoothProfile.A2DP)) {
- if(DEBUG) Log.d(TAG, "Adding local A2DP profile");
+ if (DEBUG) Log.d(TAG, "Adding local A2DP profile");
mA2dpProfile = new A2dpProfile(mContext, mDeviceManager, this);
addProfile(mA2dpProfile, A2dpProfile.NAME,
BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
}
if (mA2dpSinkProfile == null && supportedList.contains(BluetoothProfile.A2DP_SINK)) {
- if(DEBUG) Log.d(TAG, "Adding local A2DP SINK profile");
+ if (DEBUG) Log.d(TAG, "Adding local A2DP SINK profile");
mA2dpSinkProfile = new A2dpSinkProfile(mContext, mDeviceManager, this);
addProfile(mA2dpSinkProfile, A2dpSinkProfile.NAME,
BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED);
@@ -154,66 +149,63 @@
BluetoothHeadset.STATE_AUDIO_DISCONNECTED);
}
if (mHfpClientProfile == null && supportedList.contains(BluetoothProfile.HEADSET_CLIENT)) {
- if(DEBUG) Log.d(TAG, "Adding local HfpClient profile");
+ if (DEBUG) Log.d(TAG, "Adding local HfpClient profile");
mHfpClientProfile = new HfpClientProfile(mContext, mDeviceManager, this);
addHeadsetProfile(mHfpClientProfile, HfpClientProfile.NAME,
BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED,
BluetoothHeadsetClient.ACTION_AUDIO_STATE_CHANGED,
BluetoothHeadsetClient.STATE_AUDIO_DISCONNECTED);
}
- if (mUseMapClient) {
- if (mMapClientProfile == null && supportedList.contains(BluetoothProfile.MAP_CLIENT)) {
- if(DEBUG) Log.d(TAG, "Adding local MAP CLIENT profile");
- mMapClientProfile =
- new MapClientProfile(mContext, mDeviceManager,this);
- addProfile(mMapClientProfile, MapClientProfile.NAME,
- BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED);
- }
- } else if (mMapProfile == null && supportedList.contains(BluetoothProfile.MAP)) {
- if(DEBUG) Log.d(TAG, "Adding local MAP profile");
+ if (mMapClientProfile == null && supportedList.contains(BluetoothProfile.MAP_CLIENT)) {
+ if (DEBUG) Log.d(TAG, "Adding local MAP CLIENT profile");
+ mMapClientProfile = new MapClientProfile(mContext, mDeviceManager,this);
+ addProfile(mMapClientProfile, MapClientProfile.NAME,
+ BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED);
+ }
+ if (mMapProfile == null && supportedList.contains(BluetoothProfile.MAP)) {
+ if (DEBUG) Log.d(TAG, "Adding local MAP profile");
mMapProfile = new MapProfile(mContext, mDeviceManager, this);
addProfile(mMapProfile, MapProfile.NAME, BluetoothMap.ACTION_CONNECTION_STATE_CHANGED);
}
if (mOppProfile == null && supportedList.contains(BluetoothProfile.OPP)) {
- if(DEBUG) Log.d(TAG, "Adding local OPP profile");
+ if (DEBUG) Log.d(TAG, "Adding local OPP profile");
mOppProfile = new OppProfile();
// Note: no event handler for OPP, only name map.
mProfileNameMap.put(OppProfile.NAME, mOppProfile);
}
if (mHearingAidProfile == null && supportedList.contains(BluetoothProfile.HEARING_AID)) {
- if(DEBUG) Log.d(TAG, "Adding local Hearing Aid profile");
+ if (DEBUG) Log.d(TAG, "Adding local Hearing Aid profile");
mHearingAidProfile = new HearingAidProfile(mContext, mDeviceManager,
this);
addProfile(mHearingAidProfile, HearingAidProfile.NAME,
BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
}
if (mHidProfile == null && supportedList.contains(BluetoothProfile.HID_HOST)) {
- if(DEBUG) Log.d(TAG, "Adding local HID_HOST profile");
+ if (DEBUG) Log.d(TAG, "Adding local HID_HOST profile");
mHidProfile = new HidProfile(mContext, mDeviceManager, this);
addProfile(mHidProfile, HidProfile.NAME,
BluetoothHidHost.ACTION_CONNECTION_STATE_CHANGED);
}
if (mHidDeviceProfile == null && supportedList.contains(BluetoothProfile.HID_DEVICE)) {
- if(DEBUG) Log.d(TAG, "Adding local HID_DEVICE profile");
+ if (DEBUG) Log.d(TAG, "Adding local HID_DEVICE profile");
mHidDeviceProfile = new HidDeviceProfile(mContext, mDeviceManager, this);
addProfile(mHidDeviceProfile, HidDeviceProfile.NAME,
BluetoothHidDevice.ACTION_CONNECTION_STATE_CHANGED);
}
if (mPanProfile == null && supportedList.contains(BluetoothProfile.PAN)) {
- if(DEBUG) Log.d(TAG, "Adding local PAN profile");
+ if (DEBUG) Log.d(TAG, "Adding local PAN profile");
mPanProfile = new PanProfile(mContext);
addPanProfile(mPanProfile, PanProfile.NAME,
BluetoothPan.ACTION_CONNECTION_STATE_CHANGED);
}
if (mPbapProfile == null && supportedList.contains(BluetoothProfile.PBAP)) {
- if(DEBUG) Log.d(TAG, "Adding local PBAP profile");
+ if (DEBUG) Log.d(TAG, "Adding local PBAP profile");
mPbapProfile = new PbapServerProfile(mContext);
addProfile(mPbapProfile, PbapServerProfile.NAME,
BluetoothPbap.ACTION_CONNECTION_STATE_CHANGED);
}
- if (mUsePbapPce && mPbapClientProfile == null && supportedList.contains(
- BluetoothProfile.PBAP_CLIENT)) {
- if(DEBUG) Log.d(TAG, "Adding local PBAP Client profile");
+ if (mPbapClientProfile == null && supportedList.contains(BluetoothProfile.PBAP_CLIENT)) {
+ if (DEBUG) Log.d(TAG, "Adding local PBAP Client profile");
mPbapClientProfile = new PbapClientProfile(mContext, mDeviceManager,this);
addProfile(mPbapClientProfile, PbapClientProfile.NAME,
BluetoothPbapClient.ACTION_CONNECTION_STATE_CHANGED);
@@ -544,7 +536,9 @@
removedProfiles.remove(mMapClientProfile);
}
- if (mUsePbapPce) {
+ if ((mPbapClientProfile != null) &&
+ BluetoothUuid.isUuidPresent(localUuids, BluetoothUuid.PBAP_PCE) &&
+ BluetoothUuid.containsAnyUuid(uuids, PbapClientProfile.SRC_UUIDS)) {
profiles.add(mPbapClientProfile);
removedProfiles.remove(mPbapClientProfile);
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/utils/StringUtil.java b/packages/SettingsLib/src/com/android/settingslib/utils/StringUtil.java
index 88be2b0..3e3c039 100644
--- a/packages/SettingsLib/src/com/android/settingslib/utils/StringUtil.java
+++ b/packages/SettingsLib/src/com/android/settingslib/utils/StringUtil.java
@@ -27,7 +27,6 @@
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.TtsSpan;
-import android.util.Log;
import com.android.settingslib.R;
@@ -37,8 +36,6 @@
/** Utility class for generally useful string methods **/
public class StringUtil {
- private static final String TAG = "StringUtil";
-
public static final int SECONDS_PER_MINUTE = 60;
public static final int SECONDS_PER_HOUR = 60 * 60;
public static final int SECONDS_PER_DAY = 24 * 60 * 60;
@@ -97,7 +94,6 @@
final Locale locale = context.getResources().getConfiguration().locale;
final MeasureFormat measureFormat = MeasureFormat.getInstance(
locale, FormatWidth.SHORT);
- Log.i(TAG, "Locale is: " + locale);
sb.append(measureFormat.formatMeasures(measureArray));
if (measureArray.length == 1 && MeasureUnit.MINUTE.equals(measureArray[0].getUnit())) {
@@ -150,7 +146,6 @@
null /* default NumberFormat */,
RelativeDateTimeFormatter.Style.LONG,
android.icu.text.DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE);
- Log.i(TAG, "Locale is: " + locale);
return formatter.format(value, RelativeDateTimeFormatter.Direction.LAST, unit);
}
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSIconView.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSIconView.java
index c268d32..0cdb509a 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSIconView.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSIconView.java
@@ -29,7 +29,7 @@
super(context);
}
- public abstract void setIcon(State state);
+ public abstract void setIcon(State state, boolean allowAnimations);
public abstract void disableAnimation();
public abstract View getIconView();
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/CellTileView.java b/packages/SystemUI/src/com/android/systemui/qs/CellTileView.java
index e7eefe8..376e6ae 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/CellTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/CellTileView.java
@@ -43,9 +43,9 @@
R.dimen.qs_tile_icon_size));
}
- protected void updateIcon(ImageView iv, State state) {
+ protected void updateIcon(ImageView iv, State state, boolean allowAnimations) {
if (!(state.icon instanceof SignalIcon)) {
- super.updateIcon(iv, state);
+ super.updateIcon(iv, state, allowAnimations);
return;
} else if (!Objects.equals(state.icon, iv.getTag(R.id.qs_icon_tag))) {
mSignalDrawable.setLevel(((SignalIcon) state.icon).getState());
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
index d9583af..ce90fc1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
@@ -18,14 +18,13 @@
import android.animation.ValueAnimator;
import android.content.Context;
-import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.android.systemui.R;
-import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTile.SignalState;
+import com.android.systemui.plugins.qs.QSTile.State;
import com.android.systemui.qs.tileimpl.QSIconViewImpl;
import com.android.systemui.qs.tileimpl.SlashImageView;
@@ -119,9 +118,9 @@
}
@Override
- public void setIcon(QSTile.State state) {
+ public void setIcon(State state, boolean allowAnimations) {
final SignalState s = (SignalState) state;
- setIcon(mSignal, s);
+ setIcon(mSignal, s, allowAnimations);
if (s.overlayIconId > 0) {
mOverlay.setVisibility(VISIBLE);
@@ -134,9 +133,9 @@
} else {
mSignal.setPaddingRelative(0, 0, 0, 0);
}
- final boolean shown = isShown();
- setVisibility(mIn, shown, s.activityIn);
- setVisibility(mOut, shown, s.activityOut);
+ final boolean shouldAnimate = allowAnimations && isShown();
+ setVisibility(mIn, shouldAnimate, s.activityIn);
+ setVisibility(mOut, shouldAnimate, s.activityOut);
}
private void setVisibility(View view, boolean shown, boolean visible) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
index e7e756f..9dd5d8f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
@@ -84,16 +84,15 @@
layout(mIcon, iconLeft, top);
}
- public void setIcon(QSTile.State state) {
- setIcon((ImageView) mIcon, state);
+ public void setIcon(State state, boolean allowAnimations) {
+ setIcon((ImageView) mIcon, state, allowAnimations);
}
- protected void updateIcon(ImageView iv, State state) {
+ protected void updateIcon(ImageView iv, State state, boolean allowAnimations) {
final QSTile.Icon icon = state.iconSupplier != null ? state.iconSupplier.get() : state.icon;
if (!Objects.equals(icon, iv.getTag(R.id.qs_icon_tag))
|| !Objects.equals(state.slash, iv.getTag(R.id.qs_slash_tag))) {
- boolean shouldAnimate = iv.isShown() && mAnimationEnabled
- && iv.getDrawable() != null;
+ boolean shouldAnimate = allowAnimations && shouldAnimate(iv);
Drawable d = icon != null
? shouldAnimate ? icon.getDrawable(mContext)
: icon.getInvisibleDrawable(mContext) : null;
@@ -128,7 +127,11 @@
}
}
- protected void setIcon(ImageView iv, QSTile.State state) {
+ private boolean shouldAnimate(ImageView iv) {
+ return mAnimationEnabled && iv.isShown() && iv.getDrawable() != null;
+ }
+
+ protected void setIcon(ImageView iv, QSTile.State state, boolean allowAnimations) {
if (state.disabledByPolicy) {
iv.setColorFilter(getContext().getColor(R.color.qs_tile_disabled_color));
} else {
@@ -137,8 +140,8 @@
if (state.state != mState) {
int color = getColor(state.state);
mState = state.state;
- if (iv.isShown() && mTint != 0) {
- animateGrayScale(mTint, color, iv, () -> updateIcon(iv, state));
+ if (mTint != 0 && allowAnimations && shouldAnimate(iv)) {
+ animateGrayScale(mTint, color, iv, () -> updateIcon(iv, state, allowAnimations));
mTint = color;
} else {
if (iv instanceof AlphaControlledSlashImageView) {
@@ -148,10 +151,10 @@
setTint(iv, color);
}
mTint = color;
- updateIcon(iv, state);
+ updateIcon(iv, state, allowAnimations);
}
} else {
- updateIcon(iv, state);
+ updateIcon(iv, state, allowAnimations);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
index 91afef02..d42127e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
@@ -47,6 +47,7 @@
private static final String TAG = "QSTileBaseView";
private final H mHandler = new H();
+ private final int[] mLocInScreen = new int[2];
private final FrameLayout mIconFrame;
protected QSIconView mIcon;
protected RippleDrawable mRipple;
@@ -178,8 +179,9 @@
protected void handleStateChanged(QSTile.State state) {
int circleColor = getCircleColor(state.state);
+ boolean allowAnimations = animationsEnabled();
if (circleColor != mCircleColor) {
- if (mBg.isShown() && animationsEnabled()) {
+ if (allowAnimations) {
ValueAnimator animator = ValueAnimator.ofArgb(mCircleColor, circleColor)
.setDuration(QS_ANIM_LENGTH);
animator.addUpdateListener(animation -> mBg.setImageTintList(ColorStateList.valueOf(
@@ -192,7 +194,7 @@
}
setClickable(state.state != Tile.STATE_UNAVAILABLE);
- mIcon.setIcon(state);
+ mIcon.setIcon(state, allowAnimations);
setContentDescription(state.contentDescription);
mAccessibilityClass = state.expandedAccessibilityClassName;
@@ -205,8 +207,17 @@
}
}
+ /* The view should not be animated if it's not on screen and no part of it is visible.
+ */
protected boolean animationsEnabled() {
- return true;
+ if (!isShown()) {
+ return false;
+ }
+ if (getAlpha() != 1f) {
+ return false;
+ }
+ getLocationOnScreen(mLocInScreen);
+ return mLocInScreen[1] >= -getHeight();
}
private int getCircleColor(int state) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java
index f9f4f497..c5e4043 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java
@@ -59,14 +59,14 @@
// No current icon, only the static drawable should be used.
s.icon = mock(Icon.class);
when(iv.getDrawable()).thenReturn(null);
- mIconView.updateIcon(iv, s);
+ mIconView.updateIcon(iv, s, true);
verify(s.icon, never()).getDrawable(any());
verify(s.icon).getInvisibleDrawable(any());
// Has icon, should use the standard (animated) form.
s.icon = mock(Icon.class);
when(iv.getDrawable()).thenReturn(mock(Drawable.class));
- mIconView.updateIcon(iv, s);
+ mIconView.updateIcon(iv, s, true);
verify(s.icon).getDrawable(any());
verify(s.icon, never()).getInvisibleDrawable(any());
}
@@ -79,7 +79,7 @@
int desiredColor = mIconView.getColor(s.state);
when(iv.isShown()).thenReturn(true);
- mIconView.setIcon(iv, s);
+ mIconView.setIcon(iv, s, true);
verify(iv).setImageTintList(argThat(stateList -> stateList.getColors()[0] == desiredColor));
}
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index ba5f323..7602090 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -183,6 +183,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -202,6 +203,8 @@
private static final String DIAG_ARG = "--diag";
public static final String SHORT_ARG = "--short";
private static final String TETHERING_ARG = "tethering";
+ private static final String NETWORK_ARG = "networks";
+ private static final String REQUEST_ARG = "requests";
private static final boolean DBG = true;
private static final boolean VDBG = false;
@@ -1978,7 +1981,7 @@
private void dumpNetworkDiagnostics(IndentingPrintWriter pw) {
final List<NetworkDiagnostics> netDiags = new ArrayList<NetworkDiagnostics>();
final long DIAG_TIME_MS = 5000;
- for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
+ for (NetworkAgentInfo nai : networksSortedById()) {
// Start gathering diagnostic information.
netDiags.add(new NetworkDiagnostics(
nai.network,
@@ -2009,6 +2012,12 @@
} else if (ArrayUtils.contains(args, TETHERING_ARG)) {
mTethering.dump(fd, pw, args);
return;
+ } else if (ArrayUtils.contains(args, NETWORK_ARG)) {
+ dumpNetworks(pw);
+ return;
+ } else if (ArrayUtils.contains(args, REQUEST_ARG)) {
+ dumpNetworkRequests(pw);
+ return;
}
pw.print("NetworkFactories for:");
@@ -2029,36 +2038,15 @@
pw.println("Current Networks:");
pw.increaseIndent();
- for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
- pw.println(nai.toString());
- pw.increaseIndent();
- pw.println(String.format(
- "Requests: REQUEST:%d LISTEN:%d BACKGROUND_REQUEST:%d total:%d",
- nai.numForegroundNetworkRequests(),
- nai.numNetworkRequests() - nai.numRequestNetworkRequests(),
- nai.numBackgroundNetworkRequests(),
- nai.numNetworkRequests()));
- pw.increaseIndent();
- for (int i = 0; i < nai.numNetworkRequests(); i++) {
- pw.println(nai.requestAt(i).toString());
- }
- pw.decreaseIndent();
- pw.println("Lingered:");
- pw.increaseIndent();
- nai.dumpLingerTimers(pw);
- pw.decreaseIndent();
- pw.decreaseIndent();
- }
+ dumpNetworks(pw);
pw.decreaseIndent();
pw.println();
pw.println("Network Requests:");
pw.increaseIndent();
- for (NetworkRequestInfo nri : mNetworkRequests.values()) {
- pw.println(nri.toString());
- }
- pw.println();
+ dumpNetworkRequests(pw);
pw.decreaseIndent();
+ pw.println();
mLegacyTypeTracker.dump(pw);
@@ -2126,6 +2114,55 @@
}
}
+ private void dumpNetworks(IndentingPrintWriter pw) {
+ for (NetworkAgentInfo nai : networksSortedById()) {
+ pw.println(nai.toString());
+ pw.increaseIndent();
+ pw.println(String.format(
+ "Requests: REQUEST:%d LISTEN:%d BACKGROUND_REQUEST:%d total:%d",
+ nai.numForegroundNetworkRequests(),
+ nai.numNetworkRequests() - nai.numRequestNetworkRequests(),
+ nai.numBackgroundNetworkRequests(),
+ nai.numNetworkRequests()));
+ pw.increaseIndent();
+ for (int i = 0; i < nai.numNetworkRequests(); i++) {
+ pw.println(nai.requestAt(i).toString());
+ }
+ pw.decreaseIndent();
+ pw.println("Lingered:");
+ pw.increaseIndent();
+ nai.dumpLingerTimers(pw);
+ pw.decreaseIndent();
+ pw.decreaseIndent();
+ }
+ }
+
+ private void dumpNetworkRequests(IndentingPrintWriter pw) {
+ for (NetworkRequestInfo nri : requestsSortedById()) {
+ pw.println(nri.toString());
+ }
+ }
+
+ /**
+ * Return an array of all current NetworkAgentInfos sorted by network id.
+ */
+ private NetworkAgentInfo[] networksSortedById() {
+ NetworkAgentInfo[] networks = new NetworkAgentInfo[0];
+ networks = mNetworkAgentInfos.values().toArray(networks);
+ Arrays.sort(networks, Comparator.comparingInt(nai -> nai.network.netId));
+ return networks;
+ }
+
+ /**
+ * Return an array of all current NetworkRequest sorted by request id.
+ */
+ private NetworkRequestInfo[] requestsSortedById() {
+ NetworkRequestInfo[] requests = new NetworkRequestInfo[0];
+ requests = mNetworkRequests.values().toArray(requests);
+ Arrays.sort(requests, Comparator.comparingInt(nri -> nri.request.requestId));
+ return requests;
+ }
+
private boolean isLiveNetworkAgent(NetworkAgentInfo nai, int what) {
if (nai.network == null) return false;
final NetworkAgentInfo officialNai = getNetworkAgentInfoForNetwork(nai.network);
@@ -2916,7 +2953,7 @@
pw.println("User setting: " + description);
pw.println("Network overrides:");
pw.increaseIndent();
- for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
+ for (NetworkAgentInfo nai : networksSortedById()) {
if (nai.avoidUnvalidated) {
pw.println(nai.name());
}
diff --git a/services/core/java/com/android/server/display/BrightnessTracker.java b/services/core/java/com/android/server/display/BrightnessTracker.java
index c473ef2..019d726 100644
--- a/services/core/java/com/android/server/display/BrightnessTracker.java
+++ b/services/core/java/com/android/server/display/BrightnessTracker.java
@@ -51,6 +51,7 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.app.ColorDisplayController;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.RingBuffer;
@@ -72,7 +73,6 @@
import java.text.SimpleDateFormat;
import java.util.ArrayDeque;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Date;
import java.util.Deque;
import java.util.HashMap;
@@ -363,12 +363,9 @@
return;
}
- builder.setNightMode(mInjector.getSecureIntForUser(mContentResolver,
- Settings.Secure.NIGHT_DISPLAY_ACTIVATED, 0, UserHandle.USER_CURRENT)
- == 1);
- builder.setColorTemperature(mInjector.getSecureIntForUser(mContentResolver,
- Settings.Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE,
- 0, UserHandle.USER_CURRENT));
+ builder.setNightMode(mInjector.isNightModeActive(mContext, UserHandle.USER_CURRENT));
+ builder.setColorTemperature(mInjector.getColorTemperature(mContext,
+ UserHandle.USER_CURRENT));
BrightnessChangeEvent event = builder.build();
if (DEBUG) {
@@ -952,5 +949,13 @@
public boolean isInteractive(Context context) {
return context.getSystemService(PowerManager.class).isInteractive();
}
+
+ public int getColorTemperature(Context context, int userId) {
+ return new ColorDisplayController(context, userId).getColorTemperature();
+ }
+
+ public boolean isNightModeActive(Context context, int userId) {
+ return new ColorDisplayController(context, userId).isActivated();
+ }
}
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 71f34c9..eb419c9 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -22,10 +22,8 @@
import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PRESERVE_ORIENTATION;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
import static android.content.res.Configuration.EMPTY;
+
import static com.android.server.EventLogTags.WM_TASK_REMOVED;
-import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.TaskProto.APP_WINDOW_TOKENS;
import static com.android.server.wm.TaskProto.BOUNDS;
import static com.android.server.wm.TaskProto.DEFER_REMOVAL;
@@ -33,6 +31,9 @@
import static com.android.server.wm.TaskProto.ID;
import static com.android.server.wm.TaskProto.TEMP_INSET_BOUNDS;
import static com.android.server.wm.TaskProto.WINDOW_CONTAINER;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.annotation.CallSuper;
import android.app.ActivityManager.TaskDescription;
@@ -43,8 +44,8 @@
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import android.view.Surface;
-
import android.view.SurfaceControl;
+
import com.android.internal.annotations.VisibleForTesting;
import java.io.PrintWriter;
@@ -472,7 +473,8 @@
void setDragResizing(boolean dragResizing, int dragResizeMode) {
if (mDragResizing != dragResizing) {
- if (!DragResizeMode.isModeAllowedForStack(mStack, dragResizeMode)) {
+ // No need to check if the mode is allowed if it's leaving dragResize
+ if (dragResizing && !DragResizeMode.isModeAllowedForStack(mStack, dragResizeMode)) {
throw new IllegalArgumentException("Drag resize mode not allow for stack stackId="
+ mStack.mStackId + " dragResizeMode=" + dragResizeMode);
}
diff --git a/services/core/java/com/android/server/wm/WindowFrames.java b/services/core/java/com/android/server/wm/WindowFrames.java
index 5f41df7..228bfad 100644
--- a/services/core/java/com/android/server/wm/WindowFrames.java
+++ b/services/core/java/com/android/server/wm/WindowFrames.java
@@ -30,18 +30,19 @@
import android.annotation.NonNull;
import android.graphics.Rect;
import android.util.proto.ProtoOutputStream;
-
-import java.io.PrintWriter;
import android.view.DisplayCutout;
import com.android.server.wm.utils.WmDisplayCutout;
+import java.io.PrintWriter;
+
/**
* Container class for all the window frames that affect how windows are laid out.
*
* TODO(b/111611553): Investigate which frames are still needed and which are duplicates
*/
public class WindowFrames {
+ private static final StringBuilder sTmpSB = new StringBuilder();
/**
* In most cases, this is the area of the entire screen.
@@ -197,29 +198,18 @@
}
public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix); pw.print("Frames: containing=");
- mContainingFrame.printShortString(pw);
- pw.print(" parent="); mParentFrame.printShortString(pw);
- pw.println();
- pw.print(prefix); pw.print(" display=");
- mDisplayFrame.printShortString(pw);
- pw.print(" overscan="); mOverscanFrame.printShortString(pw);
- pw.println();
- pw.print(prefix); pw.print(" content=");
- mContentFrame.printShortString(pw);
- pw.print(" visible="); mVisibleFrame.printShortString(pw);
- pw.println();
- pw.print(prefix); pw.print(" decor=");
- mDecorFrame.printShortString(pw);
- pw.println();
- pw.print(prefix); pw.print(" outset=");
- mOutsetFrame.printShortString(pw);
- pw.println();
- pw.print(prefix); pw.print("mFrame="); mFrame.printShortString(pw);
- pw.print(" last="); mLastFrame.printShortString(pw);
- pw.println();
- pw.print(prefix); pw.print(" cutout=" + mDisplayCutout.getDisplayCutout());
- pw.print(" last=" + mLastDisplayCutout.getDisplayCutout());
- pw.println();
+ pw.println(prefix + "Frames: containing="
+ + mContainingFrame.toShortString(sTmpSB)
+ + " parent=" + mParentFrame.toShortString(sTmpSB));
+ pw.println(prefix + " display=" + mDisplayFrame.toShortString(sTmpSB)
+ + " overscan=" + mOverscanFrame.toShortString(sTmpSB));
+ pw.println(prefix + " content=" + mContentFrame.toShortString(sTmpSB)
+ + " visible=" + mVisibleFrame.toShortString(sTmpSB));
+ pw.println(prefix + " decor=" + mDecorFrame.toShortString(sTmpSB));
+ pw.println(prefix + " outset=" + mOutsetFrame.toShortString(sTmpSB));
+ pw.println(prefix + "mFrame=" + mFrame.toShortString(sTmpSB)
+ + " last=" + mLastFrame.toShortString(sTmpSB));
+ pw.println(prefix + " cutout=" + mDisplayCutout.getDisplayCutout()
+ + " last=" + mLastDisplayCutout.getDisplayCutout());
}
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 97313f2..466e298 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -602,6 +602,8 @@
*/
private long mFrameNumber = -1;
+ private static final StringBuilder sTmpSB = new StringBuilder();
+
/**
* Compares two window sub-layers and returns -1 if the first is lesser than the second in terms
* of z-order and 1 otherwise.
@@ -1113,9 +1115,8 @@
mWindowFrames.mFrame.bottom - mWindowFrames.mStableFrame.bottom, 0));
}
-
mWindowFrames.setDisplayCutout(
- windowFrames.mDisplayCutout.calculateRelativeTo(windowFrames.mFrame));
+ windowFrames.mDisplayCutout.calculateRelativeTo(mWindowFrames.mFrame));
// Offset the actual frame by the amount layout frame is off.
mWindowFrames.mFrame.offset(-layoutXDiff, -layoutYDiff);
@@ -3336,183 +3337,160 @@
@Override
void dump(PrintWriter pw, String prefix, boolean dumpAll) {
final TaskStack stack = getStack();
- pw.print(prefix); pw.print("mDisplayId="); pw.print(getDisplayId());
- if (stack != null) {
- pw.print(" stackId="); pw.print(stack.mStackId);
- }
- pw.print(" mSession="); pw.print(mSession);
- pw.print(" mClient="); pw.println(mClient.asBinder());
- pw.print(prefix); pw.print("mOwnerUid="); pw.print(mOwnerUid);
- pw.print(" mShowToOwnerOnly="); pw.print(mShowToOwnerOnly);
- pw.print(" package="); pw.print(mAttrs.packageName);
- pw.print(" appop="); pw.println(AppOpsManager.opToName(mAppOp));
- pw.print(prefix); pw.print("mAttrs="); pw.println(mAttrs.toString(prefix));
- pw.print(prefix); pw.print("Requested w="); pw.print(mRequestedWidth);
- pw.print(" h="); pw.print(mRequestedHeight);
- pw.print(" mLayoutSeq="); pw.println(mLayoutSeq);
+ pw.print(prefix + "mDisplayId=" + getDisplayId());
+ if (stack != null) {
+ pw.print(" stackId=" + stack.mStackId);
+ }
+ pw.println(" mSession=" + mSession
+ + " mClient=" + mClient.asBinder());
+ pw.println(prefix + "mOwnerUid=" + mOwnerUid
+ + " mShowToOwnerOnly=" + mShowToOwnerOnly
+ + " package=" + mAttrs.packageName
+ + " appop=" + AppOpsManager.opToName(mAppOp));
+ pw.println(prefix + "mAttrs=" + mAttrs.toString(prefix));
+ pw.println(prefix + "Requested w=" + mRequestedWidth
+ + " h=" + mRequestedHeight
+ + " mLayoutSeq=" + mLayoutSeq);
if (mRequestedWidth != mLastRequestedWidth || mRequestedHeight != mLastRequestedHeight) {
- pw.print(prefix); pw.print("LastRequested w="); pw.print(mLastRequestedWidth);
- pw.print(" h="); pw.println(mLastRequestedHeight);
+ pw.println(prefix + "LastRequested w=" + mLastRequestedWidth
+ + " h=" + mLastRequestedHeight);
}
if (mIsChildWindow || mLayoutAttached) {
- pw.print(prefix); pw.print("mParentWindow="); pw.print(getParentWindow());
- pw.print(" mLayoutAttached="); pw.println(mLayoutAttached);
+ pw.println(prefix + "mParentWindow=" + getParentWindow()
+ + " mLayoutAttached=" + mLayoutAttached);
}
if (mIsImWindow || mIsWallpaper || mIsFloatingLayer) {
- pw.print(prefix); pw.print("mIsImWindow="); pw.print(mIsImWindow);
- pw.print(" mIsWallpaper="); pw.print(mIsWallpaper);
- pw.print(" mIsFloatingLayer="); pw.print(mIsFloatingLayer);
- pw.print(" mWallpaperVisible="); pw.println(mWallpaperVisible);
+ pw.println(prefix + "mIsImWindow=" + mIsImWindow
+ + " mIsWallpaper=" + mIsWallpaper
+ + " mIsFloatingLayer=" + mIsFloatingLayer
+ + " mWallpaperVisible=" + mWallpaperVisible);
}
if (dumpAll) {
- pw.print(prefix); pw.print("mBaseLayer="); pw.print(mBaseLayer);
- pw.print(" mSubLayer="); pw.print(mSubLayer);
- pw.print(" mAnimLayer="); pw.print(mLayer); pw.print("+");
- pw.print("="); pw.print(mWinAnimator.mAnimLayer);
- pw.print(" mLastLayer="); pw.println(mWinAnimator.mLastLayer);
+ pw.println(prefix + "mBaseLayer=" + mBaseLayer
+ + " mSubLayer=" + mSubLayer
+ + " mAnimLayer=" + mLayer + "=" + mWinAnimator.mAnimLayer
+ + " mLastLayer=" + mWinAnimator.mLastLayer);
}
if (dumpAll) {
- pw.print(prefix); pw.print("mToken="); pw.println(mToken);
+ pw.println(prefix + "mToken=" + mToken);
if (mAppToken != null) {
- pw.print(prefix); pw.print("mAppToken="); pw.println(mAppToken);
- pw.print(prefix); pw.print(" isAnimatingWithSavedSurface()=");
- pw.print(" mAppDied=");pw.print(mAppDied);
- pw.print(prefix); pw.print("drawnStateEvaluated=");
- pw.print(getDrawnStateEvaluated());
- pw.print(prefix); pw.print("mightAffectAllDrawn=");
- pw.println(mightAffectAllDrawn());
+ pw.println(prefix + "mAppToken=" + mAppToken);
+ pw.print(prefix + "mAppDied=" + mAppDied);
+ pw.print(prefix + "drawnStateEvaluated=" + getDrawnStateEvaluated());
+ pw.println(prefix + "mightAffectAllDrawn=" + mightAffectAllDrawn());
}
- pw.print(prefix); pw.print("mViewVisibility=0x");
- pw.print(Integer.toHexString(mViewVisibility));
- pw.print(" mHaveFrame="); pw.print(mHaveFrame);
- pw.print(" mObscured="); pw.println(mObscured);
- pw.print(prefix); pw.print("mSeq="); pw.print(mSeq);
- pw.print(" mSystemUiVisibility=0x");
- pw.println(Integer.toHexString(mSystemUiVisibility));
+ pw.println(prefix + "mViewVisibility=0x" + Integer.toHexString(mViewVisibility)
+ + " mHaveFrame=" + mHaveFrame
+ + " mObscured=" + mObscured);
+ pw.println(prefix + "mSeq=" + mSeq
+ + " mSystemUiVisibility=0x" + Integer.toHexString(mSystemUiVisibility));
}
if (!mPolicyVisibility || !mPolicyVisibilityAfterAnim || !mAppOpVisibility
- || isParentWindowHidden()|| mPermanentlyHidden || mForceHideNonSystemOverlayWindow
+ || isParentWindowHidden() || mPermanentlyHidden || mForceHideNonSystemOverlayWindow
|| mHiddenWhileSuspended) {
- pw.print(prefix); pw.print("mPolicyVisibility=");
- pw.print(mPolicyVisibility);
- pw.print(" mPolicyVisibilityAfterAnim=");
- pw.print(mPolicyVisibilityAfterAnim);
- pw.print(" mAppOpVisibility=");
- pw.print(mAppOpVisibility);
- pw.print(" parentHidden="); pw.print(isParentWindowHidden());
- pw.print(" mPermanentlyHidden="); pw.print(mPermanentlyHidden);
- pw.print(" mHiddenWhileSuspended="); pw.print(mHiddenWhileSuspended);
- pw.print(" mForceHideNonSystemOverlayWindow="); pw.println(
- mForceHideNonSystemOverlayWindow);
+ pw.println(prefix + "mPolicyVisibility=" + mPolicyVisibility
+ + " mPolicyVisibilityAfterAnim=" + mPolicyVisibilityAfterAnim
+ + " mAppOpVisibility=" + mAppOpVisibility
+ + " parentHidden=" + isParentWindowHidden()
+ + " mPermanentlyHidden=" + mPermanentlyHidden
+ + " mHiddenWhileSuspended=" + mHiddenWhileSuspended
+ + " mForceHideNonSystemOverlayWindow=" + mForceHideNonSystemOverlayWindow);
}
if (!mRelayoutCalled || mLayoutNeeded) {
- pw.print(prefix); pw.print("mRelayoutCalled="); pw.print(mRelayoutCalled);
- pw.print(" mLayoutNeeded="); pw.println(mLayoutNeeded);
+ pw.println(prefix + "mRelayoutCalled=" + mRelayoutCalled
+ + " mLayoutNeeded=" + mLayoutNeeded);
}
if (dumpAll) {
- pw.print(prefix); pw.print("mGivenContentInsets=");
- mGivenContentInsets.printShortString(pw);
- pw.print(" mGivenVisibleInsets=");
- mGivenVisibleInsets.printShortString(pw);
- pw.println();
+ pw.println(prefix + "mGivenContentInsets=" + mGivenContentInsets.toShortString(sTmpSB)
+ + " mGivenVisibleInsets=" + mGivenVisibleInsets.toShortString(sTmpSB));
if (mTouchableInsets != 0 || mGivenInsetsPending) {
- pw.print(prefix); pw.print("mTouchableInsets="); pw.print(mTouchableInsets);
- pw.print(" mGivenInsetsPending="); pw.println(mGivenInsetsPending);
+ pw.println(prefix + "mTouchableInsets=" + mTouchableInsets
+ + " mGivenInsetsPending=" + mGivenInsetsPending);
Region region = new Region();
getTouchableRegion(region);
- pw.print(prefix); pw.print("touchable region="); pw.println(region);
+ pw.println(prefix + "touchable region=" + region);
}
- pw.print(prefix); pw.print("mFullConfiguration="); pw.println(getConfiguration());
- pw.print(prefix); pw.print("mLastReportedConfiguration=");
- pw.println(getLastReportedConfiguration());
+ pw.println(prefix + "mFullConfiguration=" + getConfiguration());
+ pw.println(prefix + "mLastReportedConfiguration=" + getLastReportedConfiguration());
}
- pw.print(prefix); pw.print("mHasSurface="); pw.print(mHasSurface);
- pw.print(" isReadyForDisplay()="); pw.print(isReadyForDisplay());
- pw.print(" mWindowRemovalAllowed="); pw.println(mWindowRemovalAllowed);
+ pw.println(prefix + "mHasSurface=" + mHasSurface
+ + " isReadyForDisplay()=" + isReadyForDisplay()
+ + " mWindowRemovalAllowed=" + mWindowRemovalAllowed);
if (mEnforceSizeCompat) {
- pw.print(prefix); pw.print("mCompatFrame="); mCompatFrame.printShortString(pw);
- pw.println();
+ pw.println(prefix + "mCompatFrame=" + mCompatFrame.toShortString(sTmpSB));
}
if (dumpAll) {
mWindowFrames.dump(pw, prefix);
- pw.print(prefix); pw.print("Cur insets: overscan=");
- mOverscanInsets.printShortString(pw);
- pw.print(" content="); mContentInsets.printShortString(pw);
- pw.print(" visible="); mVisibleInsets.printShortString(pw);
- pw.print(" stable="); mStableInsets.printShortString(pw);
- pw.print(" surface="); mAttrs.surfaceInsets.printShortString(pw);
- pw.print(" outsets="); mOutsets.printShortString(pw);
- pw.print(prefix); pw.print("Lst insets: overscan=");
- mLastOverscanInsets.printShortString(pw);
- pw.print(" content="); mLastContentInsets.printShortString(pw);
- pw.print(" visible="); mLastVisibleInsets.printShortString(pw);
- pw.print(" stable="); mLastStableInsets.printShortString(pw);
- pw.print(" physical="); mLastOutsets.printShortString(pw);
- pw.print(" outset="); mLastOutsets.printShortString(pw);
- pw.println();
+ pw.print(prefix + "Cur insets: overscan=" + mOverscanInsets.toShortString(sTmpSB)
+ + " content=" + mContentInsets.toShortString(sTmpSB)
+ + " visible=" + mVisibleInsets.toShortString(sTmpSB)
+ + " stable=" + mStableInsets.toShortString(sTmpSB)
+ + " surface=" + mAttrs.surfaceInsets.toShortString(sTmpSB)
+ + " outsets=" + mOutsets.toShortString(sTmpSB));
+ pw.println(prefix + "Lst insets: overscan=" + mLastOverscanInsets.toShortString(sTmpSB)
+ + " content=" + mLastContentInsets.toShortString(sTmpSB)
+ + " visible=" + mLastVisibleInsets.toShortString(sTmpSB)
+ + " stable=" + mLastStableInsets.toShortString(sTmpSB)
+ + " outset=" + mLastOutsets.toShortString(sTmpSB));
}
super.dump(pw, prefix, dumpAll);
- pw.print(prefix); pw.print(mWinAnimator); pw.println(":");
+ pw.println(prefix + mWinAnimator + ":");
mWinAnimator.dump(pw, prefix + " ", dumpAll);
if (mAnimatingExit || mRemoveOnExit || mDestroying || mRemoved) {
- pw.print(prefix); pw.print("mAnimatingExit="); pw.print(mAnimatingExit);
- pw.print(" mRemoveOnExit="); pw.print(mRemoveOnExit);
- pw.print(" mDestroying="); pw.print(mDestroying);
- pw.print(" mRemoved="); pw.println(mRemoved);
+ pw.println(prefix + "mAnimatingExit=" + mAnimatingExit
+ + " mRemoveOnExit=" + mRemoveOnExit
+ + " mDestroying=" + mDestroying
+ + " mRemoved=" + mRemoved);
}
if (getOrientationChanging() || mAppFreezing || mReportOrientationChanged) {
- pw.print(prefix); pw.print("mOrientationChanging=");
- pw.print(mOrientationChanging);
- pw.print(" configOrientationChanging=");
- pw.print(getLastReportedConfiguration().orientation
- != getConfiguration().orientation);
- pw.print(" mAppFreezing="); pw.print(mAppFreezing);
- pw.print(" mReportOrientationChanged="); pw.println(mReportOrientationChanged);
+ pw.println(prefix + "mOrientationChanging=" + mOrientationChanging
+ + " configOrientationChanging="
+ + (getLastReportedConfiguration().orientation != getConfiguration().orientation)
+ + " mAppFreezing=" + mAppFreezing
+ + " mReportOrientationChanged=" + mReportOrientationChanged);
}
if (mLastFreezeDuration != 0) {
- pw.print(prefix); pw.print("mLastFreezeDuration=");
- TimeUtils.formatDuration(mLastFreezeDuration, pw); pw.println();
+ pw.print(prefix + "mLastFreezeDuration=");
+ TimeUtils.formatDuration(mLastFreezeDuration, pw);
+ pw.println();
}
- pw.print(prefix); pw.print("mForceSeamlesslyRotate="); pw.print(mForceSeamlesslyRotate);
- pw.print(" seamlesslyRotate: pending=");
+ pw.print(prefix + "mForceSeamlesslyRotate=" + mForceSeamlesslyRotate
+ + " seamlesslyRotate: pending=");
if (mPendingSeamlessRotate != null) {
mPendingSeamlessRotate.dump(pw);
} else {
pw.print("null");
}
- pw.print(" finishedFrameNumber="); pw.print(mFinishSeamlessRotateFrameNumber);
- pw.println();
+ pw.println(" finishedFrameNumber=" + mFinishSeamlessRotateFrameNumber);
if (mHScale != 1 || mVScale != 1) {
- pw.print(prefix); pw.print("mHScale="); pw.print(mHScale);
- pw.print(" mVScale="); pw.println(mVScale);
+ pw.println(prefix + "mHScale=" + mHScale
+ + " mVScale=" + mVScale);
}
if (mWallpaperX != -1 || mWallpaperY != -1) {
- pw.print(prefix); pw.print("mWallpaperX="); pw.print(mWallpaperX);
- pw.print(" mWallpaperY="); pw.println(mWallpaperY);
+ pw.println(prefix + "mWallpaperX=" + mWallpaperX
+ + " mWallpaperY=" + mWallpaperY);
}
if (mWallpaperXStep != -1 || mWallpaperYStep != -1) {
- pw.print(prefix); pw.print("mWallpaperXStep="); pw.print(mWallpaperXStep);
- pw.print(" mWallpaperYStep="); pw.println(mWallpaperYStep);
+ pw.println(prefix + "mWallpaperXStep=" + mWallpaperXStep
+ + " mWallpaperYStep=" + mWallpaperYStep);
}
if (mWallpaperDisplayOffsetX != Integer.MIN_VALUE
|| mWallpaperDisplayOffsetY != Integer.MIN_VALUE) {
- pw.print(prefix); pw.print("mWallpaperDisplayOffsetX=");
- pw.print(mWallpaperDisplayOffsetX);
- pw.print(" mWallpaperDisplayOffsetY=");
- pw.println(mWallpaperDisplayOffsetY);
+ pw.println(prefix + "mWallpaperDisplayOffsetX=" + mWallpaperDisplayOffsetX
+ + " mWallpaperDisplayOffsetY=" + mWallpaperDisplayOffsetY);
}
if (mDrawLock != null) {
- pw.print(prefix); pw.println("mDrawLock=" + mDrawLock);
+ pw.println(prefix + "mDrawLock=" + mDrawLock);
}
if (isDragResizing()) {
- pw.print(prefix); pw.println("isDragResizing=" + isDragResizing());
+ pw.println(prefix + "isDragResizing=" + isDragResizing());
}
if (computeDragResizing()) {
- pw.print(prefix); pw.println("computeDragResizing=" + computeDragResizing());
+ pw.println(prefix + "computeDragResizing=" + computeDragResizing());
}
- pw.print(prefix); pw.println("isOnScreen=" + isOnScreen());
- pw.print(prefix); pw.println("isVisible=" + isVisible());
+ pw.println(prefix + "isOnScreen=" + isOnScreen());
+ pw.println(prefix + "isVisible=" + isVisible());
}
@Override
@@ -4934,9 +4912,9 @@
@Override
public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix); pw.print("from="); pw.print(mFrom);
- pw.print(" to="); pw.print(mTo);
- pw.print(" duration="); pw.println(mDuration);
+ pw.println(prefix + "from=" + mFrom
+ + " to=" + mTo
+ + " duration=" + mDuration);
}
@Override
diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
index ece9f42..79a654b 100644
--- a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
@@ -52,6 +52,8 @@
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
+import com.android.internal.R;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -82,6 +84,8 @@
private static HandlerThread sThread =
new HandlerThread("brightness.test", android.os.Process.THREAD_PRIORITY_BACKGROUND);
+ private int mDefaultNightModeColorTemperature;
+
private static Handler ensureHandler() {
synchronized (sHandlerLock) {
if (sHandler == null) {
@@ -98,6 +102,9 @@
mInjector = new TestInjector(ensureHandler());
mTracker = new BrightnessTracker(InstrumentationRegistry.getContext(), mInjector);
+ mDefaultNightModeColorTemperature =
+ InstrumentationRegistry.getContext().getResources().getInteger(
+ R.integer.config_nightDisplayColorTemperatureDefault);
}
@Test
@@ -188,7 +195,7 @@
// System had no data so these should all be at defaults.
assertEquals(Float.NaN, event.batteryLevel, 0.0);
assertFalse(event.nightMode);
- assertEquals(0, event.colorTemperature);
+ assertEquals(mDefaultNightModeColorTemperature, event.colorTemperature);
}
@Test
@@ -863,5 +870,17 @@
public boolean isInteractive(Context context) {
return mInteractive;
}
+
+ @Override
+ public int getColorTemperature(Context context, int userId) {
+ return mSecureIntSettings.getOrDefault(Settings.Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE,
+ mDefaultNightModeColorTemperature);
+ }
+
+ @Override
+ public boolean isNightModeActive(Context context, int userId) {
+ return mSecureIntSettings.getOrDefault(Settings.Secure.NIGHT_DISPLAY_ACTIVATED,
+ 0) == 1;
+ }
}
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java
index 5a42a84..b43d9a6 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java
@@ -50,13 +50,19 @@
import static org.mockito.Mockito.verify;
import android.graphics.Matrix;
+import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
+import android.util.Size;
+import android.view.DisplayCutout;
import android.view.SurfaceControl;
import android.view.WindowManager;
+import com.android.server.wm.utils.WmDisplayCutout;
+
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.Arrays;
import java.util.LinkedList;
import androidx.test.filters.FlakyTest;
@@ -382,6 +388,20 @@
}
}
+ @Test
+ public void testDisplayCutoutIsCalculatedRelativeToFrame() {
+ final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
+ WindowFrames wf = new WindowFrames();
+ wf.mParentFrame.set(7, 10, 185, 380);
+ wf.mDisplayFrame.set(wf.mParentFrame);
+ final DisplayCutout cutout = new DisplayCutout(new Rect(0, 15, 0, 22),
+ Arrays.asList(new Rect(95, 0, 105, 15), new Rect(95, 378, 105, 400)));
+ wf.setDisplayCutout(new WmDisplayCutout(cutout, new Size(200, 400)));
+
+ app.computeFrameLw(wf);
+ assertThat(app.getWmDisplayCutout().getDisplayCutout(), is(cutout.inset(7, 10, 5, 20)));
+ }
+
private void testPrepareWindowToDisplayDuringRelayout(boolean wasVisible) {
reset(mPowerManagerWrapper);
final WindowState root = createWindow(null, TYPE_APPLICATION, "root");