diff options
author | Tony Wickham <twickham@google.com> | 2015-11-23 18:48:28 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2015-11-23 18:48:28 +0000 |
commit | ebaf95fee7fd1540192858b6f0c5ed08bbcc4f5d (patch) | |
tree | 9210061d4b14d3c93e6b342f3df833eeb1b37bd8 | |
parent | 667e4a6ad2a06c5a21d0a38671476329c1c4c2d1 (diff) | |
parent | 298f1c4578e45168e74aa4b8561fcd88bfe509fe (diff) | |
download | android_packages_apps_Trebuchet-ebaf95fee7fd1540192858b6f0c5ed08bbcc4f5d.tar.gz android_packages_apps_Trebuchet-ebaf95fee7fd1540192858b6f0c5ed08bbcc4f5d.tar.bz2 android_packages_apps_Trebuchet-ebaf95fee7fd1540192858b6f0c5ed08bbcc4f5d.zip |
Merge "Focus doesn\'t leave folders without also closing them." into ub-launcher3-burnaby-polish
am: 298f1c4578
* commit '298f1c4578e45168e74aa4b8561fcd88bfe509fe':
Focus doesn't leave folders without also closing them.
-rw-r--r-- | src/com/android/launcher3/Folder.java | 37 | ||||
-rw-r--r-- | src/com/android/launcher3/FolderPagedView.java | 20 |
2 files changed, 47 insertions, 10 deletions
diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 1161f2388..31e7438ad 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -322,9 +322,10 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList sendCustomAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED, getContext().getString(R.string.folder_renamed, newTitle)); } - // In order to clear the focus from the text field, we set the focus on ourself. This - // ensures that every time the field is clicked, focus is gained, giving reliable behavior. - requestFocus(); + + // This ensures that focus is gained every time the field is clicked, which selects all + // the text and brings up the soft keyboard if necessary. + mFolderName.clearFocus(); Selection.setSelection((Spannable) mFolderName.getText(), 0, 0); mIsEditingName = false; @@ -1167,15 +1168,37 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList return mDestroyed; } - // This method keeps track of the last item in the folder for the purposes + // This method keeps track of the first and last item in the folder for the purposes // of keyboard focus public void updateTextViewFocus() { - View lastChild = mContent.getLastItem(); - if (lastChild != null) { + final View firstChild = mContent.getFirstItem(); + final View lastChild = mContent.getLastItem(); + if (firstChild != null && lastChild != null) { mFolderName.setNextFocusDownId(lastChild.getId()); mFolderName.setNextFocusRightId(lastChild.getId()); mFolderName.setNextFocusLeftId(lastChild.getId()); mFolderName.setNextFocusUpId(lastChild.getId()); + // Hitting TAB from the folder name wraps around to the first item on the current + // folder page, and hitting SHIFT+TAB from that item wraps back to the folder name. + mFolderName.setNextFocusForwardId(firstChild.getId()); + // When clicking off the folder when editing the name, this Folder gains focus. When + // pressing an arrow key from that state, give the focus to the first item. + this.setNextFocusDownId(firstChild.getId()); + this.setNextFocusRightId(firstChild.getId()); + this.setNextFocusLeftId(firstChild.getId()); + this.setNextFocusUpId(firstChild.getId()); + // When pressing shift+tab in the above state, give the focus to the last item. + setOnKeyListener(new OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + boolean isShiftPlusTab = keyCode == KeyEvent.KEYCODE_TAB && + event.hasModifiers(KeyEvent.META_SHIFT_ON); + if (isShiftPlusTab && Folder.this.isFocused()) { + return lastChild.requestFocus(); + } + return false; + } + }); } } @@ -1340,6 +1363,8 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList public void onFocusChange(View v, boolean hasFocus) { if (v == mFolderName && hasFocus) { startEditingFolderName(); + } else if (v == mFolderName && !hasFocus) { + dismissEditingName(); } } diff --git a/src/com/android/launcher3/FolderPagedView.java b/src/com/android/launcher3/FolderPagedView.java index 594fa3c66..796f56466 100644 --- a/src/com/android/launcher3/FolderPagedView.java +++ b/src/com/android/launcher3/FolderPagedView.java @@ -397,16 +397,28 @@ public class FolderPagedView extends PagedView { return !ALLOW_FOLDER_SCROLL && getItemCount() >= mMaxItemsPerPage; } + public View getFirstItem() { + if (getChildCount() < 1) { + return null; + } + ShortcutAndWidgetContainer currContainer = getCurrentCellLayout().getShortcutsAndWidgets(); + if (mGridCountX > 0) { + return currContainer.getChildAt(0, 0); + } else { + return currContainer.getChildAt(0); + } + } + public View getLastItem() { if (getChildCount() < 1) { return null; } - ShortcutAndWidgetContainer lastContainer = getCurrentCellLayout().getShortcutsAndWidgets(); - int lastRank = lastContainer.getChildCount() - 1; + ShortcutAndWidgetContainer currContainer = getCurrentCellLayout().getShortcutsAndWidgets(); + int lastRank = currContainer.getChildCount() - 1; if (mGridCountX > 0) { - return lastContainer.getChildAt(lastRank % mGridCountX, lastRank / mGridCountX); + return currContainer.getChildAt(lastRank % mGridCountX, lastRank / mGridCountX); } else { - return lastContainer.getChildAt(lastRank); + return currContainer.getChildAt(lastRank); } } |