/*
 * Copyright (C) 2017 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 android.content;

option java_multiple_files = true;

import "frameworks/base/core/proto/android/content/component_name.proto";
import "frameworks/base/core/proto/android/os/patternmatcher.proto";
import "frameworks/base/core/proto/android/os/persistablebundle.proto";
import "frameworks/base/core/proto/android/privacy.proto";

// Next Tag: 14
message IntentProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    enum DockState {
        // Used as an int value for Intent#EXTRA_DOCK_STATE to represent that
        // the phone is not in any dock.
        DOCK_STATE_UNDOCKED = 0;

        // Used as an int value for Intent#EXTRA_DOCK_STATE to represent that
        // the phone is in a desk dock.
        DOCK_STATE_DESK = 1;

        // Used as an int value for Intent#EXTRA_DOCK_STATE to represent that
        // the phone is in a car dock.
        DOCK_STATE_CAR = 2;

        // Used as an int value for Intent#EXTRA_DOCK_STATE to represent that
        // the phone is in a analog (low end) dock.
        DOCK_STATE_LE_DESK = 3;

        // Used as an int value for Intent#EXTRA_DOCK_STATE to represent that
        // the phone is in a digital (high end) dock.
        DOCK_STATE_HE_DESK = 4;
    }

    optional string action = 1;
    repeated string categories = 2;
    optional string data = 3 [ (.android.privacy).dest = DEST_EXPLICIT ];
    optional string type = 4;
    optional string flag = 5;
    optional string extended_flag = 14;
    optional string package = 6;
    optional ComponentNameProto component = 7;
    optional string source_bounds = 8;
    optional string clip_data = 9 [ (.android.privacy).dest = DEST_LOCAL ];
    optional string extras = 10 [ (.android.privacy).dest = DEST_LOCAL ];
    // UserHandle value (similar to user_id in other protos).
    optional int32 content_user_hint = 11;
    optional string selector = 12;
    optional string identifier = 13 [ (.android.privacy).dest = DEST_EXPLICIT ];
}

// Next Tag: 14
message IntentFilterProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    repeated string actions = 1;
    repeated string categories = 2;
    // https://developer.android.com/guide/topics/manifest/data-element#scheme:
    // The scheme part of a URI. This is the minimal essential attribute for
    // specifying a URI; at least one scheme attribute must be set for the filter,
    // or none of the other URI attributes are meaningful. A scheme is specified
    // without the trailing colon (for example, http, rather than http:). If the
    // filter has a data type set (the mimeType attribute) but no scheme, the
    // content: and file: schemes are assumed.
    repeated string data_schemes = 3  [ (.android.privacy).dest = DEST_EXPLICIT ];
    repeated android.os.PatternMatcherProto data_scheme_specs = 4;
    repeated AuthorityEntryProto data_authorities = 5;
    repeated android.os.PatternMatcherProto data_paths = 6;
    repeated string data_types = 7;
    optional int32 priority = 8;
    optional bool has_partial_types = 9;
    optional bool get_auto_verify = 10;
    repeated string mime_groups = 11;
    optional android.os.PersistableBundleProto extras = 12;
    repeated UriRelativeFilterGroupProto uri_relative_filter_groups = 13;
}

message AuthorityEntryProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional string host = 1;
    optional bool wild = 2;
    optional int32 port = 3;
}

message UriRelativeFilterGroupProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    enum Action {
        ACTION_ALLOW = 0;
        ACTION_BLOCK = 1;
    }

    optional Action action = 1;
    repeated UriRelativeFilterProto uri_relative_filters = 2;
}

message UriRelativeFilterProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    required int32 uri_part = 1;
    required int32 pattern_type = 2;
    required string filter = 3;
}
