Merge "release-request-8a6a1d17-d673-453b-8612-ea961499cd38-for-aosp-oreo-cts-release-4341710 snap-temp-L24800000103383547" into oreo-cts-release
diff --git a/v17/leanback/res/values-pt-rPT/strings.xml b/v17/leanback/res/values-pt-rPT/strings.xml
index 1191a50..315828d 100644
--- a/v17/leanback/res/values-pt-rPT/strings.xml
+++ b/v17/leanback/res/values-pt-rPT/strings.xml
@@ -47,7 +47,7 @@
<string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Desativar alta qualidade"</string>
<string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Ativar legendas"</string>
<string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Desativar legendas"</string>
- <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Entrar no modo Imagem na imagem"</string>
+ <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Entrar no modo de ecrã no ecrã"</string>
<string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
<string name="lb_playback_controls_shown" msgid="6382160135512023238">"Controlos de multimédia apresentados"</string>
<string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Controlos de multimédia ocultados, prima o teclado direcional para mostrar"</string>
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
index d4e694a..c554cde 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -3188,9 +3188,13 @@
final View focused = recyclerView.findFocus();
final int focusedIndex = findImmediateChildIndex(focused);
final int focusedPos = getAdapterPositionByIndex(focusedIndex);
+ // Even if focusedPos != NO_POSITION, findViewByPosition could return null if the view
+ // is ignored or getLayoutPosition does not match the adapter position of focused view.
+ final View immediateFocusedChild = (focusedPos == NO_POSITION) ? null
+ : findViewByPosition(focusedPos);
// Add focusables of focused item.
- if (focusedPos != NO_POSITION) {
- findViewByPosition(focusedPos).addFocusables(views, direction, focusableMode);
+ if (immediateFocusedChild != null) {
+ immediateFocusedChild.addFocusables(views, direction, focusableMode);
}
if (mGrid == null || getChildCount() == 0) {
// no grid information, or no child, bail out.
@@ -3201,7 +3205,7 @@
return true;
}
// Add focusables of neighbor depending on the focus search direction.
- final int focusedRow = mGrid != null && focusedPos != NO_POSITION
+ final int focusedRow = mGrid != null && immediateFocusedChild != null
? mGrid.getLocation(focusedPos).row : NO_POSITION;
final int focusableCount = views.size();
int inc = movement == NEXT_ITEM || movement == NEXT_ROW ? 1 : -1;
@@ -3217,9 +3221,9 @@
if (child.getVisibility() != View.VISIBLE || !child.hasFocusable()) {
continue;
}
- // if there wasn't any focusing item, add the very first focusable
+ // if there wasn't any focused item, add the very first focusable
// items and stop.
- if (focusedPos == NO_POSITION) {
+ if (immediateFocusedChild == null) {
child.addFocusables(views, direction, focusableMode);
if (views.size() > focusableCount) {
break;