Skip to content

Disable unprivileged hardware keepalives - #1368

Open
bugsoverloaded wants to merge 941 commits into
crdroidandroid:17.0from
bugsoverloaded:17.0
Open

bugsoverloaded wants to merge 941 commits into
crdroidandroid:17.0from
bugsoverloaded:17.0

Conversation

@bugsoverloaded

Copy link
Copy Markdown

No description provided.

HELLBOY017 and others added 30 commits October 31, 2026 02:47
Previously the flashlight strength was only applied when toggling it from the QS tile,
now it works from other SystemUI components as well.

Signed-off-by: Abhay Singh Gill <abhaygill017@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Would be useful for adjusting flashlight strength when the tile is small/ icon only.

Signed-off-by: Abhay Singh Gill <abhaygill017@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
 Single tap - on/off
 Long tap - flashlight strength dialog

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Change-Id: I9227b6b5512d813eb7b2ceab5dee7e54e6b95f92
Signed-off-by: Ghosuto <clash.raja10@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Keep the discrete steps but hide the visual tick marks for a more
cleaner look.

Change-Id: I3585f62d0126afb00223104192a4cedfcdf13cbe
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Allow the dynamic bar flashlight slider to include 0 so users can turn the torch off
without dismissing the controls. While the torch is off from the slider, keep the torch
event visible at 0% so sliding upward can re-enable the light.

Dismiss and stop actions now clear the retained event and only toggle the torch when it
is actually on, so pressing stop at 0% does not turn it back on.

When re-enabling from 0%, only call setEnabled(true) for the remembered-level no-op case;
otherwise let setLevel() or setTemporaryLevel() turn the torch on at the requested strength
to avoid racing back to the default level.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Change-Id: Iaf3d512bfcb5f4a9010b0b65f49597aba2266b76
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Reverse-engineered from CP2A SystemUIGoogle

- Shows recognized song titles and artist names on lockscreen and AOD
- Tap Now Playing area to reveal album artwork & quick actions
- Adds an on-demand song recognition lockscreen shortcut

AI Tools used:
- Antigravity CLI (Gemini 3.7 Flash, High Effort)
- Claude (Sonnet 5, High Effort)

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
start() constructed a new AmbientIndicationService on every call and
checked mStarted on that fresh instance, which is never true for a
newly constructed object. The guard could not prevent a second
registration if start() ran more than once, since each call created
its own throwaway service and re-registered the broadcast receiver and
KeyguardUpdateMonitor callback.

Cache the service in a field and check for its presence before
constructing or registering anything, so a second start() call is a
no-op.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Chromium declares NativeOnlySandboxedProcessService* with
android:nativeService="true" and no Java class, for use under the native
app zygote prototype. With that prototype disabled, instantiating the
service throws ClassNotFoundException and the sandboxed renderer
crash-loops, hanging Chrome and WebView. Substitute the equivalent
SandboxedProcessService*, which the browser already handles as a
fallback, so the sandboxed process starts normally.

