/* * 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; } } }