• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.managedprovisioning.provisioning;
18 
19 import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_FULLY_MANAGED_DEVICE;
20 import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_WORK_PROFILE;
21 import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_WORK_PROFILE_ON_ORG_OWNED_DEVICE;
22 
23 import static java.util.Objects.requireNonNull;
24 
25 import androidx.annotation.StringRes;
26 import androidx.annotation.VisibleForTesting;
27 
28 import com.android.managedprovisioning.R;
29 import com.android.managedprovisioning.model.ProvisioningParams;
30 import com.android.managedprovisioning.provisioning.ProvisioningActivity.ProvisioningMode;
31 
32 /**
33  * Utility class to get the corresponding wrapper that contains provisioning transition content.
34  */
35 public class ProvisioningModeWrapperProvider {
36     private final ProvisioningParams mParams;
37 
ProvisioningModeWrapperProvider(ProvisioningParams params)38     public ProvisioningModeWrapperProvider(ProvisioningParams params) {
39         mParams = requireNonNull(params);
40     }
41 
42     @VisibleForTesting
43     static final ProvisioningModeWrapper WORK_PROFILE_WRAPPER =
44             new ProvisioningModeWrapper(new TransitionScreenWrapper[] {
45                     new TransitionScreenWrapper(R.string.work_profile_provisioning_step_1_header,
46                             R.raw.separate_work_and_personal_animation),
47                     new TransitionScreenWrapper(R.string.work_profile_provisioning_step_2_header,
48                             R.raw.pause_work_apps_animation),
49                     new TransitionScreenWrapper(R.string.work_profile_provisioning_step_3_header,
50                             R.raw.not_private_animation)
51             }, R.string.work_profile_provisioning_summary);
52 
53     @VisibleForTesting
54     static final ProvisioningModeWrapper WORK_PROFILE_ON_ORG_OWNED_DEVICE_WRAPPER =
55             new ProvisioningModeWrapper(new TransitionScreenWrapper[] {
56                     new TransitionScreenWrapper(R.string.cope_provisioning_step_1_header,
57                             R.raw.separate_work_and_personal_animation),
58                     new TransitionScreenWrapper(R.string.cope_provisioning_step_2_header,
59                             /* description= */ 0,
60                             R.raw.personal_apps_separate_hidden_from_work_animation,
61                             /* shouldLoop */ false),
62                     new TransitionScreenWrapper(R.string.cope_provisioning_step_3_header,
63                             R.raw.it_admin_control_device_block_apps_animation)
64             }, R.string.cope_provisioning_summary);
65 
66     /**
67      * Return default provisioning mode wrapper depending on provisioning parameter.
68      */
getProvisioningModeWrapper( @rovisioningMode int provisioningMode)69     public ProvisioningModeWrapper getProvisioningModeWrapper(
70             @ProvisioningMode int provisioningMode) {
71         switch (provisioningMode) {
72             case PROVISIONING_MODE_WORK_PROFILE:
73                 return WORK_PROFILE_WRAPPER;
74             case PROVISIONING_MODE_FULLY_MANAGED_DEVICE:
75                 return getProvisioningModeWrapperForFullyManaged();
76             case PROVISIONING_MODE_WORK_PROFILE_ON_ORG_OWNED_DEVICE:
77                 return WORK_PROFILE_ON_ORG_OWNED_DEVICE_WRAPPER;
78         }
79         throw new IllegalStateException("Unexpected provisioning mode " + provisioningMode);
80     }
81 
82     /** Return the provisioning mode wrapper for a fully-managed device.
83      * The second screen, as well as the accessible summary, will be different, depending on whether
84      * the admin can grant sensors-related permissions on this device or not.
85      */
86     @VisibleForTesting
getProvisioningModeWrapperForFullyManaged()87     private ProvisioningModeWrapper getProvisioningModeWrapperForFullyManaged() {
88         final int provisioningSummaryId;
89         TransitionScreenWrapper.Builder secondScreenBuilder =
90                 new TransitionScreenWrapper.Builder()
91                         .setHeader(R.string.fully_managed_device_provisioning_step_2_header);
92 
93         // Admin cannot grant sensors permissions
94         if (!mParams.deviceOwnerPermissionGrantOptOut) {
95             secondScreenBuilder
96                     .setSubHeaderTitle(
97                             R.string.fully_managed_device_provisioning_permissions_header)
98                     .setSubHeader(R.string.fully_managed_device_provisioning_permissions_subheader)
99                     .setSubHeaderIcon(R.drawable.ic_history)
100                     .setSecondarySubHeaderTitle(
101                             R.string.fully_managed_device_provisioning_permissions_secondary_header)
102                     .setSecondarySubHeader(R.string
103                             .fully_managed_device_provisioning_permissions_secondary_subheader)
104                     .setSecondarySubHeaderIcon(R.drawable.ic_perm_device_information)
105                     .setShouldLoop(true);
106             provisioningSummaryId =
107                     R.string.fully_managed_device_with_permission_control_provisioning_summary;
108         } else {
109             provisioningSummaryId = R.string.fully_managed_device_provisioning_summary;
110             secondScreenBuilder
111                     .setDescription(R.string.fully_managed_device_provisioning_step_2_subheader)
112                     .setAnimation(R.raw.not_private_animation);
113         }
114 
115         TransitionScreenWrapper firstScreen = new TransitionScreenWrapper(
116                 R.string.fully_managed_device_provisioning_step_1_header,
117                 R.raw.connect_on_the_go_animation);
118         return new ProvisioningModeWrapper(new TransitionScreenWrapper[] {
119                 firstScreen, secondScreenBuilder.build()}, provisioningSummaryId);
120     }
121 
122     static final class ProvisioningModeWrapper {
123         final TransitionScreenWrapper[] transitions;
124         final @StringRes int summary;
125 
ProvisioningModeWrapper(TransitionScreenWrapper[] transitions, @StringRes int summary)126         ProvisioningModeWrapper(TransitionScreenWrapper[] transitions, @StringRes int summary) {
127             this.transitions = requireNonNull(transitions);
128             this.summary = summary;
129         }
130     }
131 }
132