Signed-off-by: Quince <quinceroms@gmail.com>
Signed-off-by: HDzungx <hdzungx@gmail.com>
vold holds its global lock for the entire duration of a fixupAppDir
call, and its monitor() probe - the storage health check used by the
system_server watchdog - queues behind the same lock. A batch of app
updates fires one prepareAppDataAfterInstall() per app+user, each of
which restorecons the app's OBB dir; arriving concurrently, they keep
the vold lock busy long enough that the probe stalls past the 60s
watchdog limit and system_server is killed ("Blocked in monitor
com.android.server.StorageManagerService on monitor thread
(watchdog.monitor)").

Serialize the AppDataHelper-side fixups on a dedicated lock so the
probe only ever queues behind a single fixup instead of the whole
batch. Does not help a single pathological >60s fixup, which is out
of scope here.

Signed-off-by: Quince <quinceroms@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
With no gameprops JSON configured, loadConfig() returned without
setting mConfigLoaded, so getInstance() re-fetched the config over
Binder and logged a warning on every application process start - two
warnings and two binder RPCs per process, indefinitely.

An empty config is terminal for the process just like a successful
load (nothing ever re-triggers loadConfig()), so mark it loaded and
downgrade the message to debug.

Signed-off-by: Quince <quinceroms@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
DisplayManagerService is the only sender of this @hide action and it is
delivered to runtime receivers only. Leaving it unprotected lets any app
spoof display-state transitions to other apps' exported receivers and
trips BroadcastController's 'Sending non-protected broadcast' wtf
whenever an app registers an unprotected listener.

Signed-off-by: Quince <quinceroms@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Use the AtomicFile base path after finishWrite instead of the object
string when applying file permissions.

Change-Id: I54c68ff03124f841dd6224ce2bbb43d5a3f8a436
Signed-off-by: Quince <quinceroms@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Allows using the VPN's DNS instead of the set private DNS
Automatically restores the previous set mode

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
* Settings->System->Gestures->Prevent ringing

core: Remove `@SystemApi` annotation for VOLUME_HUSH_CYCLE.

  This addition should not be annotated with `@SystemApi` because it
  creates an addition that fails the API test in user builds

Signed-off-by: rituj <ritujbeniwal@gmail.com>
Co-authored-by: Evan Anderson <evananderson@aospa.co>
Change-Id: I334bd165e970665ac5300d387a0ea6745748d3ad
Signed-off-by: aswin7469 <aswinas@pixysos.com>
Can be useful in some cases.

Change-Id: I999337cc55e9675cedde35191a6438d90744e5aa
Signed-off-by: LibXZR <i@xzr.moe>

Adapt to Android 13
Signed-off-by: someone5678 <nemui3353@gmail.com>
Change-Id: Iac9f0958676c02c49252e5a0e1a88383a7294d00
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
…t call

and reset only in unregisterDefaultQRCodeScannerObserver
so it is in sync with isActivityCallable

Change-Id: If4fc2c541d0cee90b49b5769d34adc9d7bffbb02
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
If the cellular network is in service, and the data network name is not
available for some reason, rather than falling back to the default
network name of "No service", use the carrier name.

Issue: calyxos#2256
Change-Id: Ibf02f67b70cfc5d4804e9d6a3f53a9d112811d1d
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
When the user cycles fast between modes the last toast will show so late it'll be irrelevant

Change-Id: I0f8f442ea10d670663fdd298f2198f6e8baa7a36
Signed-off-by: Dmitrii <bankersenator@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Avoid it getting cut off at bottom on devices with low udfps, where
the bottom margin is lesser.

Change-Id: I2ce00abeba353fff4cb4aa8a58257ef54bf4cca9
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
onUserStopped() method name was misleading, it's called from onUserStopping(), while the user is
still running.

Initial research was done by maade93791 <70593890+maade69@users.noreply.github.com>

Co-authored-by: maade93791 <70593890+maade69@users.noreply.github.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
summary:(Animator$AnimatorCaller$$ExternalSyntheticLambda1.call)java.lang.NullPointerException--Attempt to invoke interface method 'void android.animation.Animator$AnimatorListener.onAnimationEnd(android.animation.Animator, boolean)' on a null object reference

det:versionName:20240724.0, versionCode:202407240
java.lang.NullPointerException: Attempt to invoke interface method 'void android.animation.Animator$AnimatorListener.onAnimationEnd(android.animation.Animator, boolean)' on a null object reference
at android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda1.call(D8$$SyntheticClass:0)
at android.animation.Animator.callOnList(Animator.java:666)
at android.animation.Animator.notifyListeners(Animator.java:609)
at android.animation.Animator.notifyEndListeners(Animator.java:634)
at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1306)
at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1566)
at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:344)
at android.animation.AnimationHandler.-$$Nest$mdoAnimationFrame(Unknown Source:0)
at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:87)
at android.view.Choreographer$CallbackRecord.ru

Test:UAT

Change-Id: I135eac97787a6d3b820a2336908bf1412d2ed218
Signed-off-by: xiangshuangxi <xiangshuangxi@xiaomi.com>
* Space is too small. It often overlaps with face unlock image.
* Tweak space above clock and above notifications.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
… main thread time

During the notification bar case fluency test in the system core UI scene, the SystemUIUi main thread experienced severe frame drops due to frequent execution of the following DateTimeView logic while updating the status bar time once a minute:
android.view.ViewRootImpl$ViewRootHandler: android.widget.DateTimeView$ReceiverInfo$$ExternalSyntheticLambda0

Signed-off-by:
Shuangxi Xiang <xiangshuangxi@xiaomi.corp-partner.google.com>

Change-Id: I888218897555d596b46b78f23a63d1df1750b3ca
sidharthify and others added 27 commits October 31, 2026 02:47
…ed font

Font overlays only override config_headlineFontFamily and
config_bodyFontFamily (and their Medium variants). Since Android 16
QPR1, most system text is styled with the Material 3 Expressive
variable-* families instead: SettingsLib expressive text (Settings
titles, for example), notifications and SettingsLib Spa all name them
directly. So a font picked in ThemePicker only showed up on text that
still goes through the config strings, like the launcher and preference
summaries, and with the default font that text didn't match the rest
of the system either.

