Merge changes I097134c4,Icfe39c30 into sc-v2-dev am: 8469dc98c6 am: 9029902721
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15998125
Change-Id: I5b3d7943f58aa4858cb592c9335e1ec54eab3691
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index 9bb4b25..f154dd4 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -63,7 +63,6 @@
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.keyboard.FocusedItemDecorator;
import com.android.launcher3.model.data.AppInfo;
-import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.util.ItemInfoMatcher;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.RecyclerViewFastScroller;
@@ -482,10 +481,6 @@
int layout = showTabs ? R.layout.all_apps_tabs : R.layout.all_apps_rv_layout;
View newView = getLayoutInflater().inflate(layout, this, false);
addView(newView, index);
- if (TestProtocol.sDebugTracing) {
- Log.d(TestProtocol.WORK_PROFILE_REMOVED, "should show tabs:" + showTabs,
- new Exception());
- }
if (showTabs) {
mViewPager = (AllAppsPagedView) newView;
mViewPager.initParentViews(this);
diff --git a/src/com/android/launcher3/allapps/WorkProfileManager.java b/src/com/android/launcher3/allapps/WorkProfileManager.java
index c53360a..54a5c51 100644
--- a/src/com/android/launcher3/allapps/WorkProfileManager.java
+++ b/src/com/android/launcher3/allapps/WorkProfileManager.java
@@ -172,4 +172,8 @@
private AllAppsContainerView.AdapterHolder getAH() {
return mAllApps.mAH[AllAppsContainerView.AdapterHolder.WORK];
}
+
+ public int getCurrentState() {
+ return mCurrentState;
+ }
}
diff --git a/src/com/android/launcher3/pm/UserCache.java b/src/com/android/launcher3/pm/UserCache.java
index 5ade22b..5aab41a 100644
--- a/src/com/android/launcher3/pm/UserCache.java
+++ b/src/com/android/launcher3/pm/UserCache.java
@@ -21,10 +21,8 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
-import android.util.Log;
import android.util.LongSparseArray;
-import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.util.SimpleBroadcastReceiver;
@@ -60,9 +58,6 @@
private void onUsersChanged(Intent intent) {
enableAndResetCache();
mUserChangeListeners.forEach(Runnable::run);
- if (TestProtocol.sDebugTracing) {
- Log.d(TestProtocol.WORK_PROFILE_REMOVED, "profile changed", new Exception());
- }
}
/**
diff --git a/src/com/android/launcher3/testing/TestProtocol.java b/src/com/android/launcher3/testing/TestProtocol.java
index f67bac6..893a215 100644
--- a/src/com/android/launcher3/testing/TestProtocol.java
+++ b/src/com/android/launcher3/testing/TestProtocol.java
@@ -117,7 +117,6 @@
public static final String REQUEST_MOCK_SENSOR_ROTATION = "mock-sensor-rotation";
public static final String PERMANENT_DIAG_TAG = "TaplTarget";
- public static final String WORK_PROFILE_REMOVED = "b/159671700";
public static final String TASK_VIEW_ID_CRASH = "b/195430732";
public static final String NO_DROP_TARGET = "b/195031154";
public static final String NULL_INT_SET = "b/200572078";
diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
index b6b6cdd..0ffbeeb 100644
--- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -262,8 +262,6 @@
if (userManager != null) {
for (UserHandle userHandle : userManager.getUserProfiles()) {
if (!userHandle.isSystem()) {
- Log.d(TestProtocol.WORK_PROFILE_REMOVED,
- "removing user " + userHandle.getIdentifier());
mDevice.executeShellCommand("pm remove-user " + userHandle.getIdentifier());
}
}
diff --git a/tests/src/com/android/launcher3/ui/WorkProfileTest.java b/tests/src/com/android/launcher3/ui/WorkProfileTest.java
new file mode 100644
index 0000000..fcb0b7f
--- /dev/null
+++ b/tests/src/com/android/launcher3/ui/WorkProfileTest.java
@@ -0,0 +1,167 @@
+/*
+ * 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.launcher3.ui;
+
+import static com.android.launcher3.LauncherState.ALL_APPS;
+import static com.android.launcher3.LauncherState.NORMAL;
+import static com.android.launcher3.allapps.AllAppsStore.DEFER_UPDATES_TEST;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.view.View;
+
+import com.android.launcher3.R;
+import com.android.launcher3.allapps.AllAppsContainerView;
+import com.android.launcher3.allapps.AllAppsPagedView;
+import com.android.launcher3.allapps.WorkAdapterProvider;
+import com.android.launcher3.allapps.WorkEduCard;
+import com.android.launcher3.allapps.WorkProfileManager;
+import com.android.launcher3.tapl.LauncherInstrumentation;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Objects;
+
+public class WorkProfileTest extends AbstractLauncherUiTest {
+
+ private static final int WORK_PAGE = AllAppsContainerView.AdapterHolder.WORK;
+
+ private int mProfileUserId;
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ String output =
+ mDevice.executeShellCommand(
+ "pm create-user --profileOf 0 --managed TestProfile");
+ assertTrue("Failed to create work profile", output.startsWith("Success"));
+
+ String[] tokens = output.split("\\s+");
+ mProfileUserId = Integer.parseInt(tokens[tokens.length - 1]);
+ mDevice.executeShellCommand("am start-user " + mProfileUserId);
+ }
+
+ @After
+ public void removeWorkProfile() throws Exception {
+ mDevice.executeShellCommand("pm remove-user " + mProfileUserId);
+ }
+
+ @After
+ public void resumeAppStoreUpdate() {
+ executeOnLauncher(launcher -> {
+ if (launcher == null || launcher.getAppsView() == null) {
+ return;
+ }
+ launcher.getAppsView().getAppsStore().disableDeferUpdates(DEFER_UPDATES_TEST);
+ });
+ }
+
+ private void waitForWorkTabSetup() {
+ waitForLauncherCondition("Work tab not setup", launcher -> {
+ if (launcher.getAppsView().getContentView() instanceof AllAppsPagedView) {
+ launcher.getAppsView().getAppsStore().enableDeferUpdates(DEFER_UPDATES_TEST);
+ return true;
+ }
+ return false;
+ }, LauncherInstrumentation.WAIT_TIME_MS);
+ }
+
+ @Test
+ public void workTabExists() {
+ mDevice.pressHome();
+ waitForLauncherCondition("Launcher didn't start", Objects::nonNull);
+ waitForState("Launcher internal state didn't switch to Normal", () -> NORMAL);
+ executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
+ waitForState("Launcher internal state didn't switch to All Apps", () -> ALL_APPS);
+ waitForLauncherCondition("Personal tab is missing",
+ launcher -> launcher.getAppsView().isPersonalTabVisible(),
+ LauncherInstrumentation.WAIT_TIME_MS);
+ waitForLauncherCondition("Work tab is missing",
+ launcher -> launcher.getAppsView().isWorkTabVisible(),
+ LauncherInstrumentation.WAIT_TIME_MS);
+ }
+
+ @Test
+ public void toggleWorks() {
+ mDevice.pressHome();
+ waitForLauncherCondition("Launcher didn't start", Objects::nonNull);
+ waitForState("Launcher internal state didn't switch to Normal", () -> NORMAL);
+ executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
+ waitForState("Launcher internal state didn't switch to All Apps", () -> ALL_APPS);
+
+ waitForWorkTabSetup();
+
+ executeOnLauncher(launcher -> {
+ AllAppsPagedView pagedView = (AllAppsPagedView) launcher.getAppsView().getContentView();
+ pagedView.setCurrentPage(WORK_PAGE);
+ });
+
+ WorkProfileManager manager = getFromLauncher(l -> l.getAppsView().getWorkManager());
+
+
+ waitForLauncherCondition("work profile initial state check failed", launcher ->
+ manager.getWorkModeSwitch() != null
+ && manager.getCurrentState() == WorkProfileManager.STATE_ENABLED
+ && manager.getWorkModeSwitch().isEnabled(),
+ LauncherInstrumentation.WAIT_TIME_MS);
+
+ //start work profile toggle OFF test
+ executeOnLauncher(l -> l.getAppsView().getWorkManager().getWorkModeSwitch().performClick());
+
+ waitForLauncherCondition("Work profile toggle OFF failed", launcher -> {
+ manager.reset(); // pulls current state from system
+ return manager.getCurrentState() == WorkProfileManager.STATE_DISABLED;
+ }, LauncherInstrumentation.WAIT_TIME_MS);
+
+ // start work profile toggle ON test
+ executeOnLauncher(l -> {
+ AllAppsContainerView allApps = l.getAppsView();
+ assertEquals("Work tab is not focused", allApps.getCurrentPage(), WORK_PAGE);
+ View workPausedCard = allApps.getActiveRecyclerView().findViewHolderForAdapterPosition(
+ 0).itemView;
+ workPausedCard.findViewById(R.id.enable_work_apps).performClick();
+ });
+ waitForLauncherCondition("Work profile toggle ON failed", launcher -> {
+ manager.reset(); // pulls current state from system
+ return manager.getCurrentState() == WorkProfileManager.STATE_ENABLED;
+ }, LauncherInstrumentation.WAIT_TIME_MS);
+
+ }
+
+ @Test
+ public void testEdu() {
+ mDevice.pressHome();
+ waitForLauncherCondition("Launcher didn't start", Objects::nonNull);
+ waitForState("Launcher internal state didn't switch to Normal", () -> NORMAL);
+ executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
+ waitForState("Launcher internal state didn't switch to All Apps", () -> ALL_APPS);
+ waitForWorkTabSetup();
+ executeOnLauncher(l -> {
+ l.getSharedPrefs().edit().putInt(WorkAdapterProvider.KEY_WORK_EDU_STEP, 0).commit();
+ ((AllAppsPagedView) l.getAppsView().getContentView()).setCurrentPage(WORK_PAGE);
+ l.getAppsView().getWorkManager().reset();
+ });
+
+ waitForLauncherCondition("Work profile education not shown",
+ l -> l.getAppsView().getActiveRecyclerView()
+ .findViewHolderForAdapterPosition(0).itemView instanceof WorkEduCard,
+ LauncherInstrumentation.WAIT_TIME_MS);
+ }
+}
diff --git a/tests/src_disabled/WorkTabTest.java b/tests/src_disabled/WorkTabTest.java
deleted file mode 100644
index bfacc74..0000000
--- a/tests/src_disabled/WorkTabTest.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright 2018, 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.launcher3.ui;
-
-import static com.android.launcher3.LauncherState.ALL_APPS;
-import static com.android.launcher3.LauncherState.NORMAL;
-import static com.android.launcher3.allapps.AllAppsStore.DEFER_UPDATES_TEST;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import android.os.Process;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.util.Log;
-import android.widget.TextView;
-
-import androidx.test.filters.LargeTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.launcher3.R;
-import com.android.launcher3.allapps.AllAppsContainerView;
-import com.android.launcher3.allapps.AllAppsPagedView;
-import com.android.launcher3.allapps.WorkModeSwitch;
-import com.android.launcher3.dragndrop.DragLayer;
-import com.android.launcher3.tapl.LauncherInstrumentation;
-import com.android.launcher3.testing.TestProtocol;
-import com.android.launcher3.views.WorkEduView;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.atomic.AtomicInteger;
-
-@LargeTest
-@RunWith(AndroidJUnit4.class)
-public class WorkTabTest extends AbstractLauncherUiTest {
-
- private int mProfileUserId;
-
- private static final int WORK_PAGE = AllAppsContainerView.AdapterHolder.WORK;
-
- @Before
- @Override
- public void setUp() throws Exception {
- super.setUp();
- String output =
- mDevice.executeShellCommand(
- "pm create-user --profileOf 0 --managed TestProfile");
- assertTrue("Failed to create work profile", output.startsWith("Success"));
-
- String[] tokens = output.split("\\s+");
- mProfileUserId = Integer.parseInt(tokens[tokens.length - 1]);
- Log.d(TestProtocol.WORK_PROFILE_REMOVED, "Created new user uid" + mProfileUserId);
- mDevice.executeShellCommand("am start-user " + mProfileUserId);
- }
-
- @After
- public void removeWorkProfile() throws Exception {
- Log.d(TestProtocol.WORK_PROFILE_REMOVED, "(teardown) removing uid" + mProfileUserId,
- new Exception());
- mDevice.executeShellCommand("pm remove-user " + mProfileUserId);
- }
-
- @After
- public void resumeAppStoreUpdate() {
- executeOnLauncher(launcher -> {
- if (launcher == null || launcher.getAppsView() == null) {
- return;
- }
- launcher.getAppsView().getAppsStore().disableDeferUpdates(DEFER_UPDATES_TEST);
- Log.d(TestProtocol.WORK_PROFILE_REMOVED, "resuming AppStore updates");
- });
- }
-
- @Ignore("b/182844465")
- @Test
- public void workTabExists() {
- mDevice.pressHome();
- waitForLauncherCondition("Launcher didn't start", Objects::nonNull);
- executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
- waitForState("Launcher internal state didn't switch to All Apps", () -> ALL_APPS);
- waitForLauncherCondition("Personal tab is missing",
- launcher -> launcher.getAppsView().isPersonalTabVisible(), 60000);
- waitForLauncherCondition("Work tab is missing",
- launcher -> launcher.getAppsView().isWorkTabVisible(), 60000);
- }
-
- @Ignore("b/182844465")
- @Test
- public void toggleWorks() {
- mDevice.pressHome();
- waitForLauncherCondition("Launcher didn't start", Objects::nonNull);
- executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
- waitForState("Launcher internal state didn't switch to All Apps", () -> ALL_APPS);
- getOnceNotNull("Apps view did not bind",
- launcher -> launcher.getAppsView().getWorkModeSwitch(), 60000);
-
- UserManager userManager = getFromLauncher(l -> l.getSystemService(UserManager.class));
- assertEquals(2, userManager.getUserProfiles().size());
- UserHandle workProfile = getFromLauncher(l -> {
- UserHandle myHandle = Process.myUserHandle();
- List<UserHandle> userProfiles = userManager.getUserProfiles();
- return userProfiles.get(0) == myHandle ? userProfiles.get(1) : userProfiles.get(0);
- });
-
- waitForLauncherCondition("work profile can't be turned off",
- l -> userManager.requestQuietModeEnabled(true, workProfile));
-
- assertTrue(userManager.isQuietModeEnabled(workProfile));
- executeOnLauncher(launcher -> {
- WorkModeSwitch wf = launcher.getAppsView().getWorkModeSwitch();
- ((AllAppsPagedView) launcher.getAppsView().getContentView()).snapToPageImmediately(
- AllAppsContainerView.AdapterHolder.WORK);
- wf.toggle();
- });
- waitForLauncherCondition("Work toggle did not work",
- l -> l.getSystemService(UserManager.class).isQuietModeEnabled(workProfile));
- }
-
- @Ignore("b/182844465")
- @Test
- public void testWorkEduFlow() {
- mDevice.pressHome();
- waitForLauncherCondition("Launcher didn't start", Objects::nonNull);
- executeOnLauncher(launcher -> launcher.getSharedPrefs().edit().remove(
- WorkEduView.KEY_WORK_EDU_STEP).remove(
- WorkEduView.KEY_LEGACY_WORK_EDU_SEEN).commit());
-
- waitForLauncherCondition("Work tab not setup", launcher -> {
- if (launcher.getAppsView().getContentView() instanceof AllAppsPagedView) {
- launcher.getAppsView().getAppsStore().enableDeferUpdates(DEFER_UPDATES_TEST);
- return true;
- }
- return false;
- }, LauncherInstrumentation.WAIT_TIME_MS);
-
- executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
- WorkEduView workEduView = getEduView();
- // verify personal app edu is seen first and click "next"
- executeOnLauncher(l -> {
- assertEquals(((TextView) workEduView.findViewById(R.id.content_text)).getText(),
- l.getResources().getString(R.string.work_profile_edu_personal_apps));
- workEduView.findViewById(R.id.proceed).callOnClick();
- });
-
- AtomicInteger attempt = new AtomicInteger(0);
- // verify work edu is seen next
- waitForLauncherCondition("Launcher did not show the next edu screen", l -> {
- Log.d(TestProtocol.WORK_PROFILE_REMOVED,
- "running test attempt" + attempt.getAndIncrement());
- if (!(l.getAppsView().getContentView() instanceof AllAppsPagedView)) {
- Log.d(TestProtocol.WORK_PROFILE_REMOVED, "Work tab not setup. Skipping test");
- return false;
- }
- if (((AllAppsPagedView) l.getAppsView().getContentView()).getCurrentPage()
- != WORK_PAGE) {
- Log.d(TestProtocol.WORK_PROFILE_REMOVED, "Work page not highlighted");
- }
- return ((TextView) workEduView.findViewById(R.id.content_text)).getText().equals(
- l.getResources().getString(R.string.work_profile_edu_work_apps));
- });
- }
-
- @Ignore("b/182844465")
- @Test
- public void testWorkEduIntermittent() {
- mDevice.pressHome();
- waitForLauncherCondition("Launcher didn't start", Objects::nonNull);
- executeOnLauncher(launcher -> launcher.getSharedPrefs().edit().remove(
- WorkEduView.KEY_WORK_EDU_STEP).remove(
- WorkEduView.KEY_LEGACY_WORK_EDU_SEEN).commit());
-
-
- waitForLauncherCondition("Work tab not setup",
- launcher -> launcher.getAppsView().getContentView() instanceof AllAppsPagedView,
- 60000);
- executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
-
- // verify personal app edu is seen
- getEduView();
-
- // dismiss personal edu
- mDevice.pressHome();
- waitForState("Launcher did not go home", () -> NORMAL);
-
- // open work tab
- executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
- waitForState("Launcher did not switch to all apps", () -> ALL_APPS);
- waitForLauncherCondition("Work tab not setup",
- launcher -> launcher.getAppsView().getContentView() instanceof AllAppsPagedView,
- 60000);
-
- executeOnLauncher(launcher -> {
- AllAppsPagedView pagedView = (AllAppsPagedView) launcher.getAppsView().getContentView();
- pagedView.setCurrentPage(WORK_PAGE);
- });
-
- WorkEduView workEduView = getEduView();
-
- // verify work tab edu is shown
- waitForLauncherCondition("Launcher did not show the next edu screen",
- l -> ((TextView) workEduView.findViewById(R.id.content_text)).getText().equals(
- l.getResources().getString(R.string.work_profile_edu_work_apps)));
- }
-
-
- private WorkEduView getEduView() {
- waitForLauncherCondition("Edu did not show", l -> {
- DragLayer dragLayer = l.getDragLayer();
- return dragLayer.getChildCount() > 0 && dragLayer.getChildAt(
- dragLayer.getChildCount() - 1) instanceof WorkEduView;
- }, 6000);
- return getFromLauncher(launcher -> (WorkEduView) launcher.getDragLayer().getChildAt(
- launcher.getDragLayer().getChildCount() - 1));
- }
-
-}
\ No newline at end of file