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

Commit 985b432d authored by Massimo Carli's avatar Massimo Carli Committed by Android (Google) Code Review
Browse files

Merge "Fix LetterboxConfigurationPersisterTest when file is deleted" into udc-qpr-dev

parents 9e7ffd2e ca6a371a
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -294,8 +294,7 @@ final class LetterboxConfiguration {
    @NonNull private final SynchedDeviceConfig mDeviceConfig;

    LetterboxConfiguration(@NonNull final Context systemUiContext) {
        this(systemUiContext,
                new LetterboxConfigurationPersister(systemUiContext,
        this(systemUiContext, new LetterboxConfigurationPersister(
                () -> readLetterboxHorizontalReachabilityPositionFromConfig(
                        systemUiContext, /* forBookMode */ false),
                () -> readLetterboxVerticalReachabilityPositionFromConfig(
+20 −27
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.os.Environment;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;
@@ -53,10 +52,8 @@ class LetterboxConfigurationPersister {
    private static final String TAG =
            TAG_WITH_CLASS_NAME ? "LetterboxConfigurationPersister" : TAG_WM;

    @VisibleForTesting
    static final String LETTERBOX_CONFIGURATION_FILENAME = "letterbox_config";
    private static final String LETTERBOX_CONFIGURATION_FILENAME = "letterbox_config";

    private final Context mContext;
    private final Supplier<Integer> mDefaultHorizontalReachabilitySupplier;
    private final Supplier<Integer> mDefaultVerticalReachabilitySupplier;
    private final Supplier<Integer> mDefaultBookModeReachabilitySupplier;
@@ -97,36 +94,32 @@ class LetterboxConfigurationPersister {
    @NonNull
    private final PersisterQueue mPersisterQueue;

    LetterboxConfigurationPersister(Context systemUiContext,
            Supplier<Integer> defaultHorizontalReachabilitySupplier,
            Supplier<Integer> defaultVerticalReachabilitySupplier,
            Supplier<Integer> defaultBookModeReachabilitySupplier,
            Supplier<Integer> defaultTabletopModeReachabilitySupplier) {
        this(systemUiContext, defaultHorizontalReachabilitySupplier,
                defaultVerticalReachabilitySupplier,
                defaultBookModeReachabilitySupplier,
                defaultTabletopModeReachabilitySupplier,
    LetterboxConfigurationPersister(
            @NonNull Supplier<Integer> defaultHorizontalReachabilitySupplier,
            @NonNull Supplier<Integer> defaultVerticalReachabilitySupplier,
            @NonNull Supplier<Integer> defaultBookModeReachabilitySupplier,
            @NonNull Supplier<Integer> defaultTabletopModeReachabilitySupplier) {
        this(defaultHorizontalReachabilitySupplier, defaultVerticalReachabilitySupplier,
                defaultBookModeReachabilitySupplier, defaultTabletopModeReachabilitySupplier,
                Environment.getDataSystemDirectory(), new PersisterQueue(),
                /* completionCallback */ null);
                /* completionCallback */ null, LETTERBOX_CONFIGURATION_FILENAME);
    }

    @VisibleForTesting
    LetterboxConfigurationPersister(Context systemUiContext,
            Supplier<Integer> defaultHorizontalReachabilitySupplier,
            Supplier<Integer> defaultVerticalReachabilitySupplier,
            Supplier<Integer> defaultBookModeReachabilitySupplier,
            Supplier<Integer> defaultTabletopModeReachabilitySupplier,
            File configFolder,
            PersisterQueue persisterQueue, @Nullable Consumer<String> completionCallback) {
        mContext = systemUiContext.createDeviceProtectedStorageContext();
    LetterboxConfigurationPersister(
            @NonNull Supplier<Integer> defaultHorizontalReachabilitySupplier,
            @NonNull Supplier<Integer> defaultVerticalReachabilitySupplier,
            @NonNull Supplier<Integer> defaultBookModeReachabilitySupplier,
            @NonNull Supplier<Integer> defaultTabletopModeReachabilitySupplier,
            @NonNull File configFolder, @NonNull PersisterQueue persisterQueue,
            @Nullable Consumer<String> completionCallback,
            @NonNull String letterboxConfigurationFileName) {
        mDefaultHorizontalReachabilitySupplier = defaultHorizontalReachabilitySupplier;
        mDefaultVerticalReachabilitySupplier = defaultVerticalReachabilitySupplier;
        mDefaultBookModeReachabilitySupplier =
                defaultBookModeReachabilitySupplier;
        mDefaultTabletopModeReachabilitySupplier =
                defaultTabletopModeReachabilitySupplier;
        mDefaultBookModeReachabilitySupplier = defaultBookModeReachabilitySupplier;
        mDefaultTabletopModeReachabilitySupplier = defaultTabletopModeReachabilitySupplier;
        mCompletionCallback = completionCallback;
        final File prefFiles = new File(configFolder, LETTERBOX_CONFIGURATION_FILENAME);
        final File prefFiles = new File(configFolder, letterboxConfigurationFileName);
        mConfigurationFile = new AtomicFile(prefFiles);
        mPersisterQueue = persisterQueue;
        runWithDiskReadsThreadPolicy(this::readCurrentConfiguration);
+54 −28
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentat

import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT;
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP;
import static com.android.server.wm.LetterboxConfigurationPersister.LETTERBOX_CONFIGURATION_FILENAME;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -42,13 +41,26 @@ import org.junit.Test;
import java.io.File;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * Tests for the {@link LetterboxConfigurationPersister} class.
 *
 * Build/Install/Run:
 *  atest WmTests:LetterboxConfigurationPersisterTest
 */
@SmallTest
@Presubmit
public class LetterboxConfigurationPersisterTest {

    private static final long TIMEOUT = 2000L; // 2 secs

    private static final int DEFAULT_REACHABILITY_TEST = -1;
    private static final Supplier<Integer> DEFAULT_REACHABILITY_SUPPLIER_TEST =
            () -> DEFAULT_REACHABILITY_TEST;

    private static final String LETTERBOX_CONFIGURATION_TEST_FILENAME = "letterbox_config_test";

    private LetterboxConfigurationPersister mLetterboxConfigurationPersister;
    private Context mContext;
    private PersisterQueue mPersisterQueue;
@@ -62,7 +74,7 @@ public class LetterboxConfigurationPersisterTest {
        mConfigFolder = mContext.getFilesDir();
        mPersisterQueue = new PersisterQueue();
        mQueueState = new QueueState();
        mLetterboxConfigurationPersister = new LetterboxConfigurationPersister(mContext,
        mLetterboxConfigurationPersister = new LetterboxConfigurationPersister(
                () -> mContext.getResources().getInteger(
                        R.integer.config_letterboxDefaultPositionForHorizontalReachability),
                () -> mContext.getResources().getInteger(
@@ -72,7 +84,8 @@ public class LetterboxConfigurationPersisterTest {
                () -> mContext.getResources().getInteger(
                        R.integer.config_letterboxDefaultPositionForTabletopModeReachability
                ),
                mConfigFolder, mPersisterQueue, mQueueState);
                mConfigFolder, mPersisterQueue, mQueueState,
                LETTERBOX_CONFIGURATION_TEST_FILENAME);
        mQueueListener = queueEmpty -> mQueueState.onItemAdded();
        mPersisterQueue.addListener(mQueueListener);
        mLetterboxConfigurationPersister.start();
@@ -127,8 +140,10 @@ public class LetterboxConfigurationPersisterTest {
    public void test_whenUpdatedWithNewValues_valuesAreReadAfterRestart() {
        final PersisterQueue firstPersisterQueue = new PersisterQueue();
        final LetterboxConfigurationPersister firstPersister = new LetterboxConfigurationPersister(
                mContext, () -> -1, () -> -1, () -> -1, () -> -1, mContext.getFilesDir(),
                firstPersisterQueue, mQueueState);
                DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
                DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
                mContext.getFilesDir(), firstPersisterQueue, mQueueState,
                LETTERBOX_CONFIGURATION_TEST_FILENAME);
        firstPersister.start();
        firstPersister.setLetterboxPositionForHorizontalReachability(false,
                LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT);
@@ -138,8 +153,10 @@ public class LetterboxConfigurationPersisterTest {
        stopPersisterSafe(firstPersisterQueue);
        final PersisterQueue secondPersisterQueue = new PersisterQueue();
        final LetterboxConfigurationPersister secondPersister = new LetterboxConfigurationPersister(
                mContext, () -> -1, () -> -1, () -> -1, () -> -1, mContext.getFilesDir(),
                secondPersisterQueue, mQueueState);
                DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
                DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
                mContext.getFilesDir(), secondPersisterQueue, mQueueState,
                LETTERBOX_CONFIGURATION_TEST_FILENAME);
        secondPersister.start();
        final int newPositionForHorizontalReachability =
                secondPersister.getLetterboxPositionForHorizontalReachability(false);
@@ -156,37 +173,46 @@ public class LetterboxConfigurationPersisterTest {

    @Test
    public void test_whenUpdatedWithNewValuesAndDeleted_valuesAreDefaults() {
        mLetterboxConfigurationPersister.setLetterboxPositionForHorizontalReachability(false,
        final PersisterQueue firstPersisterQueue = new PersisterQueue();
        final LetterboxConfigurationPersister firstPersister = new LetterboxConfigurationPersister(
                DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
                DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
                mContext.getFilesDir(), firstPersisterQueue, mQueueState,
                LETTERBOX_CONFIGURATION_TEST_FILENAME);
        firstPersister.start();
        firstPersister.setLetterboxPositionForHorizontalReachability(false,
                LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT);
        mLetterboxConfigurationPersister.setLetterboxPositionForVerticalReachability(false,
        firstPersister.setLetterboxPositionForVerticalReachability(false,
                LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP);
        waitForCompletion(mPersisterQueue);
        final int newPositionForHorizontalReachability =
                mLetterboxConfigurationPersister.getLetterboxPositionForHorizontalReachability(
                        false);
                firstPersister.getLetterboxPositionForHorizontalReachability(false);
        final int newPositionForVerticalReachability =
                mLetterboxConfigurationPersister.getLetterboxPositionForVerticalReachability(false);
                firstPersister.getLetterboxPositionForVerticalReachability(false);
        Assert.assertEquals(LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT,
                newPositionForHorizontalReachability);
        Assert.assertEquals(LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP,
                newPositionForVerticalReachability);
        deleteConfiguration(mLetterboxConfigurationPersister, mPersisterQueue);
        waitForCompletion(mPersisterQueue);
        deleteConfiguration(firstPersister, firstPersisterQueue);
        waitForCompletion(firstPersisterQueue);
        stopPersisterSafe(firstPersisterQueue);

        final PersisterQueue secondPersisterQueue = new PersisterQueue();
        final LetterboxConfigurationPersister secondPersister = new LetterboxConfigurationPersister(
                DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
                DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
                mContext.getFilesDir(), secondPersisterQueue, mQueueState,
                LETTERBOX_CONFIGURATION_TEST_FILENAME);
        secondPersister.start();
        final int positionForHorizontalReachability =
                mLetterboxConfigurationPersister.getLetterboxPositionForHorizontalReachability(
                        false);
        final int defaultPositionForHorizontalReachability =
                mContext.getResources().getInteger(
                        R.integer.config_letterboxDefaultPositionForHorizontalReachability);
        Assert.assertEquals(defaultPositionForHorizontalReachability,
                positionForHorizontalReachability);
                secondPersister.getLetterboxPositionForHorizontalReachability(false);
        final int positionForVerticalReachability =
                mLetterboxConfigurationPersister.getLetterboxPositionForVerticalReachability(false);
        final int defaultPositionForVerticalReachability =
                mContext.getResources().getInteger(
                        R.integer.config_letterboxDefaultPositionForVerticalReachability);
        Assert.assertEquals(defaultPositionForVerticalReachability,
                positionForVerticalReachability);
                secondPersister.getLetterboxPositionForVerticalReachability(false);
        Assert.assertEquals(DEFAULT_REACHABILITY_TEST, positionForHorizontalReachability);
        Assert.assertEquals(DEFAULT_REACHABILITY_TEST, positionForVerticalReachability);
        deleteConfiguration(secondPersister, secondPersisterQueue);
        waitForCompletion(secondPersisterQueue);
        stopPersisterSafe(secondPersisterQueue);
    }

    private void stopPersisterSafe(PersisterQueue persisterQueue) {
@@ -222,7 +248,7 @@ public class LetterboxConfigurationPersisterTest {
    private void deleteConfiguration(LetterboxConfigurationPersister persister,
            PersisterQueue persisterQueue) {
        final AtomicFile fileToDelete = new AtomicFile(
                new File(mConfigFolder, LETTERBOX_CONFIGURATION_FILENAME));
                new File(mConfigFolder, LETTERBOX_CONFIGURATION_TEST_FILENAME));
        persisterQueue.addItem(
                new DeleteFileCommand(fileToDelete, mQueueState.andThen(
                        s -> persister.useDefaultValue())), true);