Merge "Fix LetterboxConfigurationPersisterTest when file is deleted" into udc-qpr-dev am: 985b432d58

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24014859

Change-Id: I36b8621760c7a073fdbe10b66deec2e0533337a4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Massimo Carli
2023-07-18 09:02:28 +00:00
committed by Automerger Merge Worker
3 changed files with 83 additions and 65 deletions

View File

@@ -294,8 +294,7 @@ final class LetterboxConfiguration {
@NonNull private final SynchedDeviceConfig mDeviceConfig; @NonNull private final SynchedDeviceConfig mDeviceConfig;
LetterboxConfiguration(@NonNull final Context systemUiContext) { LetterboxConfiguration(@NonNull final Context systemUiContext) {
this(systemUiContext, this(systemUiContext, new LetterboxConfigurationPersister(
new LetterboxConfigurationPersister(systemUiContext,
() -> readLetterboxHorizontalReachabilityPositionFromConfig( () -> readLetterboxHorizontalReachabilityPositionFromConfig(
systemUiContext, /* forBookMode */ false), systemUiContext, /* forBookMode */ false),
() -> readLetterboxVerticalReachabilityPositionFromConfig( () -> readLetterboxVerticalReachabilityPositionFromConfig(

View File

@@ -23,7 +23,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.content.Context;
import android.os.Environment; import android.os.Environment;
import android.os.StrictMode; import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy; import android.os.StrictMode.ThreadPolicy;
@@ -53,10 +52,8 @@ class LetterboxConfigurationPersister {
private static final String TAG = private static final String TAG =
TAG_WITH_CLASS_NAME ? "LetterboxConfigurationPersister" : TAG_WM; TAG_WITH_CLASS_NAME ? "LetterboxConfigurationPersister" : TAG_WM;
@VisibleForTesting private static final String LETTERBOX_CONFIGURATION_FILENAME = "letterbox_config";
static final String LETTERBOX_CONFIGURATION_FILENAME = "letterbox_config";
private final Context mContext;
private final Supplier<Integer> mDefaultHorizontalReachabilitySupplier; private final Supplier<Integer> mDefaultHorizontalReachabilitySupplier;
private final Supplier<Integer> mDefaultVerticalReachabilitySupplier; private final Supplier<Integer> mDefaultVerticalReachabilitySupplier;
private final Supplier<Integer> mDefaultBookModeReachabilitySupplier; private final Supplier<Integer> mDefaultBookModeReachabilitySupplier;
@@ -97,36 +94,32 @@ class LetterboxConfigurationPersister {
@NonNull @NonNull
private final PersisterQueue mPersisterQueue; private final PersisterQueue mPersisterQueue;
LetterboxConfigurationPersister(Context systemUiContext, LetterboxConfigurationPersister(
Supplier<Integer> defaultHorizontalReachabilitySupplier, @NonNull Supplier<Integer> defaultHorizontalReachabilitySupplier,
Supplier<Integer> defaultVerticalReachabilitySupplier, @NonNull Supplier<Integer> defaultVerticalReachabilitySupplier,
Supplier<Integer> defaultBookModeReachabilitySupplier, @NonNull Supplier<Integer> defaultBookModeReachabilitySupplier,
Supplier<Integer> defaultTabletopModeReachabilitySupplier) { @NonNull Supplier<Integer> defaultTabletopModeReachabilitySupplier) {
this(systemUiContext, defaultHorizontalReachabilitySupplier, this(defaultHorizontalReachabilitySupplier, defaultVerticalReachabilitySupplier,
defaultVerticalReachabilitySupplier, defaultBookModeReachabilitySupplier, defaultTabletopModeReachabilitySupplier,
defaultBookModeReachabilitySupplier,
defaultTabletopModeReachabilitySupplier,
Environment.getDataSystemDirectory(), new PersisterQueue(), Environment.getDataSystemDirectory(), new PersisterQueue(),
/* completionCallback */ null); /* completionCallback */ null, LETTERBOX_CONFIGURATION_FILENAME);
} }
@VisibleForTesting @VisibleForTesting
LetterboxConfigurationPersister(Context systemUiContext, LetterboxConfigurationPersister(
Supplier<Integer> defaultHorizontalReachabilitySupplier, @NonNull Supplier<Integer> defaultHorizontalReachabilitySupplier,
Supplier<Integer> defaultVerticalReachabilitySupplier, @NonNull Supplier<Integer> defaultVerticalReachabilitySupplier,
Supplier<Integer> defaultBookModeReachabilitySupplier, @NonNull Supplier<Integer> defaultBookModeReachabilitySupplier,
Supplier<Integer> defaultTabletopModeReachabilitySupplier, @NonNull Supplier<Integer> defaultTabletopModeReachabilitySupplier,
File configFolder, @NonNull File configFolder, @NonNull PersisterQueue persisterQueue,
PersisterQueue persisterQueue, @Nullable Consumer<String> completionCallback) { @Nullable Consumer<String> completionCallback,
mContext = systemUiContext.createDeviceProtectedStorageContext(); @NonNull String letterboxConfigurationFileName) {
mDefaultHorizontalReachabilitySupplier = defaultHorizontalReachabilitySupplier; mDefaultHorizontalReachabilitySupplier = defaultHorizontalReachabilitySupplier;
mDefaultVerticalReachabilitySupplier = defaultVerticalReachabilitySupplier; mDefaultVerticalReachabilitySupplier = defaultVerticalReachabilitySupplier;
mDefaultBookModeReachabilitySupplier = mDefaultBookModeReachabilitySupplier = defaultBookModeReachabilitySupplier;
defaultBookModeReachabilitySupplier; mDefaultTabletopModeReachabilitySupplier = defaultTabletopModeReachabilitySupplier;
mDefaultTabletopModeReachabilitySupplier =
defaultTabletopModeReachabilitySupplier;
mCompletionCallback = completionCallback; mCompletionCallback = completionCallback;
final File prefFiles = new File(configFolder, LETTERBOX_CONFIGURATION_FILENAME); final File prefFiles = new File(configFolder, letterboxConfigurationFileName);
mConfigurationFile = new AtomicFile(prefFiles); mConfigurationFile = new AtomicFile(prefFiles);
mPersisterQueue = persisterQueue; mPersisterQueue = persisterQueue;
runWithDiskReadsThreadPolicy(this::readCurrentConfiguration); runWithDiskReadsThreadPolicy(this::readCurrentConfiguration);

View File

@@ -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_HORIZONTAL_REACHABILITY_POSITION_LEFT;
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP; 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.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
@@ -42,13 +41,26 @@ import org.junit.Test;
import java.io.File; import java.io.File;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier;
/**
* Tests for the {@link LetterboxConfigurationPersister} class.
*
* Build/Install/Run:
* atest WmTests:LetterboxConfigurationPersisterTest
*/
@SmallTest @SmallTest
@Presubmit @Presubmit
public class LetterboxConfigurationPersisterTest { public class LetterboxConfigurationPersisterTest {
private static final long TIMEOUT = 2000L; // 2 secs 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 LetterboxConfigurationPersister mLetterboxConfigurationPersister;
private Context mContext; private Context mContext;
private PersisterQueue mPersisterQueue; private PersisterQueue mPersisterQueue;
@@ -62,7 +74,7 @@ public class LetterboxConfigurationPersisterTest {
mConfigFolder = mContext.getFilesDir(); mConfigFolder = mContext.getFilesDir();
mPersisterQueue = new PersisterQueue(); mPersisterQueue = new PersisterQueue();
mQueueState = new QueueState(); mQueueState = new QueueState();
mLetterboxConfigurationPersister = new LetterboxConfigurationPersister(mContext, mLetterboxConfigurationPersister = new LetterboxConfigurationPersister(
() -> mContext.getResources().getInteger( () -> mContext.getResources().getInteger(
R.integer.config_letterboxDefaultPositionForHorizontalReachability), R.integer.config_letterboxDefaultPositionForHorizontalReachability),
() -> mContext.getResources().getInteger( () -> mContext.getResources().getInteger(
@@ -72,7 +84,8 @@ public class LetterboxConfigurationPersisterTest {
() -> mContext.getResources().getInteger( () -> mContext.getResources().getInteger(
R.integer.config_letterboxDefaultPositionForTabletopModeReachability R.integer.config_letterboxDefaultPositionForTabletopModeReachability
), ),
mConfigFolder, mPersisterQueue, mQueueState); mConfigFolder, mPersisterQueue, mQueueState,
LETTERBOX_CONFIGURATION_TEST_FILENAME);
mQueueListener = queueEmpty -> mQueueState.onItemAdded(); mQueueListener = queueEmpty -> mQueueState.onItemAdded();
mPersisterQueue.addListener(mQueueListener); mPersisterQueue.addListener(mQueueListener);
mLetterboxConfigurationPersister.start(); mLetterboxConfigurationPersister.start();
@@ -127,8 +140,10 @@ public class LetterboxConfigurationPersisterTest {
public void test_whenUpdatedWithNewValues_valuesAreReadAfterRestart() { public void test_whenUpdatedWithNewValues_valuesAreReadAfterRestart() {
final PersisterQueue firstPersisterQueue = new PersisterQueue(); final PersisterQueue firstPersisterQueue = new PersisterQueue();
final LetterboxConfigurationPersister firstPersister = new LetterboxConfigurationPersister( final LetterboxConfigurationPersister firstPersister = new LetterboxConfigurationPersister(
mContext, () -> -1, () -> -1, () -> -1, () -> -1, mContext.getFilesDir(), DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
firstPersisterQueue, mQueueState); DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
mContext.getFilesDir(), firstPersisterQueue, mQueueState,
LETTERBOX_CONFIGURATION_TEST_FILENAME);
firstPersister.start(); firstPersister.start();
firstPersister.setLetterboxPositionForHorizontalReachability(false, firstPersister.setLetterboxPositionForHorizontalReachability(false,
LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT); LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT);
@@ -138,8 +153,10 @@ public class LetterboxConfigurationPersisterTest {
stopPersisterSafe(firstPersisterQueue); stopPersisterSafe(firstPersisterQueue);
final PersisterQueue secondPersisterQueue = new PersisterQueue(); final PersisterQueue secondPersisterQueue = new PersisterQueue();
final LetterboxConfigurationPersister secondPersister = new LetterboxConfigurationPersister( final LetterboxConfigurationPersister secondPersister = new LetterboxConfigurationPersister(
mContext, () -> -1, () -> -1, () -> -1, () -> -1, mContext.getFilesDir(), DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
secondPersisterQueue, mQueueState); DEFAULT_REACHABILITY_SUPPLIER_TEST, DEFAULT_REACHABILITY_SUPPLIER_TEST,
mContext.getFilesDir(), secondPersisterQueue, mQueueState,
LETTERBOX_CONFIGURATION_TEST_FILENAME);
secondPersister.start(); secondPersister.start();
final int newPositionForHorizontalReachability = final int newPositionForHorizontalReachability =
secondPersister.getLetterboxPositionForHorizontalReachability(false); secondPersister.getLetterboxPositionForHorizontalReachability(false);
@@ -156,37 +173,46 @@ public class LetterboxConfigurationPersisterTest {
@Test @Test
public void test_whenUpdatedWithNewValuesAndDeleted_valuesAreDefaults() { 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); LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT);
mLetterboxConfigurationPersister.setLetterboxPositionForVerticalReachability(false, firstPersister.setLetterboxPositionForVerticalReachability(false,
LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP); LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP);
waitForCompletion(mPersisterQueue); waitForCompletion(mPersisterQueue);
final int newPositionForHorizontalReachability = final int newPositionForHorizontalReachability =
mLetterboxConfigurationPersister.getLetterboxPositionForHorizontalReachability( firstPersister.getLetterboxPositionForHorizontalReachability(false);
false);
final int newPositionForVerticalReachability = final int newPositionForVerticalReachability =
mLetterboxConfigurationPersister.getLetterboxPositionForVerticalReachability(false); firstPersister.getLetterboxPositionForVerticalReachability(false);
Assert.assertEquals(LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT, Assert.assertEquals(LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT,
newPositionForHorizontalReachability); newPositionForHorizontalReachability);
Assert.assertEquals(LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP, Assert.assertEquals(LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP,
newPositionForVerticalReachability); newPositionForVerticalReachability);
deleteConfiguration(mLetterboxConfigurationPersister, mPersisterQueue); deleteConfiguration(firstPersister, firstPersisterQueue);
waitForCompletion(mPersisterQueue); 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 = final int positionForHorizontalReachability =
mLetterboxConfigurationPersister.getLetterboxPositionForHorizontalReachability( secondPersister.getLetterboxPositionForHorizontalReachability(false);
false);
final int defaultPositionForHorizontalReachability =
mContext.getResources().getInteger(
R.integer.config_letterboxDefaultPositionForHorizontalReachability);
Assert.assertEquals(defaultPositionForHorizontalReachability,
positionForHorizontalReachability);
final int positionForVerticalReachability = final int positionForVerticalReachability =
mLetterboxConfigurationPersister.getLetterboxPositionForVerticalReachability(false); secondPersister.getLetterboxPositionForVerticalReachability(false);
final int defaultPositionForVerticalReachability = Assert.assertEquals(DEFAULT_REACHABILITY_TEST, positionForHorizontalReachability);
mContext.getResources().getInteger( Assert.assertEquals(DEFAULT_REACHABILITY_TEST, positionForVerticalReachability);
R.integer.config_letterboxDefaultPositionForVerticalReachability); deleteConfiguration(secondPersister, secondPersisterQueue);
Assert.assertEquals(defaultPositionForVerticalReachability, waitForCompletion(secondPersisterQueue);
positionForVerticalReachability); stopPersisterSafe(secondPersisterQueue);
} }
private void stopPersisterSafe(PersisterQueue persisterQueue) { private void stopPersisterSafe(PersisterQueue persisterQueue) {
@@ -222,7 +248,7 @@ public class LetterboxConfigurationPersisterTest {
private void deleteConfiguration(LetterboxConfigurationPersister persister, private void deleteConfiguration(LetterboxConfigurationPersister persister,
PersisterQueue persisterQueue) { PersisterQueue persisterQueue) {
final AtomicFile fileToDelete = new AtomicFile( final AtomicFile fileToDelete = new AtomicFile(
new File(mConfigFolder, LETTERBOX_CONFIGURATION_FILENAME)); new File(mConfigFolder, LETTERBOX_CONFIGURATION_TEST_FILENAME));
persisterQueue.addItem( persisterQueue.addItem(
new DeleteFileCommand(fileToDelete, mQueueState.andThen( new DeleteFileCommand(fileToDelete, mQueueState.andThen(
s -> persister.useDefaultValue())), true); s -> persister.useDefaultValue())), true);