Merge "Fix focus nav of AllApps when Searching." into main

This commit is contained in:
Pat Manning
2023-11-10 18:20:01 +00:00
committed by Android (Google) Code Review
2 changed files with 45 additions and 1 deletions
@@ -1046,6 +1046,11 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
return getActiveAppsRecyclerView();
}
/** The current focus change listener in the search container. */
public OnFocusChangeListener getSearchFocusChangeListener() {
return mAH.get(AdapterHolder.SEARCH).mOnFocusChangeListener;
}
/** The current apps recycler view in the container. */
private AllAppsRecyclerView getActiveAppsRecyclerView() {
if (!mUsingTabs || isPersonalTab()) {
@@ -1442,6 +1447,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
final AlphabeticalAppsList<T> mAppsList;
final Rect mPadding = new Rect();
AllAppsRecyclerView mRecyclerView;
private OnFocusChangeListener mOnFocusChangeListener;
AdapterHolder(int type, AlphabeticalAppsList<T> appsList) {
mType = type;
@@ -1465,7 +1471,8 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
onInitializeRecyclerView(mRecyclerView);
FocusedItemDecorator focusedItemDecorator = new FocusedItemDecorator(mRecyclerView);
mRecyclerView.addItemDecoration(focusedItemDecorator);
mAdapter.setIconFocusListener(focusedItemDecorator.getFocusListener());
mOnFocusChangeListener = focusedItemDecorator.getFocusListener();
mAdapter.setIconFocusListener(mOnFocusChangeListener);
applyPadding();
}
@@ -21,6 +21,8 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowInsets;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
@@ -76,4 +78,39 @@ public class TaplKeyboardFocusTest extends AbstractLauncherUiTest {
allApps.unfreeze();
}
}
@Test
public void testAllAppsExitSearchAndFocusSearchResults() {
final HomeAllApps allApps = mLauncher.goHome().switchToAllApps();
assertTrue("Launcher internal state is not All Apps",
isInState(() -> LauncherState.ALL_APPS));
allApps.freeze();
try {
executeOnLauncher(launcher -> launcher.getAppsView().getSearchView().requestFocus());
waitForLauncherCondition("Search view does not have focus.",
launcher -> launcher.getAppsView().getSearchView().hasFocus());
mLauncher.pressAndHoldKeyCode(KeyEvent.KEYCODE_C, 0);
waitForLauncherCondition("Search view not active.",
launcher -> launcher.getAppsView().getActiveRecyclerView()
instanceof SearchRecyclerView);
mLauncher.unpressKeyCode(KeyEvent.KEYCODE_C, 0);
executeOnLauncher(launcher -> launcher.getAppsView().getSearchUiManager().getEditText()
.hideKeyboard(/* clearFocus= */ false));
waitForLauncherCondition("Keyboard still visible.", launcher -> {
View root = launcher.getDragLayer();
WindowInsets insets = root.getRootWindowInsets();
return insets != null && !insets.isVisible(WindowInsets.Type.ime());
});
mLauncher.pressAndHoldKeyCode(KeyEvent.KEYCODE_DPAD_DOWN, 0);
mLauncher.unpressKeyCode(KeyEvent.KEYCODE_DPAD_DOWN, 0);
waitForLauncherCondition("No focused child", launcher ->
launcher.getAppsView().getActiveRecyclerView().getApps().getFocusedChild()
!= null);
} finally {
allApps.unfreeze();
}
}
}