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

syntax = "proto2";

package launcher_backup;

option java_package = "com.android.launcher3.backup";
option java_outer_classname = "BackupProtos";

message Key {
  enum Type {
    FAVORITE = 1;
    SCREEN = 2;
    ICON = 3;
    WIDGET = 4;
  }
  required Type type = 1;
  optional string name = 2;  // keep this short
  optional int64 id = 3;
  optional int64 checksum = 4;
}

message CheckedMessage {
  required bytes payload = 1;
  required int64 checksum = 2;
}

message DeviceProfieData {
  required float desktop_rows = 1;
  required float desktop_cols = 2;
  required float hotseat_count = 3;
  required int32 allapps_rank = 4;
}

message Journal {
  required int32 app_version = 1;

  // Time when the backup was created
  required int64 t = 2;

  // Total bytes written during the last backup
  // OBSOLETE: A state may contain entries which are already present in the backup
  // and were not written in the last backup
  optional int64 bytes = 3;

  // Total entries written during the last backup
  // OBSOLETE: A state may contain entries which are already present in the backup
  // and were not written in the last backup
  optional int32 rows = 4;

  // Valid keys for this state
  repeated Key key = 5;

  // Backup format version.
  optional int32 backup_version = 6 [default = 1];

  optional DeviceProfieData profile = 7;
}

message Favorite {
  // Type of the app, this target represents
  enum TargetType {
    TARGET_NONE = 0;
    TARGET_PHONE = 1;
    TARGET_MESSENGER = 2;
    TARGET_EMAIL = 3;
    TARGET_BROWSER = 4;
    TARGET_GALLERY = 5;
    TARGET_CAMERA = 6;
  }

  required int64 id = 1;
  required int32 itemType = 2;
  optional string title = 3;
  optional int32 container = 4;
  optional int32 screen = 5;
  optional int32 cellX = 6;
  optional int32 cellY = 7;
  optional int32 spanX = 8;
  optional int32 spanY = 9;
  optional int32 displayMode = 10;
  optional int32 appWidgetId = 11;
  optional string appWidgetProvider = 12;
  optional string intent = 13;
  optional string uri = 14;
  optional int32 iconType = 15;
  optional string iconPackage = 16;
  optional string iconResource = 17;
  optional bytes icon = 18;

  // Added in backup version 4
  optional TargetType targetType = 19 [default = TARGET_NONE];
  optional int32 rank = 20;
}

message Screen {
  required int64 id = 1;
  optional int32 rank = 2;
}

message Resource {
  required int32 dpi = 1;
  required bytes data = 2;
}

message Widget {
  required string provider = 1;
  optional string label = 2;
  optional bool configure = 3;
  optional Resource icon = 4;
  optional Resource preview = 5;

  // Added in backup version 3
  // Assume that a widget is resizable upto 2x2 if no data is available
  optional int32 minSpanX = 6 [default = 2];
  optional int32 minSpanY = 7 [default = 2];
}
