Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit caf7be76 authored by Alexander Roederer's avatar Alexander Roederer Committed by Android (Google) Code Review
Browse files

Merge changes from topic "b284297289-AshmemAconfFlag" into main

* changes:
  Add aconfig flag control to NRU
  Adds an aconfig flag for ranking updates in ashmem
parents 62de669c 61bd2703
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ aconfig_srcjars = [
    ":android.os.flags-aconfig-java{.generated_srcjars}",
    ":android.os.vibrator.flags-aconfig-java{.generated_srcjars}",
    ":android.security.flags-aconfig-java{.generated_srcjars}",
    ":android.service.notification.flags-aconfig-java{.generated_srcjars}",
    ":android.view.flags-aconfig-java{.generated_srcjars}",
    ":android.view.accessibility.flags-aconfig-java{.generated_srcjars}",
    ":camera_platform_flags_core_java_lib{.generated_srcjars}",
@@ -544,3 +545,16 @@ cc_aconfig_library {
    name: "device_policy_aconfig_flags_c_lib",
    aconfig_declarations: "device_policy_aconfig_flags",
}

// Notifications
aconfig_declarations {
    name: "android.service.notification.flags-aconfig",
    package: "android.service.notification",
    srcs: ["core/java/android/service/notification/flags.aconfig"],
}

java_aconfig_library {
    name: "android.service.notification.flags-aconfig-java",
    aconfig_declarations: "android.service.notification.flags-aconfig",
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}
+2 −6
Original line number Diff line number Diff line
@@ -28,8 +28,6 @@ import android.system.OsConstants;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;

import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags;

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
@@ -59,8 +57,7 @@ public class NotificationRankingUpdate implements Parcelable {
     * @hide
     */
    public NotificationRankingUpdate(Parcel in) {
        if (SystemUiSystemPropertiesFlags.getResolver().isEnabled(
                SystemUiSystemPropertiesFlags.NotificationFlags.RANKING_UPDATE_ASHMEM)) {
        if (Flags.rankingUpdateAshmem()) {
            // Recover the ranking map from the SharedMemory and store it in mapParcel.
            final Parcel mapParcel = Parcel.obtain();
            ByteBuffer buffer = null;
@@ -176,8 +173,7 @@ public class NotificationRankingUpdate implements Parcelable {
     */
    @Override
    public void writeToParcel(@NonNull Parcel out, int flags) {
        if (SystemUiSystemPropertiesFlags.getResolver().isEnabled(
                SystemUiSystemPropertiesFlags.NotificationFlags.RANKING_UPDATE_ASHMEM)) {
        if (Flags.rankingUpdateAshmem()) {
            final Parcel mapParcel = Parcel.obtain();
            ArrayList<NotificationListenerService.Ranking> marshalableRankings = new ArrayList<>();
            Bundle smartActionsBundle = new Bundle();
+9 −0
Original line number Diff line number Diff line
package: "android.service.notification"

flag {
  name: "ranking_update_ashmem"
  namespace: "systemui"
  description: "This flag controls moving ranking update contents into ashmem"
  bug: "284297289"
}
+13 −36
Original line number Diff line number Diff line
@@ -20,8 +20,6 @@ import static android.service.notification.NotificationListenerService.Ranking.U
import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEUTRAL;
import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_POSITIVE;

import static com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.NotificationFlags.RANKING_UPDATE_ASHMEM;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
@@ -42,16 +40,12 @@ import android.content.pm.ShortcutInfo;
import android.os.Bundle;
import android.os.Parcel;
import android.os.SharedMemory;
import android.platform.test.flag.junit.SetFlagsRule;
import android.testing.TestableContext;

import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;

import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags;
import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.Flag;
import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.FlagResolver;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
@@ -71,6 +65,9 @@ public class NotificationRankingUpdateTest {

    private NotificationChannel mNotificationChannel;

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    // TODO(b/284297289): remove this flag set once resolved.
    @Parameterized.Parameters(name = "rankingUpdateAshmem={0}")
    public static Boolean[] getRankingUpdateAshmem() {
@@ -424,30 +421,11 @@ public class NotificationRankingUpdateTest {
        mNotificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "test channel",
                NotificationManager.IMPORTANCE_DEFAULT);

        SystemUiSystemPropertiesFlags.TEST_RESOLVER = new FlagResolver() {
            @Override
            public boolean isEnabled(Flag flag) {
                if (flag.mSysPropKey.equals(RANKING_UPDATE_ASHMEM.mSysPropKey)) {
                    return mRankingUpdateAshmem;
                }
                return new SystemUiSystemPropertiesFlags.DebugResolver().isEnabled(flag);
            }

            @Override
            public int getIntValue(Flag flag) {
                return 0;
            }

            @Override
            public String getStringValue(Flag flag) {
                return null;
            }
        };
        if (mRankingUpdateAshmem) {
            mSetFlagsRule.enableFlags(Flags.FLAG_RANKING_UPDATE_ASHMEM);
        } else {
            mSetFlagsRule.disableFlags(Flags.FLAG_RANKING_UPDATE_ASHMEM);
        }

    @After
    public void tearDown() {
        SystemUiSystemPropertiesFlags.TEST_RESOLVER = null;
    }

    /**
@@ -497,8 +475,7 @@ public class NotificationRankingUpdateTest {
        parcel.setDataPosition(0);
        NotificationRankingUpdate nru1 = NotificationRankingUpdate.CREATOR.createFromParcel(parcel);
        // The rankingUpdate file descriptor is only non-null in the new path.
        if (SystemUiSystemPropertiesFlags.getResolver().isEnabled(
                SystemUiSystemPropertiesFlags.NotificationFlags.RANKING_UPDATE_ASHMEM)) {
        if (Flags.rankingUpdateAshmem()) {
            assertTrue(nru1.isFdNotNullAndClosed());
        }
        detailedAssertEquals(nru, nru1);
@@ -636,7 +613,7 @@ public class NotificationRankingUpdateTest {

    @Test
    public void testRankingUpdate_writesSmartActionToParcel() {
        if (!mRankingUpdateAshmem) {
        if (!Flags.rankingUpdateAshmem()) {
            return;
        }
        ArrayList<Notification.Action> actions = new ArrayList<>();
@@ -674,7 +651,7 @@ public class NotificationRankingUpdateTest {

    @Test
    public void testRankingUpdate_handlesEmptySmartActionList() {
        if (!mRankingUpdateAshmem) {
        if (!Flags.rankingUpdateAshmem()) {
            return;
        }
        ArrayList<Notification.Action> actions = new ArrayList<>();
@@ -697,7 +674,7 @@ public class NotificationRankingUpdateTest {

    @Test
    public void testRankingUpdate_handlesNullSmartActionList() {
        if (!mRankingUpdateAshmem) {
        if (!Flags.rankingUpdateAshmem()) {
            return;
        }
        NotificationListenerService.Ranking ranking =