| /* |
| * Copyright (C) 2016 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.settings.users; |
| |
| import static com.google.common.truth.Truth.assertThat; |
| |
| import android.content.Context; |
| import android.content.Intent; |
| import android.support.test.InstrumentationRegistry; |
| import android.support.test.filters.SmallTest; |
| import android.support.test.runner.AndroidJUnit4; |
| import android.support.test.uiautomator.UiDevice; |
| import android.support.test.uiautomator.UiObject; |
| import android.support.test.uiautomator.UiSelector; |
| import android.support.test.uiautomator.UiScrollable; |
| import android.support.test.uiautomator.UiObjectNotFoundException; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| @RunWith(AndroidJUnit4.class) |
| @SmallTest |
| public class UserSettingsTest { |
| |
| private static final String SYSTEM = "System"; |
| private static final String ADVANCED = "Advanced"; |
| private static final String USERS = "Multiple users"; |
| private static final String EMERGNENCY_INFO = "Emergency information"; |
| private static final String ADD_USERS_WHEN_LOCKED = "Add users"; |
| private static final String SWITCH_USER_BUTTON = "com.android.systemui:id/multi_user_switch"; |
| private static final String SETTINGS_BUTTON = "com.android.systemui:id/settings_button"; |
| private static final String PRIMARY_USER = "Owner"; |
| private static final String GUEST_USER = "Guest"; |
| private static final String ADD_GUEST = "Add guest"; |
| private static final String CONTINUE = "Yes, continue"; |
| |
| private UiDevice mDevice; |
| private Context mContext; |
| private String mTargetPackage; |
| |
| @Before |
| public void setUp() { |
| mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); |
| mContext = InstrumentationRegistry.getTargetContext(); |
| mTargetPackage = mContext.getPackageName(); |
| } |
| |
| @Test |
| public void testEmergencyInfoNotExists() throws Exception { |
| launchUserSettings(); |
| UiObject emergencyInfoPreference = |
| mDevice.findObject(new UiSelector().text(EMERGNENCY_INFO)); |
| |
| assertThat(emergencyInfoPreference.exists()).isFalse(); |
| } |
| |
| @Test |
| public void testAddUsersWhenLockedNotExists() throws Exception { |
| launchUserSettings(); |
| UiObject addUsersPreference = |
| mDevice.findObject(new UiSelector().text(ADD_USERS_WHEN_LOCKED)); |
| assertThat(addUsersPreference.exists()).isFalse(); |
| } |
| |
| @Test |
| public void testUsersExistsOnSecondaryUser() throws Exception { |
| // switch to guest user |
| switchToOrCreateGuest(); |
| // launch settings (launch from intent doesn't work, hence launch from quick settings) |
| mDevice.openQuickSettings(); |
| mDevice.findObject(new UiSelector().resourceId(SETTINGS_BUTTON)).click(); |
| // launch system settings and expand whole screen |
| final UiScrollable settings = new UiScrollable( |
| new UiSelector().packageName(mTargetPackage).scrollable(true)); |
| final String titleSystem = SYSTEM; |
| settings.scrollTextIntoView(titleSystem); |
| mDevice.findObject(new UiSelector().text(titleSystem)).click(); |
| mDevice.findObject(new UiSelector().text(ADVANCED)).click(); |
| |
| final boolean hasUsersSettings = mDevice.findObject(new UiSelector().text(USERS)).exists(); |
| |
| // switch back to primary user |
| mDevice.openQuickSettings(); |
| mDevice.findObject(new UiSelector().resourceId(SWITCH_USER_BUTTON)).click(); |
| mDevice.findObject(new UiSelector().text(PRIMARY_USER)).click(); |
| |
| assertThat(hasUsersSettings).isTrue(); |
| } |
| |
| private void launchSettings() { |
| Intent settingsIntent = new Intent(Intent.ACTION_MAIN) |
| .addCategory(Intent.CATEGORY_LAUNCHER) |
| .setPackage(mTargetPackage) |
| .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| mContext.startActivity(settingsIntent); |
| } |
| |
| private void launchUserSettings() throws Exception { |
| launchSettings(); |
| final UiScrollable settings = new UiScrollable( |
| new UiSelector().packageName(mTargetPackage).scrollable(true)); |
| final String titleSystem = SYSTEM; |
| settings.scrollTextIntoView(titleSystem); |
| mDevice.findObject(new UiSelector().text(titleSystem)).click(); |
| mDevice.findObject(new UiSelector().text(ADVANCED)).click(); |
| mDevice.findObject(new UiSelector().text(USERS)).click(); |
| } |
| |
| private void switchToOrCreateGuest() throws UiObjectNotFoundException { |
| mDevice.openQuickSettings(); |
| mDevice.findObject(new UiSelector().resourceId(SWITCH_USER_BUTTON)).click(); |
| // if no existing guest user, select "Add guest", otherwise select "Guest" |
| final UiObject addGuest = mDevice.findObject(new UiSelector().text(ADD_GUEST)); |
| if (addGuest.exists()) { |
| addGuest.click(); |
| mDevice.waitForIdle(); |
| mDevice.pressBack(); |
| } else { |
| mDevice.findObject(new UiSelector().text(GUEST_USER)).click(); |
| mDevice.waitForIdle(); |
| mDevice.findObject(new UiSelector().text(CONTINUE)).click(); |
| mDevice.waitForIdle(); |
| } |
| } |
| } |