Loading core/java/android/content/AttributionSource.java +17 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.Parcelable; import android.os.Process; import android.permission.PermissionManager; import android.util.ArraySet; import android.util.Log; import com.android.internal.annotations.Immutable; Loading Loading @@ -86,6 +87,8 @@ import java.util.Set; */ @Immutable public final class AttributionSource implements Parcelable { private static final String TAG = "AttributionSource"; private static final String DESCRIPTOR = "android.content.AttributionSource"; private static final Binder sDefaultToken = new Binder(DESCRIPTOR); Loading Loading @@ -153,10 +156,21 @@ public final class AttributionSource implements Parcelable { AttributionSource(@NonNull Parcel in) { this(AttributionSourceState.CREATOR.createFromParcel(in)); if (!Binder.isHandlingTransaction()) { Log.e(TAG, "Unable to verify calling UID #" + mAttributionSourceState.uid + " PID #" + mAttributionSourceState.pid + " when not handling Binder transaction; " + "clearing."); mAttributionSourceState.pid = -1; mAttributionSourceState.uid = -1; mAttributionSourceState.packageName = null; mAttributionSourceState.attributionTag = null; mAttributionSourceState.next = null; } else { // Since we just unpacked this object as part of it transiting a Binder // call, this is the perfect time to enforce that its UID and PID can be trusted enforceCallingUidAndPid(); } } /** @hide */ public AttributionSource(@NonNull AttributionSourceState attributionSourceState) { Loading core/java/android/os/ZygoteProcess.java +10 −0 Original line number Diff line number Diff line Loading @@ -431,6 +431,8 @@ public class ZygoteProcess { throw new ZygoteStartFailedEx("Embedded newlines not allowed"); } else if (arg.indexOf('\r') >= 0) { throw new ZygoteStartFailedEx("Embedded carriage returns not allowed"); } else if (arg.indexOf('\u0000') >= 0) { throw new ZygoteStartFailedEx("Embedded nulls not allowed"); } } Loading Loading @@ -972,6 +974,14 @@ public class ZygoteProcess { return true; } for (/* NonNull */ String s : mApiDenylistExemptions) { // indexOf() is intrinsified and faster than contains(). if (s.indexOf('\n') >= 0 || s.indexOf('\r') >= 0 || s.indexOf('\u0000') >= 0) { Slog.e(LOG_TAG, "Failed to set API denylist exemptions: Bad character"); mApiDenylistExemptions = Collections.emptyList(); return false; } } try { state.mZygoteOutputWriter.write(Integer.toString(mApiDenylistExemptions.size() + 1)); state.mZygoteOutputWriter.newLine(); Loading packages/SystemUI/src/com/android/systemui/media/KeyguardMediaController.kt +2 −5 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import androidx.annotation.VisibleForTesting import com.android.systemui.dagger.SysUISingleton import com.android.systemui.media.dagger.MediaModule.KEYGUARD import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaHeaderView Loading @@ -43,7 +42,6 @@ class KeyguardMediaController @Inject constructor( @param:Named(KEYGUARD) private val mediaHost: MediaHost, private val bypassController: KeyguardBypassController, private val statusBarStateController: SysuiStatusBarStateController, private val notifLockscreenUserManager: NotificationLockscreenUserManager, private val context: Context, configurationController: ConfigurationController ) { Loading Loading @@ -164,8 +162,7 @@ class KeyguardMediaController @Inject constructor( // mediaHost.visible required for proper animations handling visible = mediaHost.visible && !bypassController.bypassEnabled && keyguardOrUserSwitcher && notifLockscreenUserManager.shouldShowLockscreenNotifications() keyguardOrUserSwitcher if (visible) { showMediaPlayer() } else { Loading packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +1 −0 Original line number Diff line number Diff line Loading @@ -169,6 +169,7 @@ class MediaCarouselController @Inject constructor( * It will be called when the container is out of view. */ lateinit var updateUserVisibility: () -> Unit lateinit var updateHostVisibility: () -> Unit init { dumpManager.registerDumpable(TAG, this) Loading packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +13 −0 Original line number Diff line number Diff line Loading @@ -414,6 +414,7 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.logSmartspaceImpression(qsExpanded) } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.updateHostVisibility() } override fun onDozeAmountChanged(linear: Float, eased: Float) { Loading Loading @@ -467,6 +468,11 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.updateUserVisibility = { mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } mediaCarouselController.updateHostVisibility = { mediaHosts.forEach { it?.updateViewVisibility() } } } private fun updateConfiguration() { Loading Loading @@ -512,6 +518,13 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.closeGuts() } /** Return true if the carousel should be hidden because lockscreen is currently visible */ fun isLockedAndHidden(): Boolean { return !notifLockscreenUserManager.shouldShowLockscreenNotifications() && (statusbarState == StatusBarState.SHADE_LOCKED || statusbarState == StatusBarState.KEYGUARD) } private fun createUniqueObjectHost(): UniqueObjectHostView { val viewHost = UniqueObjectHostView(context) viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { Loading Loading
core/java/android/content/AttributionSource.java +17 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.Parcelable; import android.os.Process; import android.permission.PermissionManager; import android.util.ArraySet; import android.util.Log; import com.android.internal.annotations.Immutable; Loading Loading @@ -86,6 +87,8 @@ import java.util.Set; */ @Immutable public final class AttributionSource implements Parcelable { private static final String TAG = "AttributionSource"; private static final String DESCRIPTOR = "android.content.AttributionSource"; private static final Binder sDefaultToken = new Binder(DESCRIPTOR); Loading Loading @@ -153,10 +156,21 @@ public final class AttributionSource implements Parcelable { AttributionSource(@NonNull Parcel in) { this(AttributionSourceState.CREATOR.createFromParcel(in)); if (!Binder.isHandlingTransaction()) { Log.e(TAG, "Unable to verify calling UID #" + mAttributionSourceState.uid + " PID #" + mAttributionSourceState.pid + " when not handling Binder transaction; " + "clearing."); mAttributionSourceState.pid = -1; mAttributionSourceState.uid = -1; mAttributionSourceState.packageName = null; mAttributionSourceState.attributionTag = null; mAttributionSourceState.next = null; } else { // Since we just unpacked this object as part of it transiting a Binder // call, this is the perfect time to enforce that its UID and PID can be trusted enforceCallingUidAndPid(); } } /** @hide */ public AttributionSource(@NonNull AttributionSourceState attributionSourceState) { Loading
core/java/android/os/ZygoteProcess.java +10 −0 Original line number Diff line number Diff line Loading @@ -431,6 +431,8 @@ public class ZygoteProcess { throw new ZygoteStartFailedEx("Embedded newlines not allowed"); } else if (arg.indexOf('\r') >= 0) { throw new ZygoteStartFailedEx("Embedded carriage returns not allowed"); } else if (arg.indexOf('\u0000') >= 0) { throw new ZygoteStartFailedEx("Embedded nulls not allowed"); } } Loading Loading @@ -972,6 +974,14 @@ public class ZygoteProcess { return true; } for (/* NonNull */ String s : mApiDenylistExemptions) { // indexOf() is intrinsified and faster than contains(). if (s.indexOf('\n') >= 0 || s.indexOf('\r') >= 0 || s.indexOf('\u0000') >= 0) { Slog.e(LOG_TAG, "Failed to set API denylist exemptions: Bad character"); mApiDenylistExemptions = Collections.emptyList(); return false; } } try { state.mZygoteOutputWriter.write(Integer.toString(mApiDenylistExemptions.size() + 1)); state.mZygoteOutputWriter.newLine(); Loading
packages/SystemUI/src/com/android/systemui/media/KeyguardMediaController.kt +2 −5 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import androidx.annotation.VisibleForTesting import com.android.systemui.dagger.SysUISingleton import com.android.systemui.media.dagger.MediaModule.KEYGUARD import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.stack.MediaHeaderView Loading @@ -43,7 +42,6 @@ class KeyguardMediaController @Inject constructor( @param:Named(KEYGUARD) private val mediaHost: MediaHost, private val bypassController: KeyguardBypassController, private val statusBarStateController: SysuiStatusBarStateController, private val notifLockscreenUserManager: NotificationLockscreenUserManager, private val context: Context, configurationController: ConfigurationController ) { Loading Loading @@ -164,8 +162,7 @@ class KeyguardMediaController @Inject constructor( // mediaHost.visible required for proper animations handling visible = mediaHost.visible && !bypassController.bypassEnabled && keyguardOrUserSwitcher && notifLockscreenUserManager.shouldShowLockscreenNotifications() keyguardOrUserSwitcher if (visible) { showMediaPlayer() } else { Loading
packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt +1 −0 Original line number Diff line number Diff line Loading @@ -169,6 +169,7 @@ class MediaCarouselController @Inject constructor( * It will be called when the container is out of view. */ lateinit var updateUserVisibility: () -> Unit lateinit var updateHostVisibility: () -> Unit init { dumpManager.registerDumpable(TAG, this) Loading
packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt +13 −0 Original line number Diff line number Diff line Loading @@ -414,6 +414,7 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.logSmartspaceImpression(qsExpanded) } mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() mediaCarouselController.updateHostVisibility() } override fun onDozeAmountChanged(linear: Float, eased: Float) { Loading Loading @@ -467,6 +468,11 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.updateUserVisibility = { mediaCarouselController.mediaCarouselScrollHandler.visibleToUser = isVisibleToUser() } mediaCarouselController.updateHostVisibility = { mediaHosts.forEach { it?.updateViewVisibility() } } } private fun updateConfiguration() { Loading Loading @@ -512,6 +518,13 @@ class MediaHierarchyManager @Inject constructor( mediaCarouselController.closeGuts() } /** Return true if the carousel should be hidden because lockscreen is currently visible */ fun isLockedAndHidden(): Boolean { return !notifLockscreenUserManager.shouldShowLockscreenNotifications() && (statusbarState == StatusBarState.SHADE_LOCKED || statusbarState == StatusBarState.KEYGUARD) } private fun createUniqueObjectHost(): UniqueObjectHostView { val viewHost = UniqueObjectHostView(context) viewHost.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { Loading