Point the variable-* families of system apps at the selected font:
display, headline and title at the headline family, body and label at
the body family, keeping the weight each variable family defines.
ActivityThread passes the families from the app's resources, where the
font overlay applies, at bind time and after every application info
change. Third-party apps keep the variable-* families as defined.

Signed-off-by: sidharthify <wednisegit@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
FontController already passes variable-* families through untouched
when Google Sans Flex is the active font, so optical sizing and ROND
axis values from fonts_customization.xml are preserved. The variable
family remap in Typeface.getSystemDefaultTypeface() sits behind that
pass-through, so system apps would still have variable-* replaced by
the config headline/body family at the variable family's weight,
undoing what the pass-through preserves.

Skip the remap in ActivityThread.updateVariableFontFamilies() when the
body family is the default font, using a new
FontController.isDefaultFont() helper. FontController's own
pass-through check now uses the same helper, so the default font is
detected in one place.

handleApplicationInfoChanged() passed getApplication() straight into
updateVariableFontFamilies(), which dereferences the context. An app
info change delivered before the application is created would hit a
null there. Only update the families once the application exists.

Bug: System apps on the default font had variable-* remapped to the
config families, dropping optical sizing and ROND axis values.
Bug: handleApplicationInfoChanged() could throw a NullPointerException
if it ran before the application was created.
Test: Default font: Settings titles, notification text and SystemUI
keep the Google Sans Flex variable styling.
Test: Pick a custom font in ThemePicker: variable-* text in Settings,
SystemUI and notifications follows the selected font.

Assisted-by: Claude/sonnet-5
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Typeface.changeFont() replaces Typeface.DEFAULT with the typeface of
the selected font. FontController still treats a lookup that returns
Typeface.DEFAULT as a missing family, so resolveDefaultTypeface() and
resolveNamedVariant() now throw away the selected font itself. The
base typeface then falls back to google-sans-flex, and variable-*
families at weight 400 and below, such as variable-body-medium, are
built from it instead of the selected font.

Add Typeface.getSystemTypeface(), which returns null for an unknown
family instead of Typeface.DEFAULT, and use it in both lookups.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
The font updater treated a shipping API below Android 11 as missing fs-verity, which blocked custom fonts on kernels that actually support it.

Signed-off-by: NurKeinNeid <nurkeinneid@derpfest.org>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
handleApplicationInfoChanged() read getApplication() twice to compare
the app's ResourcesImpl before and after applying the pending app info
updates, and only checked it for null before updating the variable font
families. A null application would have thrown at the first of those
reads, so the later check could never be reached. Read the application
once, treat a null application as having no ResourcesImpl, and skip the
asset change logging when either ResourcesImpl is missing. The pending
app info updates are still applied in that case.

TextView.onConfigurationChanged() passed mFontFamily straight into
Typeface.getOverrideTypeface() whenever the system font name changed.
mFontFamily is null for views without a fontFamily attribute, which
resolves to Typeface.DEFAULT, so setTypeface() replaced any typeface
those views had set in code. Only reapply the override when mFontFamily
is set; mLastResolvedSystemFont is still updated.

Assisted-by: Claude/sonnet-5
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Apps like Play Store ship their own Google Sans in res/font or fetch it
from the GMS font provider. These paths all end in
Typeface.CustomFallbackBuilder.build() and never reach the name-based
override, so the provider fetch replaced the selected font a second or
two after launch.

* Redirect bundled/downloaded UI fonts to selected fonts.
* Publish "user-custom-font" marker family when using custom fonts.
* Drop SYS_OVERRIDE_FONTS and SYS_OVERRIDE_APPS.
* Re-apply the font on ApplicationInfo changes and add null guard.
* Account for the custom font in the prioritized fallback family cap.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
* StatusBarHeaderMachine: run provider work on a background thread,
  re-register settings observer on reattach (was lost after detach),
  scope update broadcast to SystemUI (not exported), reload on user switch
* DaylightHeaderProvider: fix infinite parser loop on random packs with
  day/hour entries, reset header index on pack load (OOB on smaller pack),
  sort hour headers before matching, tolerate malformed attributes
* StaticHeaderProvider: cache drawable to avoid reloading and self
  crossfade on every screen-on, release it when disabled
* FileHeaderProvider: downsample to display size instead of decoding
  full-res images, copy atomically, track source URI so a URI written
  before provider switch isn't missed, store per user
* NotificationPanelViewController: apply shadow changes immediately,
  release header drawable and stop animation on disable

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
createScaledAshmemBitmap draws the source bitmap onto a software,
ashmem-backed Canvas. A Config.HARDWARE source cannot be drawn on a
software canvas, so MediaMetadata.Builder.build() throws
IllegalArgumentException "Software rendering doesn't support hardware
bitmaps" whenever an app hands MediaSession an oversized hardware
album-art bitmap, crashing the app on every track selection.

