blob: 71d7a38f857610956646eb4b61f67b22dac2f347 [file] [log] [blame]
/*
* Copyright (C) 2023 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 devicelockcontroller;
import "google/protobuf/timestamp.proto";
import "configuration_info.proto";
import "device_checkin_info.proto";
import "device_info.proto";
import "enrollment_info.proto";
option java_package = "com.android.devicelockcontroller.proto";
option java_multiple_files = true;
// This service is used by the Device Lock Android client to facilitate device
// provisioning of an eligible device into a Device Lock locking program.
service DeviceLockCheckinService {
// Fetches the check-in status of the device.
rpc GetDeviceCheckinStatus(GetDeviceCheckinStatusRequest)
returns (GetDeviceCheckinStatusResponse) {}
// Determines if a device is in an approved country.
rpc IsDeviceInApprovedCountry(IsDeviceInApprovedCountryRequest)
returns (IsDeviceInApprovedCountryResponse) {}
// Pauses the provisioning of the device.
rpc PauseDeviceProvisioning(PauseDeviceProvisioningRequest)
returns (PauseDeviceProvisioningResponse) {}
// Reports the device provision state of a device that is undergoing device
// provisioning.
rpc ReportDeviceProvisionState(ReportDeviceProvisionStateRequest)
returns (ReportDeviceProvisionStateResponse) {}
}
// Request to retrieve the check-in status of the device.
message GetDeviceCheckinStatusRequest {
// The device identifiers associated with the device provided by the Device
// Lock Android client. The Device Lock Android client would provide only one
// device identifier once the Device Lock Check-in service determines which
// of the device identifiers is registered with a locking program.
repeated ClientDeviceIdentifier client_device_identifiers = 1;
// The Mobile Network Code for the carrier, the Device Lock Android client
// would fetch it from TelephonyManager#getSimOperator().
optional string carrier_mccmnc = 2;
// The Firebase Cloud Messaging (FCM) registration token associated with the
// device provided by the Device Lock Android client. The token is only used
// for GMS devices.
optional string fcm_registration_token = 3;
// The name of the manufacturer of the device.
optional string device_manufacturer = 4;
// The name of the model of the device.
optional string device_model = 5;
// The internal name of the device.
optional string device_internal_name = 6;
}
message ClientDeviceIdentifier {
// The device identifier associated with the device.
optional string device_identifier = 1;
// The type of the device identifier.
optional DeviceIdentifierType device_identifier_type = 2;
}
// The different check-in status the Device Lock Android client can be in.
enum ClientCheckinStatus {
CLIENT_CHECKIN_STATUS_UNSPECIFIED = 0;
// The device is not ready for provision. The Device Lock Android client
// would need to do another check-in.
CLIENT_CHECKIN_STATUS_RETRY_CHECKIN = 1;
// The device is ready for provision. The Device Lock Android client can use
// the device provisioning information provided by the Device Lock server to
// provision the device.
CLIENT_CHECKIN_STATUS_READY_FOR_PROVISION = 2;
// The device no longer needs to be provisioned. The Device Lock Android
// client can stop future check-ins.
CLIENT_CHECKIN_STATUS_STOP_CHECKIN = 3;
}
// Response to a request to retrieve the check-in status of a given device.
message GetDeviceCheckinStatusResponse {
// The Device Lock Android client check-in status determined by the Device
// Lock server.
optional ClientCheckinStatus client_checkin_status = 1;
// Set by the Device Lock server when the Device Lock Android client provides
// multiple device identifiers and one of the multiple device identifiers is
// registered with the Device Lock server. The client should use the device
// identifier that was found for any future communications with the Device
// Lock server.
optional string registered_device_identifier = 2;
// One of the following fields will get populated based on the device
// check-in status. But if the Device Lock server determines that the Device
// Lock Android client no longer needs to do a check-in, then none of the
// fields will be populated.
oneof next_steps {
// The Device Lock server determined that the Device Lock Android client
// needs to perform another device check-in.
NextCheckinInformation next_checkin_information = 3;
// The Device Lock server determined that the Device Lock Android client
// can now provision the device.
DeviceProvisioningInformation device_provisioning_information = 4;
}
}
// Information needed by the Device Lock Android client for the next check-in.
message NextCheckinInformation {
// Set by the Device Lock server which tells the Device Lock Android client
// the date when the next check-in should happen.
optional google.protobuf.Timestamp next_checkin_timestamp = 1;
}
// Information needed by the Device Lock Android client for device provisioning.
message DeviceProvisioningInformation {
// The configuration information assigned to the device.
optional ConfigurationInfo configuration_information = 1;
// The type of enrollment assigned to the device. This is used by the
// Device Lock Android client to determine what type of strings should be
// shown to the user.
optional EnrollmentType enrollment_type = 2;
// The provision type selected when enrolling the device into a locking
// program. The Device Lock Android client would use this to determine which
// provision approach should be used to provision the device.
optional DeviceProvisionType device_provision_type = 3;
// Whether the Device Lock Android client should force the provisioning. If
// true, then the user cannot stop device provisioning. Otherwise, if false,
// then the user can optionally pause device provisioning.
optional bool force_provisioning = 4;
// Whether the device is an approved country. If true, then the Device Lock
// Android client can proceed with device provisioning. Otherwise, this would
// be considered a provisioning failure and the Device Lock Android client
// would use the ReportDeviceProvisionState RPC to report the provision
// failure.
optional bool is_device_in_approved_country = 5;
}
// Request to determine whether a registered device is in an approved country.
message IsDeviceInApprovedCountryRequest {
// The device identifier that is registered with the Device Lock server.
optional string registered_device_identifier = 1;
// The Mobile Network Code for the carrier, the Device Lock Android client
// would fetch it from TelephonyManager#getSimOperator().
optional string carrier_mccmnc = 2;
}
// Response to a request for determining if a registered device is in an
// approved country.
message IsDeviceInApprovedCountryResponse {
// Whether the device is an approved country.
optional bool is_device_in_approved_country = 1;
}
// The different reasons device provisioning can be paused.
enum PauseDeviceProvisioningReason {
PAUSE_DEVICE_PROVISIONING_REASON_UNSPECIFIED = 0;
// If given as an option to the user, the user can pause device provisioning.
// For example, the user is currently driving and the Device Lock Android
// client is prompting the user to proceed with device provisioning.
PAUSE_DEVICE_PROVISIONING_REASON_USER_DEFERRED_DEVICE_PROVISIONING = 1;
}
// Request to pause device provisioning of an eligible device.
message PauseDeviceProvisioningRequest {
// The device identifier that is registered with the Device Lock server that
// is requesting to pause device provisioning.
optional string registered_device_identifier = 1;
// The reason for pausing device provisioning.
optional PauseDeviceProvisioningReason pause_device_provisioning_reason = 2;
}
// Response to a request to pause device provisioning of an eligible device.
message PauseDeviceProvisioningResponse {}
// The different reasons device provisioning can fail on a device.
enum ClientProvisionFailureReason {
PROVISION_FAILURE_REASON_UNSPECIFIED = 0;
// Provision failed due to play installation task class is unavailable.
PROVISION_FAILURE_REASON_PLAY_TASK_UNAVAILABLE = 1;
// Provision failed due to play installation failed.
PROVISION_FAILURE_REASON_PLAY_INSTALLATION_FAILED = 2;
// Provision failed due to country eligibility information unavailable.
PROVISION_FAILURE_REASON_COUNTRY_INFO_UNAVAILABLE = 3;
// Provision failed due to device is not in an eligible country or region.
PROVISION_FAILURE_REASON_NOT_IN_ELIGIBLE_COUNTRY = 4;
// Provision failed due to inability to enforce policies.
PROVISION_FAILURE_REASON_POLICY_ENFORCEMENT_FAILED = 5;
// Provision failed previously and the device has stayed failing beyond
// the deadline.
PROVISION_FAILURE_REASON_DEADLINE_PASSED = 6;
}
// The different provision states of a device.
enum ClientProvisionState {
CLIENT_PROVISION_STATE_UNSPECIFIED = 0;
// The Device Lock Android client would retry to provision the device.
CLIENT_PROVISION_STATE_RETRY = 1;
// The Device Lock Android client would inform the user that there has been
// an issue with device provisioning. The user can dismiss this.
CLIENT_PROVISION_STATE_DISMISSIBLE_UI = 2;
// The Device Lock Android client would inform the user that there has been
// an issue with device provisioning. The user cannot dismiss this.
CLIENT_PROVISION_STATE_PERSISTENT_UI = 3;
// The Device Lock Android client would factory reset the device because
// device provisioning could not be done.
CLIENT_PROVISION_STATE_FACTORY_RESET = 4;
// Device provisioning was a success.
CLIENT_PROVISION_STATE_SUCCESS = 5;
}
// Request to report the device provision state of a device that is
// undergoing device provisioning.
message ReportDeviceProvisionStateRequest {
// The reason why device provisioning failed if applicable.
optional ClientProvisionFailureReason client_provision_failure_reason = 1;
// The previous device provision state that the device was in. If not known,
// then CLIENT_PROVISION_STATE_UNSPECIFIED should be used. It is not known
// by the client on the first attempt of device provisioning.
optional ClientProvisionState previous_client_provision_state = 2;
// Whether device provision was a success.
optional bool provision_success = 3;
// The device identifier that is registered with the Device Lock server.
optional string registered_device_identifier = 4;
}
// Response to a request that is reporting the device provision state of a
// device undergoing device provisioning.
message ReportDeviceProvisionStateResponse {
// The Device Lock server determined the next provision state of the client.
// If the Device Lock Android client needs to send another gRPC request, then
// this provision state would be used as the previous provision state in the
// request.
optional ClientProvisionState next_client_provision_state = 1;
// The number of days left until the device should factory reset because of a failed provision.
// This number should only be used when next_client_provision_state is
// CLIENT_PROVISION_STATE_DISMISSIBLE_UI
optional uint32 days_left_until_reset = 2;
}