/*
 * Copyright (C) 2015 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.
 */

#ifndef AAPT_SDK_CONSTANTS_H
#define AAPT_SDK_CONSTANTS_H

#include <utility>

#include "androidfw/StringPiece.h"

#include "Resource.h"

namespace aapt {

using ApiVersion = int;

enum : ApiVersion {
  SDK_CUPCAKE = 3,
  SDK_DONUT = 4,
  SDK_ECLAIR = 5,
  SDK_ECLAIR_0_1 = 6,
  SDK_ECLAIR_MR1 = 7,
  SDK_FROYO = 8,
  SDK_GINGERBREAD = 9,
  SDK_GINGERBREAD_MR1 = 10,
  SDK_HONEYCOMB = 11,
  SDK_HONEYCOMB_MR1 = 12,
  SDK_HONEYCOMB_MR2 = 13,
  SDK_ICE_CREAM_SANDWICH = 14,
  SDK_ICE_CREAM_SANDWICH_MR1 = 15,
  SDK_JELLY_BEAN = 16,
  SDK_JELLY_BEAN_MR1 = 17,
  SDK_JELLY_BEAN_MR2 = 18,
  SDK_KITKAT = 19,
  SDK_KITKAT_WATCH = 20,
  SDK_LOLLIPOP = 21,
  SDK_LOLLIPOP_MR1 = 22,
  SDK_MARSHMALLOW = 23,
  SDK_NOUGAT = 24,
  SDK_NOUGAT_MR1 = 25,
  SDK_O = 26,
  SDK_O_MR1 = 27,
  SDK_P = 28,
  SDK_Q = 29,
};

ApiVersion FindAttributeSdkLevel(const ResourceId& id);
std::pair<android::StringPiece, ApiVersion> GetDevelopmentSdkCodeNameAndVersion();

}  // namespace aapt

#endif  // AAPT_SDK_CONSTANTS_H
