1 /* 2 * Copyright (C) 2017 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 package com.android.managedprovisioning.preprovisioning; 17 18 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE; 19 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME; 20 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI; 21 22 import static com.android.managedprovisioning.e2eui.ManagedProfileAdminReceiver.COMPONENT_NAME; 23 24 import static org.mockito.ArgumentMatchers.any; 25 import static org.mockito.Mockito.when; 26 27 import android.app.Activity; 28 import android.content.Intent; 29 import android.graphics.Color; 30 31 import androidx.test.filters.SmallTest; 32 import androidx.test.rule.ActivityTestRule; 33 34 import com.android.managedprovisioning.TestInstrumentationRunner; 35 import com.android.managedprovisioning.TestUtils; 36 import com.android.managedprovisioning.analytics.TimeLogger; 37 import com.android.managedprovisioning.common.CustomizationVerifier; 38 import com.android.managedprovisioning.common.GetProvisioningModeUtils; 39 import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences; 40 import com.android.managedprovisioning.common.PolicyComplianceUtils; 41 import com.android.managedprovisioning.common.SettingsFacade; 42 import com.android.managedprovisioning.common.ThemeHelper; 43 import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker; 44 import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge; 45 import com.android.managedprovisioning.common.UriBitmap; 46 import com.android.managedprovisioning.common.Utils; 47 import com.android.managedprovisioning.parser.DisclaimersParserImpl; 48 import com.android.managedprovisioning.parser.MessageParser; 49 import com.android.managedprovisioning.preprovisioning.terms.TermsActivity; 50 51 import org.junit.AfterClass; 52 import org.junit.Before; 53 import org.junit.Ignore; 54 import org.junit.Rule; 55 import org.junit.Test; 56 import org.junit.runner.RunWith; 57 import org.mockito.Mock; 58 import org.mockito.junit.MockitoJUnitRunner; 59 60 import java.io.IOException; 61 62 @SmallTest 63 @RunWith(MockitoJUnitRunner.class) 64 // TODO: Currently only color and logo functionality are covered. Fill in the rest (b/32131665). 65 public class PreProvisioningActivityTest { 66 private static final int DEFAULT_LOGO_COLOR = Color.rgb(99, 99, 99); 67 68 @Mock 69 private Utils mUtils; 70 71 @Rule 72 public ActivityTestRule<PreProvisioningActivity> mActivityRule = new ActivityTestRule<>( 73 PreProvisioningActivity.class, true, false); 74 75 @Before setup()76 public void setup() { 77 when(mUtils.getAccentColor(any())).thenReturn(DEFAULT_LOGO_COLOR); 78 79 TestInstrumentationRunner.registerReplacedActivity(PreProvisioningActivity.class, 80 (classLoader, className, intent) -> new PreProvisioningActivity( 81 activity -> new PreProvisioningActivityController( 82 activity, 83 activity, 84 mUtils, 85 new SettingsFacade(), 86 new ManagedProvisioningSharedPreferences(activity), 87 new PolicyComplianceUtils(), 88 new GetProvisioningModeUtils(), 89 new PreProvisioningViewModel( 90 new TimeLogger(activity, 0 /* category */), 91 new MessageParser(activity), 92 TestUtils.createEncryptionController(activity)), 93 DisclaimersParserImpl::new 94 ) { 95 @Override 96 protected boolean checkDevicePolicyPreconditions() { 97 return true; 98 } 99 100 @Override 101 protected boolean verifyActionAndCaller(Intent intent, 102 String caller) { 103 return true; 104 } 105 }, null, 106 mUtils, 107 new SettingsFacade(), 108 new ThemeHelper( 109 new DefaultNightModeChecker(), new DefaultSetupWizardBridge()))); 110 } 111 112 @AfterClass tearDownClass()113 public static void tearDownClass() { 114 TestInstrumentationRunner.unregisterReplacedActivity(TermsActivity.class); 115 } 116 117 @Ignore("b/181323689") 118 @Test deviceOwnerDefaultLogo()119 public void deviceOwnerDefaultLogo() { 120 Activity activity = mActivityRule.launchActivity( 121 createIntent(ACTION_PROVISION_MANAGED_DEVICE)); 122 CustomizationVerifier v = new CustomizationVerifier(activity); 123 124 v.assertDefaultLogoCorrect(DEFAULT_LOGO_COLOR); 125 } 126 127 @Ignore("b/181323689") 128 @Test deviceOwnerCustomLogo()129 public void deviceOwnerCustomLogo() throws IOException { 130 UriBitmap expectedLogo = UriBitmap.createSimpleInstance(); 131 132 Activity activity = mActivityRule.launchActivity( 133 createIntent(ACTION_PROVISION_MANAGED_DEVICE) 134 .putExtra(EXTRA_PROVISIONING_LOGO_URI, expectedLogo.getUri())); 135 CustomizationVerifier v = new CustomizationVerifier(activity); 136 137 v.assertCustomLogoCorrect(expectedLogo.getBitmap()); 138 } 139 createIntent(String provisioningAction)140 private Intent createIntent(String provisioningAction) { 141 Intent intent = new Intent(provisioningAction).putExtra( 142 EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, COMPONENT_NAME); 143 return intent; 144 } 145 }