blob: 6ae1a9f9fd53ea644ceb4692ebe63ea6c0990b26 [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_FULLY_MANAGED_DEVICE;
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;
import com.android.managedprovisioning.util.LazyStringResource;
import com.google.common.collect.ImmutableList;
import java.util.List;
/**
* Utility class to get the corresponding wrapper that contains provisioning transition content.
*/
public class ProvisioningModeWrapperProvider {
private final ProvisioningParams mParams;
public ProvisioningModeWrapperProvider(ProvisioningParams params) {
this.mParams = requireNonNull(params);
}
@VisibleForTesting
static final ProvisioningModeWrapper WORK_PROFILE_WRAPPER =
new ProvisioningModeWrapper(
ImmutableList.of(
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);
/**
* Return default provisioning mode wrapper depending on provisioning parameter.
*/
public ProvisioningModeWrapper getProvisioningModeWrapper(
@ProvisioningMode int provisioningMode,
CharSequence deviceName) {
switch (provisioningMode) {
case PROVISIONING_MODE_WORK_PROFILE:
return WORK_PROFILE_WRAPPER;
case PROVISIONING_MODE_FULLY_MANAGED_DEVICE:
return getProvisioningModeWrapperForFullyManaged(deviceName);
case PROVISIONING_MODE_WORK_PROFILE_ON_ORG_OWNED_DEVICE:
return getProvisioningModeWrapperForCope(deviceName);
case PROVISIONING_MODE_WORK_PROFILE_ON_FULLY_MANAGED_DEVICE:
// fall through
}
throw new IllegalStateException("Unexpected provisioning mode " + provisioningMode);
}
@VisibleForTesting
private ProvisioningModeWrapper getProvisioningModeWrapperForCope(CharSequence deviceName) {
return new ProvisioningModeWrapper(
ImmutableList.of(
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,
/* descriptionId= */ 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)),
LazyStringResource.of(R.string.cope_provisioning_summary, deviceName));
}
/**
* 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(
CharSequence deviceName) {
final LazyStringResource provisioningSummary;
TransitionScreenWrapper.Builder secondScreenBuilder =
new TransitionScreenWrapper.Builder()
.setHeader(
LazyStringResource.of(
R.string.fully_managed_device_provisioning_step_2_header,
deviceName));
// Admin cannot grant sensors permissions
if (!mParams.deviceOwnerPermissionGrantOptOut) {
var subHeader = LazyStringResource.of(
R.string.fully_managed_device_provisioning_permissions_subheader,
deviceName);
var secondarySubHeader = LazyStringResource.of(
R.string.fully_managed_device_provisioning_permissions_secondary_subheader,
deviceName);
secondScreenBuilder
.setSubHeaderTitle(
R.string.fully_managed_device_provisioning_permissions_header)
.setSubHeader(subHeader)
.setSubHeaderIcon(R.drawable.ic_history)
.setSecondarySubHeaderTitle(
R.string.fully_managed_device_provisioning_permissions_secondary_header)
.setSecondarySubHeader(secondarySubHeader)
.setSecondarySubHeaderIcon(R.drawable.ic_perm_device_information)
.setShouldLoop(true);
provisioningSummary = LazyStringResource.of(
R.string.fully_managed_device_with_permission_control_provisioning_summary,
deviceName);
} else {
provisioningSummary =
LazyStringResource.of(R.string.fully_managed_device_provisioning_summary,
deviceName);
secondScreenBuilder
.setDescription(LazyStringResource.of(
R.string.fully_managed_device_provisioning_step_2_subheader,
deviceName))
.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(
ImmutableList.of(firstScreen, secondScreenBuilder.build()), provisioningSummary);
}
static final class ProvisioningModeWrapper {
final List<TransitionScreenWrapper> mTransitions;
final LazyStringResource mSummary;
ProvisioningModeWrapper(List<TransitionScreenWrapper> transitions,
LazyStringResource summary) {
this.mTransitions = requireNonNull(transitions);
this.mSummary = summary;
}
ProvisioningModeWrapper(List<TransitionScreenWrapper> transitions,
@StringRes int summaryId) {
this(transitions, LazyStringResource.of(summaryId));
}
}
}