mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 19:38:21 +00:00
Merge changes I097134c4,Icfe39c30 into sc-v2-dev am: 8469dc98c6
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15998125 Change-Id: I8aa87b6dda2b8ceafc6e5719e938640dd72432ea
This commit is contained in:
@@ -63,7 +63,6 @@ import com.android.launcher3.allapps.search.SearchAdapterProvider;
|
||||
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 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
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);
|
||||
|
||||
@@ -172,4 +172,8 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP
|
||||
private AllAppsContainerView.AdapterHolder getAH() {
|
||||
return mAllApps.mAH[AllAppsContainerView.AdapterHolder.WORK];
|
||||
}
|
||||
|
||||
public int getCurrentState() {
|
||||
return mCurrentState;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,10 +21,8 @@ import android.content.Intent;
|
||||
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 @@ public class UserCache {
|
||||
private void onUsersChanged(Intent intent) {
|
||||
enableAndResetCache();
|
||||
mUserChangeListeners.forEach(Runnable::run);
|
||||
if (TestProtocol.sDebugTracing) {
|
||||
Log.d(TestProtocol.WORK_PROFILE_REMOVED, "profile changed", new Exception());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -117,7 +117,6 @@ public final class TestProtocol {
|
||||
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";
|
||||
|
||||
@@ -262,8 +262,6 @@ public abstract class AbstractLauncherUiTest {
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
167
tests/src/com/android/launcher3/ui/WorkProfileTest.java
Normal file
167
tests/src/com/android/launcher3/ui/WorkProfileTest.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user