diff options
22 files changed, 323 insertions, 302 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 1d5f586ab5e9..afce431d49ec 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -474,9 +474,6 @@ package android.app { 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 2fd82b2d29e2..17521319aaf8 100644 --- a/core/java/android/app/Vr2dDisplayProperties.java +++ b/core/java/android/app/Vr2dDisplayProperties.java @@ -35,6 +35,7 @@ public final class Vr2dDisplayProperties implements Parcelable { 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 ba6cf269b737..75151806cfcf 100644 --- a/core/java/com/android/internal/app/ColorDisplayController.java +++ b/core/java/com/android/internal/app/ColorDisplayController.java @@ -112,8 +112,8 @@ public final class ColorDisplayController { 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 final class ColorDisplayController { 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 @@ public final class ColorDisplayController { 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 4ee951aeddaf..0b37d5794741 100644 --- a/core/java/com/android/internal/widget/PointerLocationView.java +++ b/core/java/com/android/internal/widget/PointerLocationView.java @@ -19,8 +19,8 @@ package com.android.internal.widget; 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.util.Slog; 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 @@ public class PointerLocationView extends View implements InputDeviceListener, } } - 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 @@ public class PointerLocationView extends View implements InputDeviceListener, } 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 5258518db281..f845bd0e3964 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 c8ad31f2ec2c..cf1320c76978 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 e20998579b94..48c263e8caef 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 36d209e96269..7000f9d7a7d2 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 @@ public class LocalBluetoothProfileManager { private PanProfile mPanProfile; private PbapClientProfile mPbapClientProfile; private PbapServerProfile mPbapProfile; - private final boolean mUsePbapPce; - private final boolean mUseMapClient; private HearingAidProfile mHearingAidProfile; /** @@ -115,9 +113,6 @@ public class LocalBluetoothProfileManager { 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 @@ public class LocalBluetoothProfileManager { 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 @@ public class LocalBluetoothProfileManager { 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 @@ public class LocalBluetoothProfileManager { 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 88be2b0a0bd2..3e3c03918a0b 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.icu.util.ULocale; 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 @@ import java.util.Locale; /** 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 @@ public class StringUtil { 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 @@ public class StringUtil { 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 c268d325bd02..0cdb509a5209 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 @@ public abstract class QSIconView extends ViewGroup { 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 e7eefe8d5e56..376e6ae16cc8 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 @@ public class CellTileView extends SignalTileView { 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 d9583af65df6..ce90fc107b82 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 @@ package com.android.systemui.qs; 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 @@ public class SignalTileView extends QSIconViewImpl { } @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 @@ public class SignalTileView extends QSIconViewImpl { } 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 e7e756f87c84..9dd5d8fbc776 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 @@ public class QSIconViewImpl extends QSIconView { 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 @@ public class QSIconViewImpl extends QSIconView { } } - 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 @@ public class QSIconViewImpl extends QSIconView { 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 @@ public class QSIconViewImpl extends QSIconView { 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 91afef02a246..d42127e74944 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 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { 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 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { 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 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { } setClickable(state.state != Tile.STATE_UNAVAILABLE); - mIcon.setIcon(state); + mIcon.setIcon(state, allowAnimations); setContentDescription(state.contentDescription); mAccessibilityClass = state.expandedAccessibilityClassName; @@ -205,8 +207,17 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { } } + /* 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 f9f4f497a2ec..c5e404385f8b 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 @@ public class QSIconViewImplTest extends SysuiTestCase { // 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 @@ public class QSIconViewImplTest extends SysuiTestCase { 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 ba5f32308a30..760209024c57 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.ArrayDeque; 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 @@ public class ConnectivityService extends IConnectivityManager.Stub 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 @@ public class ConnectivityService extends IConnectivityManager.Stub 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 @@ public class ConnectivityService extends IConnectivityManager.Stub } 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 @@ public class ConnectivityService extends IConnectivityManager.Stub 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 @@ public class ConnectivityService extends IConnectivityManager.Stub } } + 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 @@ public class ConnectivityService extends IConnectivityManager.Stub 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 c473ef23db3e..019d726d8c48 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 android.util.Xml; 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.nio.charset.StandardCharsets; 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 @@ public class BrightnessTracker { 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 class BrightnessTracker { 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 71f34c98ee1f..eb419c9684f5 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_PORTRA 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.FILLS_PARENT; 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.EventLog; 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 @@ class Task extends WindowContainer<AppWindowToken> { 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 5f41df72394a..228bfade25d5 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 static com.android.server.wm.WindowFramesProto.VISIBLE_FRAME; 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 class WindowFrames { } 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 97313f2891c3..466e298974d0 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 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP */ 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 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP 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 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @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 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @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 ece9f42bd0eb..79a654b2c0f4 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.InstrumentationRegistry; 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 @@ public class BrightnessTrackerTest { 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 @@ public class BrightnessTrackerTest { mInjector = new TestInjector(ensureHandler()); mTracker = new BrightnessTracker(InstrumentationRegistry.getContext(), mInjector); + mDefaultNightModeColorTemperature = + InstrumentationRegistry.getContext().getResources().getInteger( + R.integer.config_nightDisplayColorTemperatureDefault); } @Test @@ -188,7 +195,7 @@ public class BrightnessTrackerTest { // 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 class BrightnessTrackerTest { 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 5a42a848ef92..b43d9a671751 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.spy; 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 @@ public class WindowStateTests extends WindowTestsBase { } } + @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"); |