The general createBitmap(src, x, y, w, h, m, filter) path already
guards this by copying a hardware source to a software config before
drawing, then restoring the hardware config on the result. The ashmem
fast-path added with the scale_bitmap_directly_to_ashmem flag omitted
the same guard. Mirror it: copy a HARDWARE source with
nativeCopyPreserveInternalConfig before scaling. The result stays an
immutable ashmem bitmap ready for parceling, and the non-hardware path
is unchanged.

Fixes: crdroidandroid/issue_tracker#1205
Change-Id: I98427ec99de2317c24bf511c3d1a9ebd44316c34
Signed-off-by: Quince <quinceroms@gmail.com>
Signed-off-by: HDzungx <hdzungx@gmail.com>
Signed-off-by: Jis G Jacob <studiokeys@blissroms.org>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Compute the shade panel and notification scrim colors in HCT space,
using the wallpaper's neutral or accent hue. The selected style
applies to both the blur and no-blur paths.

* Add a shade_color_style setting: 0 = AOSP (default),
  1 = Glass, 2 = Tinted.
* Glass: a near-neutral, low-alpha panel, so the blurred
  wallpaper carries the color.
* Tinted: an accent-colored panel that looks the same with
  or without blur.
* Raise panel alpha when needed to keep text contrast at
  4.5:1 or above over bright or dark wallpapers.
* Keep notification cards a fixed tone step from the panel,
  so the two layers stay distinct without blur.
* Add glassEdge(), a 1dp edge highlight color for panel and
  tile backgrounds.
* AOSP fallback: use Material surface containers instead of
  fixed fallback colors, so it follows the system contrast
  setting.
* Bouncer: use the shade panel color with and without blur.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
* Harden keybox validation, parsing, and refresh handling.
* Improve certificate generation and legacy Keymaster compatibility.
* Fix Keystore certificate consistency and import handling.
* Prevent redundant certificate signing and improve error recovery.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
The leaf-hack path rebuilt RootOfTrust from AttestationUtils fallbacks
(prop -> keybox-derived -> random) instead of the boot key/hash the TEE
actually measured and placed in the original leaf. On a device with
working verified boot these are authoritative and self-consistent with
ro.boot.vbmeta.public_key_digest; substituting our own values is both
less correct and a fingerprint.

Lift verifiedBootKey (index 0) and verifiedBootHash (index 3) from the
original leaf's RootOfTrust via a new rootOfTrustOctet() helper, falling
back to AttestationUtils only when the original carries no usable value
(older 3-element Keymaster RoT). Software-only generation is unaffected.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
…tion fails

generateKeyPair() chose GENERATE vs HACK up front from a cached global
isTeeBroken() flag. On a HACK key, if the hardware generateKey() threw or
returned a null-certificate entry (transient RKP exhaustion, provisioning
hiccup), the whole request failed with a ProviderException and the key was
deleted -- a hard attestation failure where recovery was possible.

Keep isTeeBroken() as the fast-path hint but let the actual hardware
result decide: on a needHack key with no usable attested cert, drop the
stub entry and build a software keybox-signed key instead. Extract the
software path into buildSoftwareAttestedKey(). StrongBox requests
(needHack always false) keep their exact prior behavior.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
* getActualUriFromSettingsUri()/getCacheUriFromSettingsUri() ignored
  DEFAULT_RINGTONE2_URI and resolved it via the phone-account path,
  which ends up on Settings.System.RINGTONE (and RINGTONE_CACHE).
  MediaPlayer uses these for every settings:// ringtone uri, so any
  playback of DEFAULT_RINGTONE2_URI played the SIM1 ringtone.
* getRingtoneUriForPhoneAccountHandle() fell back to RINGTONE for every
  account; fall back to the ringtone of the account's SIM slot instead.
* openDefaultRingtoneUri() picked the slot from the default voice SIM
  instead of the uri being opened.
* ensureDefaultRingtones(): set RINGTONE explicitly for slot 0, track
  RINGTONE2 with its own "ringtone2_set" flag so it is initialized once
  and a user picked "None" is not overwritten; stop re-writing
  notification/alarm defaults while RINGTONE2 is empty.
* SettingsHelper: restore RINGTONE/RINGTONE2 into their own slot.
* SettingsProvider: ringtone2_cache_* must map to RINGTONE2.

