/*
 * Copyright (C) 2020 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 com.android.systemui.screenshot;

import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_ACCESSIBILITY_ACTIONS;
import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_GLOBAL_ACTIONS;
import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_KEY_CHORD;
import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_KEY_OTHER;
import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_OTHER;
import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_OVERVIEW;
import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_SCREEN_CAPTURE_UI;
import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_VENDOR_GESTURE;

import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;

public enum ScreenshotEvent implements UiEventLogger.UiEventEnum {
    @UiEvent(doc = "screenshot requested from global actions")
    SCREENSHOT_REQUESTED_GLOBAL_ACTIONS(302),
    @UiEvent(doc = "screenshot requested from key chord")
    SCREENSHOT_REQUESTED_KEY_CHORD(303),
    @UiEvent(doc = "screenshot requested from other key press (e.g. ctrl-s)")
    SCREENSHOT_REQUESTED_KEY_OTHER(384),
    @UiEvent(doc = "screenshot requested from overview")
    SCREENSHOT_REQUESTED_OVERVIEW(304),
    @UiEvent(doc = "screenshot requested from accessibility actions")
    SCREENSHOT_REQUESTED_ACCESSIBILITY_ACTIONS(382),
    @UiEvent(doc = "screenshot requested from vendor gesture")
    SCREENSHOT_REQUESTED_VENDOR_GESTURE(638),
    @UiEvent(doc = "screenshot requested (other)")
    SCREENSHOT_REQUESTED_OTHER(305),
    @UiEvent(doc = "screenshot requested from the screen capture UI")
    SCREENSHOT_REQUESTED_SCREEN_CAPTURE_UI(2397),
    @UiEvent(doc = "screenshot was saved")
    SCREENSHOT_SAVED(306),
    @UiEvent(doc = "screenshot failed to save")
    SCREENSHOT_NOT_SAVED(336),
    @UiEvent(doc = "failed to capture screenshot")
    SCREENSHOT_CAPTURE_FAILED(1281),
    @UiEvent(doc = "screenshot preview tapped")
    SCREENSHOT_PREVIEW_TAPPED(307),
    @UiEvent(doc = "screenshot edit button tapped")
    SCREENSHOT_EDIT_TAPPED(308),
    @UiEvent(doc = "screenshot share button tapped")
    SCREENSHOT_SHARE_TAPPED(309),
    @UiEvent(doc = "screenshot smart action chip tapped")
    SCREENSHOT_SMART_ACTION_TAPPED(374),
    @UiEvent(doc = "screenshot scroll tapped")
    SCREENSHOT_SCROLL_TAPPED(373),
    @UiEvent(doc = "screenshot interaction timed out")
    SCREENSHOT_INTERACTION_TIMEOUT(310),
    @UiEvent(doc = "screenshot explicitly dismissed")
    SCREENSHOT_EXPLICIT_DISMISSAL(311),
    @UiEvent(doc = "screenshot swiped to dismiss")
    SCREENSHOT_SWIPE_DISMISSED(656),
    @UiEvent(doc = "screenshot dismissed, miscellaneous reason")
    SCREENSHOT_DISMISSED_OTHER(1076),
    @UiEvent(doc = "screenshot reentered for new screenshot")
    SCREENSHOT_REENTERED(640),
    @UiEvent(doc = "Long screenshot button was shown to the user")
    SCREENSHOT_LONG_SCREENSHOT_IMPRESSION(687),
    @UiEvent(doc = "User has requested a long screenshot")
    SCREENSHOT_LONG_SCREENSHOT_REQUESTED(688),
    @UiEvent(doc = "User has shared a long screenshot")
    SCREENSHOT_LONG_SCREENSHOT_SHARE(689),
    @UiEvent(doc = "User has sent a long screenshot to the editor")
    SCREENSHOT_LONG_SCREENSHOT_EDIT(690),
    @UiEvent(doc = "A long screenshot capture has started")
    SCREENSHOT_LONG_SCREENSHOT_STARTED(880),
    @UiEvent(doc = "The long screenshot capture failed")
    SCREENSHOT_LONG_SCREENSHOT_FAILURE(881),
    @UiEvent(doc = "The long screenshot capture completed successfully")
    SCREENSHOT_LONG_SCREENSHOT_COMPLETED(882),
    @UiEvent(doc = "Long screenshot editor activity started")
    SCREENSHOT_LONG_SCREENSHOT_ACTIVITY_STARTED(889),
    @UiEvent(doc = "Long screenshot editor activity loaded a previously saved screenshot")
    SCREENSHOT_LONG_SCREENSHOT_ACTIVITY_CACHED_IMAGE_LOADED(890),
    @UiEvent(doc = "Long screenshot editor activity finished")
    SCREENSHOT_LONG_SCREENSHOT_ACTIVITY_FINISHED(891),
    @UiEvent(doc = "User has saved a long screenshot to a file")
    SCREENSHOT_LONG_SCREENSHOT_SAVED(910),
    @UiEvent(doc = "User has discarded the result of a long screenshot")
    SCREENSHOT_LONG_SCREENSHOT_EXIT(911),
    @UiEvent(doc = "A screenshot has been taken and saved to work profile")
    SCREENSHOT_SAVED_TO_WORK_PROFILE(1240);

    private final int mId;

    ScreenshotEvent(int id) {
        mId = id;
    }

    @Override
    public int getId() {
        return mId;
    }

    static ScreenshotEvent getScreenshotSource(int source) {
        switch (source) {
            case SCREENSHOT_GLOBAL_ACTIONS:
                return ScreenshotEvent.SCREENSHOT_REQUESTED_GLOBAL_ACTIONS;
            case SCREENSHOT_KEY_CHORD:
                return ScreenshotEvent.SCREENSHOT_REQUESTED_KEY_CHORD;
            case SCREENSHOT_KEY_OTHER:
                return ScreenshotEvent.SCREENSHOT_REQUESTED_KEY_OTHER;
            case SCREENSHOT_OVERVIEW:
                return ScreenshotEvent.SCREENSHOT_REQUESTED_OVERVIEW;
            case SCREENSHOT_ACCESSIBILITY_ACTIONS:
                return ScreenshotEvent.SCREENSHOT_REQUESTED_ACCESSIBILITY_ACTIONS;
            case SCREENSHOT_VENDOR_GESTURE:
                return ScreenshotEvent.SCREENSHOT_REQUESTED_VENDOR_GESTURE;
            case SCREENSHOT_SCREEN_CAPTURE_UI:
                return ScreenshotEvent.SCREENSHOT_REQUESTED_SCREEN_CAPTURE_UI;
            case SCREENSHOT_OTHER:
            default:
                return ScreenshotEvent.SCREENSHOT_REQUESTED_OTHER;
        }
    }
}
