/*
 * 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.server.people.data;

import com.android.internal.annotations.VisibleForTesting;

/** The data containing package usage info. */
public class AppUsageStatsData {

    private int mLaunchCount;

    private int mChosenCount;

    @VisibleForTesting
    public AppUsageStatsData(int chosenCount, int launchCount) {
        this.mChosenCount = chosenCount;
        this.mLaunchCount = launchCount;
    }

    public AppUsageStatsData() {
    }

    public int getLaunchCount() {
        return mLaunchCount;
    }

    void incrementLaunchCountBy(int launchCount) {
        this.mLaunchCount += launchCount;
    }

    public int getChosenCount() {
        return mChosenCount;
    }

    void incrementChosenCountBy(int chosenCount) {
        this.mChosenCount += chosenCount;
    }
}
