mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
Fixing issue where the prediction bar apps are not focused.
- Also fixes issue where all apps is not accessible by keyboard when there are no other apps in the hotseat. Bug: 21334471
This commit is contained in:
@@ -39,6 +39,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/apps_search_bar_height"
|
||||
android:orientation="horizontal"
|
||||
android:descendantFocusability="afterDescendants"
|
||||
android:focusable="true"
|
||||
android:visibility="invisible" >
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -183,6 +183,7 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
|
||||
private int mContainerInset;
|
||||
private int mPredictionBarHeight;
|
||||
private int mLastRecyclerViewScrollPos = -1;
|
||||
private boolean mFocusPredictionBarOnFirstBind;
|
||||
|
||||
private CheckLongPressHelper mPredictionIconCheckForLongPress;
|
||||
private View mPredictionIconUnderTouch;
|
||||
@@ -298,7 +299,17 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
|
||||
@Override
|
||||
public void onFocusChange(View v, boolean hasFocus) {
|
||||
if (v == mContentView && hasFocus) {
|
||||
mAppsRecyclerView.requestFocus();
|
||||
if (!mApps.getPredictedApps().isEmpty()) {
|
||||
// If the prediction bar is going to be bound, then defer focusing until
|
||||
// it is first bound
|
||||
if (mPredictionBarView.getChildCount() == 0) {
|
||||
mFocusPredictionBarOnFirstBind = true;
|
||||
} else {
|
||||
mPredictionBarView.requestFocus();
|
||||
}
|
||||
} else {
|
||||
mAppsRecyclerView.requestFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -387,6 +398,11 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
|
||||
icon.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
if (mFocusPredictionBarOnFirstBind) {
|
||||
mFocusPredictionBarOnFirstBind = false;
|
||||
mPredictionBarView.requestFocus();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -314,12 +314,14 @@ public class FocusHelper {
|
||||
// with the hotseat.
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && !profile.isVerticalBarLayout()) {
|
||||
matrix = FocusLogic.createSparseMatrix(iconLayout, hotseatLayout, true /* horizontal */,
|
||||
hotseat.getAllAppsButtonRank(), false /* all apps icon is ignored */);
|
||||
hotseat.getAllAppsButtonRank(),
|
||||
!hotseat.hasIcons() /* ignore all apps icon, unless there are no other icons */);
|
||||
countY = countY + 1;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT &&
|
||||
profile.isVerticalBarLayout()) {
|
||||
matrix = FocusLogic.createSparseMatrix(iconLayout, hotseatLayout, false /* horizontal */,
|
||||
hotseat.getAllAppsButtonRank(), false /* all apps icon is ignored */);
|
||||
hotseat.getAllAppsButtonRank(),
|
||||
!hotseat.hasIcons() /* ignore all apps icon, unless there are no other icons */);
|
||||
countX = countX + 1;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) {
|
||||
workspace.removeWorkspaceItem(v);
|
||||
|
||||
@@ -64,6 +64,13 @@ public class Hotseat extends FrameLayout {
|
||||
return mContent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether there are other icons than the all apps button in the hotseat.
|
||||
*/
|
||||
public boolean hasIcons() {
|
||||
return mContent.getShortcutsAndWidgets().getChildCount() > 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers the specified listener on the cell layout of the hotseat.
|
||||
*/
|
||||
@@ -98,25 +105,6 @@ public class Hotseat extends FrameLayout {
|
||||
return rank == mAllAppsButtonRank;
|
||||
}
|
||||
|
||||
/** This returns the coordinates of an app in a given cell, relative to the DragLayer */
|
||||
Rect getCellCoordinates(int cellX, int cellY) {
|
||||
Rect coords = new Rect();
|
||||
mContent.cellToRect(cellX, cellY, 1, 1, coords);
|
||||
int[] hotseatInParent = new int[2];
|
||||
Utilities.getDescendantCoordRelativeToParent(this, mLauncher.getDragLayer(),
|
||||
hotseatInParent, false);
|
||||
coords.offset(hotseatInParent[0], hotseatInParent[1]);
|
||||
|
||||
// Center the icon
|
||||
int cWidth = mContent.getShortcutsAndWidgets().getCellContentWidth();
|
||||
int cHeight = mContent.getShortcutsAndWidgets().getCellContentHeight();
|
||||
int cellPaddingX = (int) Math.max(0, ((coords.width() - cWidth) / 2f));
|
||||
int cellPaddingY = (int) Math.max(0, ((coords.height() - cHeight) / 2f));
|
||||
coords.offset(cellPaddingX, cellPaddingY);
|
||||
|
||||
return coords;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
|
||||
Reference in New Issue
Block a user