Fixes: crdroidandroid/issue_tracker#1204
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
The expanded keyguard media panel filled its container and gave the
album art a weighted slot it was forced to fill. The panel ran under
the status bar, and the width-bound square art left a large gap above
and below it.

Clean up formatting while at it.

Fixes: crdroidandroid/issue_tracker#1195
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
* Stop adding fontWeightAdjustment in the named-family
  override, since TextView and Compose already apply it.
* Harden static default retarget.
* Remove redundant null checks.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
SystemUI used to restart itself from its main thread. After an overlay
change such as a font switch, that thread is usually busy re-inflating
views for the change, so the kill waited behind work that was about to
be thrown away.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Title, text, subText and shortCriticalText extras are CharSequences and
are often posted as SpannableString. Bundle.getString() fails the cast,
logs a ClassCastException warning and returns null. As a result, styled
titles, caller names and timer/alarm labels were lost in the island.

Add a Bundle.getText() helper backed by getCharSequence() and use it
for all notification text extras.

Log:

    10-29 21:53:52.356 W/Bundle  (8508): Key android.title expected String but value was a android.text.SpannableString.  The default value <null> was returned.
    10-29 21:53:52.356 W/Bundle  (8508): Attempt to cast generated internal exception:
    10-29 21:53:52.356 W/Bundle  (8508): java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String
    10-29 21:53:52.356 W/Bundle  (8508): 	at android.os.BaseBundle.getString(BaseBundle.java:1463)
    10-29 21:53:52.356 W/Bundle  (8508): 	at com.android.systemui.axdynamicbar.data.source.NotificationIslandManager$scrimListener$1.onNotificationPosted(go/retraceme e32f49c0ed1c88711eb1b8cb07e963b7a8e801b42ca9da59874fd38e06ffb9bc:2336)
    10-29 21:53:52.356 W/Bundle  (8508): 	at com.android.systemui.util.ScrimUtils$$ExternalSyntheticLambda7.invoke(go/retraceme e32f49c0ed1c88711eb1b8cb07e963b7a8e801b42ca9da59874fd38e06ffb9bc:29)
    10-29 21:53:52.356 W/Bundle  (8508): 	at com.android.systemui.util.WeakListenerManager$notify$1.run(go/retraceme e32f49c0ed1c88711eb1b8cb07e963b7a8e801b42ca9da59874fd38e06ffb9bc:77)
    10-29 21:53:52.356 W/Bundle  (8508): 	at android.os.Handler.handleCallback(Handler.java:1095)
    10-29 21:53:52.356 W/Bundle  (8508): 	at android.os.Handler.dispatchMessageImpl(Handler.java:135)
    10-29 21:53:52.356 W/Bundle  (8508): 	at android.os.Handler.dispatchMessage(Handler.java:125)
    10-29 21:53:52.356 W/Bundle  (8508): 	at android.os.Looper.loopOnce(Looper.java:296)
    10-29 21:53:52.356 W/Bundle  (8508): 	at android.os.Looper.loop(Looper.java:397)
    10-29 21:53:52.356 W/Bundle  (8508): 	at android.app.ActivityThread.main(ActivityThread.java:9623)
    10-29 21:53:52.356 W/Bundle  (8508): 	at java.lang.reflect.Method.invoke(Native Method)
    10-29 21:53:52.356 W/Bundle  (8508): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
    10-29 21:53:52.356 W/Bundle  (8508): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:939)

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Some vendor composers crash on a frame that holds only the
DISPLAY_DECORATION mask layer. A SystemUI restart produces one: the
keyguard fallback hides all app windows, and ScreenDecorHwcOverlay is
the first window the new SystemUI draws. The composer aborts,
SurfaceFlinger dies with it, and the device soft-reboots.

The bug is inside the closed vendor library like libsdmextension.so,
so it can’t be fixed directly.

Add config_disableHwcScreenDecoration (default false). When a device
overlay sets it to true, ScreenDecorations treats the display as having
no HWC decoration support and draws rounded corners and cutout
protection in software.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
…d screen

* Happens when card is expanded since media notif has separate view id here.

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
* Compute SHA-256 digest from Keystore supplementary module data
* Include tag 724 in software-enforced attestation
* Preserve existing module hashes and legacy compatibility
* Fixes following warning in detector app:
  "Module hash: MODULE_HASH omitted from attestation. getSupplementaryAttestationInfo(MODULE_HASH) returned 1292 DER bytes. kind=MISSING_ATTESTATION_MODULE_HASH expected=842d96362a913db2"

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
@neobuddy89
neobuddy89 force-pushed the 17.0 branch 3 times, most recently from 9857970 to 7a924ff Compare November 6, 2026 15:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.