/**
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy
 * of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */
package android.app.usage.cts;

import android.annotation.Nullable;
import android.app.Activity;
import android.os.Bundle;
import android.util.ArraySet;
import android.util.Log;
import android.view.WindowManager;

public final class Activities {

    public static final ArraySet<Activity> startedActivities = new ArraySet();

    private static class KeepScreenOnActivity extends Activity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        }
        @Override
        protected void onStart() {
            super.onStart();
            synchronized (startedActivities) {
                startedActivities.add(this);
            }
        }
        @Override
        protected void onStop() {
            super.onStop();
            synchronized (startedActivities) {
                startedActivities.remove(this);
            }
        }
    }

    public static class ActivityOne extends KeepScreenOnActivity {}
    public static class ActivityTwo extends KeepScreenOnActivity {}
    public static class ActivityThree extends KeepScreenOnActivity {}
    public static class ActivityFour extends KeepScreenOnActivity {}

    private Activities() {}
}
