// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.ui.test.util;

import androidx.appcompat.app.AppCompatDelegate;

import org.chromium.base.ThreadUtils;
import org.chromium.base.test.params.ParameterProvider;
import org.chromium.base.test.params.ParameterSet;

import java.util.Arrays;
import java.util.List;

/**
 * Helper methods to be used in tests to specify night mode state.
 */
public class NightModeTestUtils {
    /**
     * {@link ParameterProvider} used for parameterized test that provides the night mode state.
     */
    public static class NightModeParams implements ParameterProvider {
        private static List<ParameterSet> sNightModeParams =
                Arrays.asList(new ParameterSet().value(false).name("NightModeDisabled"),
                        new ParameterSet().value(true).name("NightModeEnabled"));

        @Override
        public List<ParameterSet> getParameters() {
            return sNightModeParams;
        }
    }

    /**
     * Sets up the night mode state for {@link BlankUiTestActivity}.
     * @param nightModeEnabled Whether night mode should be enabled.
     */
    public static void setUpNightModeForBlankUiTestActivity(boolean nightModeEnabled) {
        ThreadUtils.runOnUiThreadBlocking(() -> {
            AppCompatDelegate.setDefaultNightMode(nightModeEnabled
                            ? AppCompatDelegate.MODE_NIGHT_YES
                            : AppCompatDelegate.MODE_NIGHT_NO);
        });
    }

    /**
     * Resets the night mode state for {@link BlankUiTestActivity}.
     */
    public static void tearDownNightModeForBlankUiTestActivity() {
        ThreadUtils.runOnUiThreadBlocking(() -> {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
        });
    }
}
