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

Commit 61bd2703 authored by Alexander Roederer's avatar Alexander Roederer
Browse files

Add aconfig flag control to NRU

Adds aconfig flag control to moving Notification Ranking Update
contents to ashmem to prevent binder transaction failures. Removes
sysprop flag.

Test: Unit tests switched to using this flag, run via atest
NotificationRankingUpdateTest.
Bug: 284297289

Change-Id: I5eb966303c3ccda16b396dd61208585dd8ea64d9
parent 7850a5b1
Loading
Loading
Loading
Loading
+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();
+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 =