syntax = "proto3";

package com.android.settingslib.graph;

option java_package = "com.android.settingslib.graph.proto";
option java_multiple_files = true;

// Proto represents preference graph.
message PreferenceGraphProto {
  // Preference screens appear in the graph.
  // Key: preference key of the PreferenceScreen. Value: PreferenceScreen.
  map<string, PreferenceScreenProto> screens = 1;
  // Roots of the graph.
  // Each element is a preference key of the PreferenceScreen.
  repeated string roots = 2;
  // Activities appear in the graph.
  // Key: activity class. Value: preference key of associated PreferenceScreen.
  map<string, string> activity_screens = 3;
}

// Proto of PreferenceScreen.
message PreferenceScreenProto {
  // Intent to show the PreferenceScreen.
  optional IntentProto intent = 1;
  // Root of the PreferenceScreen hierarchy.
  optional PreferenceGroupProto root = 2;
  // If the preference screen provides complete hierarchy by source code.
  optional bool complete_hierarchy = 3;
}

// Proto of PreferenceGroup.
message PreferenceGroupProto {
  // Self information of PreferenceGroup.
  optional PreferenceProto preference = 1;
  // A list of children.
  repeated PreferenceOrGroupProto preferences = 2;
}

// Proto represents either PreferenceProto or PreferenceGroupProto.
message PreferenceOrGroupProto {
  oneof kind {
    // It is a Preference.
    PreferenceProto preference = 1;
    // It is a PreferenceGroup.
    PreferenceGroupProto group = 2;
  }
}

// Proto of Preference.
message PreferenceProto {
  // Key of the preference.
  optional string key = 1;
  // Title of the preference.
  optional TextProto title = 2;
  // Summary of the preference.
  optional TextProto summary = 3;
  // Icon of the preference.
  optional int32 icon = 4;
  // Additional keywords for indexing.
  optional int32 keywords = 5;
  // Extras of the preference.
  optional BundleProto extras = 6;
  // Whether the preference is indexable.
  optional bool indexable = 7;
  // Whether the preference is enabled.
  optional bool enabled = 8;
  // Whether the preference is available/visible.
  optional bool available = 9;
  // Whether the preference is persistent.
  optional bool persistent = 10;
  // Whether the preference is restricted by managed configurations.
  optional bool restricted = 11;
  // Target of the preference action.
  optional ActionTarget action_target = 12;
  // Preference value (if present, it means `persistent` is true).
  optional PreferenceValueProto value = 13;

  // Target of an Intent
  message ActionTarget {
    oneof kind {
      // Resolved key of the preference screen located in current app.
      // This is resolved from android:fragment or activity of current app.
      string key = 1;
      // Unresolvable Intent that is either an unrecognized activity of current
      // app or activity belongs to other app.
      IntentProto intent = 2;
    }
  }
}

// Proto of string or string resource id.
message TextProto {
  oneof text {
    int32 resource_id = 1;
    string string = 2;
  }
}

// Proto of preference value.
message PreferenceValueProto {
  oneof value {
    bool boolean_value = 1;
  }
}

// Proto of android.content.Intent
message IntentProto {
  // The action of the Intent.
  optional string action = 1;

  // The data attribute of the Intent, expressed as a URI.
  optional string data = 2;

  // The package attribute of the Intent, which may be set to force the
  // detection of a particular application package that can handle the event.
  optional string pkg = 3;

  // The component attribute of the Intent, which may be set to force the
  // detection of a particular component (app). If present, this must be a
  // package name followed by a '/' and then followed by the class name.
  optional string component = 4;

  // Flags controlling how intent is handled. The value must be bitwise OR of
  // intent flag constants defined by Android.
  // http://developer.android.com/reference/android/content/Intent.html#setFlags(int)
  optional int32 flags = 5;

  // Extended data from the intent.
  optional BundleProto extras = 6;

  // The MIME type of the Intent (e.g. "text/plain").
  //
  // For more information, see
  // https://developer.android.com/reference/android/content/Intent#setType(java.lang.String).
  optional string mime_type = 7;
}

// Proto of android.os.Bundle
message BundleProto {
  // Bundle data.
  map<string, BundleValue> values = 1;

  message BundleValue {
    // Bundle data value for the associated key name.
    // Can be extended to support other types of bundled data.
    oneof value {
      string string_value = 1;
      bytes bytes_value = 2;
      int32 int_value = 3;
      int64 long_value = 4;
      bool boolean_value = 5;
      double double_value = 6;
      BundleProto bundle_value = 7;
    }
  }
}
