Skip to content

Conversation

@dot-gov
Copy link

@dot-gov dot-gov commented Jul 31, 2025

On stock ROMs google TTS is a system app, which makes it's picked by default as a TTS engine if no engine is specified. This isn't the case on GrapheneOS, which causes TTS to not work in many apps until the user manually goes in settings to set it as the default TTS engine. This solution works for main and secondary users, but not for work/private profiles, because it's set separately per profile and there's no option to change the default TTS engine for profiles.

This PR fixes this issue by making GoogleTTS appear to be a system text to speech engine, so it gets used as the TTS engine by default, even if no text to speech engine is explicitly chosen. This replicates the default behavior on stock ROMs.

see also: GrapheneOS/os-issue-tracker#5808 (comment)

thestinger and others added 30 commits June 15, 2025 17:23
Apps sometimes misbehave when INTERNET permission is revoked and a job that they scheduled with
a connectivity constraint is executed.
Change-Id: I0b65cac3c3d2fc495b339c34add742bd698b107c
Requires the corresponding changes to system/core and system/sepolicy.
…SELECTED

Treat it same way other storage perms are treated for now.
This is a workaround for a bug that auto-dismisses crash dialog for native crash almost immediately
after it is shown.

Crash dialogs are shown only for foreground apps by default, there's no need to auto dismiss them.
Crash report dialog is not affected, it uses startActivityAsUser() already.
ANR stack traces file contains stack traces of all app's threads and of all threads of relevant or
possibly relevant system processes, such as system_server.
Access to these files is controlled by their SELinux policy. They are labeled as anr_data_file.

Enforcing additional read restrictions for ANR stack traces files through Unix permissions prevented
LogViewer app from accessing them, since it doesn't run as the highly privileged UID 1000
(android.uid.system) which owns these files.
Adds a "Show details" item to crash and ANR (app not responding) dialogs which opens the LogViewer
app.
…ystem_server side

Don't require reboot or settings re-set for always on and lockdown to
take effect on first vpn connection. The requirement for reboot, re-set
at settings has been caused by a permission not granted or declared by
VpnDialogs, which caused the unexpected behavior. Prevent this by
checking the permission of local process instead.
In the general case, ContentProvider authorities can't be renamed because they aren't required to be
based on the package name.

Chromium always forms ContentProvider authorities by prefixing them with its package name, and
relies on this invariant in code.

When its package is renamed by original-package handling code, statements like
String authority = context.getPackageName() + CONSTANT
become invalid.

Add a special-case for Vanadium to fix this.
This is needed for properly verifying updates of system packages.
versionCode of many system packages, including privileged ones, is set to the current SDK version
and is thus not incremented during non-major OS upgrades.
This allowed to downgrade them to the older version that had the same versionCode.
Change-Id: I5ccc4d61e52ac11ef33f44618d0e610089885b87

Squashed with:
Author: Daniel Micay <[email protected]>
Date:   Wed Mar 15 06:32:20 2023 -0400

    simplify removal of SUPL IMSI / phone number

    This is not required for SUPL to work and the comment about Google is
    unnecessary.
muhomorr and others added 28 commits July 3, 2025 12:35
getPackagesForOpsForDevice() returns a list with size that depends on the number of installed
packages across all users. Size of this list can be larger than the max Binder transaction size.
…istSlice

`getPackagesForOpsForDeviceInner` can return a null List and apparently ParceledListSlice doesn't
handle a null input argument well. Returning null for `getPackagesForOpsForDevice` seems fine,
because callers AppOpsService#getPackagesForOpsForDevice and `AppOppsManager#getPackagesForOps`
expect the return value to be nullable and already perform null checks on it.
Upstream refactor in commit 1f73b12
removed too much and as a result the legacy Keyguard slice code was
broken. This adds back the needed elements.
Upstream commit fae5190 adds
synchronisation to KeyguardSecurityViewFlipperController. This should
not be needed, so it was removed as part of 2FA. This commit adds a
failsafe in case we got it wrong.

Note that upstream's synchronisation is not sufficient to prevent race
conditions, so it is likely that they don't understand this code. They
ae likely experiencing issues due to not properly clearing async
inflation jobs in KSVFC#clearViews, and are incorrectly concluding that
these are caused by KSVFC#getSecurityView being called from multiple
threads.
Add missing @OverRide annotations, which don't change functionality but ensure that compilation
fails if base methods gets removed or renamed.
Fixes an issue where the End session button would show up on the owner profile but with no text
(just an empty colored shape).

Test: atest SystemUITests:KeyguardIndicationRotateTextViewControllerTest SystemUITests:KeyguardIndicationTest
(note that these tests seem to just mock the KeyguardIndicationRotateTextView, so the code doesn't
actually get called)
Test: atest SystemUITests:com.android.systemui.keyguard
…ch sensitivity. (GrapheneOS#2)"

This is handled by a synthetic resource overlay now.
MediaMetadata objects are transferred over Binder. Serialized heap bitmaps for media artwork are
sometimes larger than the max Binder transaction size.

This commit switches MediaMetadata to shared bitmaps in order to avoid Binder transaction failures.
Shared bitmaps are very small in serialized form.
…new ones"

This reverts commit eccb446. This seem to trigger race conditions
in GMS with the later FLAG_OVERRIDE broadcasts; overridden flag values were inconsistently set.
Async dexopt was added in Android 16. It has introduced a bug in handling of concurrent installs
of the same package. Such installs started to corrupt the internal PackageManager state of the
affected packages, which led to system_server crashes when attempting to uninstall them.

As a workaround, this commit makes the package installer reject install requests for packages that
are already being installed (package updates are considered to be installs too).

For more info, see GrapheneOS#230
Based on GrapheneOS#234
Pseudo-locales currently render the device unbootable.
Add missing handling for packages that are renamed by the original-package system.
Temporary until Dialer gets CallStyle set for calling notifications. If the Dialer has two or more
ungrouped notifications, autogrouping will occur. It just so happens that legacy voicemail
notification is also ungrouped.

Autogrouping call notifications will result in `Notification.FLAG_SILENT` being added to incoming
call notifications, and that will prevent the fullScreenIntent from showing.
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.