blob: edac435682dcb0dffd2371b969da0cb3df5446a9 [file]
/*
* Copyright (C) 2021 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.
*/
package com.android.managedprovisioning.provisioning;
import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_FULLY_MANAGED_DEVICE;
import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_WORK_PROFILE;
import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_WORK_PROFILE_ON_ORG_OWNED_DEVICE;
import static java.util.Objects.requireNonNull;
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
import com.android.managedprovisioning.R;
import com.android.managedprovisioning.model.ProvisioningParams;
import com.android.managedprovisioning.provisioning.ProvisioningActivity.ProvisioningMode;
/**
* Utility class to get the corresponding wrapper that contains provisioning transition content.
*/
public class ProvisioningModeWrapperProvider {
private final ProvisioningParams mParams;
public ProvisioningModeWrapperProvider(ProvisioningParams params) {
mParams = requireNonNull(params);
}
@VisibleForTesting
static final ProvisioningModeWrapper WORK_PROFILE_WRAPPER =
new ProvisioningModeWrapper(new TransitionScreenWrapper[] {
new TransitionScreenWrapper(R.string.work_profile_provisioning_step_1_header,
R.raw.separate_work_and_personal_animation),
new TransitionScreenWrapper(R.string.work_profile_provisioning_step_2_header,
R.raw.pause_work_apps_animation),
new TransitionScreenWrapper(R.string.work_profile_provisioning_step_3_header,
R.raw.not_private_animation)
}, R.string.work_profile_provisioning_summary);
@VisibleForTesting
static final ProvisioningModeWrapper WORK_PROFILE_ON_ORG_OWNED_DEVICE_WRAPPER =
new ProvisioningModeWrapper(new TransitionScreenWrapper[] {
new TransitionScreenWrapper(R.string.cope_provisioning_step_1_header,
R.raw.separate_work_and_personal_animation),
new TransitionScreenWrapper(R.string.cope_provisioning_step_2_header,
/* description= */ 0,
R.raw.personal_apps_separate_hidden_from_work_animation,
/* shouldLoop */ false),
new TransitionScreenWrapper(R.string.cope_provisioning_step_3_header,
R.raw.it_admin_control_device_block_apps_animation)
}, R.string.cope_provisioning_summary);
/**
* Return default provisioning mode wrapper depending on provisioning parameter.
*/
public ProvisioningModeWrapper getProvisioningModeWrapper(
@ProvisioningMode int provisioningMode) {
switch (provisioningMode) {
case PROVISIONING_MODE_WORK_PROFILE:
return WORK_PROFILE_WRAPPER;
case PROVISIONING_MODE_FULLY_MANAGED_DEVICE:
return getProvisioningModeWrapperForFullyManaged();
case PROVISIONING_MODE_WORK_PROFILE_ON_ORG_OWNED_DEVICE:
return WORK_PROFILE_ON_ORG_OWNED_DEVICE_WRAPPER;
}
throw new IllegalStateException("Unexpected provisioning mode " + provisioningMode);
}
/** Return the provisioning mode wrapper for a fully-managed device.
* The second screen, as well as the accessible summary, will be different, depending on whether
* the admin can grant sensors-related permissions on this device or not.
*/
@VisibleForTesting
private ProvisioningModeWrapper getProvisioningModeWrapperForFullyManaged() {
final int provisioningSummaryId;
TransitionScreenWrapper.Builder secondScreenBuilder =
new TransitionScreenWrapper.Builder()
.setHeader(R.string.fully_managed_device_provisioning_step_2_header);
// Admin cannot grant sensors permissions
if (!mParams.deviceOwnerPermissionGrantOptOut) {
secondScreenBuilder
.setSubHeaderTitle(
R.string.fully_managed_device_provisioning_permissions_header)
.setSubHeader(R.string.fully_managed_device_provisioning_permissions_subheader)
.setSubHeaderIcon(R.drawable.ic_history)
.setSecondarySubHeaderTitle(
R.string.fully_managed_device_provisioning_permissions_secondary_header)
.setSecondarySubHeader(R.string
.fully_managed_device_provisioning_permissions_secondary_subheader)
.setSecondarySubHeaderIcon(R.drawable.ic_perm_device_information)
.setShouldLoop(true);
provisioningSummaryId =
R.string.fully_managed_device_with_permission_control_provisioning_summary;
} else {
provisioningSummaryId = R.string.fully_managed_device_provisioning_summary;
secondScreenBuilder
.setDescription(R.string.fully_managed_device_provisioning_step_2_subheader)
.setAnimation(R.raw.not_private_animation);
}
TransitionScreenWrapper firstScreen = new TransitionScreenWrapper(
R.string.fully_managed_device_provisioning_step_1_header,
R.raw.connect_on_the_go_animation);
return new ProvisioningModeWrapper(new TransitionScreenWrapper[] {
firstScreen, secondScreenBuilder.build()}, provisioningSummaryId);
}
static final class ProvisioningModeWrapper {
final TransitionScreenWrapper[] transitions;
final @StringRes int summary;
ProvisioningModeWrapper(TransitionScreenWrapper[] transitions, @StringRes int summary) {
this.transitions = requireNonNull(transitions);
this.summary = summary;
}
}
}