From 190aeff8b2ce00b53d98b801ac4fee803c4305a3 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Tue, 9 Jan 2024 21:36:16 +0530 Subject: [PATCH 01/76] NotificationPanelView: Switch to Tuner API Signed-off-by: Pranav Vashi Signed-off-by: HDzungx --- .../NotificationPanelViewController.java | 75 ++++++++++++++----- 1 file changed, 58 insertions(+), 17 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index fd461a4a8bd0..6cbf13ac5c92 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -206,6 +206,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.SplitShadeStateController; +import com.android.systemui.tuner.TunerService; import com.android.systemui.unfold.SysUIUnfoldComponent; import com.android.systemui.util.ScrimUtils; import com.android.systemui.util.Utils; @@ -267,6 +268,10 @@ public final class NotificationPanelViewController implements private static final String COUNTER_PANEL_OPEN = "panel_open"; public static final String COUNTER_PANEL_OPEN_QS = "panel_open_qs"; private static final String COUNTER_PANEL_OPEN_PEEK = "panel_open_peek"; + + private static final String DOUBLE_TAP_SLEEP_GESTURE = + "system:" + Settings.System.DOUBLE_TAP_SLEEP_GESTURE; + private static final Rect M_DUMMY_DIRTY_RECT = new Rect(0, 0, 1, 1); private static final Rect EMPTY_RECT = new Rect(); //TODO(b/394977231) delete this temporary workaround used only by tests @@ -298,7 +303,6 @@ public final class NotificationPanelViewController implements private final ShadeHeadsUpChangedListener mOnHeadsUpChangedListener = new ShadeHeadsUpChangedListener(); private final ConfigurationListener mConfigurationListener = new ConfigurationListener(); - private final ContentObserver mDoubleTapToSleepObserver; private final StatusBarStateListener mStatusBarStateListener = new StatusBarStateListener(); private final NotificationPanelView mView; private final VibratorHelper mVibratorHelper; @@ -344,6 +348,7 @@ public final class NotificationPanelViewController implements private final TouchHandler mTouchHandler = new TouchHandler(); private final BlurConfig mBlurConfig; private final WindowRootViewBlurInteractor mWindowRootViewBlurInteractor; + private final TunerService mTunerService; private long mDownTime; private long mStatusBarLongPressDowntime = -1L; @@ -517,6 +522,10 @@ public final class NotificationPanelViewController implements private int mSplitShadeScrimTransitionDistance; private final NotificationListContainer mNotificationListContainer; + + private boolean mBrightnessControl; + private boolean mBrightnessControlLockscreen; + private final NPVCDownEventState.Buffer mLastDownEvents; private final KeyguardClockInteractor mKeyguardClockInteractor; private float mMinExpandHeight; @@ -669,6 +678,7 @@ public NotificationPanelViewController(NotificationPanelView view, BlurConfig blurConfig, Lazy shadeDisplaysRepository, WindowRootViewBlurInteractor windowRootViewBlurInteractor, + TunerService tunerService, Context context) { mBlurConfig = blurConfig; mWindowRootViewBlurInteractor = windowRootViewBlurInteractor; @@ -763,6 +773,7 @@ public void onViewDetachedFromWindow(View v) {} mSplitShadeStateController.shouldUseSplitNotificationShade(mResources); mView.setWillNotDraw(!DEBUG_DRAWABLE); mShadeHeaderController = shadeHeaderController; + mTunerService = tunerService; mAnimateBack = predictiveBackAnimateShade(); mFalsingCollector = falsingCollector; mPowerManager = powerManager; @@ -801,15 +812,6 @@ public boolean onDoubleTap(MotionEvent e) { return true; } }); - mDoubleTapToSleepObserver = new ContentObserver(handler) { - @Override - public void onChange(boolean selfChange) { - mDoubleTapToSleepEnabled = Settings.System.getInt(mContentResolver, - Settings.System.DOUBLE_TAP_SLEEP_GESTURE, - mResources.getBoolean(com.android.internal.R.bool. - config_dt2sGestureEnabledByDefault) ? 1 : 0) != 0; - } - }; mConversationNotificationManager = conversationNotificationManager; mScreenOffAnimationController = screenOffAnimationController; mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController; @@ -3073,7 +3075,8 @@ private boolean isFalseTouch(float x, float y, return !isDirectionUpwards(x, y); } - private void fling(float vel, boolean expand, boolean expandBecauseOfFalsing) { + @Override + public void fling(float vel, boolean expand, boolean expandBecauseOfFalsing) { fling(vel, expand, 1.0f /* collapseSpeedUpFactor */, expandBecauseOfFalsing); } @@ -3719,7 +3722,8 @@ public void setOverStretchAmount(float amount) { positionClockAndNotifications(true /* forceUpdate */); } - private final class ShadeAttachStateChangeListener implements View.OnAttachStateChangeListener { + private final class ShadeAttachStateChangeListener implements View.OnAttachStateChangeListener, + TunerService.Tunable { @Override public void onViewAttachedToWindow(View v) { mFragmentService.getFragmentHostManager(mView) @@ -3730,10 +3734,11 @@ public void onViewAttachedToWindow(View v) { mStatusBarStateListener.onStateChanged(mStatusBarStateController.getState(), true); } mConfigurationController.addCallback(mConfigurationListener); - mContentResolver.registerContentObserver(Settings.System.getUriFor( - Settings.System.DOUBLE_TAP_SLEEP_GESTURE), false, - mDoubleTapToSleepObserver); - mDoubleTapToSleepObserver.onChange(true); + mTunerService.addTunable(this, DOUBLE_TAP_SLEEP_GESTURE); + + mTunerService.addTunable(this, STATUS_BAR_BRIGHTNESS_CONTROL); + mTunerService.addTunable(this, STATUS_BAR_BRIGHTNESS_CONTROL_LOCKSCREEN); + // Theme might have changed between inflating this view and attaching it to the // window, so // force a call to onThemeChanged @@ -3744,13 +3749,35 @@ public void onViewAttachedToWindow(View v) { @Override public void onViewDetachedFromWindow(View v) { - mContentResolver.unregisterContentObserver(mDoubleTapToSleepObserver); mFragmentService.getFragmentHostManager(mView) .removeTagListener(QS.TAG, mQsController.getQsFragmentListener()); mStatusBarStateController.removeCallback(mStatusBarStateListener); mConfigurationController.removeCallback(mConfigurationListener); + mTunerService.removeTunable(this); mFalsingManager.removeTapListener(mFalsingTapListener); } + + @Override + public void onTuningChanged(String key, String newValue) { + switch (key) { + case DOUBLE_TAP_SLEEP_GESTURE: + mDoubleTapToSleepEnabled = + TunerService.parseIntegerSwitch(newValue, + mResources.getBoolean(com.android.internal.R.bool. + config_dt2sGestureEnabledByDefault)); + break; + case STATUS_BAR_BRIGHTNESS_CONTROL: + mBrightnessControl = + TunerService.parseIntegerSwitch(newValue, false); + break; + case STATUS_BAR_BRIGHTNESS_CONTROL_LOCKSCREEN: + mBrightnessControlLockscreen = + TunerService.parseIntegerSwitch(newValue, false); + break; + default: + break; + } + } } private final class ShadeLayoutChangeListener implements View.OnLayoutChangeListener { @@ -4122,6 +4149,20 @@ public boolean onTouchEvent(MotionEvent event) { mShadeLog.d("Touch has same down time as Status Bar long press. Ignoring."); return false; } + if (mBrightnessControl) { + final int actionIndex = event.getActionIndex(); + final float swipeY = event.getY(actionIndex); + if (swipeY < mStatusBarMinHeight && + (mBarState != KEYGUARD || mBrightnessControlLockscreen)) { + mCentralSurfaces.brightnessControl(event); + final int action = event.getActionMasked(); + if (action == MotionEvent.ACTION_UP + || action == MotionEvent.ACTION_CANCEL) { + mCentralSurfaces.onBrightnessChanged(true); + } + return true; + } + } if (!mHeadsUpTouchHelper.isTrackingHeadsUp() && mQsController.handleTouch( event, isFullyCollapsed(), isShadeOrQsHeightAnimationRunning())) { if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { From c907ad49a5e2fccb7654e5655f0431f9beac813a Mon Sep 17 00:00:00 2001 From: Alberto97 Date: Fri, 28 Mar 1997 09:50:04 +0530 Subject: [PATCH 02/76] SystemUI: Port statusbar brightness control This is a squash of the following changes: Author: Danesh Mondegarian Date: Sun Nov 10 23:30:56 2013 -0800 SystemUI : Port forward statusbar brightness control Brings back the status bar brightness control from cm-10.2/cm-11 Change-Id: Icc04e7da3286e9925f8b90528c1e022b33d33e9d Author: Roman Birg Date: Mon Dec 1 16:08:21 2014 -0800 SystemUI: improve brightness slider behavior Mimic the brightness slider behavior in the statusbar. This adds logic to make the statusbar slider also work with automatic brightness mode enabled and it will instead adjust the temporary automatic brightness overrride. Change-Id: I78814a785decc83df94844fcc2f489c8cbec2b65 Signed-off-by: Roman Birg Author: Pawit Pornkitprasan Date: Sun Dec 28 20:42:41 2014 +0700 SystemUI: status bar brightness: store value as int Non-automatic brightness value is stored as int, not float. Symptom: adjust the brightness in the status bar, the brightness slider in the notification bar will always be set to full Change-Id: I5f9a6e97bae2c44c3aff7c9222186a6dbda5d902 Author: Zhao Wei Liew Date: Fri Oct 7 10:09:04 2016 +0800 SystemUI: statusbar: Fix status bar brightness control feature Bring in the missing fixes from CM 13. This commit squashes the following commits from CM 13.0: 6397527ca0c430671503cecb69d74554dea1d399 SystemUI: fix status bar brightness slider eating events bbef42271cbba0eda91d214186ff2be31eb3b608 SystemUI : fix brightness slider for automatic brightness Change-Id: I85e0b99dc33468b36222128660707fe481cf8b33 Author: Zhao Wei Liew Date: Fri Oct 7 08:56:25 2016 +0800 SystemUI: Use Tuner API for CM settings Get rid of all the excess code by implementing TunerService.Tunable and observing any changes made to the settings through it. Remove UserContentObserver as the Tuner API handles user switches. Also remove some unused imports that were introduced in earlier CM commits, but were never removed since. Change-Id: Iecafafabdaec82b3b3c72293bea865de48f0e90a Author: Chenyang Zhong Date: Sat, 13 Mar 2021 07:36:30 -0500 SystemUI: migrate statusbar manual brightness to float Google switched to float in BrightnessController after android11, so stay inline with that behavior. Besides, the brightness slider is in log scale since pie, and a gamma-to-linear conversion is performed when setting the value to DisplayManager. Therefore, use the newly introduced float conversion here to achieve a perception of linear brightness transitions to human eyes. Change-Id: I70d5e33b9464c73a25f73a1d9fc690c101b1fa05 Author: Chenyang Zhong Date: Sun, 21 Mar 2021 23:16:10 -0400 SystemUI: unify statusbar manual & auto brightness code setTemporaryBrightness(float) can be used in both manual and auto brightness mode. This stays inline with current android11's BrightnessController and avoids incorrect behaviors when sliding statusbar in auto brightness mode. Change-Id: I0e7d7d0ccd871c61d062d6a190e5a61287687e80 Author: jhenrique09 Date: Sat, 14 May 2022 22:51:51 +0000 Call setBrightness when user stops swiping on statusbar This way brightness gets saved and changes are shown on quick settings brightness bar Change-Id: I5daf99d7c2c1bebf430902bdbfad9971142be93b idoybh: * Properly mention co-authors cjh1249131356 * Port to QPR2 neobuddy89 * Port to A14 QPR1, A15 * Rewrite interface implementation Change-Id: Ic8ded146dc8605e6140f4352cafa6f961ad3decc Co-authored-by: Danesh Mondegarian Co-authored-by: Roman Birg Co-authored-by: Pawit Pornkitprasan Co-authored-by: Zhao Wei Liew Co-authored-by: Chenyang Zhong Co-authored-by: jhenrique09 Co-authored-by: cjh1249131356 Co-authored-by: Pranav Vashi Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi Signed-off-by: HDzungx --- core/java/android/provider/Settings.java | 7 + ...NotificationShadeWindowViewController.java | 6 + .../systemui/shade/ShadeViewController.kt | 2 + .../shade/ShadeViewControllerEmptyImpl.kt | 2 + .../statusbar/phone/CentralSurfaces.java | 4 + .../statusbar/phone/CentralSurfacesImpl.java | 143 +++++++++++++++++- .../statusbar/phone/PhoneStatusBarView.java | 10 ++ .../phone/PhoneStatusBarViewController.kt | 16 +- 8 files changed, 187 insertions(+), 3 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 98f07b1c1049..33a92f7a7f8a 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -7374,6 +7374,13 @@ public static void setShowGTalkServiceStatusForUser(ContentResolver cr, boolean */ public static final String FORCE_FULLSCREEN_CUTOUT_APPS = "force_full_screen_cutout_apps"; + /** + * Whether to control brightness from status bar + * 0 = 0ff, 1 = on + * @hide + */ + public static final String STATUS_BAR_BRIGHTNESS_CONTROL = "status_bar_brightness_control"; + /** * Keys we no longer back up under the current schema, but want to continue to * process when restoring historical backup datasets. diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java index 64f51024748c..e16cf11550ee 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java @@ -834,4 +834,10 @@ private PhoneStatusBarViewController statusBarViewController() { void setDragDownHelper(DragDownHelper dragDownHelper) { mDragDownHelper = dragDownHelper; } + + public void fling(float vel, boolean expand, boolean expandBecauseOfFalsing) { + if (mShadeViewController != null) { + mShadeViewController.fling(vel, expand, expandBecauseOfFalsing); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt index 879008325141..aeda281a1598 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt @@ -70,6 +70,8 @@ interface ShadeViewController { /** Sends an external (e.g. Status Bar) intercept touch event to the Shade touch handler. */ fun handleExternalInterceptTouch(event: MotionEvent): Boolean + fun fling(vel: Float, expand: Boolean, expandBecauseOfFalsing: Boolean) + /** * Triggered when an input focus transfer gesture has started. * diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewControllerEmptyImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewControllerEmptyImpl.kt index 18f52791b177..91bfe6350456 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewControllerEmptyImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewControllerEmptyImpl.kt @@ -99,6 +99,8 @@ open class ShadeViewControllerEmptyImpl @Inject constructor() : return false } + override fun fling(vel: Float, expand: Boolean, expandBecauseOfFalsing: Boolean) {} + override fun startInputFocusTransfer() {} override fun cancelInputFocusTransfer() {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java index c064389e2d82..0aca6965f90e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java @@ -353,4 +353,8 @@ ActivityTransitionAnimator.Controller getAnimatorControllerFromNotification( ExpandableNotificationRow associatedView); GameSpaceManager getGameSpaceManager(); + + void brightnessControl(MotionEvent event); + + void onBrightnessChanged(boolean upOrCancel); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 2ea6e18983c4..c3768083c1b4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -29,6 +29,9 @@ import static androidx.lifecycle.Lifecycle.State.RESUMED; +import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MAX; +import static com.android.settingslib.display.BrightnessUtils.convertGammaToLinearFloat; + import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME; import static com.android.systemui.Flags.keyboardShortcutHelperRewrite; import static com.android.systemui.charging.WirelessChargingAnimation.UNKNOWN_BATTERY_LEVEL; @@ -53,8 +56,10 @@ import android.content.res.Configuration; import android.graphics.Point; import android.hardware.devicestate.DeviceStateManager; +import android.hardware.display.DisplayManager; import android.metrics.LogMaker; import android.net.Uri; +import android.os.AsyncTask; import android.os.Binder; import android.os.Bundle; import android.os.Handler; @@ -76,6 +81,7 @@ import android.util.IndentingPrintWriter; import android.util.Log; import android.view.Display; +import android.view.HapticFeedbackConstants; import android.view.IRemoteAnimationRunner; import android.view.IWindowManager; import android.view.MotionEvent; @@ -83,6 +89,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; +import android.view.ViewConfiguration; import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManagerGlobal; @@ -97,6 +104,7 @@ import com.android.app.displaylib.PerDisplayRepository; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor; +import com.android.internal.display.BrightnessSynchronizer; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; @@ -238,6 +246,7 @@ import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.surfaceeffects.ripple.RippleShader.RippleShape; import com.android.systemui.topui.TopUiController; +import com.android.systemui.tuner.TunerService; import com.android.systemui.util.DumpUtilsKt; import com.android.systemui.util.WallpaperController; import com.android.systemui.util.concurrency.DelayableExecutor; @@ -281,13 +290,22 @@ * {@link ActivityStarterImpl} */ @SysUISingleton -public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { +public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces, + TunerService.Tunable { + + private static final String STATUS_BAR_BRIGHTNESS_CONTROL = + "system:" + Settings.System.STATUS_BAR_BRIGHTNESS_CONTROL; private static final int MSG_LAUNCH_TRANSITION_TIMEOUT = 1003; + private static final int MSG_LONG_PRESS_BRIGHTNESS_CHANGE = 1004; // 1020-1040 reserved for BaseStatusBar private static final UiEventLogger sUiEventLogger = new UiEventLoggerImpl(); + private static final float BRIGHTNESS_CONTROL_PADDING = 0.15f; + private static final int BRIGHTNESS_CONTROL_LONG_PRESS_TIMEOUT = 750; // ms + private static final int BRIGHTNESS_CONTROL_LINGER_THRESHOLD = 20; + private final Context mContext; private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; private final DeviceStateManager mDeviceStateManager; @@ -471,6 +489,7 @@ public QSPanelController getQSPanelController() { private final MessageRouter mMessageRouter; private final WallpaperManager mWallpaperManager; private final UserTracker mUserTracker; + private final TunerService mTunerService; private final ActivityStarter mActivityStarter; private final PulseViewController mPulseViewController; @@ -627,6 +646,18 @@ public int getId() { private final BurnInProtectionController mBurnInProtectionController; + private DisplayManager mDisplayManager; + + private float mMinimumBacklight; + private float mMaximumBacklight; + private int mInitialTouchX; + private int mInitialTouchY; + private int mLinger; + private int mQuickQsOffsetHeight; + private boolean mBrightnessChanged; + private boolean mBrightnessControl; + private float mCurrentBrightness; + /** * Public constructor for CentralSurfaces. * @@ -737,6 +768,7 @@ public CentralSurfacesImpl( LightRevealScrim lightRevealScrim, AlternateBouncerInteractor alternateBouncerInteractor, UserTracker userTracker, + TunerService tunerService, ActivityStarter activityStarter, BrightnessMirrorShowingRepository brightnessMirrorShowingRepository, GlanceableHubContainerController glanceableHubContainerController, @@ -838,6 +870,7 @@ public CentralSurfacesImpl( mCameraLauncherLazy = cameraLauncherLazy; mAlternateBouncerInteractor = alternateBouncerInteractor; mUserTracker = userTracker; + mTunerService = tunerService; mActivityStarter = activityStarter; mBrightnessMirrorShowingRepository = brightnessMirrorShowingRepository; if (!SceneContainerFlag.isEnabled()) { @@ -886,6 +919,8 @@ public CentralSurfacesImpl( data -> mCommandQueueCallbacks.animateExpandSettingsPanel(data.mSubpanel)); mMessageRouter.subscribeTo(MSG_LAUNCH_TRANSITION_TIMEOUT, id -> onLaunchTransitionTimeout()); + mMessageRouter.subscribeTo(MSG_LONG_PRESS_BRIGHTNESS_CHANGE, + id -> onLongPressBrightnessChange()); mDeviceStateManager = deviceStateManager; wiredChargingRippleController.registerCallbacks(); @@ -918,6 +953,7 @@ public void start() { mKeyguardIndicationController.init(); mColorExtractor.addOnColorsChangedListener(mOnColorsChangedListener); + mDisplayManager = mContext.getSystemService(DisplayManager.class); mDisplay = mContext.getDisplay(); mDisplayId = mDisplay.getDisplayId(); @@ -950,6 +986,8 @@ public void start() { createAndAddWindows(result); + mTunerService.addTunable(this, STATUS_BAR_BRIGHTNESS_CONTROL); + // Set up the initial notification state. This needs to happen before CommandQueue.disable() setUpPresenter(); @@ -1271,6 +1309,11 @@ protected void makeStatusBarView(@Nullable RegisterStatusBarResult result) { getNotificationShadeWindowView().setOnTouchListener(getStatusBarWindowTouchListener()); mWallpaperController.setRootView(getNotificationShadeWindowView()); + mMinimumBacklight = mPowerManager.getBrightnessConstraint( + PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM); + mMaximumBacklight = mPowerManager.getBrightnessConstraint( + PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM); + mDemoModeController.addCallback(mDemoModeCallback); // When the StatusBarConnectedDisplays flag is enabled, this logic will be done in // StatusBarOrchestrator. @@ -1315,6 +1358,7 @@ protected void makeStatusBarView(@Nullable RegisterStatusBarResult result) { setBouncerShowingForStatusBarComponents(mBouncerShowing); checkBarModes(); mBurnInProtectionController.setPhoneStatusBarView(mPhoneStatusBarViewController.getPhoneStatusBarView()); + mPhoneStatusBarViewController.setBrightnessControlEnabled(mBrightnessControl); }); } if (!StatusBarRootModernization.isEnabled() && !StatusBarConnectedDisplays.isEnabled()) { @@ -1768,6 +1812,89 @@ private void maybeEscalateHeadsUp() { mHeadsUpManager.releaseAllImmediately(); } + private void adjustBrightness(int x) { + mBrightnessChanged = true; + float raw = ((float) x) / getDisplayWidth(); + + // Add a padding to the brightness control on both sides to + // make it easier to reach min/max brightness + float padded = Math.min(1.0f - BRIGHTNESS_CONTROL_PADDING, + Math.max(BRIGHTNESS_CONTROL_PADDING, raw)); + float value = (padded - BRIGHTNESS_CONTROL_PADDING) / + (1 - (2.0f * BRIGHTNESS_CONTROL_PADDING)); + final float val = convertGammaToLinearFloat( + Math.round(value * GAMMA_SPACE_MAX), + mMinimumBacklight, mMaximumBacklight); + mCurrentBrightness = val; + mDisplayManager.setTemporaryBrightness(mDisplayId, val); + AsyncTask.execute(new Runnable() { + @Override + public void run() { + Settings.System.putIntForUser(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS, + BrightnessSynchronizer.brightnessFloatToInt(val), + UserHandle.USER_CURRENT); + } + }); + } + + @Override + public void brightnessControl(MotionEvent event) { + final int action = event.getAction(); + final int x = (int) event.getRawX(); + final int y = (int) event.getRawY(); + mQuickQsOffsetHeight = mContext.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.quick_qs_offset_height); + if (action == MotionEvent.ACTION_DOWN) { + if (y < mQuickQsOffsetHeight) { + mLinger = 0; + mInitialTouchX = x; + mInitialTouchY = y; + mMessageRouter.cancelMessages(MSG_LONG_PRESS_BRIGHTNESS_CHANGE); + mMessageRouter.sendMessageDelayed(MSG_LONG_PRESS_BRIGHTNESS_CHANGE, + BRIGHTNESS_CONTROL_LONG_PRESS_TIMEOUT); + } + } else if (action == MotionEvent.ACTION_MOVE) { + if (y < mQuickQsOffsetHeight) { + if (mLinger > BRIGHTNESS_CONTROL_LINGER_THRESHOLD) { + adjustBrightness(x); + } else { + final int xDiff = Math.abs(x - mInitialTouchX); + final int yDiff = Math.abs(y - mInitialTouchY); + final int touchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop(); + if (xDiff > yDiff) { + mLinger++; + } + if (xDiff > touchSlop || yDiff > touchSlop) { + mMessageRouter.cancelMessages(MSG_LONG_PRESS_BRIGHTNESS_CHANGE); + } + } + } else { + mMessageRouter.cancelMessages(MSG_LONG_PRESS_BRIGHTNESS_CHANGE); + } + } else if (action == MotionEvent.ACTION_UP + || action == MotionEvent.ACTION_CANCEL) { + mMessageRouter.cancelMessages(MSG_LONG_PRESS_BRIGHTNESS_CHANGE); + } + } + + @Override + public void onBrightnessChanged(boolean upOrCancel) { + if (mBrightnessChanged && upOrCancel) { + mBrightnessChanged = false; + if (mShadeController.isExpandedVisible()) { + getNotificationShadeWindowViewController().fling(10, false, false); + } + mDisplayManager.setBrightness(mDisplayId, mCurrentBrightness); + } + } + + void onLongPressBrightnessChange() { + mShadeController.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + adjustBrightness(mInitialTouchX); + mLinger = BRIGHTNESS_CONTROL_LINGER_THRESHOLD + 1; + } + private void onExpandedInvisible() { setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false); if (!mNotificationActivityStarterLazy.get().isCollapsingToShowActivityOverLockscreen()) { @@ -2997,6 +3124,20 @@ public boolean shouldIgnoreTouch() { || mScreenOffAnimationController.shouldIgnoreKeyguardTouches(); } + @Override + public void onTuningChanged(String key, String newValue) { + switch (key) { + case STATUS_BAR_BRIGHTNESS_CONTROL: + mBrightnessControl = + TunerService.parseIntegerSwitch(newValue, false); + if (mPhoneStatusBarViewController != null) + mPhoneStatusBarViewController.setBrightnessControlEnabled(mBrightnessControl); + break; + default: + break; + } + } + // Begin Extra BaseStatusBar methods. protected final CommandQueue mCommandQueue; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index 6bb2eb893303..9a11d146f213 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -89,6 +89,8 @@ public class PhoneStatusBarView extends FrameLayout { */ private int mCutoutSideNudge = 0; + private boolean mBrightnessControlEnabled; + public PhoneStatusBarView(Context context, AttributeSet attrs) { super(context, attrs); } @@ -298,6 +300,14 @@ public boolean onInterceptTouchEvent(MotionEvent event) { return mTouchEventHandler.onInterceptTouchEvent(event); } + public boolean getBrightnessControlEnabled() { + return mBrightnessControlEnabled; + } + + public void setBrightnessControlEnabled(boolean enabled) { + mBrightnessControlEnabled = enabled; + } + public void updateResources() { mCutoutSideNudge = getResources().getDimensionPixelSize( R.dimen.display_cutout_margin_consumption); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt index cfde7110818d..234335a29e8e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt @@ -279,6 +279,10 @@ private constructor( mView.importantForAccessibility = mode } + fun setBrightnessControlEnabled(enabled: Boolean) { + mView.brightnessControlEnabled = enabled + } + /** * Sends a touch event to the status bar view. * @@ -300,14 +304,22 @@ private constructor( /** Called when a touch event occurred on {@link PhoneStatusBarView}. */ fun onTouch(event: MotionEvent) { + if (mView.brightnessControlEnabled) { + centralSurfaces.brightnessControl(event) + if (!centralSurfaces.commandQueuePanelsEnabled) return + } + + val upOrCancel = + event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL + if (statusBarWindowStateController.windowIsShowing()) { - val upOrCancel = - event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL centralSurfaces.setInteracting( WINDOW_STATUS_BAR, !upOrCancel || shadeController.isExpandedVisible, ) } + + centralSurfaces.onBrightnessChanged(upOrCancel) } private fun addDarkReceivers() { From 55e67919acbbacb28152b8353a5bd05fc13ff6e7 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Fri, 15 May 2026 02:25:42 +0530 Subject: [PATCH 03/76] SystemUI: Fix and add status bar brightness control for lockscreen Fixes: https://github.com/crdroidandroid/issue_tracker/issues/910 Signed-off-by: Pranav Vashi Signed-off-by: HDzungx --- core/java/android/provider/Settings.java | 7 +++++++ .../systemui/shade/NotificationPanelViewController.java | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 33a92f7a7f8a..77ad5e4cdd92 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -7032,6 +7032,13 @@ public static void setShowGTalkServiceStatusForUser(ContentResolver cr, boolean */ public static final String DOZE_TRIGGER_DOUBLETAP = "doze_trigger_doubletap"; + /** + * Whether to control brightness from status bar on lockscreen + * 0 = 0ff, 1 = on + * @hide + */ + public static final String STATUS_BAR_BRIGHTNESS_CONTROL_LOCKSCREEN = "status_bar_brightness_control_lockscreen"; + /** * Whether to enable smart 5G mode * @hide diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 6cbf13ac5c92..5f1488bd0cd8 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -271,6 +271,10 @@ public final class NotificationPanelViewController implements private static final String DOUBLE_TAP_SLEEP_GESTURE = "system:" + Settings.System.DOUBLE_TAP_SLEEP_GESTURE; + private static final String STATUS_BAR_BRIGHTNESS_CONTROL = + "system:" + Settings.System.STATUS_BAR_BRIGHTNESS_CONTROL; + private static final String STATUS_BAR_BRIGHTNESS_CONTROL_LOCKSCREEN = + "system:" + Settings.System.STATUS_BAR_BRIGHTNESS_CONTROL_LOCKSCREEN; private static final Rect M_DUMMY_DIRTY_RECT = new Rect(0, 0, 1, 1); private static final Rect EMPTY_RECT = new Rect(); From 4738b90d9712a41e497ed99cb5d6f978be2e01e4 Mon Sep 17 00:00:00 2001 From: iusmac Date: Sun, 17 May 2026 11:06:03 +0200 Subject: [PATCH 04/76] haptics: Allow to set predefined feedback for texture tick effect Currently, the texture soft ticks will play only if there's a hardware-specific implementation. So, there may be no haptic feedback at all in actions called repeatedly (e.g., when dragging a slider thumb or when performing a back gesture). This is the case for most older devices, see [1]. This CL allows to configure the wave timings via overlay to replicate the texture tick effect implementation. The start & end time values may need to be tuned, so it's not too disruptive to the user. NOTE: when set, this will ignore the hardware-specific implementation, if any (assuming none). Signed-off-by: iusmac Signed-off-by: HDzungx --- core/res/res/values/hertzify_config.xml | 12 ++++++++++++ core/res/res/values/hertzify_symbols.xml | 3 +++ .../android/server/vibrator/VibrationSettings.java | 6 ++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/core/res/res/values/hertzify_config.xml b/core/res/res/values/hertzify_config.xml index 69bfa18135fc..01b17d45b0f7 100644 --- a/core/res/res/values/hertzify_config.xml +++ b/core/res/res/values/hertzify_config.xml @@ -184,4 +184,16 @@ -1 + + + + diff --git a/core/res/res/values/hertzify_symbols.xml b/core/res/res/values/hertzify_symbols.xml index 4f2bd43d1c2d..53c117338411 100644 --- a/core/res/res/values/hertzify_symbols.xml +++ b/core/res/res/values/hertzify_symbols.xml @@ -175,4 +175,7 @@ + + + diff --git a/services/core/java/com/android/server/vibrator/VibrationSettings.java b/services/core/java/com/android/server/vibrator/VibrationSettings.java index 8b0bc1270169..e2e5af967dac 100644 --- a/services/core/java/com/android/server/vibrator/VibrationSettings.java +++ b/services/core/java/com/android/server/vibrator/VibrationSettings.java @@ -792,14 +792,16 @@ private static SparseArray createEffectsFromResource(Resources com.android.internal.R.array.config_longPressVibePattern); VibrationEffect tickEffect = createEffectFromResource(resources, com.android.internal.R.array.config_clockTickVibePattern); + VibrationEffect textureTickEffect = createEffectFromResource(resources, + com.android.internal.R.array.config_textureTickVibePattern); SparseArray effects = new SparseArray<>(); effects.put(VibrationEffect.EFFECT_CLICK, clickEffect); effects.put(VibrationEffect.EFFECT_DOUBLE_CLICK, doubleClickEffect); effects.put(VibrationEffect.EFFECT_TICK, tickEffect); effects.put(VibrationEffect.EFFECT_HEAVY_CLICK, heavyClickEffect); - effects.put(VibrationEffect.EFFECT_TEXTURE_TICK, - VibrationEffect.get(VibrationEffect.EFFECT_TICK, false)); + effects.put(VibrationEffect.EFFECT_TEXTURE_TICK, textureTickEffect != null + ? textureTickEffect : VibrationEffect.get(VibrationEffect.EFFECT_TICK, false)); return effects; } From 4f93125ac4d2d01fa3122a29107c27357ec36989 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Fri, 1 May 2026 06:19:03 +0800 Subject: [PATCH 05/76] services: Optimizing redundant keyguard checks Change-Id: Ibb8406b95bdd87a1e2c3adcc3b8292bd3ef99d85 Signed-off-by: Pranav Vashi Signed-off-by: Ghosuto Signed-off-by: HDzungx --- .../core/java/com/android/server/wm/DisplayPolicy.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 1d48eac6b82b..0641cda58dd6 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -389,6 +389,8 @@ UiModeManagerInternal getUiModeManagerInternal() { private boolean mShowingDream; private boolean mLastShowingDream; + private boolean mKeyguardShowingForPostLayout; + private boolean mKeyguardShowingAndNotOccludedForPostLayout; private boolean mDreamingLockscreen; private boolean mAllowLockscreenWhenOn; @@ -1546,6 +1548,9 @@ public void beginPostLayoutPolicyLw() { mAllowLockscreenWhenOn = false; mShowingDream = false; + mKeyguardShowingForPostLayout = isKeyguardShowing(); + mKeyguardShowingAndNotOccludedForPostLayout = + mService.mPolicy.isKeyguardShowingAndNotOccluded(); mIsFreeformWindowOverlappingWithNavBar = false; mShowingTransientInsetsTypes = 0; mImeInsetsConsumed = false; @@ -1801,7 +1806,7 @@ public void finishPostLayoutPolicyLw() { // started while the lockscreen was showing and remember this state // while the dream is showing. if (!mShowingDream) { - mDreamingLockscreen = mService.mPolicy.isKeyguardShowingAndNotOccluded(); + mDreamingLockscreen = mKeyguardShowingAndNotOccludedForPostLayout; } updateSystemBarAttributes(); @@ -1847,7 +1852,7 @@ private void applyKeyguardPolicy(WindowState win, @Nullable WindowState imeLayer private boolean shouldBeHiddenByKeyguard(WindowState win, @Nullable WindowState imeLayeringTarget) { - if (!mDisplayContent.isDefaultDisplay || !isKeyguardShowing()) { + if (!mDisplayContent.isDefaultDisplay || !mKeyguardShowingForPostLayout) { return false; } From be1d7d632d6d19b833914ec32c6c2d5e3801911d Mon Sep 17 00:00:00 2001 From: hua chai Date: Sat, 9 May 2026 20:55:13 +0800 Subject: [PATCH 06/76] Fix NPE in JobServiceContext.handleOpTimeoutLocked() Guard against NullPointerException when mParams is null during setStopReason() call, which causes system_server to crash. Fix: 503115487 Test: run MTBF test and no crash Change-Id: I987a6d4b123a1956dd8a7a04b28982f5f3bc5b50 Signed-off-by: chaihua1 Signed-off-by: HDzungx --- .../java/com/android/server/job/JobServiceContext.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java index e2b742575ddd..e81feb39adbf 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java @@ -1485,9 +1485,11 @@ void handleOpTimeoutLocked() { } else { Slog.i(TAG, "JS was waiting to stop this job." + " Sending onStop: " + getRunningJobNameLocked()); - mParams.setStopReason(mPendingStopReason, mPendingInternalStopReason, - mPendingDebugStopReason); - sendStopMessageLocked(mPendingDebugStopReason); + if (mParams != null) { + mParams.setStopReason(mPendingStopReason, mPendingInternalStopReason, + mPendingDebugStopReason); + sendStopMessageLocked(mPendingDebugStopReason); + } mAnrTimer.discard(); break; } From f52d8e2aa1422688f6e7268c7d58089f621f8fe4 Mon Sep 17 00:00:00 2001 From: Mihail Mihai Date: Thu, 30 Apr 2026 15:50:25 -0700 Subject: [PATCH 07/76] Fix flaky test in b/504933143. -The test turns off accessibility before the UI has finished closing. Jetpack Compose tries to send a delayed accessibility event to a service that is already dead, causing a crash. -Waiting for the UI to idle forces the test to pause until the UI is completely gone before turning off accessibility. Test: Running the test with the fix 200 times using go/abtd. Bug: 504933143 Change-Id: I0005a54057c6d085219f7b9a473089114aa92aac Signed-off-by: HDzungx --- .../integration/FullScreenMagnificationMouseFollowingTest.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/tests/servicestests/src/com/android/server/accessibility/integration/FullScreenMagnificationMouseFollowingTest.kt b/services/tests/servicestests/src/com/android/server/accessibility/integration/FullScreenMagnificationMouseFollowingTest.kt index dd60d8e7aed3..a6fe0e9ef9cb 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/integration/FullScreenMagnificationMouseFollowingTest.kt +++ b/services/tests/servicestests/src/com/android/server/accessibility/integration/FullScreenMagnificationMouseFollowingTest.kt @@ -157,6 +157,8 @@ class FullScreenMagnificationMouseFollowingTest { fun cleanUp() { activityScenario?.close() + instrumentation.waitForIdleSync() + uiAutomation .executeShellCommand("setprop debug.wm.disable_deprecated_target_sdk_dialog 0") .close() From 7439f547e5aa7ee7f513033d198384dda7fe9254 Mon Sep 17 00:00:00 2001 From: luanzhuang Date: Mon, 13 Apr 2026 21:33:27 +0800 Subject: [PATCH 08/76] Prevent system_server from restarting due to app issues. Move the `ensureDataForAutofill` operation outside the lock to avoid prolonged lock holds caused by non-one-way methods. Test: atest Bug: 502141486 Change-Id: Ic1ccfd11587f2ac9a9fd3d5ed776562b124e64f6 Signed-off-by: luanzhuang Signed-off-by: HDzungx --- .../com/android/server/autofill/Session.java | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index ca776ba59d2c..2fe0de1d8212 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -916,6 +916,18 @@ public void onHandleAssistData(Bundle resultData) throws RemoteException { Slog.v(TAG, "New structure for requestId " + requestId + ": " + structure); } + // Due to issues with the app itself, + // ensureDataForAutofill may hold an mLock lock for an extended duration, + // so we have temporarily moved it outside the lock. + try { + structure.ensureDataForAutofill(); + } catch (RuntimeException e) { + wtf(e, + "Exception lazy loading assist structure for %s: %s", + structure.getActivityComponent(), e); + return; + } + final FillRequest request; synchronized (mLock) { // TODO(b/35708678): Must fetch the data so it's available later on handleSave(), @@ -923,17 +935,6 @@ public void onHandleAssistData(Bundle resultData) throws RemoteException { // ONE_WAY warning because system_service could block on app calls. We need to // change AssistStructure so it provides a "one-way" writeToParcel() method that // sends all the data - try { - structure.ensureDataForAutofill(); - } catch (RuntimeException e) { - wtf( - e, - "Exception lazy loading assist structure for %s: %s", - structure.getActivityComponent(), - e); - return; - } - final ArrayList ids = Helper.getAutofillIds(structure, /* autofillableOnly= */ false); for (int i = 0; i < ids.size(); i++) { @@ -1142,6 +1143,17 @@ public void onHandleAssistData(Bundle resultData) throws RemoteException { + ": " + structure); } + // Due to issues with the app itself, + // ensureDataForAutofill may hold an mLock lock for an extended duration. + // Therefore, we have temporarily moved it outside the lock. + try { + structure.ensureDataForAutofill(); + } catch (RuntimeException e) { + wtf(e, + "Exception lazy loading assist structure for %s: %s", + structure.getActivityComponent(), e); + return; + } synchronized (mLock) { // TODO(b/35708678): Must fetch the data so it's available later on handleSave(), @@ -1149,17 +1161,6 @@ public void onHandleAssistData(Bundle resultData) throws RemoteException { // ONE_WAY warning because system_service could block on app calls. We need to // change AssistStructure so it provides a "one-way" writeToParcel() method that // sends all the data - try { - structure.ensureDataForAutofill(); - } catch (RuntimeException e) { - wtf( - e, - "Exception lazy loading assist structure for %s: %s", - structure.getActivityComponent(), - e); - return; - } - final ArrayList ids = Helper.getAutofillIds(structure, /* autofillableOnly= */ false); for (int i = 0; i < ids.size(); i++) { From 626ce5eeacff44516ff0eb9c653dbb889d1bcfa7 Mon Sep 17 00:00:00 2001 From: luanzhuang Date: Thu, 14 May 2026 14:38:50 +0800 Subject: [PATCH 09/76] AMS appDiedLocked killProcessQuiet is vulnerable to PID reuse race, can SIGKILL Zygote/system_server. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ActivityManagerService.appDiedLocked() calls killProcessQuiet(pid) to clean up a process that AMS believes has died. Between AMS detecting the death (via Binder) and actually issuing the kill, there is a window in which the kernel can free and reuse the original PID. When kill(pid, SIGKILL) is finally issued, the signal lands on whatever currently owns that PID — often a thread of Zygote or system_server — causing the wrong process to die. For details on the reason for the change, please refer to the issue. Test: atest Bug: 513038379 Change-Id: Ic242cb2616fed0f865be6a8b650b49a58fa90de1 Signed-off-by: luanzhuang Signed-off-by: HDzungx --- core/java/android/os/Process.java | 25 +++++++++++ core/jni/android_util_Process.cpp | 43 +++++++++++++++++++ .../server/am/ActivityManagerService.java | 3 +- 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 793b05560d6c..cca05a2526c3 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -1519,6 +1519,31 @@ public static final void killProcessQuiet(int pid) { sendSignalQuiet(pid, SIGNAL_KILL); } + /** + * @hide + * PID-reuse-safe variant of {@link #killProcessQuiet(int)} backed by + * pidfd_open + pidfd_send_signal. Pass {@code expectedUid < 0} to skip + * the uid check. Falls back to the legacy path on kernels without pidfd. + */ + public static final void killProcessByPidfdQuiet(int pid, int expectedUid) { + if (pid <= 0) { + return; + } + if (supportsPidFd()) { + int rc = nativeKillProcessByPidfdQuiet(pid, SIGNAL_KILL, expectedUid); + if (rc >= 0) { + return; + } + } + // Fallback: re-check uid via /proc to avoid killing a recycled pid. + if (expectedUid >= 0 && getUidForPid(pid) != expectedUid) { + return; + } + sendSignalQuiet(pid, SIGNAL_KILL); + } + + private static native int nativeKillProcessByPidfdQuiet(int pid, int signal, int expectedUid); + /** * @hide * Private impl for avoiding a log message... DO NOT USE without doing diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp index 74c35777afe4..6b4149164040 100644 --- a/core/jni/android_util_Process.cpp +++ b/core/jni/android_util_Process.cpp @@ -1332,6 +1332,47 @@ static jint android_os_Process_nativePidFdOpen(JNIEnv* env, jobject, jint pid, j return fd; } +// Kill via pidfd to defeat PID-reuse races. +// Returns: 0=delivered, 1=target gone, 2=uid mismatch (suppressed), -1=error. +static jint android_os_Process_killProcessByPidfdQuiet(JNIEnv* /*env*/, jobject /*clazz*/, + jint pid, jint signal, jint expectedUid) { + if (pid <= 0) { + return -1; + } + + int pfd = pidfd_open(pid, 0); + if (pfd < 0) { + if (errno == ESRCH) return 1; + if (errno == ENOSYS) { + ALOGW("pidfd_open(%d) ENOSYS, kernel too old for pidfd guard", pid); + return -1; + } + ALOGW("pidfd_open(%d) failed: %s", pid, strerror(errno)); + return -1; + } + + if (expectedUid >= 0) { + const int actualUid = uid_from_pid(pid); + if (actualUid != expectedUid) { + ALOGW("Skip kill: pid %d uid mismatch, expected=%d actual=%d (likely pid reuse)", + pid, expectedUid, actualUid); + close(pfd); + return 2; + } + } + + int rc = pidfd_send_signal(pfd, signal, nullptr, 0); + int saved_errno = errno; + close(pfd); + + if (rc == 0) return 0; + if (saved_errno == ESRCH) return 1; + ALOGW("pidfd_send_signal(pid=%d, sig=%d) failed: %s", + pid, signal, strerror(saved_errno)); + errno = saved_errno; + return -1; +} + void android_os_Process_freezeCgroupUID(JNIEnv* env, jobject clazz, jint uid, jboolean freeze) { if (uid < 0) { jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "uid is negative: %d", uid); @@ -1398,6 +1439,8 @@ static const JNINativeMethod methods[] = { {"sendSignalToProcessGroup", "(III)Z", (void*)android_os_Process_sendSignalToProcessGroup}, {"removeAllProcessGroups", "()V", (void*)android_os_Process_removeAllProcessGroups}, {"nativePidFdOpen", "(II)I", (void*)android_os_Process_nativePidFdOpen}, + {"nativeKillProcessByPidfdQuiet", "(III)I", + (void*)android_os_Process_killProcessByPidfdQuiet}, {"freezeCgroupUid", "(IZ)V", (void*)android_os_Process_freezeCgroupUID}, }; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6d34bdd59ef3..9119508dc9c9 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3494,7 +3494,8 @@ final void appDiedLocked(ProcessRecord app, int pid, IApplicationThread thread, if (!app.isKilled()) { if (!fromBinderDied) { - killProcessQuiet(pid); + // killProcessQuiet(pid); + Process.killProcessByPidfdQuiet(pid, app.info.uid); mProcessList.noteAppKill(app, ApplicationExitInfo.REASON_OTHER, ApplicationExitInfo.SUBREASON_UNKNOWN, reason); } From 01f762f59b569d182195d74483ec1a44ffbee40e Mon Sep 17 00:00:00 2001 From: Ghosuto Date: Fri, 8 May 2026 10:59:25 +0000 Subject: [PATCH 10/76] SystemUI: Add 2 colon clocks Signed-off-by: Ghosuto Signed-off-by: HDzungx --- .../layout/keyguard_clock_ios11.xml | 45 +++++++++++++++++++ .../layout/keyguard_clock_ios12.xml | 44 ++++++++++++++++++ .../android/systemui/clocks/ClockStyle.java | 16 ++++--- 3 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 packages/SystemUI/res-keyguard/layout/keyguard_clock_ios11.xml create mode 100644 packages/SystemUI/res-keyguard/layout/keyguard_clock_ios12.xml diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios11.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios11.xml new file mode 100644 index 000000000000..c87a1155498f --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios11.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios12.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios12.xml new file mode 100644 index 000000000000..7f5cabc9b1c2 --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios12.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + diff --git a/packages/SystemUI/src/com/android/systemui/clocks/ClockStyle.java b/packages/SystemUI/src/com/android/systemui/clocks/ClockStyle.java index 60c4247a1c96..a8882ce1e798 100644 --- a/packages/SystemUI/src/com/android/systemui/clocks/ClockStyle.java +++ b/packages/SystemUI/src/com/android/systemui/clocks/ClockStyle.java @@ -104,13 +104,15 @@ public class ClockStyle extends RelativeLayout implements TunerService.Tunable { R.layout.keyguard_clock_ios8, // 52 R.layout.keyguard_clock_ios9, // 53 R.layout.keyguard_clock_ios10, // 54 - R.layout.keyguard_clock_big1, // 55 - R.layout.keyguard_clock_big2, // 56 - R.layout.keyguard_clock_big3, // 57 - R.layout.keyguard_clock_sweet, // 58 - R.layout.keyguard_clock_pixel, // 59 - R.layout.keyguard_clock_samurai, // 60 - R.layout.keyguard_clock_gateway, // 61 + R.layout.keyguard_clock_ios11, // 55 + R.layout.keyguard_clock_ios12, // 56 + R.layout.keyguard_clock_big1, // 57 + R.layout.keyguard_clock_big2, // 58 + R.layout.keyguard_clock_big3, // 59 + R.layout.keyguard_clock_sweet, // 60 + R.layout.keyguard_clock_pixel, // 61 + R.layout.keyguard_clock_samurai, // 62 + R.layout.keyguard_clock_gateway, // 63 }; private static final int[] mCenterClocks = { From 3be0fc4e5f00e97a57f78051de029f2a6d3c7e6f Mon Sep 17 00:00:00 2001 From: Ghosuto Date: Sun, 17 May 2026 05:58:10 +0000 Subject: [PATCH 11/76] SystemUI: Add more clocks [1/2] Signed-off-by: Ghosuto Signed-off-by: HDzungx --- .../SystemUI/res-keyguard/font/Expanse.ttf | Bin 0 -> 68512 bytes .../res-keyguard/font/Heathergreen.otf | Bin 0 -> 198256 bytes .../SystemUI/res-keyguard/font/Varino.otf | Bin 0 -> 105660 bytes .../layout/keyguard_clock_big4.xml | 49 ++++++++++++ .../layout/keyguard_clock_ios13.xml | 47 ++++++++++++ .../layout/keyguard_clock_ios14.xml | 46 ++++++++++++ .../layout/keyguard_clock_ios3.xml | 2 +- .../layout/keyguard_clock_ios7.xml | 1 - .../layout/keyguard_clock_miui2.xml | 6 +- .../layout/keyguard_clock_tall.xml | 71 ++++++++++++++++++ .../android/systemui/clocks/ClockStyle.java | 18 +++-- 11 files changed, 228 insertions(+), 12 deletions(-) create mode 100644 packages/SystemUI/res-keyguard/font/Expanse.ttf create mode 100644 packages/SystemUI/res-keyguard/font/Heathergreen.otf create mode 100644 packages/SystemUI/res-keyguard/font/Varino.otf create mode 100644 packages/SystemUI/res-keyguard/layout/keyguard_clock_big4.xml create mode 100644 packages/SystemUI/res-keyguard/layout/keyguard_clock_ios13.xml create mode 100644 packages/SystemUI/res-keyguard/layout/keyguard_clock_ios14.xml create mode 100644 packages/SystemUI/res-keyguard/layout/keyguard_clock_tall.xml diff --git a/packages/SystemUI/res-keyguard/font/Expanse.ttf b/packages/SystemUI/res-keyguard/font/Expanse.ttf new file mode 100644 index 0000000000000000000000000000000000000000..23a2bfdfca3474ebb089c385452541efb5229aec GIT binary patch literal 68512 zcmeEv34B~vdG9%QpF4|YA6e^2BhAQ?tX(tSJ(j%hyDcZNEpM{Hu^l;!votkXSVEv7 z2_XxF5K2fBFv~W^7N^kH-+PihGk3q| zeCM2R`G4Q}4&#imAifk9U$K4dYV2{w-S^|ySiNH9Dpr9l#@q4bU%h4X_K#*h`*Z9s z#{T20x9=S2=)dhRvHvnYdpB?I?Ai6h)0K?LS)4y`=*r>K{#$q5jr~XP88~$9)p6Ii z{l8-D)pIz%?&#@}D<4h=zl?o+e36miGpBLfkNvawHAYTcfAs2WU3j;K=l`(v*pcDG z@$NJ88T&b|Vd-Ny;6AAbu)hZTO~j^MY5C6rpJnXVdvJaH^HbZe)ja}k<+jH z#^IU$JV#4rYLg_`7&foZ+uOGI|ontm`<=N!a7~ zNUTO&*~12~E#r>Aru*>wQ?akG>#=hq`(t)3`yd-*kKm}pmf#;}Z^u85JsnS2oIAP{ zcSyM7ZTPmX_#@mciMu6H8j~g2(Fx^L@g91bjHju?!zZq0@l&IRPqLOXwB2#$OjkGS zJ9EwHGi)KQbn48h%(#zg%bD{G9W7VM;;e=B;OYVKR?be_*WO_7w=zvUsRh>%{dn%m zti8VvzlWI%_i=U%pHXoYI)ON{OB|*9=m=-~*j9Y+!MB8OjeUSUhJR0?wVuIodM45P z1A-cBP+~eyAEL_R>1*f4cQ!eXrWSYCFouesfXoyEvacEB}yvA&%$KS^g{O z0sO>K9*gR9G%V^*zlz*}{e8GwMek$G%R1Qtww7&TSFk@|?`Kc4^XN6tvX8UBVgJZ} z&MvTv+{L}Tme1wgd<9>_ck*F=oS))1@SCN-kiIE>tM2xAI9?U6i^t=Q@nn2q{6h_m zzqyE>On+XKqzmn}j%{Z9+5130dj8YwW9-xHtL&fH|Hkt*?%`Fu1|3~aT z_Ad5r_8zp(=TOJbvlrMm*|$XN{|N2#W3<`V#F+Ru_DS{|jE~3I-?C3&Y^WGBCVHle zxyASmvnY$P2K1|Xw0bLgRy&)=x>*PN4*I|VTZUe@oNWZB+0AyaootBh!noUuelfxh zu_NFySFw}q6vq7x><`&Z=#Ot;H?!}ubL<{=7kdX<;bG=OKMk-0kS+UI1Y^CLy^b|v zoVT#EY%Vxi54(k>*&A7gy$SvLE#Px^vPJBz=z({z73`gCkloAHum{lJ--{l(l|9O~ zq1Uft53$wkevE?$(JNnKe}&%v6-Jy@1+5ZNxAY#2APqJ3;LVG(3w$28%g{AlmiPvR zWAMvd8c{jMn!Fo7GU|jIHhaAo0Ttc~Rl%Md(6m?^4>SbShFC_ArBVSkrAyu8>-Y`h zpLy>`?!EU*_wr2-zgK$Cg*Qq!B!BV3cfa?&e;UvB{~S^iqnSqQ1?fT1wv#Q%E^LWQ zsuK1nc(Jqr#gw=z9cPNd_G{?7fsHcfJjge3*52CGSQ+*E42{+EI$e*pg?gfqKv+v8 z8k7C~eM$Ukk%+w?=u7v;a>t^*y*=svzlhbFMw4NhMjL%$t3Ebt@8F2^V14Yuc{=lr z+?TX1R==0_eoS8|xonkRK8T*ug?_L(yJ11Mq-)K!5m{DH1B|%a4UUm@J9?BN>&kJa zY0`cdsu$QuBn`@&f{@os7WMbeO*Pcdi3PfXop@SB#?)hNA=D+aR6=>9XcjFIyTm$P zW|&!7Rn;b!PaTj|W6d;me#taWD5m1ku9emKmsI~M!40=$HwI0Kv%y7@p?9Y0Wkr=O zB1oLeAOeP$VyMTNuFD{TEC)7fTv39`rkd*2E0-#^85NF z_M8Fg;bL^G$!)o(p;V1&G}6UIU$;z4tfFxg1g{%l+p}9Lz<(C?Vl1WVV;Dg`S4%5{VM~9I%m|%l4)YIc`4uwsTrs_7eH32{R+p6r+ zz8>P2HH&H&#=`#UK$S~l72M~wxu(MS!}4kFViOmU6iB^NR~+x5igB!-*b5+tyWg`u;JD`;26Pp&n7<9O zcm?#Bk7c8^QAv@uu7yDEXOhmA7!uc&4eQ4$x9rI#+@_>LBrkYIM?dB$3Z%%Q2cCJvqRBZ$o!#J4Y+M%Irc;(8KJ63MrxIRgL zjp<~gN3UH$j{_Y|^2a#YJ zf<1~avHPrH2I;WSDTJCJ)CbZWWZCAZ-*kI@?n<}M>%N;V6 z0@RibBt9*=L?e2RUPO{~zaF-Jo$9|*AB)x3$3%Vaiq)^Ni;FTBZ1P=n&9l@=rE5u# zN>IIiLSL`am$(~j9@-G;dsMGZHk$RcD;T3;k3`De`mrGOD~)5+GIbQ1AD0OHQ1(Op zL&t*tZ~%3LzEquUwy%=T;WGS(p;G3$p{x(bJ6T768g$V0YN1X!6$|7lTG%)8gdwK* zVy<~a8{w-yc7m#kFI3fOyYZ^rbzpgDqz?K3;W%p)1OCpjkHP=d{99lJo z;cDrK8owP32}4dFg{CMgr_q?&eyEG6yez8+m{0|(vt1K!P|yoxbd8(K-ZGS}3P8mS zWCP0_&w26q`!k}J4$p#S(S(S}ZXqt)&utnDQgDZiEilQ9=IfEK{P}js8)N{B)R+XE} z-ZGR8R99E8t6oc;sa0sFb!{P^M7n4)m9n@@G?va-y-B`ADn7?mU2Ro0Ma~jYRH?BM z>N+Txo|>F5OKw#&6jDy5#fv2Uxm!zNs`u1CQ>F4M+$;Hpj z=)R$>f5Y09gT&99`xE^=ZZPziqty2HgVqqYh1@HzxlGYv^;mCD&JsN6(fwY{-*7Z#gT|Z^c+f zU({*v&!pc@yy3O<+sUn}OYFCkT2&8B*>B4jRo^U2(E^I2$2oL`{2;q3lkHQW1=oZn zna~1BB76cM0om1jKeQ*(LdbH;+e&E-wi4M!j{GCUAO*P>u;n1Jye=v`gk60s-!UA? zcHt!<1o;o>8e&{UG7ShuI|qOPgTDsynxr%%J$(cMOLZifB#9vdNrtl!PtAGpL^>qN zU(1For;$ZnXHzqSbS`lu zts}AsjwX19*g7~hsmdZcUz(0uIX(?~1%c-5$?haHXBkM80&k(ArR1Q|X?aTskWOeI zw0zNmJ_{Y3GZmzBsROGN(pfbnK}ryvX&Fr3-bu0EY!}G|AbbfCjY9FA}j2h#Pi=FY>INaS!V&0E6~j*wGbT3 ztVo;tZ&S|7QEO5L`CnAd$`iJ*FZE}8gcFCgH`Q2<5cGPW+{eKnp`dB1BrJLKKPT_I>iI<{0Nhr^wUzW4;hn%bij*?ygEW95+slc)t?I;WyG34VaY&Ahbz1bC!2GtEgKc z!?FywVurONCv!y!@l_wIkHL6AnO~+asYCSk^Raq|7ZEm^W{a}(E&kctmVghHiUe?q zt2X~c!IXn&7coZBbZOR~Y>t7C8hTApp&S6OaBSv`%VIZqo}1;%T3mdGdW8&i{I5y8 z3WoakR26*DxXsfx##*x}K)gcnAuF9!9r6_*+QCtHVl3L6R`klYOhMW5MUM6gTEVh) z#-aGd@YyD)_fo+-`8x%++?j2MbxZOzrwb)d0}9|snmi)l zcoH0pNk|^FV~IbsnMxyYe^3hQmg94=8yUsSH8>U7qLCH*kjTa>4Ma{^!pFw(?N|pG zl#L4Mf;oi3DNnIvEOt`Z#FDZOiHgev+FRrO0(cU|E-c8V=gtYhhhPgTjYCr6n}tGEb!spL^T}7 zBpfWuT}4a~5Ol&Sa`6UarbDa=&&cE`?sO!d47Ejwf#?Wg#Gi5MRK^(p#iUiswU6cJ z+>~8U{CLg$E?F>S;NS%gPJKJEsHb~F zB_JTegX&{wy875=Y9rB{A|?m`par5`I1jZlj{`b>X-n_xVym))^O~Wg;p{oJjnW|VI9;_F`%TZS*3jrb?Sz7MW;Uzp$rS&KrT@;oueVs^W zT*y{uR|u^!(0JQLchjE=c(irT`7SQNKIdeE-yc3b1LRUv4cF4?d(PO7LWB6ZxrMIAJ> ztIG=5u~eeD$#`c&M*+6unSl~o7_L)}4CSz#P&o>eRZl4CExFp<)6uJ=CNE3Xc1WFn|-Yj_2=9R>uT2<9pVUqhcS^e>1x*yN9I9h82i3g0^2QTtxJYVQBl^B5H>4Ob5lxW+`|k zyEzLKb3wXmS@+UnQDa9Ky~fa)a{XaiQPWwbgG?)FC_ZMg0U`7xekWv2KjLh+W;Zod zp@%GJNy(a;oexJR)4e*l0w7Hd{%1{xdw`gsBA6l6E~vx%Z8Ra1Uc4|pm>EbX(vAH+ z=?1r6*OrMEIDArtx?NG!iXJJvPS<-f0Y@K=_Fj;E0`t4eWw=~|*&|9tH}9fOaKb0c zKFdqwllRh&kYzhOq94h!CCu#L6weR+A~ePSArJp0t`HtBN8XZc5@tPiE=md?fr`cUt3vid3}bL`M)9m(H$rs7JX9oe9ltHLu%je?71!gyWj1hTMfi+=#}4p8 zb2$9OigU>z=6r8 z6BH&fc_<1=l>)nZrrl#wkK+soRmRZKW=gIC>|hytXEsbgpVr59H3!f*ktyx)ujv{> z#W2bxJ__C|b6p;R9hCR9vjc_&-Bf2gtjiIS;=nso-Y}GnaR!+N0I{KNjy2O@8DHwM zVV``gHL+zUTriJ`y^O75QiS3V%~fAV>kTpdE#~(#xm8O{5F=i`TLgkdv5O(?Pi_I}9GkJ8T?J|+2ygD}X)&bUL$Gcs@ zzL>4st4MC<;oQBB>#l)?5K?o%6FTQ5!G|@wd6s*)8zaRHz5=C6H_+7~qA^Nf_-dzd z#-(%D2m+SDx{tyxF!v*}94%!S(y*ofRA*P%&p`NF!9yfjLpU6sqTW1{#|&koc>ERY z^4&W&Z%EF?uxJE$ zKd5q%u?~ZB0^@3Pp>$GRG|$J1hZbs^=V$q`1Rw3>V@a?k3=723l^shXla8eccTN~f zliWMaSenvTmTQw-5Hhvm%%sPp2*|t{j-@iF$c36q8cU#=23w$>&C9mdD2NQB7;YxK zam+D%EEOAV39}cT36=OuP7Totpf{`LM3G;S;@O_lKE;;wpxwo67*IG&AR?*R@^c5< zvvbK`f)22Olw=IU8G3EXIY{#2Sr|%q8F_8;&W0R{FWfeEUv+TwrP)O^`46^-g^mF# zflrkbTNH}KDS>}5jz}JsO!za(XtyK>Etr5D6PBux-`5h8%ej2nC&;u(t5Q%G!qb;! z7YnqHCi3O5AJ7<%0a8S5u|%LBVi{|yize@ZrA{$??9$(k~UV>$EX(3Uh&4v5tT()-0kIiM5_vxv(zr8PmW{Ny;>OOgv5r#38{ z95-E6KU6XquBA*>%glhgK$Cp75f3b6co!^IlN+CwPYAOl3ALk1Z-zbrw$tGgB2N%{ zFBE!ck7DWr;dPTubn{%YV`w@eOpDg7C`Xm)9r;tyh;+S+_MGx$HZdpQcX6g6cLt4X zf^Q1}pmajGRvmOF5F=ic$>jFMWaHFPA%m7F!TzAKOl;Rl@B!d?{LR!<<7a;E_5Pf{ zO>CdNo#w|2`E>CjzXx(MO`gf#p0-3|btvdoOx(Bu(W0I)R7yf%0Iqtr%R~*W2EdsEL?4PZuyANC?x=WM>Mq z1n5dgJrV4*I$%w-6qa?B753zC&O#edxCSo0_U|u=j(Xt|h*9Jhy9C1I=~4xRXKi+s zkeiz}u3EYz-7zm&Zx(vXR1n9dBSMONfSM)`6H-j`+N!I!R&NolztBN-CeH$nzL#>HGWEZ!4yh*Ih4H&f?9yIJ8@Ki+X?OCJ%SAv1hHDO1>aP+xeT$k z$+{@CIJC24gAIe<*cJ!3ogKJ-E^A3PHzkr{DlG92)GUz$Dif2`;$^ab{GyA8bJAM$ zcOg5Th}FZ&$K+)cbysmw3+;G6?1>H8wV6(Gn^h5FYuQJbD-M20AzJFNOP6eATONj# z21^w3VqpN`18sAg8tZE8AlWHXqfA?&Qk&_>TCpK?i z8yCE(w|idOCC`tUIek{cAAIyg~RgEUUEviDN`^iwXV=$B&Vp zb>f(=Ry3b8L5r@l^iJw~089$uBk%@$ntYy`;+XJN*l7*~0}+TJg^=1Q0-S@kon!eE zx3DL&9?Vcym6c0?r90Fr@?&7Kq5?+{U|IuHlx3i;vOaP(U+4xP zT7bM$-D~?X*4lmy8^4*EALF%=wv<=Fk1-=sPr!U2OJ+p*LY__7>y!4JdxZaJ>gLsw z%XH@47x^zRQBu|5xIp-U2{#5aOvL~=t~#?MU9QRe7vfF@ehavwOgNOLyjNhZ+im}a zjW=DI|KhbZ!&Lr@nYBlG|HVvO#l~(R@2gld#W&Q|R#*5u3a~fej1+ib1wBHzP;@hA zjqy+baTis54#lYx@M;ZUU{Sj6$P2P1Lz#@@qI43XtN~r z6n-)O)@|x%X(z|`Eex~`HZ1a$bau4I>uV#hbMi~btB0R7Wsn6Pi zt->Q%4hhY1bHdXmt;3!Y<8QsKu}rK}k!VMZ#(AN;Ok2MyL;+>lU^XkH`vS~(n47BC z6__hz@!yUH0Ne|>&7`nl4iZ<(w7Znd%KakY+=KKf>=n$ z?k^N4rHE-^Eac=ZUk*1#M5O4-6I&nibBeN*iQRQm6Qih~`=CwtQ9P^%Ake(_Rt(4x z`Z~G+_5qJWgq7**{tC{zI~(J%NX1-#3kIl<`wSYOP`*=1AyFyQ-OM_`dmt{eiVwD@ zrew{=N$dKOdA06#>j)6bWgweu96Rm31?^ppalD+`d*Omi8^Zd~(50xVNIy2Axh+(6 z>Eh0LNI90S?JrC@HXW)uvzp&kf~}5BR(E;JgcM_!PuIwfe_#*hL9IhR&)wM_gtBhh zxPIBv#eKRC4WwLvq|4<5NE-RHV%xS1E{D#wu6u29T;!!AturIcw0J9`Bg>Bnd3Si~ z6k?y8j&4FmiTq*9KsQ7UR|YVPYH$F7f>}&eP`Z%LNSzNzUQ;P%P|S@tU7 zr&L)ow<{OdCHEql*b(D2A)p_yX^KJux=5;toFJq)?v(}=D|{Gfg;qdTnFeGzW?Uk& z@|SeMv$1;K1{dn*g)oHle+nqvVGH}s+b^@ZyPULBLgoX)fJHx>yGvMe<#M0pb0E#; z?kY$hH_;@R&D|v;Df7req9~GSHg^}n(UaqWBGSML2XkUY3iawjfR{|bNm0T7VtNP% z#etI+Gf{+j4At4ebRZLFb9c?=?ji*P7KyE#AOH}GNTEqSZE78-KgqMXyJ(mRt-dTx zW^;FmoU`aBv$?y>FU{ueva_*I%V6^M&TQ^3dDEpOQ+B{+Ct8WrjeI=0P!RAnMKa}= zg#r2-QXdMHh(aIhZ0;_iQ3)B#K)l}+7a?w{Y7pCns69E7+u=R-GWjUqzlI;g$`KBxGrq@un_)0AyCE- zY^Urvz)*>2|4#FAAtumyro>L<^wHToU1b+Vna$IM+y}FHy2xZKyTXNB6fC4AX7hB- z=INTv(>0r?D>rQc0RoQ0C?{(vKH&ekJYBY4aY5b#iGfucxz7F_Q_(-ijHfss``lQ6 zTfY7__BETYDwkI++FKgoB)kZ-`Kk)nntRDHgGw@v&E~5j&!pq8w{ok_=Bt{`S4GJX zXY*Cf=Bt{`SEWUMm-(t_^<(HRb1<19(b#~sPy+r69f79^WkLQJdl@KbK*M$zYAW5* z9HRVMrBi4oKt*yc2sJ-n#sQ2Fy>geeT`);zd}|IhLhQ;HH-C=MBS#ikapT>zer9$} zD;DSI>+M1E4kY-i1ej&d!_dXV6GUp-d0`P|pPPw?^i%0hr0lD45>J&2NWFwgmFhV8 zWK$C>S>y#P$TBrajSK5sg&MD#81Y2pFW;P#22SVZK$W3DnZSsA`lw0ikjF4*^G4+- zUKFQRv7um0*qY571z^jHl_*S|Q#w*-^G1nzc+=#%nUqryOqdTriC%K1v`N{=Y~HA8 z(@)Ljjk0pE&E}1=MD?WMUjKc0qb_~`bC&O8^J%3$tT2d`2Dw^`DCmA#_ZIQcm_&wn zXvEJ;`Wq>;8nO-@hlb|lUB>DJ2cf1RHX4xHe3n6oc%V6&c42knSb;x+^b$us=`YO9 zXmO(a3^3AT5Fl;4p$TMJ5hp#;oBM*_(ljoEyYf%y>}TlfRk8k~Nc<_zK1`QfxUnEc zdNwx}2x29yvFEJ;_oX!^W^-dLtXVMa?629}SXM%tGTF|`&GDMejU^b+OY~j1oKOxI z{U4Yc>wL-ltyVjJ(axg{zKXPDdnQcXn$3+Bn>LgEtB=j*#wyH(B?6HOa%Iit#-eG% zO)j50fCc7fb7K{BjoI8-r8BR^q|-~!z&4v3>k^Xn&F01uW|Z@l!-Z|A62}W*|JmGF z$Sg6N8*4T<7S@!C|M%p^8X&_$jLy7MAxH{(*_3edY;G*Vm+~`MXLDoCV2zJFB$x9k z+9b4Q7nDysR>oH|vs_Gt^9(7y^h~ob<>s)8IL6uBSQf54m5*j-?J?2cOKW?~v{mf* zFT_^T3gIH3drKVoM&@^6>1wfxGP(R!EX<~ASa1qcT6F0+0v6bQN)b+r5!*SlXr#Y{5z7@{xn<5y z(jhTl_Ila^{>^}`@=kWIbfd@#){<>*Zm1JU!B8z)1_6_3C><5QmNO?8m|~zljkNfJ z?TX7}oK@E-|irU&tyKdxG7|e<^YZHDs}PQpk@e5s`lzWx~P`D3Y}ht6WkbDuvt# z1}X{?PM{b;?|k}7DN009_%HGHUwZ=qFL!%`h_e7Dd^WI z*EW0xPJ%Q_{=MH?nu3y~#UfTYN|U6OWJVJiXmZVIuRrNzM{^Rz6fX{&%Z@hwm96Rl zr_HPwh4Uz9jM17ETw+*r9Qj_XGNREaLAl)@MT*84k18d-&`M5jIabf+kTW5o^L@yI z0&&ouOGU9zBJU(pPSUVIw2PBTv7KQRElM~^NxG4K63ZSSX&bGhOZ5 z#O3Nax*myK&rN;96nQ6UXju%uJcD7Xcb=|yvlQjS zx7KTEs*w~VEk=GQETAc|WA^GTA{Q=aaVJq}iYICP$V`Ek&*5Rt6w};1M6eJjU3v4d zaO+hhDc(et8UH$c^H%!4An*#5J6}c`D_DC@jLk4I`t@OF>7(Rt#MqG|OqqrV&2z_O$8>U!$EZ5ysI~B5E{Z6p7lFsnnwHmQJpiF)TGUcSV#M`h zL9C_Q%wz=~-BHG{yd|VDiC}3z2!`RIst!}G&L*wv*tw}M9LiQ$>tMEG70>=|YaLAC zIC46)(=nWVhgu{69jQmhjs_hfl=OR8IX0>I!9acN`&9efWMuoy_!mv%J#-zuAp0!d zaq)M@-@lk^u50Km<@md$|NIBuSwZFCR*DeXB7FxGCOKyJF|lSUnuOM`$@MYxDtVL^P-U{lCu3o7Nd=TKtT?nOihu@K*;ZD@?zKP=h7!ytB-p8D5&Q0xcM5l ze~rBtBz+QPeFbIx0oEwTio}#!ybjC!Ff5ZOVtm1&kzX7=K;%{z#gz#V$3pG$Z7bX7IIpduAs)0{#Z2A4kG;i}L*e8A&z>6LE3 z-@VhV8|HG_s?=R>9dgd%6Gzz^=&SK;Ey)?^#~^Vob{g9i%$Jn0f<-ARkB}9c`{X$} z-HLTJo@drGo3o9%XL8PloF_BBwcx=NG~@JS;*$9XW2}mihc7YiPOzhV1qxJ8D=CO4 z*MuSes8=ZH9YklWHy{n6ONdo`C3&kK5LH2+@h4ch9IUB}R;8->- zX&r<~i0OzpVnZ__=CzO@NX-rP2jAFn$XvEejH8XoNSH;gCnp)j2D_7=n&TF zXGFUS(C%GXztztWZYNe9$kPtFNHL>BEF&PSK(S8#(^ zcR-%<4#W-zzzggJ^N4cG0!syRbC&TaBy?y#F8BW6-$-?<)Y9FQ!j~j|f2zM;vW`KNCc9Iq z7#)RHr6+J5j-`@`MqTgHv7PBB`v%X8MeM_PWWAI~CF*>JsjCLoF-4XbNmE#H(I zD=cd|^uHQe)eJSD`2#9l<;DTUx=3>2Dx5UvBDbOHrY7A^cj6$}363frm}jQp^SWGy zrt7LwtzrfZY&rV{ZrJ$MbP*mYyS!ePCOfadQtePnEM5vs=RvjsYjIE+)BP z=t9Mjd^(6J@naQW#$Gp8RA87+E}n6ELvO~0$@PLQhqvgxxh)z#sbnUTKt-HQ^w;Ku-isyR_SPWxj$6N@U-Z-d z5&L&3F_~>O0(rcpU-3188XRY3-LN)S>297GsTtwWZjOn2KTWrM+WHm;=&B_lMyvWO|bk|qTA(> zpA-*%Qqc^E36V7D!W{w-rE$f0c)Djc^rTa=t?7lL(O!0OiicXyY{D}WY;HDL1Jx3J zg#Zi4LECu6OKn6knM^m+a)Lq9C`rL};H_j5tRc^{z{~XOL!r6~%erZr7mCblgozD3 z0?E|*g?)pSZ@o%X^DU3hYkA;Cv6;6od9FOjmdz^(Sr9UsN&&UOE*W@rI+<<|<)LAe zV^2}2dejS?18I!3Wa62t=yYn&Gew>Md(si+Hut0Y8Sl32O%!PLCR-y$}zdTZst zz7;kvW4s;o=_h-k1!d{)iq}^~urh_@C6+=I-_#+vA_2P+dtm}QR@D96&PTP zWmwp?uoN_^8T7M!eHhA4S>zpRcGszKS4p zl?q=`ZG2Rj?S7QIurdLUPuG2(Kv89aCRIlCUtu$gwVEqY100hf+iB8f**@Hy7FkR( z!fMQQ;M^j_7Mh|(uq39{U&vl}T48UFnz@veman3u9OR)OaYB8Urej(osHpEI?Q(>~ zP<8rhUY&H*E2umZ%OPcR1tDWvv~Z3`Jj-5zCJtLBTSK4%mW)PW7~f4|7~PYz&B;ay zJu_3J$VDTsn8vg8SbT}}=tAkR`^&TJ>DTnkr%mHDJriFOpUH=2^vq_Iv%wzC4PZHZ z2wL=y=&2m4W6@(#xw?zb@v|2%p#G_+w8JZ=p}|ucTcMUd|16&WCGq^UVJ@HzhZN%Z z(3`*wW~w($Zi8alg=krPkxae#e)baUrFLWR?$~RPSU#nk`UIg&ey?)2XX$$;H>w>K z(loBfmmt4IWsywwl8`gj3h2Ozg?~%D9!fJwvH&k@AmzBOHL_+>3JC;u2$A0sddB~V za-dJ49HqJX$n$6!vYck?I9SHyYI0#UsUQ8$pGo-P34Wem3yXXOGoH)L4Qo|5L=F^DFk}3)MYpcU>ZAx(f}C(g#**#U1+OU8veKX^b?<|QB+1&xxeOK49KA|% ztIrpmleCXRaWTxR=+t%G6IOg%pguM!k|t~WxJQR(r7T_yZ-d%i?krY%vCe{|`TEqe zrK~nvwK&t?o@%VEjCgd(!`6cS?Aoplpun*^W&NKH_- zxA+vJ|B28?aSJb*%S&&|m)lXQIx5?|} zQqU$a!sgWdMf9aUhCGn;u6h>E1}wU1Y%Pj$Z3mx}Xf$vws?-rxpr=_>0T?=Y{Us$| z$Nwq(FR*WVI;gDPbE+WWrN2Je=3-?!LartOj6)92*)r@ z*M8=52^B!Bc8Ikw(GV-xilvLweaT=lkZ!W4n-7UxMEC0x~iTFl3=141I9|Y=RH8rGS^rN18Cqc!XhiJEl7_{f)w~ zw!NRK%7(Fm6e-G}!6LRW*?|Q?o12`8j-p}$`?ItlkReA4Az+e;Kz$TB(uW3FL0ce#SDO;_yQv2EkJH1xve{&cd@gP!16zlGksT$>jWps zJV|HAe^h)L6&L);@^>{5>K=gZUWX9`wyw}hzvw-P(jYGud7TBV95)_rZea0nb2_2H z8Vy;Va(k?xS`KQQ>of(ryr`WhI=^ZB+qoVgZKKW4inIB$y^3+ZmF>;$t_qs4CD844 zwk9pPj71pt$_8{{FR%foANOzrt%wyKj{~UT62N3pVyvb#jFAt-W7EbB>sAadTe5I| zAQ>PpWJ9CRY2bWs$9OO6_0Lr#QLyE-Wv)Yr=b%aFhl`sI?T292g;c?X*0-qUd^#{6 z-yb*3&WURqqsL>l*G_S1mG}e z5(9*`V<&fmO&L;mH&n|efLS|tkfK96SXYM50Rb(^<~c< z({O`26hm+mKg<74*jJsjQn&CHRQid?P4KypnGSgk#|r4m$mb643Vf?W5L{vfbw%A8 zk24nUjCZsoYpTLQq4PV5lk#NM5>&H7gSFIiHKx05BL8urrTK;2Vg5F^?$G!gjXJUO zT>hZYjbZ2WYeaoIvTefB7qtOa2GI&LaRmNsN#1RvAhNU>y~9f2>aY$QT+NFGqInSz zkcR~LvRpw#JcuZg;Nkx_bj-YN`}^0UWyGC0ST052-nM=$1s{WlJj5J*2XS2+s`I-l zc89D>s<3>m3~doI0rCsJx`T$Q$wKd`&eoNjR1X@onkd%D6BocEM@xiryTe(YW(zr{ zsNGWJSS~TVOYP8Zms_%tWyvUz`ftj$Y94KNxuikU=%q9Gy71@uZA7M20K5K?vJw*c*N>U#c{jv($XnwHjn?v-3UAG6R^jnfoKEt_y12J-w1smQ0?@dI;2>tYRda;7 z5trtM8iklV2|;|uTuG{`332@`N-)|AJH;K1@oIU_Aq-7 zdpEm_{Sn@NT6`)IZjCiGSs0xyh_ER?hA9mIH@cS#=7)}MsbIjW_>eH9PXNJm8jH2@ zKtmwZ+uz%d5T^b_pcy)5AQ8d0mLbn&V=9HXq3*_HH#vEFdja;x04b$XjpP80g?pno z(u;qRSh@Y4K#1WrTiSQFHUWs>#8SVY&lwL~UH z|J6h)g`2w4-F;Xv6$M@ZU@6&a}Z*>Ak>Pz&~H4#)P)7us8MpfyONCkYdSbvm! zwR&$V)z>NE_6!~t?(N679Ws?0u2f~bn1UZnkNWDa!QtMzpc$7iRkCMLm(2o=6d~ zNx1@@G1mca?oFiNcSb$Bdt;3e@hX%K>K6QB;x0U2PxRxy2$5dgNcZ)SI);lfr~)BE zcn}dSLbSts^$3X8DMgyd+U!s1;RLMISS)V&xbZL@k4ovibh0bi9V5EorbK@OKKw`H z$<>(`UU=bu^T-Rood3cLn}D3a@-s+Oas@`Uq~He*Yq*o?5FLTDOO^mZOVHLN`3`*1 zNg3!A5Iac)XZsn{Hn{RBh6fQe|q&PU2ep6^kh5{u>goE$D7DxMm&JPnW}M%S4Qw4M}!MrL2t#CxC^hQGOIy6iD-*3 zK1p)%ZViRSaXbV2peC*p|G8F)YT=KtO<9df@afCkQ1LFjY5ZHVc)kLWNVicbK1(#< zH=us}-&Gz~rA6Zke|7w({oS{BjeoMcm#@66?^lwHi5a*Ie`szL6CZjBDowkhxYT~| z5_45Hb)qn}A}yw@=u|*7BEHe$L|G6F?{n*5y;4)cs~dVEjE?B5snHXvT0=hxY-os? zK(TNGZj|M)*XupYqfk+hG*vcq2@8L71wBi}v*Cd?x$LKoBkL7Fb%1Q48^Xe;N}>&9 zgkazvOis|n>duOrS4e)BD~9GX5k~<6BKiV$Zbd~U{)fY1ML~!?m;jHVQleSVaDv_v zY6UtF@u_HBT&z@9R=Q9akOZ|yYoVh9M%1_qwXmNdDH_U5r^OfbbaYF!E4^96Q5oT2 zl2U1?l4kHq%ypvCW%xx$A(Ep}=}wJI9>lPFKtQpN&H!f*R8$C3;h?UtT0_{InUC<>%0fTC`{}Y z(ICl`WdJ*9Pyl=tvPT31B$Ek>QGmOe;usoYu-2>yh7e>Qe?LM50s-y|q&?LYrg}P3 zQxn0L8C5iHR)jFf^nUUKIJD+TF(+pidtWx%nZne9Wf>3@5w~34yjn83 zGdH6jYl|Z^XcV;440bcFfw!9@)|-J(U_KP3loJ>;h;EwF0V|x5h%W9k&RyD#Ls|d! zt?SpqdPM9zkV!XT)CK5)6$oGvo6O)6OC%xo1;GJ85>P3eHNw&?jk15mrB#sGQ9%%* zSV@?0+>+@VDI2X=lgB0aLpj{?BHe);cJ}0*ytDIR1DI?LJ^dECSWM#~JNn|k1JC^$ ztcEMt)7b_wrDGA-)f(>7cWsgk*C0ep7)=1Y0I`&IAbt->iCJQp8U;3lSuzSHA1Gq> zrOVKPVi{-*YXWN#nm>Sj6JSQsV&28ix zsLL0-eI4o&wS^-Lni}M@W!C4-{KCc%u&Iu5L#O3j`&gHh%rgQS?w4i%gciYZa7p0j zd-LFtD_$_Y25}Shu`d`wSqU1CQQPF3WgngThEgF*KK0R9oVQR5<>r9Om~A8T_eu{4 zoMSy_!l&$avBDoCcc*Mh9m>263a3lPX`iPsj zoU|K15~0Zw-vX0{rtd5&c!I7<=Pv0H*~Qk~7+NU6rQSX?lug9r0kZYi$JebKSh{3E zy1Qd;5-nXHsIw+;dePPttN<1Vj93%xOPno)(PYh+v}V21z61X|ShBMZH4nWaKyy!P zrEo7_)7;b3{6ey)xB329Dp`45WvV51m0^bcO9CN$RYXi9=+$@x@-_l|?}6Ut@v3A` zPm=#2*>mB8Aus1G?!l&T@WM{02NV{1%S?q!Tnj5B-RAKMTJz$ZQPjhGh-$agnQ59PxMCKX{TgW0A?Qv|kSQ?{J>&Pdbk)sQsOtD9{Dm8PE27Z~G2cP*vd5&mQ2SS$`45cZK_o&3NrvE? z_FXW)5k(1#a1RLvK+32+2mwJ14R6?rrGp9QClEXYtIp!ga<4O_kFF6MbdB}H-}!IE z4aYw){(btTr-^q_%zJ`$W#=L8nFld5g~eb6$Q$rt=$+tuJpm9=}A) ztrWB@RVBLUtpa$?%MWRXX*AODqA!q&XoVP?$3d$gYZj%dsz9HlX-H1y09*yQq=hCS zS?^CJ3!M<)v!g(4vyQuAIWSUF)y~+?1$fo-?|BmM@w0mI9t4gTya8ZLCjW+Hf5uwi zUcdsVQMNE&od^)&P0958fz7-nk^7D?x3J^F*OfX5QO&-ek2-J z65mR!HWv0*2dXSFNt38WOM;=~`ZY#b%!gba&V{5b+plYt$W$MIs^JV1I^kFkGUKjs1nwlh-!P(F(J>Y8644bTn3d*%jcJ_LiGDJI1r06NjUDo}N=A$fg-N>s$!~Q))7r2`kg#?C_Deik)1nzJ~Ggc z96NGs%A0Q@aN z03|E~!dda3%wp(>Ht(ZO2*@uA+T$AhCrnm=vQf-z0fLKYb_)?i%$kJ}()9u&RPhe! z0~c=Gv4dB9{M|pRZ0T7KBqHqcR#y3awefUIsy(U4eT~WL#*Gp19mTEq!?5|}kXc)) z_*AdzhdFNqR=56x2Q}~qd|t0Fz;|A_LCS2{F#hy0KCpJ}nq#_qQHun%J}et9!|Ms? z72!~OqSedQ3bVTo8V!b~>{i{z9DpW(aDYU}m;n+Ec%t>ylE>ron{JQWSK&41ZrA{g zw2lR!v-ANjkFaJ~f+yKob_@JXce4ipwm*iMjUQt#@Q&=orQB!!=|`_$wm^;gZa&l~ zcSc)yB9`KAkGkOmPw@3UF0coLeqm}JPS2ZW> z_qxqYs=2?uHWDy=QPVfVqJ2D;h{i@1cP)}T7tBk`2~TI@*uoCU<92(7=-1=k-`?8N z)EKX+t_%fxE4--5=I5V(?zsH> zKKsFE-uu{lAN#-`zyHzqJ@U}Q4?X;zci;2iJr6!`|GVyc=e=*e`>l7s66*kD-Z13vn#nVxnX&B z$)fhw=BC;jPs9@mhk{rt$>#+HG0!>>TB229GHgHkn)MGphJNdxm_7i8+#~uBq0AY= zWe7vYxECFcw4$Dvj&wbMkYhB(62c5oyNg2;1!A4j8)Uw3{FmH^&pqRhieKOOQ?O(LZb&P|?|#u# zfd@e0QS2$>Z^9D@tU!$xdQz#B+g<1C>2cN3mb<5CF706QnJJ?Zy2}jWk3ya6*qDARzXcAaC|i#4 zGQzH6H?mvdxxI(I3l6Fe!yEgI^v~JGU0srgKmC!>-TmEK%y<-2SFhvU(%~vet~@eF z(wa1w@5F;|_WLAv#N!_76XVB&@zcJzHPu*OU1dZ%7qui8#OtB~m&b^B@&hY2pI6GU zN-@GrjIeCaGP!$6$3nSD>ux&6G$eD{y|gPRoAcV{HYXZtYvzPAp>#!mg;z1X7>`I_ zqV@tvRR{tgzv|m2mLeLEJarMzkW~h)&WP0Q&W-HC0t9J@2TgBqsI(Yi6eC}mTv=RU zZzMdjv`aEYp^$pY^a|jvpipiU>iUT!frjCB7gELj`=QGJ?PeK*a`2v~o;rX2kw@;o z|K5A=yz{o(Zo28%u}zx>24XRn`S2qjdi=5b-+TXi!Pg#o@PT{Z zbuakZo%h^%kHyz+d+Tj)wfNdix88Isv9_E4;Km!SKTCY=*j2}_I(_Qol_y^Ry5pNh zHXS`QeA&>BZ37zzHmq3{TOP~y^>ogwt-)Xg8?v|@y1fTXF1%bYxn#G^cHo^P7DNoD zUrAbQO*q4ZV71H&!PXiD+p>hHmQaYTkrD_d7q_=9{$|Ns2~xIT@XC zxSMJpYXWx@BAk%!-e$12lpg2&;Tvwa;W_$}|Ffea=uUZQ!lx^YDWfiZZcVB_&=?Db ze3iOiG3M4@h-T6)E$RNbN^gHU6;67p^h!^p8VL_Pv2b-m%Wr=?@0OjLctu;w7T(tK z?seAiV<(NU++nZ|X?N6q9D=Olqw>AQC z?hDs63@kn0lxl80cK-PB^KW^}Tbi3+Uw8g|-Ro(q`TY62Xh)5Q^^nI~8;#W0EyEw_ zhNK|k^UM?av->L+|C;IY59#o?{_Ot$5Wk;E%#(ed#JTW){ljhpfBrn4Z3;fH1atdNzYym?i+iK6|ck^efIOH-#Q=reVoc#P+oB!=lCDuQ}8TaRj}WUcjK8w=et-f z{|%zps5~p|bAQLud>m7XzQ&pu%I?&W?sLYFGp5A2!ZqUDv#8^rTlEANARG`gI>f&} z=1qJ|S|fc~-UmbHE9zqPS#1XrEfrt#cllrE|4cv%91gq`JP>>$6b{`P_Jwbbu*iMU%ILA^r(!L!k5+D~{NbD@ zs?Jt#si~_uSo2t|r}pOB-_{+j`&RwQ`lsVH@y8pMHhiyfwDCKMzQhwv?M*KASP<+x@%xA5JUjrRn?9U(d|XJeGNWzBK>D{FfITUGVjVdlvrd zqSK3BTpV3|V(|}_yl$zo^z+N^&7N4kaQTOp|6-tT;K4!9;F|}3x#D#zUR{}8`NXR9 zsxPlTy@sthx#lx#=dXQX-I{gZUjOb5M>l+LW5>p08$Yq}l}&Hoym0fKTUxe!Xv+__ z?%n$BZJuohx4pRS$J?XZ4{krd{Zl)P9XodXa_3z;Keh9RyUy>*y~{UTe#_;bxvBsUT<$BlK^a0dNYGsYO*)k+b(Rs!`^lS z<9x{8_F((NR2s#FJB}ej(c0$B$5ZyUgzbKNTV{QH(B4+i=dZK3RaV8{X>V&dPH~R( zOoN5_U)kF(Y=76@cEfM*YkS+nnxr{{r%qo#dVJ*A)$u=x_jL7i#}8f~Uv=u_)x&45 zK7MGpBfk8^iMTj_CO&%P%#qP+j~wn;dG_@1$umc`9T~ai#PDc$M^{(ZqE*{hZC_-c zm}j4{cjNZ%t|Oyoj-NUi7dMn#ntx?}>$>Z%>o}S(%Ar$NPCUW}*(t={UC&05GGqjV zyqd)kpBG1}t}cAKv2_q<<4Cc23UI>Jh|@oV@8j$cwmNWpIi}{Fz;FKkGh*)ut~-LG z*W&vyu3U-cJ&k)#isRdGbOeE}CvapGZ|T6>=-(o|XS?{&0=b2E%tJ_Q;XTD?<0WTz ziFcntIjPj~f;SZ3SNha)wJdk+I!6CGFoC)pRSx0kmEwx&u5om*i_d}B<^GU~ic7dk z20#BI!YU7<*B@f%5j5G1@p*w=WQPIlr7&aR2trl9fbh$|1XkJ#h_nr{yhy*f?kG6pygg z$gp)9Qgjqee-&by*Fhq$M|APuqa$4lGF`(fVS8_4o563k@;Q)uXVIM3L*u-O-GGSc zKVVOxQ|w?n5xHE$cJW$7OTWtN*jo^dya!<;=OEetkk|7#(x>g^4ZINmRukf@FK0jH z&Flqs1y8bn0athrFt89pOCzxMV~F{l1HM!Zx!QuL=vIW0R=^8ZhX7Rtao~;YQ3SBQ z2^>lTr&$I($iw!r1Bltq!aMRbf>{S3Uq1&#?KyV-i|@|HueqnU1S^j2lj2=!8>`E zvT5gr4er51$43ucbLG(!N6u<14-Jo=I_X|raA@t-$4?wSqHP*Jbj{WH5f^CNti5g4 z-gdF)-k!fp-8p*v}g3-yZw7S6O+@=qdB?sT1J4V7ubFRr6P^a_?WYea-NR z6ITw8z8>2-rWx8_hGoKUgxqlz<%X+$3~B)VgSU%G57IaN=C{%J#6Rf={MYnh7=Z2Z zF}8Eh%At6C{qxMXb^VyOeea&JzUr}-p#w+bckJ9VCN&TLsR6-s=uqNdbwk4#8yaJS zi4{*nA`TuHm^a4T$KnT$&Kr~36Ag)md1G>W{O~h!IKl=7$3lbg0|y44lEQ-nPc_Sf zW76P`v+*%c0vm(FhsTsHXP=fN36B|TI8xIR|Y$!%ki!9Dc8vFPBSeL;2naD42=En`Y@@6#>ZJGk=D$}w%_o`x~Gd1%{Z zdvI~}9ed(qTejd(cBnc&HlMcU4-LhivaUvnT5!nTi;s2D`7XNh#Vvc{pvE1;aRRyy z;7FX#nY5Lrt@MHF1AtqqL9H>*;Gr?LZO<4Js8|E`fsY}~uVJii{qXaCc8IQcUS$V| zh7J!8jq$djA-e`c@x!Q3Vqj?AnA#p+86Q)chfybeaLb-CJuxt5BnHp|xaGjSF-?#g zl!zaGN+ZNSOF_#N>(@UEx2)Mij<>z)H!s)x4??MVzZ z48_N?+xOsHHPOW`%DgeXeato3_B4cmpt^zG#6SYwB{48OCLKIF#t)$&V|wenF;{z> zO6xWMpuE`wLv+c36{56e`_nET8(cZi+K}rw?)Ku2G{6T>U4S9mA6eXI$0;pSY`3UBgJ|4$4&cy<;mry|n)mOMk%>dvb z)z8r)M*YTL130MP7)8Ja%Me@*6e7`xgc^X^vT9JyEmd`VrC1wRdse-hSv4f*7OHcX z?PNNG`5`l(lG+(8T&e28!Gdz@p&Ia+atN(Z_wl12AIcqpFS;h?tD1QTbA=6f7}xes zWjt(aVZ;O1xdoZb)fzOZK>iA5H#=(w7iz~D@?hkGa;Deu4Y`SjVTtw_D=k&kpcjgg z+KcepgT#&yiYd%Qkm1*{F&7PP$O*%cmPkPmtm#y@ukQHi1BmkxC_C(D)u_}i=@<-8 z`moepr2C|flcuFkkUk=HlJrrjcac6ObvNmLsdtn55@xZEP{{};_e7xFt4y1$k{yd9 z?ZxYMG25{?*t zUOnfr!v7-&;xenAX!%<2O_msX>gbeCxWlC?sw2JlWQTcn;yEV8aU=P0oMz7{JyVsV*WsBXkXLZmn1lZkz`kR`VV)f@Li0xMyvS>M3oRh4W?Huy>o?sM@kwW^ z$}JbqqJ9LlVp)wAs`F_ySCOv;`iPrC-k#gEx|p8dv>I+&ZSCzmZ|jbNRHyw;hSsLm zg+-~(_zi>~W2}Kp-$^z&G*Cw%V#%n?FrKuQuj5HAw5l_lJ!D#d%(DuWrS3t~Vf35G z|8F5(*)G8TPZZPMtYdjEm(Fy=OQzP8vw{MA+HYCqJVs~y41GqsG_`4)-~voAY||c( zDai1lK%GFAU)*7S4#&BvA$1ZwPf2wO zA6Q794-F3&$nz04pKYJ|u^E{iH!b9jPb?(+r#R=VJ@PXP$?&;_WcUKS)9v%VG$V7~ zR~C}}mW5>h8at=$dEZz_hHot-!*}4FX`gr7jLdo8TS)dFEF}9HcFx%IezcGb4GYO| zN3QppM_iRmujA)DCA>YMm(@aFb+4+f@%fvrhMr}M#mnFyi+Hqje@45ruYcFHvn$+i z_QjkjqPzR!`2T5pEcRlfNrQKX_q*{$23{I^vCL7e7^@jQ{`u literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res-keyguard/font/Heathergreen.otf b/packages/SystemUI/res-keyguard/font/Heathergreen.otf new file mode 100644 index 0000000000000000000000000000000000000000..12ae982f05083b09496b73654c6dc60f099e44e0 GIT binary patch literal 198256 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%0A``2o*)5&Rgu#4+1vZbyrX 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 F{s+AeyOjU{ literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res-keyguard/font/Varino.otf b/packages/SystemUI/res-keyguard/font/Varino.otf new file mode 100644 index 0000000000000000000000000000000000000000..a423aabfb9756491dec4e134be7220e155612efc GIT binary patch literal 105660 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 literal 0 HcmV?d00001 diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_big4.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_big4.xml new file mode 100644 index 000000000000..6fd7f9b457da --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_big4.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios13.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios13.xml new file mode 100644 index 000000000000..58ed5809961b --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios13.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios14.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios14.xml new file mode 100644 index 000000000000..864dc83bb3f4 --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios14.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios3.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios3.xml index 96f69905b89b..44fca5108bf2 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios3.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios3.xml @@ -38,7 +38,7 @@ android:singleLine="true" android:textAlignment="center" android:textColor="@android:color/white" - android:textSize="150dp" /> + android:textSize="130dp" /> diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios7.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios7.xml index 3c1b69535153..3748f015a096 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios7.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_ios7.xml @@ -65,4 +65,3 @@ - diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_miui2.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_miui2.xml index 6553165c0c24..682d4fd9aa82 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_miui2.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_miui2.xml @@ -30,7 +30,7 @@ android:includeFontPadding="false" android:singleLine="true" android:textColor="@android:color/white" - android:textSize="340dp" /> + android:textSize="290dp" /> + android:textSize="290dp" /> @@ -58,5 +58,5 @@ android:textAlignment="viewStart" android:textAllCaps="true" android:textColor="#fefefe" - android:textSize="16dp" /> + android:textSize="15dp" /> diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_tall.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_tall.xml new file mode 100644 index 000000000000..01df74cfb5d7 --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_tall.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/src/com/android/systemui/clocks/ClockStyle.java b/packages/SystemUI/src/com/android/systemui/clocks/ClockStyle.java index a8882ce1e798..aa4a52232b5c 100644 --- a/packages/SystemUI/src/com/android/systemui/clocks/ClockStyle.java +++ b/packages/SystemUI/src/com/android/systemui/clocks/ClockStyle.java @@ -106,13 +106,17 @@ public class ClockStyle extends RelativeLayout implements TunerService.Tunable { R.layout.keyguard_clock_ios10, // 54 R.layout.keyguard_clock_ios11, // 55 R.layout.keyguard_clock_ios12, // 56 - R.layout.keyguard_clock_big1, // 57 - R.layout.keyguard_clock_big2, // 58 - R.layout.keyguard_clock_big3, // 59 - R.layout.keyguard_clock_sweet, // 60 - R.layout.keyguard_clock_pixel, // 61 - R.layout.keyguard_clock_samurai, // 62 - R.layout.keyguard_clock_gateway, // 63 + R.layout.keyguard_clock_ios13, // 57 + R.layout.keyguard_clock_ios14, // 58 + R.layout.keyguard_clock_big1, // 59 + R.layout.keyguard_clock_big2, // 60 + R.layout.keyguard_clock_big3, // 61 + R.layout.keyguard_clock_big4, // 62 + R.layout.keyguard_clock_sweet, // 63 + R.layout.keyguard_clock_pixel, // 64 + R.layout.keyguard_clock_samurai, // 65 + R.layout.keyguard_clock_gateway, // 66 + R.layout.keyguard_clock_tall, // 67 }; private static final int[] mCenterClocks = { From b6a7067780d65928027f44e1b3c185c0527a50e8 Mon Sep 17 00:00:00 2001 From: lijilou Date: Fri, 26 Apr 2024 09:50:31 +0800 Subject: [PATCH 12/76] FileRotator:fix NPE due to The File.list() method may be return null. Bug: 337070728 Change-Id: I63707b4f9fe3bcd705e98ac2e69a5101d092de76 Signed-off-by: Pranav Vashi Signed-off-by: HDzungx --- core/java/com/android/internal/util/FileRotator.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/java/com/android/internal/util/FileRotator.java b/core/java/com/android/internal/util/FileRotator.java index bcad6fc85ca9..22014a411e49 100644 --- a/core/java/com/android/internal/util/FileRotator.java +++ b/core/java/com/android/internal/util/FileRotator.java @@ -334,7 +334,15 @@ private String getActiveName(long currentTimeMillis) { long oldestActiveStart = Long.MAX_VALUE; final FileInfo info = new FileInfo(mPrefix); - for (String name : mBasePath.list()) { + String[] baseFiles = mBasePath.list(); + if (baseFiles == null) { + // no file in the path and create one starting now + info.startMillis = currentTimeMillis; + info.endMillis = Long.MAX_VALUE; + return info.build(); + } + + for (String name : baseFiles) { if (!info.parse(name)) continue; // pick the oldest active file which covers current time From f8ead81d52f6690643ccfdbae4bb7e111e93df27 Mon Sep 17 00:00:00 2001 From: Jiangyou Li Date: Mon, 14 Apr 2025 09:37:28 +0800 Subject: [PATCH 13/76] Fix NPE when IntentFilter doesn't have any data type. Test: Cts Verifier: Sharesheet component. Google: 3584832 Change-Id: I05bc3929df050dd19a28f672c59b08ac76e25eb1 Signed-off-by: HDzungx --- .../java/com/android/server/people/data/DataManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java index db84b6c4a17d..9d7b9faa40b6 100644 --- a/services/people/java/com/android/server/people/data/DataManager.java +++ b/services/people/java/com/android/server/people/data/DataManager.java @@ -504,7 +504,8 @@ public void reportShareTargetEvent(@NonNull AppTargetEvent event, return; } PackageData packageData = userData.getOrCreatePackageData(appTarget.getPackageName()); - @Event.EventType int eventType = mimeTypeToShareEventType(intentFilter.getDataType(0)); + @Event.EventType int eventType = mimeTypeToShareEventType( + (intentFilter.countDataTypes() > 0) ? intentFilter.getDataType(0) : null); EventHistoryImpl eventHistory; if (ChooserActivity.LAUNCH_LOCATION_DIRECT_SHARE.equals(event.getLaunchLocation())) { // Direct share event From 642c0c651582a07e8110ebfeccdc3a9d325c68f7 Mon Sep 17 00:00:00 2001 From: Jiangyou Li Date: Fri, 8 Dec 2023 15:13:09 +0800 Subject: [PATCH 14/76] Fix NPE in TextToSpeechManagerPerUserService TTS Engine crash many times continuously. Then onServiceDisconnected will reentry, lead to NPE in TextToSpeechManagerPerUserService Google: 2864431 Change-Id: I34c55dec87573e5d82cccbbbdc29b7d93cbad5b1 Signed-off-by: HDzungx --- .../texttospeech/TextToSpeechManagerPerUserService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/texttospeech/java/com/android/server/texttospeech/TextToSpeechManagerPerUserService.java b/services/texttospeech/java/com/android/server/texttospeech/TextToSpeechManagerPerUserService.java index a9ae5f7dfc3f..e4e13965ecee 100644 --- a/services/texttospeech/java/com/android/server/texttospeech/TextToSpeechManagerPerUserService.java +++ b/services/texttospeech/java/com/android/server/texttospeech/TextToSpeechManagerPerUserService.java @@ -152,6 +152,10 @@ public void disconnect() { protected void onServiceConnectionStatusChanged( ITextToSpeechService service, boolean connected) { if (!connected) { + if (mCallback == null) { + Slog.w(TAG, "Client disconnected, not sending engine disconnect callback!"); + return; + } Slog.w(TAG, "Disconnected from TTS engine"); runSessionCallbackMethod(mCallback::onDisconnected); From a97232800a0d21adc235cfaab737b55fa18cd2c7 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 14 Apr 2025 13:29:35 +0530 Subject: [PATCH 15/76] telephony: Trim warning log if app not installed * Some google apps are not shipped/installed. It's okay. We do not need scary log like below. Log: 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: Could not reach PackageManager 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: android.content.pm.PackageManager$NameNotFoundException: com.google.android.apps.tycho 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.app.ApplicationPackageManager.getApplicationInfoAsUser(ApplicationPackageManager.java:541) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.app.ApplicationPackageManager.getApplicationInfo(ApplicationPackageManager.java:524) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.app.ApplicationPackageManager.getApplicationInfo(ApplicationPackageManager.java:518) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.CarrierAppUtils.getApplicationInfoIfSystemApp(CarrierAppUtils.java:449) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.CarrierAppUtils.getDefaultCarrierAppCandidatesHelper(CarrierAppUtils.java:407) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.CarrierAppUtils.disableCarrierAppsUntilPrivileged(CarrierAppUtils.java:147) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.CarrierAppUtils.disableCarrierAppsUntilPrivileged(CarrierAppUtils.java:90) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.GsmCdmaPhone.initializeCarrierApps(GsmCdmaPhone.java:669) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.GsmCdmaPhone.initOnce(GsmCdmaPhone.java:573) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.GsmCdmaPhone.(GsmCdmaPhone.java:357) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.GsmCdmaPhone.(GsmCdmaPhone.java:339) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.GsmCdmaPhone.(GsmCdmaPhone.java:331) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.TelephonyComponentFactory.makePhone(TelephonyComponentFactory.java:505) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.PhoneFactory.createPhone(PhoneFactory.java:356) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.PhoneFactory.makeDefaultPhone(PhoneFactory.java:226) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.telephony.PhoneFactory.makeDefaultPhones(PhoneFactory.java:122) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.phone.PhoneGlobals.onCreate(PhoneGlobals.java:565) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.phone.PhoneApp.onCreate(PhoneApp.java:39) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1395) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7698) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2500) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.os.Handler.dispatchMessage(Handler.java:109) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.os.Looper.loopOnce(Looper.java:232) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.os.Looper.loop(Looper.java:317) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at android.app.ActivityThread.main(ActivityThread.java:8934) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at java.lang.reflect.Method.invoke(Native Method) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:594) 04-13 16:08:14.518 12685 12685 W CarrierAppUtils: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911) 04-13 16:08:14.518 12685 12685 D GsmCdmaPhone: [0] Precise phone type 1 04-13 16:08:14.519 12685 12685 D RILJ : setPhoneType=1 old value=0 [PHONE0] Signed-off-by: Pranav Vashi Signed-off-by: HDzungx --- .../common/com/android/internal/telephony/CarrierAppUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telephony/common/com/android/internal/telephony/CarrierAppUtils.java b/telephony/common/com/android/internal/telephony/CarrierAppUtils.java index b69a25d8fd20..979be34a6ed6 100644 --- a/telephony/common/com/android/internal/telephony/CarrierAppUtils.java +++ b/telephony/common/com/android/internal/telephony/CarrierAppUtils.java @@ -483,7 +483,7 @@ private static ApplicationInfo getApplicationInfoIfSystemApp( return ai; } } catch (PackageManager.NameNotFoundException e) { - Log.w(TAG, "Could not reach PackageManager", e); + Log.i(TAG, "Not installed: " + packageName); } return null; } From 24d0663eb340463c85ab2d2438818fe487a5826c Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Mon, 5 Jun 2023 08:03:12 +0800 Subject: [PATCH 16/76] core: Catch OOB when returning pooled string Caused by: java.lang.IndexOutOfBoundsException E AndroidRuntime: at android.content.res.StringBlock.nativeGetString(Native Method) E AndroidRuntime: at android.content.res.StringBlock.getSequence(StringBlock.java:124) E AndroidRuntime: at android.content.res.ApkAssets.getStringFromPool(ApkAssets.java:351) E AndroidRuntime: at android.content.res.AssetManager.getPooledStringForCookie(AssetManager.java:869) Change-Id: I539754f774c63bbccefcf75992d7ad2988359f14 Signed-off-by: minaripenguin Signed-off-by: HDzungx --- core/java/android/content/res/AssetManager.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index 61c16a3d4c5f..eafdb6389718 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -971,8 +971,14 @@ public boolean containsAllocatedTable() { @Nullable CharSequence getPooledStringForCookie(int cookie, int id) { - // Cookies map to ApkAssets starting at 1. - return getApkAssets()[cookie - 1].getStringFromPool(id); + ApkAssets[] apkAssets = getApkAssets(); + + if (cookie > 0 && cookie <= apkAssets.length) { + // map cookies starting at 1. + return apkAssets[cookie - 1].getStringFromPool(id); + } + + return null; } /** From 9779015669b2d7eb11683d9ba73623109b99c731 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:28:16 +0800 Subject: [PATCH 17/76] services: Reducing icons memory usage Change-Id: Ifa087cd09020159e4b559f35dd22091f92400f6a Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com> Signed-off-by: HDzungx --- .../core/java/com/android/server/pm/ShortcutService.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index be1b3c17f598..ae20685c771d 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -818,13 +818,9 @@ boolean updateConfigurationLocked(String config) { mMaxShortcutsPerApp = Math.max(0, (int) parser.getLong( ConfigConstants.KEY_MAX_SHORTCUTS_PER_APP, DEFAULT_MAX_SHORTCUTS_PER_APP)); - final int iconDimensionDp = Math.max(1, injectIsLowRamDevice() - ? (int) parser.getLong( + final int iconDimensionDp = Math.max(1, (int) parser.getLong( ConfigConstants.KEY_MAX_ICON_DIMENSION_DP_LOWRAM, - DEFAULT_MAX_ICON_DIMENSION_LOWRAM_DP) - : (int) parser.getLong( - ConfigConstants.KEY_MAX_ICON_DIMENSION_DP, - DEFAULT_MAX_ICON_DIMENSION_DP)); + DEFAULT_MAX_ICON_DIMENSION_LOWRAM_DP)); mMaxIconDimension = injectDipToPixel(iconDimensionDp); From ed4509ac7d05dc240349d60b896812b892b453be Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 5 Apr 2021 21:45:18 -0700 Subject: [PATCH 18/76] EventLog: Disable event writing in production builds When opening and closing activities in Settings, a measurably significant amount of CPU time is spent writing to the EventLog, as reported by simpleperf: 0.01% /system/lib64/libandroid_runtime.so android::EventLogHelper<(log_id)2, &(android::kEventLogEventClass)>::writeEventArray(_JNIEnv*, _jobject*, int, _jobjectArray*) We have no use for EventLog events in production builds, so disable event writing entirely on non-debuggable builds. To avoid having to check ro.debuggable in native code and pay the overhead of a JNI call for every event, perform checks on the Java side and make the native method implementations private for delegation. Test: simpleperf record -a; verify that EventLogHelper no longer appears in sample hits Change-Id: I3505c460f234d9a5038bd1f9d41ce911697ca76e Signed-off-by: Pranav Vashi Signed-off-by: HDzungx --- core/java/android/util/EventLog.java | 74 ++++++++++++++++++++++++---- core/jni/android_util_EventLog.cpp | 14 +++--- 2 files changed, 71 insertions(+), 17 deletions(-) diff --git a/core/java/android/util/EventLog.java b/core/java/android/util/EventLog.java index 0dec1fabda0a..15489f15ba01 100644 --- a/core/java/android/util/EventLog.java +++ b/core/java/android/util/EventLog.java @@ -334,8 +334,6 @@ public int hashCode() { } } - // We assume that the native methods deal with any concurrency issues. - /** * Record an event log message. * @param tag The event type tag code @@ -343,7 +341,13 @@ public int hashCode() { * @return The number of bytes written */ @RavenwoodRedirect - public static native int writeEvent(int tag, int value); + public static int writeEvent(int tag, int value) { + if (!Build.IS_DEBUGGABLE) { + return 0; + } + + return nativeWriteEvent(tag, value); + } /** * Record an event log message. @@ -352,7 +356,13 @@ public int hashCode() { * @return The number of bytes written */ @RavenwoodRedirect - public static native int writeEvent(int tag, long value); + public static int writeEvent(int tag, long value) { + if (!Build.IS_DEBUGGABLE) { + return 0; + } + + return nativeWriteEvent(tag, value); + } /** * Record an event log message. @@ -361,7 +371,13 @@ public int hashCode() { * @return The number of bytes written */ @RavenwoodRedirect - public static native int writeEvent(int tag, float value); + public static int writeEvent(int tag, float value) { + if (!Build.IS_DEBUGGABLE) { + return 0; + } + + return nativeWriteEvent(tag, value); + } /** * Record an event log message. @@ -370,7 +386,13 @@ public int hashCode() { * @return The number of bytes written */ @RavenwoodRedirect - public static native int writeEvent(int tag, String str); + public static int writeEvent(int tag, String str) { + if (!Build.IS_DEBUGGABLE) { + return 0; + } + + return nativeWriteEvent(tag, str); + } /** * Record an event log message. @@ -379,7 +401,13 @@ public int hashCode() { * @return The number of bytes written */ @RavenwoodRedirect - public static native int writeEvent(int tag, Object... list); + public static int writeEvent(int tag, Object... list) { + if (!Build.IS_DEBUGGABLE) { + return 0; + } + + return nativeWriteEvent(tag, list); + } /** * Read events from the log, filtered by type. @@ -388,8 +416,14 @@ public int hashCode() { * @throws IOException if something goes wrong reading events */ @RavenwoodThrow - public static native void readEvents(int[] tags, Collection output) - throws IOException; + public static void readEvents(int[] tags, Collection output) + throws IOException { + if (!Build.IS_DEBUGGABLE) { + return; + } + + nativeReadEvents(tags, output); + } /** * Read events from the log, filtered by type, blocking until logs are about to be overwritten. @@ -401,7 +435,27 @@ public static native void readEvents(int[] tags, Collection output) */ @SystemApi @RavenwoodThrow - public static native void readEventsOnWrapping(int[] tags, long timestamp, + public static void readEventsOnWrapping(int[] tags, long timestamp, + Collection output) + throws IOException { + if (!Build.IS_DEBUGGABLE) { + return; + } + + nativeReadEventsOnWrapping(tags, timestamp, output); + } + + // We assume that the native methods deal with any concurrency issues. + + private static native int nativeWriteEvent(int tag, int value); + private static native int nativeWriteEvent(int tag, long value); + private static native int nativeWriteEvent(int tag, float value); + private static native int nativeWriteEvent(int tag, String str); + private static native int nativeWriteEvent(int tag, Object... list); + + private static native void nativeReadEvents(int[] tags, Collection output) + throws IOException; + private static native void nativeReadEventsOnWrapping(int[] tags, long timestamp, Collection output) throws IOException; diff --git a/core/jni/android_util_EventLog.cpp b/core/jni/android_util_EventLog.cpp index 0a5e78617568..2e9aa3405dac 100644 --- a/core/jni/android_util_EventLog.cpp +++ b/core/jni/android_util_EventLog.cpp @@ -68,16 +68,16 @@ static void android_util_EventLog_readEventsOnWrapping(JNIEnv* env, jobject claz */ static const JNINativeMethod gRegisterMethods[] = { /* name, signature, funcPtr */ - { "writeEvent", "(II)I", (void*) ELog::writeEventInteger }, - { "writeEvent", "(IJ)I", (void*) ELog::writeEventLong }, - { "writeEvent", "(IF)I", (void*) ELog::writeEventFloat }, - { "writeEvent", "(ILjava/lang/String;)I", (void*) ELog::writeEventString }, - { "writeEvent", "(I[Ljava/lang/Object;)I", (void*) ELog::writeEventArray }, - { "readEvents", + { "nativeWriteEvent", "(II)I", (void*) ELog::writeEventInteger }, + { "nativeWriteEvent", "(IJ)I", (void*) ELog::writeEventLong }, + { "nativeWriteEvent", "(IF)I", (void*) ELog::writeEventFloat }, + { "nativeWriteEvent", "(ILjava/lang/String;)I", (void*) ELog::writeEventString }, + { "nativeWriteEvent", "(I[Ljava/lang/Object;)I", (void*) ELog::writeEventArray }, + { "nativeReadEvents", "([ILjava/util/Collection;)V", (void*) android_util_EventLog_readEvents }, - { "readEventsOnWrapping", + { "nativeReadEventsOnWrapping", "([IJLjava/util/Collection;)V", (void*) android_util_EventLog_readEventsOnWrapping }, From 6df7d29bc3db129bd9e7443395d253b6efcce710 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Sat, 8 Feb 2025 16:43:25 +0800 Subject: [PATCH 19/76] [event_log] disabling event writing for user debug builds Change-Id: I60281cff944e1ff91c7d194d35df247c1ac4a41b Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com> Signed-off-by: HDzungx --- core/java/android/util/EventLog.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/java/android/util/EventLog.java b/core/java/android/util/EventLog.java index 15489f15ba01..a48c336f7b64 100644 --- a/core/java/android/util/EventLog.java +++ b/core/java/android/util/EventLog.java @@ -342,7 +342,7 @@ public int hashCode() { */ @RavenwoodRedirect public static int writeEvent(int tag, int value) { - if (!Build.IS_DEBUGGABLE) { + if (!Build.IS_ENG) { return 0; } @@ -357,7 +357,7 @@ public static int writeEvent(int tag, int value) { */ @RavenwoodRedirect public static int writeEvent(int tag, long value) { - if (!Build.IS_DEBUGGABLE) { + if (!Build.IS_ENG) { return 0; } @@ -372,7 +372,7 @@ public static int writeEvent(int tag, long value) { */ @RavenwoodRedirect public static int writeEvent(int tag, float value) { - if (!Build.IS_DEBUGGABLE) { + if (!Build.IS_ENG) { return 0; } @@ -387,7 +387,7 @@ public static int writeEvent(int tag, float value) { */ @RavenwoodRedirect public static int writeEvent(int tag, String str) { - if (!Build.IS_DEBUGGABLE) { + if (!Build.IS_ENG) { return 0; } @@ -402,7 +402,7 @@ public static int writeEvent(int tag, String str) { */ @RavenwoodRedirect public static int writeEvent(int tag, Object... list) { - if (!Build.IS_DEBUGGABLE) { + if (!Build.IS_ENG) { return 0; } @@ -418,7 +418,7 @@ public static int writeEvent(int tag, Object... list) { @RavenwoodThrow public static void readEvents(int[] tags, Collection output) throws IOException { - if (!Build.IS_DEBUGGABLE) { + if (!Build.IS_ENG) { return; } @@ -438,7 +438,7 @@ public static void readEvents(int[] tags, Collection output) public static void readEventsOnWrapping(int[] tags, long timestamp, Collection output) throws IOException { - if (!Build.IS_DEBUGGABLE) { + if (!Build.IS_ENG) { return; } From abe6a8e9d24791de6f02e1a2d3ffbc51b438b35e Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Sun, 8 Sep 2024 19:42:16 +0800 Subject: [PATCH 20/76] NSSLC: Prevent possible memory leak Signed-off-by: Pranav Vashi Signed-off-by: HDzungx --- ...tificationStackScrollLayoutController.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index ff5ad1d32abe..072a3cab5c13 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -238,6 +238,7 @@ public void onViewDetachedFromWindow(View v) { mColorUpdateLogger.logTriggerEvent("NSSLC.onViewDetachedFromWindow()"); mConfigurationController.removeCallback(mConfigurationListener); mStatusBarStateController.removeCallback(mStateListener); + mTunerService.removeTunable(mTunable); } }; @@ -996,16 +997,7 @@ public void onEntryUpdated(NotificationEntry entry) { mVisibilityLocationProviderDelegator.setDelegate(this::isInVisibleLocation); mTunerService.addTunable( - (key, newValue) -> { - switch (key) { - case Settings.Secure.NOTIFICATION_HISTORY_ENABLED: - mHistoryEnabled = null; // invalidate - break; - case HIGH_PRIORITY: - mView.setHighPriorityBeforeSpeedBump("1".equals(newValue)); - break; - } - }, + mTunable, HIGH_PRIORITY, Settings.Secure.NOTIFICATION_HISTORY_ENABLED); @@ -1037,6 +1029,17 @@ public void onEntryUpdated(NotificationEntry entry) { mViewBinder.bindWhileAttached(mView, this); } + private TunerService.Tunable mTunable = (key, newValue) -> { + switch (key) { + case Settings.Secure.NOTIFICATION_HISTORY_ENABLED: + mHistoryEnabled = null; // Invalidate + break; + case HIGH_PRIORITY: + mView.setHighPriorityBeforeSpeedBump("1".equals(newValue)); + break; + } + }; + public void setApplyHunTranslation(boolean apply) { mView.setApplyHunTranslation(apply); } From 948b8c20ebc9cccb91b13d0d270ca605572fb126 Mon Sep 17 00:00:00 2001 From: Sourajit Karmakar Date: Tue, 28 Jan 2025 22:54:05 -0500 Subject: [PATCH 21/76] screenrecord: Set entire screenrecord as the default option I don't wanna record a single app and it's so annoying to open the dropdown menu Every. Single. Time. Change-Id: Idef4ec7a7ea76d3fb648dbc4089a9141439bfa2e Signed-off-by: HDzungx --- .../screenrecord/ScreenRecordPermissionDialogDelegate.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt index 8610ebf39010..3ae268f081da 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt @@ -24,6 +24,7 @@ import androidx.annotation.StyleRes import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger import com.android.systemui.mediaprojection.permission.BaseMediaProjectionPermissionContentManager import com.android.systemui.mediaprojection.permission.BaseMediaProjectionPermissionDialogDelegate +import com.android.systemui.mediaprojection.permission.ENTIRE_SCREEN import com.android.systemui.mediaprojection.permission.SINGLE_APP import com.android.systemui.mediaprojection.permission.ScreenShareMode import com.android.systemui.plugins.ActivityStarter @@ -84,7 +85,7 @@ class ScreenRecordPermissionDialogDelegate( onStartRecordingClicked, mediaProjectionMetricsLogger, systemUIDialogFactory, - defaultSelectedMode = SINGLE_APP, + defaultSelectedMode = ENTIRE_SCREEN, theme = SystemUIDialog.DEFAULT_THEME, context, displayManager, From c2a734501eb68c8d8c10595f614b1a344f7ff09d Mon Sep 17 00:00:00 2001 From: Ghosuto Date: Fri, 14 Nov 2025 11:45:20 +0000 Subject: [PATCH 22/76] SettingsLib: Improve expressive card text Change-Id: Ib449fe5f32945fb7749fc00865c4743fd4fe5a07 Signed-off-by: Ghosuto Signed-off-by: HDzungx --- .../settingslib_expressive_icon_back.xml | 4 ++-- .../res/values-v36/styles_expressive.xml | 4 +++- ...gslib_expressive_preference_text_frame.xml | 20 +++++++++++++++++-- .../SettingsTheme/res/values-night/colors.xml | 5 ++++- .../SettingsTheme/res/values/colors.xml | 5 ++++- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v36/settingslib_expressive_icon_back.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v36/settingslib_expressive_icon_back.xml index 9986a60250fe..1ef24ad12903 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v36/settingslib_expressive_icon_back.xml +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v36/settingslib_expressive_icon_back.xml @@ -22,7 +22,7 @@ + android:radius="14dp" /> @@ -44,4 +44,4 @@ android:pathData="M3.626,9L8.526,13.9C8.726,14.1 8.817,14.333 8.801,14.6C8.801,14.867 8.701,15.1 8.501,15.3C8.301,15.483 8.067,15.583 7.801,15.6C7.534,15.6 7.301,15.5 7.101,15.3L0.501,8.7C0.401,8.6 0.326,8.492 0.276,8.375C0.242,8.258 0.226,8.133 0.226,8C0.226,7.867 0.242,7.742 0.276,7.625C0.326,7.508 0.401,7.4 0.501,7.3L7.101,0.7C7.284,0.517 7.509,0.425 7.776,0.425C8.059,0.425 8.301,0.517 8.501,0.7C8.701,0.9 8.801,1.142 8.801,1.425C8.801,1.692 8.701,1.925 8.501,2.125L3.626,7H14.801C15.084,7 15.317,7.1 15.501,7.3C15.701,7.483 15.801,7.717 15.801,8C15.801,8.283 15.701,8.525 15.501,8.725C15.317,8.908 15.084,9 14.801,9H3.626Z"/> - \ No newline at end of file + diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles_expressive.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles_expressive.xml index 344b336dc675..7471a553931d 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles_expressive.xml +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles_expressive.xml @@ -38,10 +38,12 @@