Loading core/java/android/app/AppOpInfo.java +1 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ class AppOpInfo { /** * This specifies whether each option is only allowed to be read * by apps with manage appops permission. * by apps with privileged appops permission. */ public final boolean restrictRead; Loading core/java/android/app/AppOpsManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -3268,7 +3268,7 @@ public class AppOpsManager { } /** * Retrieve whether the op can be read by apps with manage appops permission. * Retrieve whether the op can be read by apps with privileged appops permission. * @hide */ public static boolean opRestrictsRead(int op) { Loading core/java/com/android/internal/widget/MessagingLinearLayout.java +2 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,8 @@ public class MessagingLinearLayout extends ViewGroup { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); lp.hide = true; // Child always needs to be measured to calculate hide property correctly in onMeasure. child.requestLayout(); if (child instanceof MessagingChild) { MessagingChild messagingChild = (MessagingChild) child; // Whenever we encounter the message first, it's always first in the layout Loading core/tests/coretests/src/android/util/BinaryXmlTest.java +50 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ import static android.util.XmlTest.doVerifyRead; import static android.util.XmlTest.doVerifyWrite; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; import static org.xmlpull.v1.XmlPullParser.START_TAG; import android.os.PersistableBundle; Loading @@ -41,12 +43,15 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; @RunWith(AndroidJUnit4.class) public class BinaryXmlTest { private static final int MAX_UNSIGNED_SHORT = 65_535; /** * Verify that we can write and read large numbers of interned * {@link String} values. Loading Loading @@ -170,4 +175,49 @@ public class BinaryXmlTest { } } } @Test public void testAttributeBytes_BinaryDataOverflow() throws Exception { final TypedXmlSerializer out = Xml.newBinarySerializer(); final ByteArrayOutputStream os = new ByteArrayOutputStream(); out.setOutput(os, StandardCharsets.UTF_8.name()); final byte[] testBytes = new byte[MAX_UNSIGNED_SHORT + 1]; assertThrows(IOException.class, () -> out.attributeBytesHex(/* namespace */ null, /* name */ "attributeBytesHex", testBytes)); assertThrows(IOException.class, () -> out.attributeBytesBase64(/* namespace */ null, /* name */ "attributeBytesBase64", testBytes)); } @Test public void testAttributeBytesHex_MaximumBinaryData() throws Exception { final TypedXmlSerializer out = Xml.newBinarySerializer(); final ByteArrayOutputStream os = new ByteArrayOutputStream(); out.setOutput(os, StandardCharsets.UTF_8.name()); final byte[] testBytes = new byte[MAX_UNSIGNED_SHORT]; try { out.attributeBytesHex(/* namespace */ null, /* name */ "attributeBytesHex", testBytes); } catch (Exception e) { fail("testAttributeBytesHex fails with exception: " + e.toString()); } } @Test public void testAttributeBytesBase64_MaximumBinaryData() throws Exception { final TypedXmlSerializer out = Xml.newBinarySerializer(); final ByteArrayOutputStream os = new ByteArrayOutputStream(); out.setOutput(os, StandardCharsets.UTF_8.name()); final byte[] testBytes = new byte[MAX_UNSIGNED_SHORT]; try { out.attributeBytesBase64(/* namespace */ null, /* name */ "attributeBytesBase64", testBytes); } catch (Exception e) { fail("testAttributeBytesBase64 fails with exception: " + e.toString()); } } } packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt +12 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.systemui.common.shared.model.Icon import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.globalactions.GlobalActionsDialogLite import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.dagger.QSFlagsModule.PM_LITE_ENABLED import com.android.systemui.qs.footer.data.model.UserSwitcherStatusModel Loading Loading @@ -109,6 +110,7 @@ class FooterActionsViewModel( private val falsingManager: FalsingManager, private val footerActionsInteractor: FooterActionsInteractor, private val globalActionsDialogLiteProvider: Provider<GlobalActionsDialogLite>, private val activityStarter: ActivityStarter, @Named(PM_LITE_ENABLED) private val showPowerButton: Boolean, ) { /** Create a [FooterActionsViewModel] bound to the lifecycle of [lifecycleOwner]. */ Loading @@ -134,6 +136,7 @@ class FooterActionsViewModel( footerActionsInteractor, falsingManager, globalActionsDialogLite, activityStarter, showPowerButton, ) } Loading @@ -145,6 +148,7 @@ fun FooterActionsViewModel( footerActionsInteractor: FooterActionsInteractor, falsingManager: FalsingManager, globalActionsDialogLite: GlobalActionsDialogLite, activityStarter: ActivityStarter, showPowerButton: Boolean, ): FooterActionsViewModel { suspend fun observeDeviceMonitoringDialogRequests(quickSettingsContext: Context) { Loading @@ -169,7 +173,14 @@ fun FooterActionsViewModel( return } activityStarter.dismissKeyguardThenExecute( { footerActionsInteractor.showForegroundServicesDialog(expandable) false /* if the dismiss should be deferred */ }, null /* cancelAction */, true /* afterKeyguardGone */ ) } fun onUserSwitcherClicked(expandable: Expandable) { Loading Loading
core/java/android/app/AppOpInfo.java +1 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ class AppOpInfo { /** * This specifies whether each option is only allowed to be read * by apps with manage appops permission. * by apps with privileged appops permission. */ public final boolean restrictRead; Loading
core/java/android/app/AppOpsManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -3268,7 +3268,7 @@ public class AppOpsManager { } /** * Retrieve whether the op can be read by apps with manage appops permission. * Retrieve whether the op can be read by apps with privileged appops permission. * @hide */ public static boolean opRestrictsRead(int op) { Loading
core/java/com/android/internal/widget/MessagingLinearLayout.java +2 −0 Original line number Diff line number Diff line Loading @@ -92,6 +92,8 @@ public class MessagingLinearLayout extends ViewGroup { final View child = getChildAt(i); final LayoutParams lp = (LayoutParams) child.getLayoutParams(); lp.hide = true; // Child always needs to be measured to calculate hide property correctly in onMeasure. child.requestLayout(); if (child instanceof MessagingChild) { MessagingChild messagingChild = (MessagingChild) child; // Whenever we encounter the message first, it's always first in the layout Loading
core/tests/coretests/src/android/util/BinaryXmlTest.java +50 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ import static android.util.XmlTest.doVerifyRead; import static android.util.XmlTest.doVerifyWrite; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; import static org.xmlpull.v1.XmlPullParser.START_TAG; import android.os.PersistableBundle; Loading @@ -41,12 +43,15 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; @RunWith(AndroidJUnit4.class) public class BinaryXmlTest { private static final int MAX_UNSIGNED_SHORT = 65_535; /** * Verify that we can write and read large numbers of interned * {@link String} values. Loading Loading @@ -170,4 +175,49 @@ public class BinaryXmlTest { } } } @Test public void testAttributeBytes_BinaryDataOverflow() throws Exception { final TypedXmlSerializer out = Xml.newBinarySerializer(); final ByteArrayOutputStream os = new ByteArrayOutputStream(); out.setOutput(os, StandardCharsets.UTF_8.name()); final byte[] testBytes = new byte[MAX_UNSIGNED_SHORT + 1]; assertThrows(IOException.class, () -> out.attributeBytesHex(/* namespace */ null, /* name */ "attributeBytesHex", testBytes)); assertThrows(IOException.class, () -> out.attributeBytesBase64(/* namespace */ null, /* name */ "attributeBytesBase64", testBytes)); } @Test public void testAttributeBytesHex_MaximumBinaryData() throws Exception { final TypedXmlSerializer out = Xml.newBinarySerializer(); final ByteArrayOutputStream os = new ByteArrayOutputStream(); out.setOutput(os, StandardCharsets.UTF_8.name()); final byte[] testBytes = new byte[MAX_UNSIGNED_SHORT]; try { out.attributeBytesHex(/* namespace */ null, /* name */ "attributeBytesHex", testBytes); } catch (Exception e) { fail("testAttributeBytesHex fails with exception: " + e.toString()); } } @Test public void testAttributeBytesBase64_MaximumBinaryData() throws Exception { final TypedXmlSerializer out = Xml.newBinarySerializer(); final ByteArrayOutputStream os = new ByteArrayOutputStream(); out.setOutput(os, StandardCharsets.UTF_8.name()); final byte[] testBytes = new byte[MAX_UNSIGNED_SHORT]; try { out.attributeBytesBase64(/* namespace */ null, /* name */ "attributeBytesBase64", testBytes); } catch (Exception e) { fail("testAttributeBytesBase64 fails with exception: " + e.toString()); } } }
packages/SystemUI/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModel.kt +12 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.systemui.common.shared.model.Icon import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.globalactions.GlobalActionsDialogLite import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.dagger.QSFlagsModule.PM_LITE_ENABLED import com.android.systemui.qs.footer.data.model.UserSwitcherStatusModel Loading Loading @@ -109,6 +110,7 @@ class FooterActionsViewModel( private val falsingManager: FalsingManager, private val footerActionsInteractor: FooterActionsInteractor, private val globalActionsDialogLiteProvider: Provider<GlobalActionsDialogLite>, private val activityStarter: ActivityStarter, @Named(PM_LITE_ENABLED) private val showPowerButton: Boolean, ) { /** Create a [FooterActionsViewModel] bound to the lifecycle of [lifecycleOwner]. */ Loading @@ -134,6 +136,7 @@ class FooterActionsViewModel( footerActionsInteractor, falsingManager, globalActionsDialogLite, activityStarter, showPowerButton, ) } Loading @@ -145,6 +148,7 @@ fun FooterActionsViewModel( footerActionsInteractor: FooterActionsInteractor, falsingManager: FalsingManager, globalActionsDialogLite: GlobalActionsDialogLite, activityStarter: ActivityStarter, showPowerButton: Boolean, ): FooterActionsViewModel { suspend fun observeDeviceMonitoringDialogRequests(quickSettingsContext: Context) { Loading @@ -169,7 +173,14 @@ fun FooterActionsViewModel( return } activityStarter.dismissKeyguardThenExecute( { footerActionsInteractor.showForegroundServicesDialog(expandable) false /* if the dismiss should be deferred */ }, null /* cancelAction */, true /* afterKeyguardGone */ ) } fun onUserSwitcherClicked(expandable: Expandable) { Loading