summaryrefslogtreecommitdiff
path: root/android/support/v17/leanback/app
diff options
context:
space:
mode:
Diffstat (limited to 'android/support/v17/leanback/app')
-rw-r--r--android/support/v17/leanback/app/BaseFragment.java11
-rw-r--r--android/support/v17/leanback/app/BaseRowFragment.java9
-rw-r--r--android/support/v17/leanback/app/BaseRowSupportFragment.java9
-rw-r--r--android/support/v17/leanback/app/BaseSupportFragment.java11
-rw-r--r--android/support/v17/leanback/app/BrandedFragment.java9
-rw-r--r--android/support/v17/leanback/app/BrandedSupportFragment.java9
-rw-r--r--android/support/v17/leanback/app/BrowseFragment.java17
-rw-r--r--android/support/v17/leanback/app/BrowseSupportFragment.java11
-rw-r--r--android/support/v17/leanback/app/DetailsFragment.java8
-rw-r--r--android/support/v17/leanback/app/DetailsFragmentBackgroundController.java5
-rw-r--r--android/support/v17/leanback/app/DetailsSupportFragmentBackgroundController.java5
-rw-r--r--android/support/v17/leanback/app/ErrorFragment.java3
-rw-r--r--android/support/v17/leanback/app/ErrorSupportFragment.java3
-rw-r--r--android/support/v17/leanback/app/GuidedStepFragment.java17
-rw-r--r--android/support/v17/leanback/app/GuidedStepSupportFragment.java13
-rw-r--r--android/support/v17/leanback/app/HeadersFragment.java7
-rw-r--r--android/support/v17/leanback/app/HeadersSupportFragment.java7
-rw-r--r--android/support/v17/leanback/app/MediaControllerGlue.java236
-rw-r--r--android/support/v17/leanback/app/OnboardingFragment.java24
-rw-r--r--android/support/v17/leanback/app/OnboardingSupportFragment.java8
-rw-r--r--android/support/v17/leanback/app/PlaybackControlGlue.java337
-rw-r--r--android/support/v17/leanback/app/PlaybackControlSupportGlue.java202
-rw-r--r--android/support/v17/leanback/app/PlaybackFragment.java15
-rw-r--r--android/support/v17/leanback/app/PlaybackFragmentGlueHost.java3
-rw-r--r--android/support/v17/leanback/app/PlaybackOverlayFragment.java863
-rw-r--r--android/support/v17/leanback/app/PlaybackOverlaySupportFragment.java866
-rw-r--r--android/support/v17/leanback/app/PlaybackSupportFragment.java9
-rw-r--r--android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost.java3
-rw-r--r--android/support/v17/leanback/app/RowsFragment.java12
-rw-r--r--android/support/v17/leanback/app/RowsSupportFragment.java12
-rw-r--r--android/support/v17/leanback/app/SearchFragment.java17
-rw-r--r--android/support/v17/leanback/app/SearchSupportFragment.java15
-rw-r--r--android/support/v17/leanback/app/VerticalGridFragment.java5
-rw-r--r--android/support/v17/leanback/app/VerticalGridSupportFragment.java3
-rw-r--r--android/support/v17/leanback/app/VideoFragment.java5
-rw-r--r--android/support/v17/leanback/app/VideoFragmentGlueHost.java3
-rw-r--r--android/support/v17/leanback/app/VideoSupportFragment.java3
-rw-r--r--android/support/v17/leanback/app/VideoSupportFragmentGlueHost.java3
-rw-r--r--android/support/v17/leanback/app/package-info.java51
39 files changed, 203 insertions, 2646 deletions
diff --git a/android/support/v17/leanback/app/BaseFragment.java b/android/support/v17/leanback/app/BaseFragment.java
index 7686c5c8..bdb213f2 100644
--- a/android/support/v17/leanback/app/BaseFragment.java
+++ b/android/support/v17/leanback/app/BaseFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from BaseSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -15,6 +18,8 @@ package android.support.v17.leanback.app;
import android.annotation.SuppressLint;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.transition.TransitionHelper;
import android.support.v17.leanback.transition.TransitionListener;
import android.support.v17.leanback.util.StateMachine;
@@ -177,7 +182,7 @@ public class BaseFragment extends BrandedFragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mStateMachine.fireEvent(EVT_ON_CREATEVIEW);
}
@@ -267,6 +272,10 @@ public class BaseFragment extends BrandedFragment {
void onExecuteEntranceTransition() {
// wait till views get their initial position before start transition
final View view = getView();
+ if (view == null) {
+ // fragment view destroyed, transition not needed
+ return;
+ }
view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
diff --git a/android/support/v17/leanback/app/BaseRowFragment.java b/android/support/v17/leanback/app/BaseRowFragment.java
index 5a83b478..2d79f3e1 100644
--- a/android/support/v17/leanback/app/BaseRowFragment.java
+++ b/android/support/v17/leanback/app/BaseRowFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from BaseRowSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -13,8 +16,9 @@
*/
package android.support.v17.leanback.app;
-import android.app.Fragment;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.widget.ItemBridgeAdapter;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.ObjectAdapter;
@@ -22,6 +26,7 @@ import android.support.v17.leanback.widget.OnChildViewHolderSelectedListener;
import android.support.v17.leanback.widget.PresenterSelector;
import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.VerticalGridView;
+import android.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
@@ -75,7 +80,7 @@ abstract class BaseRowFragment extends Fragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (savedInstanceState != null) {
mSelectedPosition = savedInstanceState.getInt(CURRENT_SELECTED_POSITION, -1);
}
diff --git a/android/support/v17/leanback/app/BaseRowSupportFragment.java b/android/support/v17/leanback/app/BaseRowSupportFragment.java
index bf49295c..dba78daf 100644
--- a/android/support/v17/leanback/app/BaseRowSupportFragment.java
+++ b/android/support/v17/leanback/app/BaseRowSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from BaseRowFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -16,8 +13,9 @@
*/
package android.support.v17.leanback.app;
-import android.support.v4.app.Fragment;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.widget.ItemBridgeAdapter;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.ObjectAdapter;
@@ -25,6 +23,7 @@ import android.support.v17.leanback.widget.OnChildViewHolderSelectedListener;
import android.support.v17.leanback.widget.PresenterSelector;
import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.VerticalGridView;
+import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
@@ -78,7 +77,7 @@ abstract class BaseRowSupportFragment extends Fragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (savedInstanceState != null) {
mSelectedPosition = savedInstanceState.getInt(CURRENT_SELECTED_POSITION, -1);
}
diff --git a/android/support/v17/leanback/app/BaseSupportFragment.java b/android/support/v17/leanback/app/BaseSupportFragment.java
index 213ed834..d89cf39f 100644
--- a/android/support/v17/leanback/app/BaseSupportFragment.java
+++ b/android/support/v17/leanback/app/BaseSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from BaseFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -18,6 +15,8 @@ package android.support.v17.leanback.app;
import android.annotation.SuppressLint;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.transition.TransitionHelper;
import android.support.v17.leanback.transition.TransitionListener;
import android.support.v17.leanback.util.StateMachine;
@@ -180,7 +179,7 @@ public class BaseSupportFragment extends BrandedSupportFragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mStateMachine.fireEvent(EVT_ON_CREATEVIEW);
}
@@ -270,6 +269,10 @@ public class BaseSupportFragment extends BrandedSupportFragment {
void onExecuteEntranceTransition() {
// wait till views get their initial position before start transition
final View view = getView();
+ if (view == null) {
+ // fragment view destroyed, transition not needed
+ return;
+ }
view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
diff --git a/android/support/v17/leanback/app/BrandedFragment.java b/android/support/v17/leanback/app/BrandedFragment.java
index 35350e41..1f6ad299 100644
--- a/android/support/v17/leanback/app/BrandedFragment.java
+++ b/android/support/v17/leanback/app/BrandedFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from BrandedSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -13,13 +16,15 @@
*/
package android.support.v17.leanback.app;
-import android.app.Fragment;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.SearchOrbView;
import android.support.v17.leanback.widget.TitleHelper;
import android.support.v17.leanback.widget.TitleViewAdapter;
+import android.app.Fragment;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
@@ -143,7 +148,7 @@ public class BrandedFragment extends Fragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState != null) {
mShowingTitle = savedInstanceState.getBoolean(TITLE_SHOW);
diff --git a/android/support/v17/leanback/app/BrandedSupportFragment.java b/android/support/v17/leanback/app/BrandedSupportFragment.java
index 9c42780a..306e1f11 100644
--- a/android/support/v17/leanback/app/BrandedSupportFragment.java
+++ b/android/support/v17/leanback/app/BrandedSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from BrandedFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -16,13 +13,15 @@
*/
package android.support.v17.leanback.app;
-import android.support.v4.app.Fragment;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.SearchOrbView;
import android.support.v17.leanback.widget.TitleHelper;
import android.support.v17.leanback.widget.TitleViewAdapter;
+import android.support.v4.app.Fragment;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
@@ -146,7 +145,7 @@ public class BrandedSupportFragment extends Fragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState != null) {
mShowingTitle = savedInstanceState.getBoolean(TITLE_SHOW);
diff --git a/android/support/v17/leanback/app/BrowseFragment.java b/android/support/v17/leanback/app/BrowseFragment.java
index 8edaab67..f3773895 100644
--- a/android/support/v17/leanback/app/BrowseFragment.java
+++ b/android/support/v17/leanback/app/BrowseFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from BrowseSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -15,10 +18,6 @@ package android.support.v17.leanback.app;
import static android.support.v7.widget.RecyclerView.NO_POSITION;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentManager.BackStackEntry;
-import android.app.FragmentTransaction;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
@@ -45,6 +44,10 @@ import android.support.v17.leanback.widget.RowPresenter;
import android.support.v17.leanback.widget.ScaleFrameLayout;
import android.support.v17.leanback.widget.TitleViewAdapter;
import android.support.v17.leanback.widget.VerticalGridView;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentManager.BackStackEntry;
+import android.app.FragmentTransaction;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
@@ -1110,7 +1113,7 @@ public class BrowseFragment extends BaseFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- final Context context = FragmentUtil.getContext(this);
+ final Context context = FragmentUtil.getContext(BrowseFragment.this);
TypedArray ta = context.obtainStyledAttributes(R.styleable.LeanbackTheme);
mContainerListMarginStart = (int) ta.getDimension(
R.styleable.LeanbackTheme_browseRowsMarginStart, context.getResources()
@@ -1278,7 +1281,7 @@ public class BrowseFragment extends BaseFragment {
}
void createHeadersTransition() {
- mHeadersTransition = TransitionHelper.loadTransition(FragmentUtil.getContext(this),
+ mHeadersTransition = TransitionHelper.loadTransition(FragmentUtil.getContext(BrowseFragment.this),
mShowingHeaders
? R.transition.lb_browse_headers_in : R.transition.lb_browse_headers_out);
@@ -1710,7 +1713,7 @@ public class BrowseFragment extends BaseFragment {
@Override
protected Object createEntranceTransition() {
- return TransitionHelper.loadTransition(FragmentUtil.getContext(this),
+ return TransitionHelper.loadTransition(FragmentUtil.getContext(BrowseFragment.this),
R.transition.lb_browse_entrance_transition);
}
diff --git a/android/support/v17/leanback/app/BrowseSupportFragment.java b/android/support/v17/leanback/app/BrowseSupportFragment.java
index 2665b2a8..03b3c8a6 100644
--- a/android/support/v17/leanback/app/BrowseSupportFragment.java
+++ b/android/support/v17/leanback/app/BrowseSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from BrowseFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -18,10 +15,6 @@ package android.support.v17.leanback.app;
import static android.support.v7.widget.RecyclerView.NO_POSITION;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentManager.BackStackEntry;
-import android.support.v4.app.FragmentTransaction;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
@@ -48,6 +41,10 @@ import android.support.v17.leanback.widget.RowPresenter;
import android.support.v17.leanback.widget.ScaleFrameLayout;
import android.support.v17.leanback.widget.TitleViewAdapter;
import android.support.v17.leanback.widget.VerticalGridView;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentManager.BackStackEntry;
+import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
diff --git a/android/support/v17/leanback/app/DetailsFragment.java b/android/support/v17/leanback/app/DetailsFragment.java
index 2c4e24ac..36559637 100644
--- a/android/support/v17/leanback/app/DetailsFragment.java
+++ b/android/support/v17/leanback/app/DetailsFragment.java
@@ -1,3 +1,9 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from DetailsSupportFragment.java. DO NOT MODIFY. */
+
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from DetailsFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -771,7 +777,7 @@ public class DetailsFragment extends BaseFragment {
@Override
protected Object createEntranceTransition() {
- return TransitionHelper.loadTransition(FragmentUtil.getContext(this),
+ return TransitionHelper.loadTransition(FragmentUtil.getContext(DetailsFragment.this),
R.transition.lb_details_enter_transition);
}
diff --git a/android/support/v17/leanback/app/DetailsFragmentBackgroundController.java b/android/support/v17/leanback/app/DetailsFragmentBackgroundController.java
index 05dfb3a2..223b8ef2 100644
--- a/android/support/v17/leanback/app/DetailsFragmentBackgroundController.java
+++ b/android/support/v17/leanback/app/DetailsFragmentBackgroundController.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from {}DetailsSupportFragmentBackgroundController.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2017 The Android Open Source Project
*
@@ -16,7 +19,6 @@
package android.support.v17.leanback.app;
import android.animation.PropertyValuesHolder;
-import android.app.Fragment;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
@@ -30,6 +32,7 @@ import android.support.v17.leanback.media.PlaybackGlue;
import android.support.v17.leanback.media.PlaybackGlueHost;
import android.support.v17.leanback.widget.DetailsParallaxDrawable;
import android.support.v17.leanback.widget.ParallaxTarget;
+import android.app.Fragment;
/**
* Controller for DetailsFragment parallax background and embedded video play.
diff --git a/android/support/v17/leanback/app/DetailsSupportFragmentBackgroundController.java b/android/support/v17/leanback/app/DetailsSupportFragmentBackgroundController.java
index 4a0be6ec..aac74ba0 100644
--- a/android/support/v17/leanback/app/DetailsSupportFragmentBackgroundController.java
+++ b/android/support/v17/leanback/app/DetailsSupportFragmentBackgroundController.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from VideoDetailsFragmentBackgroundController.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2017 The Android Open Source Project
*
@@ -19,7 +16,6 @@
package android.support.v17.leanback.app;
import android.animation.PropertyValuesHolder;
-import android.support.v4.app.Fragment;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
@@ -33,6 +29,7 @@ import android.support.v17.leanback.media.PlaybackGlue;
import android.support.v17.leanback.media.PlaybackGlueHost;
import android.support.v17.leanback.widget.DetailsParallaxDrawable;
import android.support.v17.leanback.widget.ParallaxTarget;
+import android.support.v4.app.Fragment;
/**
* Controller for DetailsSupportFragment parallax background and embedded video play.
diff --git a/android/support/v17/leanback/app/ErrorFragment.java b/android/support/v17/leanback/app/ErrorFragment.java
index c35fcdcc..2896d0f4 100644
--- a/android/support/v17/leanback/app/ErrorFragment.java
+++ b/android/support/v17/leanback/app/ErrorFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from ErrorSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
diff --git a/android/support/v17/leanback/app/ErrorSupportFragment.java b/android/support/v17/leanback/app/ErrorSupportFragment.java
index 179e2e97..55e7d929 100644
--- a/android/support/v17/leanback/app/ErrorSupportFragment.java
+++ b/android/support/v17/leanback/app/ErrorSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from ErrorFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
diff --git a/android/support/v17/leanback/app/GuidedStepFragment.java b/android/support/v17/leanback/app/GuidedStepFragment.java
index a01cf263..2b7f2d0d 100644
--- a/android/support/v17/leanback/app/GuidedStepFragment.java
+++ b/android/support/v17/leanback/app/GuidedStepFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from GuidedStepSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2015 The Android Open Source Project
*
@@ -17,11 +20,6 @@ import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
import android.animation.Animator;
import android.animation.AnimatorSet;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentManager.BackStackEntry;
-import android.app.FragmentTransaction;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
@@ -37,6 +35,11 @@ import android.support.v17.leanback.widget.GuidedActionAdapterGroup;
import android.support.v17.leanback.widget.GuidedActionsStylist;
import android.support.v17.leanback.widget.NonOverlappingLinearLayout;
import android.support.v4.app.ActivityCompat;
+import android.app.Fragment;
+import android.app.Activity;
+import android.app.FragmentManager;
+import android.app.FragmentManager.BackStackEntry;
+import android.app.FragmentTransaction;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.TypedValue;
@@ -1131,7 +1134,7 @@ public class GuidedStepFragment extends Fragment implements GuidedActionAdapter.
} else {
// when there are two actions panel, we need adjust the weight of action to
// guidedActionContentWidthWeightTwoPanels.
- Context ctx = mThemeWrapper != null ? mThemeWrapper : FragmentUtil.getContext(this);
+ Context ctx = mThemeWrapper != null ? mThemeWrapper : FragmentUtil.getContext(GuidedStepFragment.this);
TypedValue typedValue = new TypedValue();
if (ctx.getTheme().resolveAttribute(R.attr.guidedActionContentWidthWeightTwoPanels,
typedValue, true)) {
@@ -1338,7 +1341,7 @@ public class GuidedStepFragment extends Fragment implements GuidedActionAdapter.
private void resolveTheme() {
// Look up the guidedStepTheme in the currently specified theme. If it exists,
// replace the theme with its value.
- Context context = FragmentUtil.getContext(this);
+ Context context = FragmentUtil.getContext(GuidedStepFragment.this);
int theme = onProvideTheme();
if (theme == -1 && !isGuidedStepTheme(context)) {
// Look up the guidedStepTheme in the activity's currently specified theme. If it
diff --git a/android/support/v17/leanback/app/GuidedStepSupportFragment.java b/android/support/v17/leanback/app/GuidedStepSupportFragment.java
index ed345482..aeb2d334 100644
--- a/android/support/v17/leanback/app/GuidedStepSupportFragment.java
+++ b/android/support/v17/leanback/app/GuidedStepSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from GuidedStepFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2015 The Android Open Source Project
*
@@ -20,11 +17,6 @@ import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
import android.animation.Animator;
import android.animation.AnimatorSet;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentManager.BackStackEntry;
-import android.support.v4.app.FragmentTransaction;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
@@ -40,6 +32,11 @@ import android.support.v17.leanback.widget.GuidedActionAdapterGroup;
import android.support.v17.leanback.widget.GuidedActionsStylist;
import android.support.v17.leanback.widget.NonOverlappingLinearLayout;
import android.support.v4.app.ActivityCompat;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentManager.BackStackEntry;
+import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.TypedValue;
diff --git a/android/support/v17/leanback/app/HeadersFragment.java b/android/support/v17/leanback/app/HeadersFragment.java
index 724fa411..dd037d2f 100644
--- a/android/support/v17/leanback/app/HeadersFragment.java
+++ b/android/support/v17/leanback/app/HeadersFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from HeadersSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -20,6 +23,8 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.ClassPresenterSelector;
import android.support.v17.leanback.widget.DividerPresenter;
@@ -160,7 +165,7 @@ public class HeadersFragment extends BaseRowFragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final VerticalGridView listView = getVerticalGridView();
if (listView == null) {
diff --git a/android/support/v17/leanback/app/HeadersSupportFragment.java b/android/support/v17/leanback/app/HeadersSupportFragment.java
index be867cb9..56c85af6 100644
--- a/android/support/v17/leanback/app/HeadersSupportFragment.java
+++ b/android/support/v17/leanback/app/HeadersSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from HeadersFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -23,6 +20,8 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.ClassPresenterSelector;
import android.support.v17.leanback.widget.DividerPresenter;
@@ -163,7 +162,7 @@ public class HeadersSupportFragment extends BaseRowSupportFragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final VerticalGridView listView = getVerticalGridView();
if (listView == null) {
diff --git a/android/support/v17/leanback/app/MediaControllerGlue.java b/android/support/v17/leanback/app/MediaControllerGlue.java
deleted file mode 100644
index 7949bfb4..00000000
--- a/android/support/v17/leanback/app/MediaControllerGlue.java
+++ /dev/null
@@ -1,236 +0,0 @@
-package android.support.v17.leanback.app;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.support.v4.media.MediaMetadataCompat;
-import android.support.v4.media.session.MediaControllerCompat;
-import android.support.v4.media.session.PlaybackStateCompat;
-import android.util.Log;
-
-/**
- * A helper class for implementing a glue layer between a
- * {@link PlaybackOverlayFragment} and a
- * {@link android.support.v4.media.session.MediaControllerCompat}.
- * @deprecated Use {@link android.support.v17.leanback.media.MediaControllerGlue}.
- */
-@Deprecated
-public abstract class MediaControllerGlue extends PlaybackControlGlue {
- static final String TAG = "MediaControllerGlue";
- static final boolean DEBUG = false;
-
- MediaControllerCompat mMediaController;
-
- private final MediaControllerCompat.Callback mCallback = new MediaControllerCompat.Callback() {
- @Override
- public void onMetadataChanged(MediaMetadataCompat metadata) {
- if (DEBUG) Log.v(TAG, "onMetadataChanged");
- MediaControllerGlue.this.onMetadataChanged();
- }
- @Override
- public void onPlaybackStateChanged(PlaybackStateCompat state) {
- if (DEBUG) Log.v(TAG, "onPlaybackStateChanged");
- onStateChanged();
- }
- @Override
- public void onSessionDestroyed() {
- if (DEBUG) Log.v(TAG, "onSessionDestroyed");
- mMediaController = null;
- }
- @Override
- public void onSessionEvent(String event, Bundle extras) {
- if (DEBUG) Log.v(TAG, "onSessionEvent");
- }
- };
-
- /**
- * Constructor for the glue.
- *
- * <p>The {@link PlaybackOverlayFragment} must be passed in.
- * A {@link android.support.v17.leanback.widget.OnItemViewClickedListener} and
- * {@link android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler}
- * will be set on the fragment.
- * </p>
- *
- * @param context
- * @param fragment
- * @param seekSpeeds Array of seek speeds for fast forward and rewind.
- */
- public MediaControllerGlue(Context context,
- PlaybackOverlayFragment fragment,
- int[] seekSpeeds) {
- super(context, fragment, seekSpeeds);
- }
-
- /**
- * Constructor for the glue.
- *
- * <p>The {@link PlaybackOverlayFragment} must be passed in.
- * A {@link android.support.v17.leanback.widget.OnItemViewClickedListener} and
- * {@link android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler}
- * will be set on the fragment.
- * </p>
- *
- * @param context
- * @param fragment
- * @param fastForwardSpeeds Array of seek speeds for fast forward.
- * @param rewindSpeeds Array of seek speeds for rewind.
- */
- public MediaControllerGlue(Context context,
- PlaybackOverlayFragment fragment,
- int[] fastForwardSpeeds,
- int[] rewindSpeeds) {
- super(context, fragment, fastForwardSpeeds, rewindSpeeds);
- }
-
- /**
- * Attaches to the given media controller.
- */
- public void attachToMediaController(MediaControllerCompat mediaController) {
- if (mediaController != mMediaController) {
- if (DEBUG) Log.v(TAG, "New media controller " + mediaController);
- detach();
- mMediaController = mediaController;
- if (mMediaController != null) {
- mMediaController.registerCallback(mCallback);
- }
- onMetadataChanged();
- onStateChanged();
- }
- }
-
- /**
- * Detaches from the media controller. Must be called when the object is no longer
- * needed.
- */
- public void detach() {
- if (mMediaController != null) {
- mMediaController.unregisterCallback(mCallback);
- }
- mMediaController = null;
- }
-
- /**
- * Returns the media controller currently attached.
- */
- public final MediaControllerCompat getMediaController() {
- return mMediaController;
- }
-
- @Override
- public boolean hasValidMedia() {
- return mMediaController != null && mMediaController.getMetadata() != null;
- }
-
- @Override
- public boolean isMediaPlaying() {
- return mMediaController.getPlaybackState().getState() == PlaybackStateCompat.STATE_PLAYING;
- }
-
- @Override
- public int getCurrentSpeedId() {
- int speed = (int) mMediaController.getPlaybackState().getPlaybackSpeed();
- if (speed == 0) {
- return PLAYBACK_SPEED_PAUSED;
- } else if (speed == 1) {
- return PLAYBACK_SPEED_NORMAL;
- } else if (speed > 0) {
- int[] seekSpeeds = getFastForwardSpeeds();
- for (int index = 0; index < seekSpeeds.length; index++) {
- if (speed == seekSpeeds[index]) {
- return PLAYBACK_SPEED_FAST_L0 + index;
- }
- }
- } else {
- int[] seekSpeeds = getRewindSpeeds();
- for (int index = 0; index < seekSpeeds.length; index++) {
- if (-speed == seekSpeeds[index]) {
- return -PLAYBACK_SPEED_FAST_L0 - index;
- }
- }
- }
- Log.w(TAG, "Couldn't find index for speed " + speed);
- return PLAYBACK_SPEED_INVALID;
- }
-
- @Override
- public CharSequence getMediaTitle() {
- return mMediaController.getMetadata().getDescription().getTitle();
- }
-
- @Override
- public CharSequence getMediaSubtitle() {
- return mMediaController.getMetadata().getDescription().getSubtitle();
- }
-
- @Override
- public int getMediaDuration() {
- return (int) mMediaController.getMetadata().getLong(
- MediaMetadataCompat.METADATA_KEY_DURATION);
- }
-
- @Override
- public int getCurrentPosition() {
- return (int) mMediaController.getPlaybackState().getPosition();
- }
-
- @Override
- public Drawable getMediaArt() {
- Bitmap bitmap = mMediaController.getMetadata().getDescription().getIconBitmap();
- return bitmap == null ? null : new BitmapDrawable(getContext().getResources(), bitmap);
- }
-
- @Override
- public long getSupportedActions() {
- long result = 0;
- long actions = mMediaController.getPlaybackState().getActions();
- if ((actions & PlaybackStateCompat.ACTION_PLAY_PAUSE) != 0) {
- result |= ACTION_PLAY_PAUSE;
- }
- if ((actions & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0) {
- result |= ACTION_SKIP_TO_NEXT;
- }
- if ((actions & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0) {
- result |= ACTION_SKIP_TO_PREVIOUS;
- }
- if ((actions & PlaybackStateCompat.ACTION_FAST_FORWARD) != 0) {
- result |= ACTION_FAST_FORWARD;
- }
- if ((actions & PlaybackStateCompat.ACTION_REWIND) != 0) {
- result |= ACTION_REWIND;
- }
- return result;
- }
-
- @Override
- protected void startPlayback(int speed) {
- if (DEBUG) Log.v(TAG, "startPlayback speed " + speed);
- if (speed == PLAYBACK_SPEED_NORMAL) {
- mMediaController.getTransportControls().play();
- } else if (speed > 0) {
- mMediaController.getTransportControls().fastForward();
- } else {
- mMediaController.getTransportControls().rewind();
- }
- }
-
- @Override
- protected void pausePlayback() {
- if (DEBUG) Log.v(TAG, "pausePlayback");
- mMediaController.getTransportControls().pause();
- }
-
- @Override
- protected void skipToNext() {
- if (DEBUG) Log.v(TAG, "skipToNext");
- mMediaController.getTransportControls().skipToNext();
- }
-
- @Override
- protected void skipToPrevious() {
- if (DEBUG) Log.v(TAG, "skipToPrevious");
- mMediaController.getTransportControls().skipToPrevious();
- }
-}
diff --git a/android/support/v17/leanback/app/OnboardingFragment.java b/android/support/v17/leanback/app/OnboardingFragment.java
index 22dd2111..b69d5a72 100644
--- a/android/support/v17/leanback/app/OnboardingFragment.java
+++ b/android/support/v17/leanback/app/OnboardingFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from OnboardingSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2015 The Android Open Source Project
*
@@ -22,14 +25,15 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
-import android.app.Fragment;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.PagingIndicator;
+import android.app.Fragment;
import android.util.Log;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
@@ -340,7 +344,7 @@ abstract public class OnboardingFragment extends Fragment {
if (mStartButtonTextSet) {
((Button) mStartButton).setText(mStartButtonText);
}
- final Context context = FragmentUtil.getContext(this);
+ final Context context = FragmentUtil.getContext(OnboardingFragment.this);
if (sSlideDistance == 0) {
sSlideDistance = (int) (SLIDE_DISTANCE * context.getResources()
.getDisplayMetrics().scaledDensity);
@@ -350,7 +354,7 @@ abstract public class OnboardingFragment extends Fragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState == null) {
mCurrentPageIndex = 0;
@@ -538,7 +542,7 @@ abstract public class OnboardingFragment extends Fragment {
}
private void resolveTheme() {
- final Context context = FragmentUtil.getContext(this);
+ final Context context = FragmentUtil.getContext(OnboardingFragment.this);
int theme = onProvideTheme();
if (theme == -1) {
// Look up the onboardingTheme in the activity's currently specified theme. If it
@@ -592,7 +596,7 @@ abstract public class OnboardingFragment extends Fragment {
}
boolean startLogoAnimation() {
- final Context context = FragmentUtil.getContext(this);
+ final Context context = FragmentUtil.getContext(OnboardingFragment.this);
if (context == null) {
return false;
}
@@ -655,7 +659,7 @@ abstract public class OnboardingFragment extends Fragment {
View container = getView();
// Create custom views.
LayoutInflater inflater = getThemeInflater(LayoutInflater.from(
- FragmentUtil.getContext(this)));
+ FragmentUtil.getContext(OnboardingFragment.this)));
ViewGroup backgroundContainer = (ViewGroup) container.findViewById(
R.id.background_container);
View background = onCreateBackgroundView(inflater, backgroundContainer);
@@ -716,7 +720,7 @@ abstract public class OnboardingFragment extends Fragment {
* been done in the past, {@code false} otherwise
*/
protected final void startEnterAnimation(boolean force) {
- final Context context = FragmentUtil.getContext(this);
+ final Context context = FragmentUtil.getContext(OnboardingFragment.this);
if (context == null) {
return;
}
@@ -772,7 +776,7 @@ abstract public class OnboardingFragment extends Fragment {
* default fade and slide animation. Returning null will disable the animation.
*/
protected Animator onCreateDescriptionAnimator() {
- return AnimatorInflater.loadAnimator(FragmentUtil.getContext(this),
+ return AnimatorInflater.loadAnimator(FragmentUtil.getContext(OnboardingFragment.this),
R.animator.lb_onboarding_description_enter);
}
@@ -781,7 +785,7 @@ abstract public class OnboardingFragment extends Fragment {
* default fade and slide animation. Returning null will disable the animation.
*/
protected Animator onCreateTitleAnimator() {
- return AnimatorInflater.loadAnimator(FragmentUtil.getContext(this),
+ return AnimatorInflater.loadAnimator(FragmentUtil.getContext(OnboardingFragment.this),
R.animator.lb_onboarding_title_enter);
}
@@ -919,7 +923,7 @@ abstract public class OnboardingFragment extends Fragment {
}
});
- final Context context = FragmentUtil.getContext(this);
+ final Context context = FragmentUtil.getContext(OnboardingFragment.this);
// Animator for switching between page indicator and button.
if (getCurrentPageIndex() == getPageCount() - 1) {
mStartButton.setVisibility(View.VISIBLE);
diff --git a/android/support/v17/leanback/app/OnboardingSupportFragment.java b/android/support/v17/leanback/app/OnboardingSupportFragment.java
index a24ea4d9..51cb2dea 100644
--- a/android/support/v17/leanback/app/OnboardingSupportFragment.java
+++ b/android/support/v17/leanback/app/OnboardingSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from OnboardingFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2015 The Android Open Source Project
*
@@ -25,14 +22,15 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
-import android.support.v4.app.Fragment;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.PagingIndicator;
+import android.support.v4.app.Fragment;
import android.util.Log;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
@@ -353,7 +351,7 @@ abstract public class OnboardingSupportFragment extends Fragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState == null) {
mCurrentPageIndex = 0;
diff --git a/android/support/v17/leanback/app/PlaybackControlGlue.java b/android/support/v17/leanback/app/PlaybackControlGlue.java
deleted file mode 100644
index d74fd114..00000000
--- a/android/support/v17/leanback/app/PlaybackControlGlue.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.support.v17.leanback.app;
-
-import android.content.Context;
-import android.support.v17.leanback.media.PlaybackGlueHost;
-import android.support.v17.leanback.widget.Action;
-import android.support.v17.leanback.widget.OnActionClickedListener;
-import android.support.v17.leanback.widget.OnItemViewClickedListener;
-import android.support.v17.leanback.widget.PlaybackControlsRow;
-import android.support.v17.leanback.widget.PlaybackControlsRowPresenter;
-import android.support.v17.leanback.widget.PlaybackRowPresenter;
-import android.support.v17.leanback.widget.Presenter;
-import android.support.v17.leanback.widget.PresenterSelector;
-import android.support.v17.leanback.widget.Row;
-import android.support.v17.leanback.widget.RowPresenter;
-import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
-import android.view.InputEvent;
-import android.view.KeyEvent;
-import android.view.View;
-
-/**
- * A helper class for managing a {@link android.support.v17.leanback.widget.PlaybackControlsRow}
- * and {@link PlaybackGlueHost} that implements a
- * recommended approach to handling standard playback control actions such as play/pause,
- * fast forward/rewind at progressive speed levels, and skip to next/previous. This helper class
- * is a glue layer in that manages the configuration of and interaction between the
- * leanback UI components by defining a functional interface to the media player.
- *
- * <p>You can instantiate a concrete subclass such as MediaPlayerGlue or you must
- * subclass this abstract helper. To create a subclass you must implement all of the
- * abstract methods and the subclass must invoke {@link #onMetadataChanged()} and
- * {@link #onStateChanged()} appropriately.
- * </p>
- *
- * <p>To use an instance of the glue layer, first construct an instance. Constructor parameters
- * inform the glue what speed levels are supported for fast forward/rewind.
- * </p>
- *
- * <p>If you have your own controls row you must pass it to {@link #setControlsRow}.
- * The row will be updated by the glue layer based on the media metadata and playback state.
- * Alternatively, you may call {@link #createControlsRowAndPresenter()} which will set a controls
- * row and return a row presenter you can use to present the row.
- * </p>
- *
- * <p>The helper sets a {@link android.support.v17.leanback.widget.SparseArrayObjectAdapter}
- * on the controls row as the primary actions adapter, and adds actions to it. You can provide
- * additional actions by overriding {@link #createPrimaryActionsAdapter}. This helper does not
- * deal in secondary actions so those you may add separately.
- * </p>
- *
- * <p>Provide a click listener on your fragment and if an action is clicked, call
- * {@link #onActionClicked}. If you set a listener by calling {@link #setOnItemViewClickedListener},
- * your listener will be called for all unhandled actions.
- * </p>
- *
- * <p>This helper implements a key event handler. If you pass a
- * {@link PlaybackOverlayFragment}, it will configure its
- * fragment to intercept all key events. Otherwise, you should set the glue object as key event
- * handler to the ViewHolder when bound by your row presenter; see
- * {@link RowPresenter.ViewHolder#setOnKeyListener(android.view.View.OnKeyListener)}.
- * </p>
- *
- * <p>To update the controls row progress during playback, override {@link #enableProgressUpdating}
- * to manage the lifecycle of a periodic callback to {@link #updateProgress()}.
- * {@link #getUpdatePeriod()} provides a recommended update period.
- * </p>
- * @deprecated Use {@link android.support.v17.leanback.media.PlaybackControlGlue}
- */
-@Deprecated
-public abstract class PlaybackControlGlue extends
- android.support.v17.leanback.media.PlaybackControlGlue {
-
- OnItemViewClickedListener mExternalOnItemViewClickedListener;
-
- /**
- * Constructor for the glue.
- *
- * @param context
- * @param seekSpeeds Array of seek speeds for fast forward and rewind.
- */
- public PlaybackControlGlue(Context context, int[] seekSpeeds) {
- super(context, seekSpeeds, seekSpeeds);
- }
-
- /**
- * Constructor for the glue.
- *
- * @param context
- * @param fastForwardSpeeds Array of seek speeds for fast forward.
- * @param rewindSpeeds Array of seek speeds for rewind.
- */
- public PlaybackControlGlue(Context context,
- int[] fastForwardSpeeds,
- int[] rewindSpeeds) {
- super(context, fastForwardSpeeds, rewindSpeeds);
- }
-
- /**
- * Constructor for the glue.
- *
- * @param context
- * @param fragment Optional; if using a {@link PlaybackOverlayFragment}, pass it in.
- * @param seekSpeeds Array of seek speeds for fast forward and rewind.
- */
- public PlaybackControlGlue(Context context,
- PlaybackOverlayFragment fragment,
- int[] seekSpeeds) {
- this(context, fragment, seekSpeeds, seekSpeeds);
- }
-
- /**
- * Constructor for the glue.
- *
- * @param context
- * @param fragment Optional; if using a {@link PlaybackOverlayFragment}, pass it in.
- * @param fastForwardSpeeds Array of seek speeds for fast forward.
- * @param rewindSpeeds Array of seek speeds for rewind.
- */
- public PlaybackControlGlue(Context context,
- PlaybackOverlayFragment fragment,
- int[] fastForwardSpeeds,
- int[] rewindSpeeds) {
- super(context, fastForwardSpeeds, rewindSpeeds);
- setHost(fragment == null ? (PlaybackGlueHost) null : new PlaybackGlueHostOld(fragment));
- }
-
- @Override
- protected void onAttachedToHost(PlaybackGlueHost host) {
- super.onAttachedToHost(host);
- if (host instanceof PlaybackGlueHostOld) {
- ((PlaybackGlueHostOld) host).mGlue = this;
- }
- }
-
- /**
- * Returns the fragment.
- */
- public PlaybackOverlayFragment getFragment() {
- if (getHost() instanceof PlaybackGlueHostOld) {
- return ((PlaybackGlueHostOld)getHost()).mFragment;
- }
- return null;
- }
-
- /**
- * Start playback at the given speed.
- * @deprecated use {@link #play()} instead.
- *
- * @param speed The desired playback speed. For normal playback this will be
- * {@link #PLAYBACK_SPEED_NORMAL}; higher positive values for fast forward,
- * and negative values for rewind.
- */
- @Deprecated
- protected void startPlayback(int speed) {}
-
- /**
- * Pause playback.
- * @deprecated use {@link #pause()} instead.
- */
- @Deprecated
- protected void pausePlayback() {}
-
- /**
- * Skip to the next track.
- * @deprecated use {@link #next()} instead.
- */
- @Deprecated
- protected void skipToNext() {}
-
- /**
- * Skip to the previous track.
- * @deprecated use {@link #previous()} instead.
- */
- @Deprecated
- protected void skipToPrevious() {}
-
- @Override
- public final void next() {
- skipToNext();
- }
-
- @Override
- public final void previous() {
- skipToPrevious();
- }
-
- @Override
- public final void play(int speed) {
- startPlayback(speed);
- }
-
- @Override
- public final void pause() {
- pausePlayback();
- }
-
- /**
- * This method invoked when the playback controls row has changed. The adapter
- * containing this row should be notified.
- */
- protected void onRowChanged(PlaybackControlsRow row) {
- }
-
- /**
- * Set the {@link OnItemViewClickedListener} to be called if the click event
- * is not handled internally.
- * @param listener
- * @deprecated Don't call this. Instead use the listener on the fragment yourself.
- */
- @Deprecated
- public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {
- mExternalOnItemViewClickedListener = listener;
- }
-
- /**
- * Returns the {@link OnItemViewClickedListener}.
- * @deprecated Don't call this. Instead use the listener on the fragment yourself.
- */
- @Deprecated
- public OnItemViewClickedListener getOnItemViewClickedListener() {
- return mExternalOnItemViewClickedListener;
- }
-
- @Override
- protected void onCreateControlsRowAndPresenter() {
- // backward compatible, we dont create row / presenter by default.
- // User is expected to call createControlsRowAndPresenter() or setControlsRow()
- // explicitly.
- }
-
- /**
- * Helper method for instantiating a
- * {@link android.support.v17.leanback.widget.PlaybackControlsRow} and corresponding
- * {@link android.support.v17.leanback.widget.PlaybackControlsRowPresenter}.
- */
- public PlaybackControlsRowPresenter createControlsRowAndPresenter() {
- super.onCreateControlsRowAndPresenter();
- return getControlsRowPresenter();
- }
-
- @Override
- protected SparseArrayObjectAdapter createPrimaryActionsAdapter(
- PresenterSelector presenterSelector) {
- return super.createPrimaryActionsAdapter(presenterSelector);
- }
-
- /**
- * Interface allowing the application to handle input events.
- * @deprecated Use
- * {@link PlaybackGlueHost#setOnKeyInterceptListener(View.OnKeyListener)}.
- */
- @Deprecated
- public interface InputEventHandler {
- /**
- * Called when an {@link InputEvent} is received.
- *
- * @return If the event should be consumed, return true. To allow the event to
- * continue on to the next handler, return false.
- */
- boolean handleInputEvent(InputEvent event);
- }
-
- static final class PlaybackGlueHostOld extends PlaybackGlueHost {
- final PlaybackOverlayFragment mFragment;
- PlaybackControlGlue mGlue;
- OnActionClickedListener mActionClickedListener;
-
- public PlaybackGlueHostOld(PlaybackOverlayFragment fragment) {
- mFragment = fragment;
- mFragment.setOnItemViewClickedListener(new OnItemViewClickedListener() {
- @Override
- public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
- RowPresenter.ViewHolder rowViewHolder, Row row) {
- if (item instanceof Action
- && rowViewHolder instanceof PlaybackRowPresenter.ViewHolder
- && mActionClickedListener != null) {
- mActionClickedListener.onActionClicked((Action) item);
- } else if (mGlue != null && mGlue.getOnItemViewClickedListener() != null) {
- mGlue.getOnItemViewClickedListener().onItemClicked(itemViewHolder,
- item, rowViewHolder, row);
- }
- }
- });
- }
-
- @Override
- public void setFadingEnabled(boolean enable) {
- mFragment.setFadingEnabled(enable);
- }
-
- @Override
- public void setOnKeyInterceptListener(final View.OnKeyListener onKeyListener) {
- mFragment.setEventHandler( new InputEventHandler() {
- @Override
- public boolean handleInputEvent(InputEvent event) {
- if (event instanceof KeyEvent) {
- KeyEvent keyEvent = (KeyEvent) event;
- return onKeyListener.onKey(null, keyEvent.getKeyCode(), keyEvent);
- }
- return false;
- }
- });
- }
-
- @Override
- public void setOnActionClickedListener(final OnActionClickedListener listener) {
- mActionClickedListener = listener;
- }
-
- @Override
- public void setHostCallback(HostCallback callback) {
- mFragment.setHostCallback(callback);
- }
-
- @Override
- public void fadeOut() {
- mFragment.fadeOut();
- }
-
- @Override
- public void notifyPlaybackRowChanged() {
- mGlue.onRowChanged(mGlue.getControlsRow());
- }
- }
-}
diff --git a/android/support/v17/leanback/app/PlaybackControlSupportGlue.java b/android/support/v17/leanback/app/PlaybackControlSupportGlue.java
deleted file mode 100644
index b3d19aee..00000000
--- a/android/support/v17/leanback/app/PlaybackControlSupportGlue.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/* This file is auto-generated from PlaybackControlGlue.java. DO NOT MODIFY. */
-
-package android.support.v17.leanback.app;
-
-import android.content.Context;
-import android.support.v17.leanback.media.PlaybackGlueHost;
-import android.support.v17.leanback.widget.Action;
-import android.support.v17.leanback.widget.OnActionClickedListener;
-import android.support.v17.leanback.widget.OnItemViewClickedListener;
-import android.support.v17.leanback.widget.PlaybackRowPresenter;
-import android.support.v17.leanback.widget.Presenter;
-import android.support.v17.leanback.widget.Row;
-import android.support.v17.leanback.widget.RowPresenter;
-import android.view.InputEvent;
-import android.view.KeyEvent;
-import android.view.View;
-
-/**
- * @deprecated Use {@link android.support.v17.leanback.media.PlaybackControlGlue} and
- * {@link PlaybackSupportFragmentGlueHost} for {@link PlaybackSupportFragment}.
- */
-@Deprecated
-public abstract class PlaybackControlSupportGlue extends PlaybackControlGlue {
- /**
- * The adapter key for the first custom control on the left side
- * of the predefined primary controls.
- */
- public static final int ACTION_CUSTOM_LEFT_FIRST = PlaybackControlGlue.ACTION_CUSTOM_LEFT_FIRST;
-
- /**
- * The adapter key for the skip to previous control.
- */
- public static final int ACTION_SKIP_TO_PREVIOUS = PlaybackControlGlue.ACTION_SKIP_TO_PREVIOUS;
-
- /**
- * The adapter key for the rewind control.
- */
- public static final int ACTION_REWIND = PlaybackControlGlue.ACTION_REWIND;
-
- /**
- * The adapter key for the play/pause control.
- */
- public static final int ACTION_PLAY_PAUSE = PlaybackControlGlue.ACTION_PLAY_PAUSE;
-
- /**
- * The adapter key for the fast forward control.
- */
- public static final int ACTION_FAST_FORWARD = PlaybackControlGlue.ACTION_FAST_FORWARD;
-
- /**
- * The adapter key for the skip to next control.
- */
- public static final int ACTION_SKIP_TO_NEXT = PlaybackControlGlue.ACTION_SKIP_TO_NEXT;
-
- /**
- * The adapter key for the first custom control on the right side
- * of the predefined primary controls.
- */
- public static final int ACTION_CUSTOM_RIGHT_FIRST =
- PlaybackControlGlue.ACTION_CUSTOM_RIGHT_FIRST;
-
- /**
- * Invalid playback speed.
- */
- public static final int PLAYBACK_SPEED_INVALID = PlaybackControlGlue.PLAYBACK_SPEED_INVALID;
-
- /**
- * Speed representing playback state that is paused.
- */
- public static final int PLAYBACK_SPEED_PAUSED = PlaybackControlGlue.PLAYBACK_SPEED_PAUSED;
-
- /**
- * Speed representing playback state that is playing normally.
- */
- public static final int PLAYBACK_SPEED_NORMAL = PlaybackControlGlue.PLAYBACK_SPEED_NORMAL;
-
- /**
- * The initial (level 0) fast forward playback speed.
- * The negative of this value is for rewind at the same speed.
- */
- public static final int PLAYBACK_SPEED_FAST_L0 = PlaybackControlGlue.PLAYBACK_SPEED_FAST_L0;
-
- /**
- * The level 1 fast forward playback speed.
- * The negative of this value is for rewind at the same speed.
- */
- public static final int PLAYBACK_SPEED_FAST_L1 = PlaybackControlGlue.PLAYBACK_SPEED_FAST_L1;
-
- /**
- * The level 2 fast forward playback speed.
- * The negative of this value is for rewind at the same speed.
- */
- public static final int PLAYBACK_SPEED_FAST_L2 = PlaybackControlGlue.PLAYBACK_SPEED_FAST_L2;
-
- /**
- * The level 3 fast forward playback speed.
- * The negative of this value is for rewind at the same speed.
- */
- public static final int PLAYBACK_SPEED_FAST_L3 = PlaybackControlGlue.PLAYBACK_SPEED_FAST_L3;
-
- /**
- * The level 4 fast forward playback speed.
- * The negative of this value is for rewind at the same speed.
- */
- public static final int PLAYBACK_SPEED_FAST_L4 = PlaybackControlGlue.PLAYBACK_SPEED_FAST_L4;
-
- public PlaybackControlSupportGlue(Context context, int[] seekSpeeds) {
- this(context, null, seekSpeeds, seekSpeeds);
- }
-
- public PlaybackControlSupportGlue(
- Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {
- this(context, null, fastForwardSpeeds, rewindSpeeds);
- }
-
- public PlaybackControlSupportGlue(
- Context context,
- PlaybackOverlaySupportFragment fragment,
- int[] seekSpeeds) {
- this(context, fragment, seekSpeeds, seekSpeeds);
- }
-
- public PlaybackControlSupportGlue(
- Context context,
- PlaybackOverlaySupportFragment fragment,
- int[] fastForwardSpeeds,
- int[] rewindSpeeds) {
- super(context, fastForwardSpeeds, rewindSpeeds);
- setHost(fragment == null ? null : new PlaybackSupportGlueHostOld(fragment));
- }
-
- @Override
- protected void onAttachedToHost(PlaybackGlueHost host) {
- super.onAttachedToHost(host);
- if (host instanceof PlaybackSupportGlueHostOld) {
- ((PlaybackSupportGlueHostOld) host).mGlue = this;
- }
- }
-
- static final class PlaybackSupportGlueHostOld extends PlaybackGlueHost {
- final PlaybackOverlaySupportFragment mFragment;
- PlaybackControlSupportGlue mGlue;
- OnActionClickedListener mActionClickedListener;
-
- public PlaybackSupportGlueHostOld(PlaybackOverlaySupportFragment fragment) {
- mFragment = fragment;
- mFragment.setOnItemViewClickedListener(new OnItemViewClickedListener() {
- @Override
- public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
- RowPresenter.ViewHolder rowViewHolder, Row row) {
- if (item instanceof Action
- && rowViewHolder instanceof PlaybackRowPresenter.ViewHolder
- && mActionClickedListener != null) {
- mActionClickedListener.onActionClicked((Action) item);
- } else if (mGlue != null && mGlue.getOnItemViewClickedListener() != null) {
- mGlue.getOnItemViewClickedListener().onItemClicked(itemViewHolder,
- item, rowViewHolder, row);
- }
- }
- });
- }
-
- @Override
- public void setFadingEnabled(boolean enable) {
- mFragment.setFadingEnabled(enable);
- }
-
- @Override
- public void setOnKeyInterceptListener(final View.OnKeyListener onKeyListenerr) {
- mFragment.setEventHandler( new InputEventHandler() {
- @Override
- public boolean handleInputEvent(InputEvent event) {
- if (event instanceof KeyEvent) {
- KeyEvent keyEvent = (KeyEvent) event;
- return onKeyListenerr.onKey(null, keyEvent.getKeyCode(), keyEvent);
- }
- return false;
- }
- });
- }
-
- @Override
- public void setOnActionClickedListener(final OnActionClickedListener listener) {
- mActionClickedListener = listener;
- }
-
- @Override
- public void setHostCallback(HostCallback callback) {
- mFragment.setHostCallback(callback);
- }
-
- @Override
- public void fadeOut() {
- mFragment.fadeOut();
- }
-
- @Override
- public void notifyPlaybackRowChanged() {
- mGlue.onRowChanged(mGlue.getControlsRow());
- }
- }
-}
diff --git a/android/support/v17/leanback/app/PlaybackFragment.java b/android/support/v17/leanback/app/PlaybackFragment.java
index 68a12151..33e787c3 100644
--- a/android/support/v17/leanback/app/PlaybackFragment.java
+++ b/android/support/v17/leanback/app/PlaybackFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from PlaybackSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2016 The Android Open Source Project
*
@@ -18,13 +21,14 @@ import android.animation.AnimatorInflater;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.app.Fragment;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.animation.LogAccelerateInterpolator;
import android.support.v17.leanback.animation.LogDecelerateInterpolator;
@@ -45,6 +49,7 @@ import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.RowPresenter;
import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
import android.support.v17.leanback.widget.VerticalGridView;
+import android.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.InputEvent;
@@ -447,7 +452,7 @@ public class PlaybackFragment extends Fragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// controls view are initially visible, make it invisible
// if app has called hideControlsOverlay() before view created.
@@ -505,7 +510,7 @@ public class PlaybackFragment extends Fragment {
}
};
- Context context = FragmentUtil.getContext(this);
+ Context context = FragmentUtil.getContext(PlaybackFragment.this);
mBgFadeInAnimator = loadAnimator(context, R.animator.lb_playback_bg_fade_in);
mBgFadeInAnimator.addUpdateListener(listener);
mBgFadeInAnimator.addListener(mFadeListener);
@@ -540,7 +545,7 @@ public class PlaybackFragment extends Fragment {
}
};
- Context context = FragmentUtil.getContext(this);
+ Context context = FragmentUtil.getContext(PlaybackFragment.this);
mControlRowFadeInAnimator = loadAnimator(context, R.animator.lb_playback_controls_fade_in);
mControlRowFadeInAnimator.addUpdateListener(updateListener);
mControlRowFadeInAnimator.setInterpolator(mLogDecelerateInterpolator);
@@ -570,7 +575,7 @@ public class PlaybackFragment extends Fragment {
}
};
- Context context = FragmentUtil.getContext(this);
+ Context context = FragmentUtil.getContext(PlaybackFragment.this);
mOtherRowFadeInAnimator = loadAnimator(context, R.animator.lb_playback_controls_fade_in);
mOtherRowFadeInAnimator.addUpdateListener(updateListener);
mOtherRowFadeInAnimator.setInterpolator(mLogDecelerateInterpolator);
diff --git a/android/support/v17/leanback/app/PlaybackFragmentGlueHost.java b/android/support/v17/leanback/app/PlaybackFragmentGlueHost.java
index d537c3a0..4a9d10f8 100644
--- a/android/support/v17/leanback/app/PlaybackFragmentGlueHost.java
+++ b/android/support/v17/leanback/app/PlaybackFragmentGlueHost.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from {}PlaybackSupportFragmentGlueHost.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2016 The Android Open Source Project
*
diff --git a/android/support/v17/leanback/app/PlaybackOverlayFragment.java b/android/support/v17/leanback/app/PlaybackOverlayFragment.java
deleted file mode 100644
index d4b532b0..00000000
--- a/android/support/v17/leanback/app/PlaybackOverlayFragment.java
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Copyright (C) 2014 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 android.support.v17.leanback.app;
-
-import android.animation.Animator;
-import android.animation.AnimatorInflater;
-import android.animation.TimeInterpolator;
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.content.Context;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.support.v17.leanback.R;
-import android.support.v17.leanback.animation.LogAccelerateInterpolator;
-import android.support.v17.leanback.animation.LogDecelerateInterpolator;
-import android.support.v17.leanback.media.PlaybackGlueHost;
-import android.support.v17.leanback.widget.ItemAlignmentFacet;
-import android.support.v17.leanback.widget.ItemBridgeAdapter;
-import android.support.v17.leanback.widget.ObjectAdapter;
-import android.support.v17.leanback.widget.ObjectAdapter.DataObserver;
-import android.support.v17.leanback.widget.PlaybackControlsRowPresenter;
-import android.support.v17.leanback.widget.PlaybackRowPresenter;
-import android.support.v17.leanback.widget.Presenter;
-import android.support.v17.leanback.widget.PresenterSelector;
-import android.support.v17.leanback.widget.RowPresenter;
-import android.support.v17.leanback.widget.VerticalGridView;
-import android.support.v7.widget.RecyclerView;
-import android.util.Log;
-import android.view.InputEvent;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AccelerateInterpolator;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-
-/**
- * A fragment for displaying playback controls and related content.
- * <p>
- * A PlaybackOverlayFragment renders the elements of its {@link ObjectAdapter} as a set
- * of rows in a vertical list. The Adapter's {@link PresenterSelector} must maintain subclasses
- * of {@link RowPresenter}.
- * </p>
- * <p>
- * An instance of {@link android.support.v17.leanback.widget.PlaybackControlsRow} is expected to be
- * at position 0 in the adapter.
- * </p>
- * <p>
- * This class is now deprecated, please us
- * </p>
- * @deprecated Use {@link PlaybackFragment}.
- */
-@Deprecated
-public class PlaybackOverlayFragment extends DetailsFragment {
-
- /**
- * No background.
- */
- public static final int BG_NONE = 0;
-
- /**
- * A dark translucent background.
- */
- public static final int BG_DARK = 1;
-
- /**
- * A light translucent background.
- */
- public static final int BG_LIGHT = 2;
-
- /**
- * Listener allowing the application to receive notification of fade in and/or fade out
- * completion events.
- */
- public static class OnFadeCompleteListener {
- public void onFadeInComplete() {
- }
- public void onFadeOutComplete() {
- }
- }
-
- static final String TAG = "PlaybackOF";
- static final boolean DEBUG = false;
- private static final int ANIMATION_MULTIPLIER = 1;
-
- static int START_FADE_OUT = 1;
-
- // Fading status
- static final int IDLE = 0;
- private static final int IN = 1;
- static final int OUT = 2;
-
- private int mOtherRowsCenterToBottom;
- private int mPaddingBottom;
- private View mRootView;
- private int mBackgroundType = BG_DARK;
- private int mBgDarkColor;
- private int mBgLightColor;
- private int mShowTimeMs;
- private int mMajorFadeTranslateY, mMinorFadeTranslateY;
- int mAnimationTranslateY;
- OnFadeCompleteListener mFadeCompleteListener;
- private PlaybackControlGlue.InputEventHandler mInputEventHandler;
- boolean mFadingEnabled = true;
- int mFadingStatus = IDLE;
- int mBgAlpha;
- private ValueAnimator mBgFadeInAnimator, mBgFadeOutAnimator;
- private ValueAnimator mControlRowFadeInAnimator, mControlRowFadeOutAnimator;
- private ValueAnimator mDescriptionFadeInAnimator, mDescriptionFadeOutAnimator;
- private ValueAnimator mOtherRowFadeInAnimator, mOtherRowFadeOutAnimator;
- boolean mResetControlsToPrimaryActionsPending;
- PlaybackGlueHost.HostCallback mHostCallback;
-
- private final Animator.AnimatorListener mFadeListener =
- new Animator.AnimatorListener() {
- @Override
- public void onAnimationStart(Animator animation) {
- enableVerticalGridAnimations(false);
- }
- @Override
- public void onAnimationRepeat(Animator animation) {
- }
- @Override
- public void onAnimationCancel(Animator animation) {
- }
- @Override
- public void onAnimationEnd(Animator animation) {
- if (DEBUG) Log.v(TAG, "onAnimationEnd " + mBgAlpha);
- if (mBgAlpha > 0) {
- enableVerticalGridAnimations(true);
- startFadeTimer();
- if (mFadeCompleteListener != null) {
- mFadeCompleteListener.onFadeInComplete();
- }
- } else {
- VerticalGridView verticalView = getVerticalGridView();
- // reset focus to the primary actions only if the selected row was the controls row
- if (verticalView != null && verticalView.getSelectedPosition() == 0) {
- resetControlsToPrimaryActions(null);
- }
- if (mFadeCompleteListener != null) {
- mFadeCompleteListener.onFadeOutComplete();
- }
- }
- mFadingStatus = IDLE;
- }
- };
-
- static class FadeHandler extends Handler {
- @Override
- public void handleMessage(Message message) {
- PlaybackOverlayFragment fragment;
- if (message.what == START_FADE_OUT) {
- fragment = ((WeakReference<PlaybackOverlayFragment>) message.obj).get();
- if (fragment != null && fragment.mFadingEnabled) {
- fragment.fade(false);
- }
- }
- }
- }
-
- static final Handler sHandler = new FadeHandler();
-
- final WeakReference<PlaybackOverlayFragment> mFragmentReference = new WeakReference(this);
-
- private final VerticalGridView.OnTouchInterceptListener mOnTouchInterceptListener =
- new VerticalGridView.OnTouchInterceptListener() {
- @Override
- public boolean onInterceptTouchEvent(MotionEvent event) {
- return onInterceptInputEvent(event);
- }
- };
-
- private final VerticalGridView.OnKeyInterceptListener mOnKeyInterceptListener =
- new VerticalGridView.OnKeyInterceptListener() {
- @Override
- public boolean onInterceptKeyEvent(KeyEvent event) {
- return onInterceptInputEvent(event);
- }
- };
-
- void setBgAlpha(int alpha) {
- mBgAlpha = alpha;
- if (mRootView != null) {
- mRootView.getBackground().setAlpha(alpha);
- }
- }
-
- void enableVerticalGridAnimations(boolean enable) {
- if (getVerticalGridView() != null) {
- getVerticalGridView().setAnimateChildLayout(enable);
- }
- }
-
- void resetControlsToPrimaryActions(ItemBridgeAdapter.ViewHolder vh) {
- if (vh == null && getVerticalGridView() != null) {
- vh = (ItemBridgeAdapter.ViewHolder) getVerticalGridView().findViewHolderForPosition(0);
- }
- if (vh == null) {
- mResetControlsToPrimaryActionsPending = true;
- } else if (vh.getPresenter() instanceof PlaybackControlsRowPresenter) {
- mResetControlsToPrimaryActionsPending = false;
- ((PlaybackControlsRowPresenter) vh.getPresenter()).showPrimaryActions(
- (PlaybackControlsRowPresenter.ViewHolder) vh.getViewHolder());
- }
- }
-
- /**
- * Enables or disables view fading. If enabled,
- * the view will be faded in when the fragment starts,
- * and will fade out after a time period. The timeout
- * period is reset each time {@link #tickle} is called.
- *
- */
- public void setFadingEnabled(boolean enabled) {
- if (DEBUG) Log.v(TAG, "setFadingEnabled " + enabled);
- if (enabled != mFadingEnabled) {
- mFadingEnabled = enabled;
- if (mFadingEnabled) {
- if (isResumed() && mFadingStatus == IDLE
- && !sHandler.hasMessages(START_FADE_OUT, mFragmentReference)) {
- startFadeTimer();
- }
- } else {
- // Ensure fully opaque
- sHandler.removeMessages(START_FADE_OUT, mFragmentReference);
- fade(true);
- }
- }
- }
-
- /**
- * Returns true if view fading is enabled.
- */
- public boolean isFadingEnabled() {
- return mFadingEnabled;
- }
-
- /**
- * Sets the listener to be called when fade in or out has completed.
- */
- public void setFadeCompleteListener(OnFadeCompleteListener listener) {
- mFadeCompleteListener = listener;
- }
-
- /**
- * Returns the listener to be called when fade in or out has completed.
- */
- public OnFadeCompleteListener getFadeCompleteListener() {
- return mFadeCompleteListener;
- }
-
- @Deprecated
- public interface InputEventHandler extends PlaybackControlGlue.InputEventHandler {
- }
-
- /**
- * Sets the input event handler.
- */
- @Deprecated
- public final void setInputEventHandler(InputEventHandler handler) {
- mInputEventHandler = handler;
- }
-
- /**
- * Returns the input event handler.
- */
- @Deprecated
- public final InputEventHandler getInputEventHandler() {
- return (InputEventHandler)mInputEventHandler;
- }
-
- /**
- * Sets the input event handler.
- */
- public final void setEventHandler(PlaybackControlGlue.InputEventHandler handler) {
- mInputEventHandler = handler;
- }
-
- /**
- * Returns the input event handler.
- */
- public final PlaybackControlGlue.InputEventHandler getEventHandler() {
- return mInputEventHandler;
- }
-
- /**
- * Tickles the playback controls. Fades in the view if it was faded out,
- * otherwise resets the fade out timer. Tickling on input events is handled
- * by the fragment.
- */
- public void tickle() {
- if (DEBUG) Log.v(TAG, "tickle enabled " + mFadingEnabled + " isResumed " + isResumed());
- if (!mFadingEnabled || !isResumed()) {
- return;
- }
- if (sHandler.hasMessages(START_FADE_OUT, mFragmentReference)) {
- // Restart the timer
- startFadeTimer();
- } else {
- fade(true);
- }
- }
-
- /**
- * Fades out the playback overlay immediately.
- */
- public void fadeOut() {
- sHandler.removeMessages(START_FADE_OUT, mFragmentReference);
- fade(false);
- }
-
- /**
- * Sets the {@link PlaybackGlueHost.HostCallback}. Implementor of this interface will
- * take appropriate actions to take action when the hosting fragment starts/stops processing.
- */
- void setHostCallback(PlaybackGlueHost.HostCallback hostCallback) {
- this.mHostCallback = hostCallback;
- }
-
- @Override
- public void onStop() {
- if (mHostCallback != null) {
- mHostCallback.onHostStop();
- }
- super.onStop();
- }
-
- @Override
- public void onPause() {
- if (mHostCallback != null) {
- mHostCallback.onHostPause();
- }
- super.onPause();
- }
-
- private boolean areControlsHidden() {
- return mFadingStatus == IDLE && mBgAlpha == 0;
- }
-
- boolean onInterceptInputEvent(InputEvent event) {
- final boolean controlsHidden = areControlsHidden();
- if (DEBUG) Log.v(TAG, "onInterceptInputEvent hidden " + controlsHidden + " " + event);
- boolean consumeEvent = false;
- int keyCode = KeyEvent.KEYCODE_UNKNOWN;
-
- if (mInputEventHandler != null) {
- consumeEvent = mInputEventHandler.handleInputEvent(event);
- }
- if (event instanceof KeyEvent) {
- keyCode = ((KeyEvent) event).getKeyCode();
- }
-
- switch (keyCode) {
- case KeyEvent.KEYCODE_DPAD_CENTER:
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- // Event may be consumed; regardless, if controls are hidden then these keys will
- // bring up the controls.
- if (controlsHidden) {
- consumeEvent = true;
- }
- tickle();
- break;
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- // If fading enabled and controls are not hidden, back will be consumed to fade
- // them out (even if the key was consumed by the handler).
- if (mFadingEnabled && !controlsHidden) {
- consumeEvent = true;
- sHandler.removeMessages(START_FADE_OUT, mFragmentReference);
- fade(false);
- } else if (consumeEvent) {
- tickle();
- }
- break;
- default:
- if (consumeEvent) {
- tickle();
- }
- }
- return consumeEvent;
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (mFadingEnabled) {
- setBgAlpha(0);
- fade(true);
- }
- getVerticalGridView().setOnTouchInterceptListener(mOnTouchInterceptListener);
- getVerticalGridView().setOnKeyInterceptListener(mOnKeyInterceptListener);
- if (mHostCallback != null) {
- mHostCallback.onHostResume();
- }
- }
-
- void startFadeTimer() {
- sHandler.removeMessages(START_FADE_OUT, mFragmentReference);
- sHandler.sendMessageDelayed(sHandler.obtainMessage(START_FADE_OUT, mFragmentReference),
- mShowTimeMs);
- }
-
- private static ValueAnimator loadAnimator(Context context, int resId) {
- ValueAnimator animator = (ValueAnimator) AnimatorInflater.loadAnimator(context, resId);
- animator.setDuration(animator.getDuration() * ANIMATION_MULTIPLIER);
- return animator;
- }
-
- private void loadBgAnimator() {
- AnimatorUpdateListener listener = new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator arg0) {
- setBgAlpha((Integer) arg0.getAnimatedValue());
- }
- };
-
- Context context = FragmentUtil.getContext(this);
- mBgFadeInAnimator = loadAnimator(context, R.animator.lb_playback_bg_fade_in);
- mBgFadeInAnimator.addUpdateListener(listener);
- mBgFadeInAnimator.addListener(mFadeListener);
-
- mBgFadeOutAnimator = loadAnimator(context, R.animator.lb_playback_bg_fade_out);
- mBgFadeOutAnimator.addUpdateListener(listener);
- mBgFadeOutAnimator.addListener(mFadeListener);
- }
-
- private TimeInterpolator mLogDecelerateInterpolator = new LogDecelerateInterpolator(100,0);
- private TimeInterpolator mLogAccelerateInterpolator = new LogAccelerateInterpolator(100,0);
-
- View getControlRowView() {
- if (getVerticalGridView() == null) {
- return null;
- }
- RecyclerView.ViewHolder vh = getVerticalGridView().findViewHolderForPosition(0);
- if (vh == null) {
- return null;
- }
- return vh.itemView;
- }
-
- private void loadControlRowAnimator() {
- final AnimatorListener listener = new AnimatorListener() {
- @Override
- void getViews(ArrayList<View> views) {
- View view = getControlRowView();
- if (view != null) {
- views.add(view);
- }
- }
- };
- final AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator arg0) {
- View view = getControlRowView();
- if (view != null) {
- final float fraction = (Float) arg0.getAnimatedValue();
- if (DEBUG) Log.v(TAG, "fraction " + fraction);
- view.setAlpha(fraction);
- view.setTranslationY((float) mAnimationTranslateY * (1f - fraction));
- }
- }
- };
-
- Context context = FragmentUtil.getContext(this);
- mControlRowFadeInAnimator = loadAnimator(context, R.animator.lb_playback_controls_fade_in);
- mControlRowFadeInAnimator.addUpdateListener(updateListener);
- mControlRowFadeInAnimator.addListener(listener);
- mControlRowFadeInAnimator.setInterpolator(mLogDecelerateInterpolator);
-
- mControlRowFadeOutAnimator = loadAnimator(context,
- R.animator.lb_playback_controls_fade_out);
- mControlRowFadeOutAnimator.addUpdateListener(updateListener);
- mControlRowFadeOutAnimator.addListener(listener);
- mControlRowFadeOutAnimator.setInterpolator(mLogAccelerateInterpolator);
- }
-
- private void loadOtherRowAnimator() {
- final AnimatorListener listener = new AnimatorListener() {
- @Override
- void getViews(ArrayList<View> views) {
- if (getVerticalGridView() == null) {
- return;
- }
- final int count = getVerticalGridView().getChildCount();
- for (int i = 0; i < count; i++) {
- View view = getVerticalGridView().getChildAt(i);
- if (view != null) {
- views.add(view);
- }
- }
- }
- };
- final AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator arg0) {
- if (getVerticalGridView() == null) {
- return;
- }
- final float fraction = (Float) arg0.getAnimatedValue();
- for (View view : listener.mViews) {
- if (getVerticalGridView().getChildPosition(view) > 0) {
- view.setAlpha(fraction);
- view.setTranslationY((float) mAnimationTranslateY * (1f - fraction));
- }
- }
- }
- };
-
- Context context = FragmentUtil.getContext(this);
- mOtherRowFadeInAnimator = loadAnimator(context, R.animator.lb_playback_controls_fade_in);
- mOtherRowFadeInAnimator.addListener(listener);
- mOtherRowFadeInAnimator.addUpdateListener(updateListener);
- mOtherRowFadeInAnimator.setInterpolator(mLogDecelerateInterpolator);
-
- mOtherRowFadeOutAnimator = loadAnimator(context, R.animator.lb_playback_controls_fade_out);
- mOtherRowFadeOutAnimator.addListener(listener);
- mOtherRowFadeOutAnimator.addUpdateListener(updateListener);
- mOtherRowFadeOutAnimator.setInterpolator(new AccelerateInterpolator());
- }
-
- private void loadDescriptionAnimator() {
- AnimatorUpdateListener listener = new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator arg0) {
- if (getVerticalGridView() == null) {
- return;
- }
- ItemBridgeAdapter.ViewHolder adapterVh = (ItemBridgeAdapter.ViewHolder)
- getVerticalGridView().findViewHolderForPosition(0);
- if (adapterVh != null && adapterVh.getViewHolder()
- instanceof PlaybackControlsRowPresenter.ViewHolder) {
- final Presenter.ViewHolder vh = ((PlaybackControlsRowPresenter.ViewHolder)
- adapterVh.getViewHolder()).mDescriptionViewHolder;
- if (vh != null) {
- vh.view.setAlpha((Float) arg0.getAnimatedValue());
- }
- }
- }
- };
-
- Context context = FragmentUtil.getContext(this);
- mDescriptionFadeInAnimator = loadAnimator(context,
- R.animator.lb_playback_description_fade_in);
- mDescriptionFadeInAnimator.addUpdateListener(listener);
- mDescriptionFadeInAnimator.setInterpolator(mLogDecelerateInterpolator);
-
- mDescriptionFadeOutAnimator = loadAnimator(context,
- R.animator.lb_playback_description_fade_out);
- mDescriptionFadeOutAnimator.addUpdateListener(listener);
- }
-
- void fade(boolean fadeIn) {
- if (DEBUG) Log.v(TAG, "fade " + fadeIn);
- if (getView() == null) {
- return;
- }
- if ((fadeIn && mFadingStatus == IN) || (!fadeIn && mFadingStatus == OUT)) {
- if (DEBUG) Log.v(TAG, "requested fade in progress");
- return;
- }
- if ((fadeIn && mBgAlpha == 255) || (!fadeIn && mBgAlpha == 0)) {
- if (DEBUG) Log.v(TAG, "fade is no-op");
- return;
- }
-
- mAnimationTranslateY = getVerticalGridView().getSelectedPosition() == 0
- ? mMajorFadeTranslateY : mMinorFadeTranslateY;
-
- if (mFadingStatus == IDLE) {
- if (fadeIn) {
- mBgFadeInAnimator.start();
- mControlRowFadeInAnimator.start();
- mOtherRowFadeInAnimator.start();
- mDescriptionFadeInAnimator.start();
- } else {
- mBgFadeOutAnimator.start();
- mControlRowFadeOutAnimator.start();
- mOtherRowFadeOutAnimator.start();
- mDescriptionFadeOutAnimator.start();
- }
- } else {
- if (fadeIn) {
- mBgFadeOutAnimator.reverse();
- mControlRowFadeOutAnimator.reverse();
- mOtherRowFadeOutAnimator.reverse();
- mDescriptionFadeOutAnimator.reverse();
- } else {
- mBgFadeInAnimator.reverse();
- mControlRowFadeInAnimator.reverse();
- mOtherRowFadeInAnimator.reverse();
- mDescriptionFadeInAnimator.reverse();
- }
- }
- getView().announceForAccessibility(getString(fadeIn ? R.string.lb_playback_controls_shown
- : R.string.lb_playback_controls_hidden));
-
- // If fading in while control row is focused, set initial translationY so
- // views slide in from below.
- if (fadeIn && mFadingStatus == IDLE) {
- final int count = getVerticalGridView().getChildCount();
- for (int i = 0; i < count; i++) {
- getVerticalGridView().getChildAt(i).setTranslationY(mAnimationTranslateY);
- }
- }
-
- mFadingStatus = fadeIn ? IN : OUT;
- }
-
- /**
- * Sets the list of rows for the fragment.
- */
- @Override
- public void setAdapter(ObjectAdapter adapter) {
- if (getAdapter() != null) {
- getAdapter().unregisterObserver(mObserver);
- }
- super.setAdapter(adapter);
- if (adapter != null) {
- adapter.registerObserver(mObserver);
- }
- }
-
- @Override
- protected void setupPresenter(Presenter rowPresenter) {
- if (rowPresenter instanceof PlaybackRowPresenter) {
- if (rowPresenter.getFacet(ItemAlignmentFacet.class) == null) {
- ItemAlignmentFacet itemAlignment = new ItemAlignmentFacet();
- ItemAlignmentFacet.ItemAlignmentDef def =
- new ItemAlignmentFacet.ItemAlignmentDef();
- def.setItemAlignmentOffset(0);
- def.setItemAlignmentOffsetPercent(100);
- itemAlignment.setAlignmentDefs(new ItemAlignmentFacet.ItemAlignmentDef[]
- {def});
- rowPresenter.setFacet(ItemAlignmentFacet.class, itemAlignment);
- }
- } else {
- super.setupPresenter(rowPresenter);
- }
- }
-
- @Override
- void setVerticalGridViewLayout(VerticalGridView listview) {
- if (listview == null) {
- return;
- }
-
- // we set the base line of alignment to -paddingBottom
- listview.setWindowAlignmentOffset(-mPaddingBottom);
- listview.setWindowAlignmentOffsetPercent(
- VerticalGridView.WINDOW_ALIGN_OFFSET_PERCENT_DISABLED);
-
- // align other rows that arent the last to center of screen, since our baseline is
- // -mPaddingBottom, we need subtract that from mOtherRowsCenterToBottom.
- listview.setItemAlignmentOffset(mOtherRowsCenterToBottom - mPaddingBottom);
- listview.setItemAlignmentOffsetPercent(50);
-
- // Push last row to the bottom padding
- // Padding affects alignment when last row is focused
- listview.setPadding(listview.getPaddingLeft(), listview.getPaddingTop(),
- listview.getPaddingRight(), mPaddingBottom);
- listview.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_HIGH_EDGE);
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mOtherRowsCenterToBottom = getResources()
- .getDimensionPixelSize(R.dimen.lb_playback_other_rows_center_to_bottom);
- mPaddingBottom =
- getResources().getDimensionPixelSize(R.dimen.lb_playback_controls_padding_bottom);
- mBgDarkColor =
- getResources().getColor(R.color.lb_playback_controls_background_dark);
- mBgLightColor =
- getResources().getColor(R.color.lb_playback_controls_background_light);
- mShowTimeMs =
- getResources().getInteger(R.integer.lb_playback_controls_show_time_ms);
- mMajorFadeTranslateY =
- getResources().getDimensionPixelSize(R.dimen.lb_playback_major_fade_translate_y);
- mMinorFadeTranslateY =
- getResources().getDimensionPixelSize(R.dimen.lb_playback_minor_fade_translate_y);
-
- loadBgAnimator();
- loadControlRowAnimator();
- loadOtherRowAnimator();
- loadDescriptionAnimator();
- }
-
- /**
- * Sets the background type.
- *
- * @param type One of BG_LIGHT, BG_DARK, or BG_NONE.
- */
- public void setBackgroundType(int type) {
- switch (type) {
- case BG_LIGHT:
- case BG_DARK:
- case BG_NONE:
- if (type != mBackgroundType) {
- mBackgroundType = type;
- updateBackground();
- }
- break;
- default:
- throw new IllegalArgumentException("Invalid background type");
- }
- }
-
- /**
- * Returns the background type.
- */
- public int getBackgroundType() {
- return mBackgroundType;
- }
-
- private void updateBackground() {
- if (mRootView != null) {
- int color = mBgDarkColor;
- switch (mBackgroundType) {
- case BG_DARK: break;
- case BG_LIGHT: color = mBgLightColor; break;
- case BG_NONE: color = Color.TRANSPARENT; break;
- }
- mRootView.setBackground(new ColorDrawable(color));
- }
- }
-
- void updateControlsBottomSpace(ItemBridgeAdapter.ViewHolder vh) {
- // Add extra space between rows 0 and 1
- if (vh == null && getVerticalGridView() != null) {
- vh = (ItemBridgeAdapter.ViewHolder)
- getVerticalGridView().findViewHolderForPosition(0);
- }
- if (vh != null && vh.getPresenter() instanceof PlaybackControlsRowPresenter) {
- final int adapterSize = getAdapter() == null ? 0 : getAdapter().size();
- ((PlaybackControlsRowPresenter) vh.getPresenter()).showBottomSpace(
- (PlaybackControlsRowPresenter.ViewHolder) vh.getViewHolder(),
- adapterSize > 1);
- }
- }
-
- private final ItemBridgeAdapter.AdapterListener mAdapterListener =
- new ItemBridgeAdapter.AdapterListener() {
- @Override
- public void onAttachedToWindow(ItemBridgeAdapter.ViewHolder vh) {
- if (DEBUG) Log.v(TAG, "onAttachedToWindow " + vh.getViewHolder().view);
- if ((mFadingStatus == IDLE && mBgAlpha == 0) || mFadingStatus == OUT) {
- if (DEBUG) Log.v(TAG, "setting alpha to 0");
- vh.getViewHolder().view.setAlpha(0);
- }
- if (vh.getPosition() == 0 && mResetControlsToPrimaryActionsPending) {
- resetControlsToPrimaryActions(vh);
- }
- }
- @Override
- public void onDetachedFromWindow(ItemBridgeAdapter.ViewHolder vh) {
- if (DEBUG) Log.v(TAG, "onDetachedFromWindow " + vh.getViewHolder().view);
- // Reset animation state
- vh.getViewHolder().view.setAlpha(1f);
- vh.getViewHolder().view.setTranslationY(0);
- if (vh.getViewHolder() instanceof PlaybackControlsRowPresenter.ViewHolder) {
- Presenter.ViewHolder descriptionVh = ((PlaybackControlsRowPresenter.ViewHolder)
- vh.getViewHolder()).mDescriptionViewHolder;
- if (descriptionVh != null) {
- descriptionVh.view.setAlpha(1f);
- }
- }
- }
- @Override
- public void onBind(ItemBridgeAdapter.ViewHolder vh) {
- if (vh.getPosition() == 0) {
- updateControlsBottomSpace(vh);
- }
- }
- };
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- mRootView = super.onCreateView(inflater, container, savedInstanceState);
- mBgAlpha = 255;
- updateBackground();
- getRowsFragment().setExternalAdapterListener(mAdapterListener);
- return mRootView;
- }
-
- @Override
- public void onDestroyView() {
- mRootView = null;
- if (mHostCallback != null) {
- mHostCallback.onHostDestroy();
- }
- super.onDestroyView();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- // Workaround problem VideoView forcing itself to focused, let controls take focus.
- getRowsFragment().getView().requestFocus();
- if (mHostCallback != null) {
- mHostCallback.onHostStart();
- }
- }
-
- private final DataObserver mObserver = new DataObserver() {
- @Override
- public void onChanged() {
- updateControlsBottomSpace(null);
- }
- };
-
- static abstract class AnimatorListener implements Animator.AnimatorListener {
- ArrayList<View> mViews = new ArrayList<View>();
- ArrayList<Integer> mLayerType = new ArrayList<Integer>();
-
- @Override
- public void onAnimationCancel(Animator animation) {
- }
- @Override
- public void onAnimationRepeat(Animator animation) {
- }
- @Override
- public void onAnimationStart(Animator animation) {
- getViews(mViews);
- for (View view : mViews) {
- mLayerType.add(view.getLayerType());
- view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
- }
- }
- @Override
- public void onAnimationEnd(Animator animation) {
- for (int i = 0; i < mViews.size(); i++) {
- mViews.get(i).setLayerType(mLayerType.get(i), null);
- }
- mLayerType.clear();
- mViews.clear();
- }
- abstract void getViews(ArrayList<View> views);
-
- };
-}
diff --git a/android/support/v17/leanback/app/PlaybackOverlaySupportFragment.java b/android/support/v17/leanback/app/PlaybackOverlaySupportFragment.java
deleted file mode 100644
index d7513204..00000000
--- a/android/support/v17/leanback/app/PlaybackOverlaySupportFragment.java
+++ /dev/null
@@ -1,866 +0,0 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from PlaybackOverlayFragment.java. DO NOT MODIFY. */
-
-/*
- * Copyright (C) 2014 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 android.support.v17.leanback.app;
-
-import android.animation.Animator;
-import android.animation.AnimatorInflater;
-import android.animation.TimeInterpolator;
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.content.Context;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.support.v17.leanback.R;
-import android.support.v17.leanback.animation.LogAccelerateInterpolator;
-import android.support.v17.leanback.animation.LogDecelerateInterpolator;
-import android.support.v17.leanback.media.PlaybackGlueHost;
-import android.support.v17.leanback.widget.ItemAlignmentFacet;
-import android.support.v17.leanback.widget.ItemBridgeAdapter;
-import android.support.v17.leanback.widget.ObjectAdapter;
-import android.support.v17.leanback.widget.ObjectAdapter.DataObserver;
-import android.support.v17.leanback.widget.PlaybackControlsRowPresenter;
-import android.support.v17.leanback.widget.PlaybackRowPresenter;
-import android.support.v17.leanback.widget.Presenter;
-import android.support.v17.leanback.widget.PresenterSelector;
-import android.support.v17.leanback.widget.RowPresenter;
-import android.support.v17.leanback.widget.VerticalGridView;
-import android.support.v7.widget.RecyclerView;
-import android.util.Log;
-import android.view.InputEvent;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AccelerateInterpolator;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-
-/**
- * A fragment for displaying playback controls and related content.
- * <p>
- * A PlaybackOverlaySupportFragment renders the elements of its {@link ObjectAdapter} as a set
- * of rows in a vertical list. The Adapter's {@link PresenterSelector} must maintain subclasses
- * of {@link RowPresenter}.
- * </p>
- * <p>
- * An instance of {@link android.support.v17.leanback.widget.PlaybackControlsRow} is expected to be
- * at position 0 in the adapter.
- * </p>
- * <p>
- * This class is now deprecated, please us
- * </p>
- * @deprecated Use {@link PlaybackSupportFragment}.
- */
-@Deprecated
-public class PlaybackOverlaySupportFragment extends DetailsSupportFragment {
-
- /**
- * No background.
- */
- public static final int BG_NONE = 0;
-
- /**
- * A dark translucent background.
- */
- public static final int BG_DARK = 1;
-
- /**
- * A light translucent background.
- */
- public static final int BG_LIGHT = 2;
-
- /**
- * Listener allowing the application to receive notification of fade in and/or fade out
- * completion events.
- */
- public static class OnFadeCompleteListener {
- public void onFadeInComplete() {
- }
- public void onFadeOutComplete() {
- }
- }
-
- static final String TAG = "PlaybackOF";
- static final boolean DEBUG = false;
- private static final int ANIMATION_MULTIPLIER = 1;
-
- static int START_FADE_OUT = 1;
-
- // Fading status
- static final int IDLE = 0;
- private static final int IN = 1;
- static final int OUT = 2;
-
- private int mOtherRowsCenterToBottom;
- private int mPaddingBottom;
- private View mRootView;
- private int mBackgroundType = BG_DARK;
- private int mBgDarkColor;
- private int mBgLightColor;
- private int mShowTimeMs;
- private int mMajorFadeTranslateY, mMinorFadeTranslateY;
- int mAnimationTranslateY;
- OnFadeCompleteListener mFadeCompleteListener;
- private PlaybackControlGlue.InputEventHandler mInputEventHandler;
- boolean mFadingEnabled = true;
- int mFadingStatus = IDLE;
- int mBgAlpha;
- private ValueAnimator mBgFadeInAnimator, mBgFadeOutAnimator;
- private ValueAnimator mControlRowFadeInAnimator, mControlRowFadeOutAnimator;
- private ValueAnimator mDescriptionFadeInAnimator, mDescriptionFadeOutAnimator;
- private ValueAnimator mOtherRowFadeInAnimator, mOtherRowFadeOutAnimator;
- boolean mResetControlsToPrimaryActionsPending;
- PlaybackGlueHost.HostCallback mHostCallback;
-
- private final Animator.AnimatorListener mFadeListener =
- new Animator.AnimatorListener() {
- @Override
- public void onAnimationStart(Animator animation) {
- enableVerticalGridAnimations(false);
- }
- @Override
- public void onAnimationRepeat(Animator animation) {
- }
- @Override
- public void onAnimationCancel(Animator animation) {
- }
- @Override
- public void onAnimationEnd(Animator animation) {
- if (DEBUG) Log.v(TAG, "onAnimationEnd " + mBgAlpha);
- if (mBgAlpha > 0) {
- enableVerticalGridAnimations(true);
- startFadeTimer();
- if (mFadeCompleteListener != null) {
- mFadeCompleteListener.onFadeInComplete();
- }
- } else {
- VerticalGridView verticalView = getVerticalGridView();
- // reset focus to the primary actions only if the selected row was the controls row
- if (verticalView != null && verticalView.getSelectedPosition() == 0) {
- resetControlsToPrimaryActions(null);
- }
- if (mFadeCompleteListener != null) {
- mFadeCompleteListener.onFadeOutComplete();
- }
- }
- mFadingStatus = IDLE;
- }
- };
-
- static class FadeHandler extends Handler {
- @Override
- public void handleMessage(Message message) {
- PlaybackOverlaySupportFragment fragment;
- if (message.what == START_FADE_OUT) {
- fragment = ((WeakReference<PlaybackOverlaySupportFragment>) message.obj).get();
- if (fragment != null && fragment.mFadingEnabled) {
- fragment.fade(false);
- }
- }
- }
- }
-
- static final Handler sHandler = new FadeHandler();
-
- final WeakReference<PlaybackOverlaySupportFragment> mFragmentReference = new WeakReference(this);
-
- private final VerticalGridView.OnTouchInterceptListener mOnTouchInterceptListener =
- new VerticalGridView.OnTouchInterceptListener() {
- @Override
- public boolean onInterceptTouchEvent(MotionEvent event) {
- return onInterceptInputEvent(event);
- }
- };
-
- private final VerticalGridView.OnKeyInterceptListener mOnKeyInterceptListener =
- new VerticalGridView.OnKeyInterceptListener() {
- @Override
- public boolean onInterceptKeyEvent(KeyEvent event) {
- return onInterceptInputEvent(event);
- }
- };
-
- void setBgAlpha(int alpha) {
- mBgAlpha = alpha;
- if (mRootView != null) {
- mRootView.getBackground().setAlpha(alpha);
- }
- }
-
- void enableVerticalGridAnimations(boolean enable) {
- if (getVerticalGridView() != null) {
- getVerticalGridView().setAnimateChildLayout(enable);
- }
- }
-
- void resetControlsToPrimaryActions(ItemBridgeAdapter.ViewHolder vh) {
- if (vh == null && getVerticalGridView() != null) {
- vh = (ItemBridgeAdapter.ViewHolder) getVerticalGridView().findViewHolderForPosition(0);
- }
- if (vh == null) {
- mResetControlsToPrimaryActionsPending = true;
- } else if (vh.getPresenter() instanceof PlaybackControlsRowPresenter) {
- mResetControlsToPrimaryActionsPending = false;
- ((PlaybackControlsRowPresenter) vh.getPresenter()).showPrimaryActions(
- (PlaybackControlsRowPresenter.ViewHolder) vh.getViewHolder());
- }
- }
-
- /**
- * Enables or disables view fading. If enabled,
- * the view will be faded in when the fragment starts,
- * and will fade out after a time period. The timeout
- * period is reset each time {@link #tickle} is called.
- *
- */
- public void setFadingEnabled(boolean enabled) {
- if (DEBUG) Log.v(TAG, "setFadingEnabled " + enabled);
- if (enabled != mFadingEnabled) {
- mFadingEnabled = enabled;
- if (mFadingEnabled) {
- if (isResumed() && mFadingStatus == IDLE
- && !sHandler.hasMessages(START_FADE_OUT, mFragmentReference)) {
- startFadeTimer();
- }
- } else {
- // Ensure fully opaque
- sHandler.removeMessages(START_FADE_OUT, mFragmentReference);
- fade(true);
- }
- }
- }
-
- /**
- * Returns true if view fading is enabled.
- */
- public boolean isFadingEnabled() {
- return mFadingEnabled;
- }
-
- /**
- * Sets the listener to be called when fade in or out has completed.
- */
- public void setFadeCompleteListener(OnFadeCompleteListener listener) {
- mFadeCompleteListener = listener;
- }
-
- /**
- * Returns the listener to be called when fade in or out has completed.
- */
- public OnFadeCompleteListener getFadeCompleteListener() {
- return mFadeCompleteListener;
- }
-
- @Deprecated
- public interface InputEventHandler extends PlaybackControlGlue.InputEventHandler {
- }
-
- /**
- * Sets the input event handler.
- */
- @Deprecated
- public final void setInputEventHandler(InputEventHandler handler) {
- mInputEventHandler = handler;
- }
-
- /**
- * Returns the input event handler.
- */
- @Deprecated
- public final InputEventHandler getInputEventHandler() {
- return (InputEventHandler)mInputEventHandler;
- }
-
- /**
- * Sets the input event handler.
- */
- public final void setEventHandler(PlaybackControlGlue.InputEventHandler handler) {
- mInputEventHandler = handler;
- }
-
- /**
- * Returns the input event handler.
- */
- public final PlaybackControlGlue.InputEventHandler getEventHandler() {
- return mInputEventHandler;
- }
-
- /**
- * Tickles the playback controls. Fades in the view if it was faded out,
- * otherwise resets the fade out timer. Tickling on input events is handled
- * by the fragment.
- */
- public void tickle() {
- if (DEBUG) Log.v(TAG, "tickle enabled " + mFadingEnabled + " isResumed " + isResumed());
- if (!mFadingEnabled || !isResumed()) {
- return;
- }
- if (sHandler.hasMessages(START_FADE_OUT, mFragmentReference)) {
- // Restart the timer
- startFadeTimer();
- } else {
- fade(true);
- }
- }
-
- /**
- * Fades out the playback overlay immediately.
- */
- public void fadeOut() {
- sHandler.removeMessages(START_FADE_OUT, mFragmentReference);
- fade(false);
- }
-
- /**
- * Sets the {@link PlaybackGlueHost.HostCallback}. Implementor of this interface will
- * take appropriate actions to take action when the hosting fragment starts/stops processing.
- */
- void setHostCallback(PlaybackGlueHost.HostCallback hostCallback) {
- this.mHostCallback = hostCallback;
- }
-
- @Override
- public void onStop() {
- if (mHostCallback != null) {
- mHostCallback.onHostStop();
- }
- super.onStop();
- }
-
- @Override
- public void onPause() {
- if (mHostCallback != null) {
- mHostCallback.onHostPause();
- }
- super.onPause();
- }
-
- private boolean areControlsHidden() {
- return mFadingStatus == IDLE && mBgAlpha == 0;
- }
-
- boolean onInterceptInputEvent(InputEvent event) {
- final boolean controlsHidden = areControlsHidden();
- if (DEBUG) Log.v(TAG, "onInterceptInputEvent hidden " + controlsHidden + " " + event);
- boolean consumeEvent = false;
- int keyCode = KeyEvent.KEYCODE_UNKNOWN;
-
- if (mInputEventHandler != null) {
- consumeEvent = mInputEventHandler.handleInputEvent(event);
- }
- if (event instanceof KeyEvent) {
- keyCode = ((KeyEvent) event).getKeyCode();
- }
-
- switch (keyCode) {
- case KeyEvent.KEYCODE_DPAD_CENTER:
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- // Event may be consumed; regardless, if controls are hidden then these keys will
- // bring up the controls.
- if (controlsHidden) {
- consumeEvent = true;
- }
- tickle();
- break;
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- // If fading enabled and controls are not hidden, back will be consumed to fade
- // them out (even if the key was consumed by the handler).
- if (mFadingEnabled && !controlsHidden) {
- consumeEvent = true;
- sHandler.removeMessages(START_FADE_OUT, mFragmentReference);
- fade(false);
- } else if (consumeEvent) {
- tickle();
- }
- break;
- default:
- if (consumeEvent) {
- tickle();
- }
- }
- return consumeEvent;
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (mFadingEnabled) {
- setBgAlpha(0);
- fade(true);
- }
- getVerticalGridView().setOnTouchInterceptListener(mOnTouchInterceptListener);
- getVerticalGridView().setOnKeyInterceptListener(mOnKeyInterceptListener);
- if (mHostCallback != null) {
- mHostCallback.onHostResume();
- }
- }
-
- void startFadeTimer() {
- sHandler.removeMessages(START_FADE_OUT, mFragmentReference);
- sHandler.sendMessageDelayed(sHandler.obtainMessage(START_FADE_OUT, mFragmentReference),
- mShowTimeMs);
- }
-
- private static ValueAnimator loadAnimator(Context context, int resId) {
- ValueAnimator animator = (ValueAnimator) AnimatorInflater.loadAnimator(context, resId);
- animator.setDuration(animator.getDuration() * ANIMATION_MULTIPLIER);
- return animator;
- }
-
- private void loadBgAnimator() {
- AnimatorUpdateListener listener = new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator arg0) {
- setBgAlpha((Integer) arg0.getAnimatedValue());
- }
- };
-
- Context context = getContext();
- mBgFadeInAnimator = loadAnimator(context, R.animator.lb_playback_bg_fade_in);
- mBgFadeInAnimator.addUpdateListener(listener);
- mBgFadeInAnimator.addListener(mFadeListener);
-
- mBgFadeOutAnimator = loadAnimator(context, R.animator.lb_playback_bg_fade_out);
- mBgFadeOutAnimator.addUpdateListener(listener);
- mBgFadeOutAnimator.addListener(mFadeListener);
- }
-
- private TimeInterpolator mLogDecelerateInterpolator = new LogDecelerateInterpolator(100,0);
- private TimeInterpolator mLogAccelerateInterpolator = new LogAccelerateInterpolator(100,0);
-
- View getControlRowView() {
- if (getVerticalGridView() == null) {
- return null;
- }
- RecyclerView.ViewHolder vh = getVerticalGridView().findViewHolderForPosition(0);
- if (vh == null) {
- return null;
- }
- return vh.itemView;
- }
-
- private void loadControlRowAnimator() {
- final AnimatorListener listener = new AnimatorListener() {
- @Override
- void getViews(ArrayList<View> views) {
- View view = getControlRowView();
- if (view != null) {
- views.add(view);
- }
- }
- };
- final AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator arg0) {
- View view = getControlRowView();
- if (view != null) {
- final float fraction = (Float) arg0.getAnimatedValue();
- if (DEBUG) Log.v(TAG, "fraction " + fraction);
- view.setAlpha(fraction);
- view.setTranslationY((float) mAnimationTranslateY * (1f - fraction));
- }
- }
- };
-
- Context context = getContext();
- mControlRowFadeInAnimator = loadAnimator(context, R.animator.lb_playback_controls_fade_in);
- mControlRowFadeInAnimator.addUpdateListener(updateListener);
- mControlRowFadeInAnimator.addListener(listener);
- mControlRowFadeInAnimator.setInterpolator(mLogDecelerateInterpolator);
-
- mControlRowFadeOutAnimator = loadAnimator(context,
- R.animator.lb_playback_controls_fade_out);
- mControlRowFadeOutAnimator.addUpdateListener(updateListener);
- mControlRowFadeOutAnimator.addListener(listener);
- mControlRowFadeOutAnimator.setInterpolator(mLogAccelerateInterpolator);
- }
-
- private void loadOtherRowAnimator() {
- final AnimatorListener listener = new AnimatorListener() {
- @Override
- void getViews(ArrayList<View> views) {
- if (getVerticalGridView() == null) {
- return;
- }
- final int count = getVerticalGridView().getChildCount();
- for (int i = 0; i < count; i++) {
- View view = getVerticalGridView().getChildAt(i);
- if (view != null) {
- views.add(view);
- }
- }
- }
- };
- final AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator arg0) {
- if (getVerticalGridView() == null) {
- return;
- }
- final float fraction = (Float) arg0.getAnimatedValue();
- for (View view : listener.mViews) {
- if (getVerticalGridView().getChildPosition(view) > 0) {
- view.setAlpha(fraction);
- view.setTranslationY((float) mAnimationTranslateY * (1f - fraction));
- }
- }
- }
- };
-
- Context context = getContext();
- mOtherRowFadeInAnimator = loadAnimator(context, R.animator.lb_playback_controls_fade_in);
- mOtherRowFadeInAnimator.addListener(listener);
- mOtherRowFadeInAnimator.addUpdateListener(updateListener);
- mOtherRowFadeInAnimator.setInterpolator(mLogDecelerateInterpolator);
-
- mOtherRowFadeOutAnimator = loadAnimator(context, R.animator.lb_playback_controls_fade_out);
- mOtherRowFadeOutAnimator.addListener(listener);
- mOtherRowFadeOutAnimator.addUpdateListener(updateListener);
- mOtherRowFadeOutAnimator.setInterpolator(new AccelerateInterpolator());
- }
-
- private void loadDescriptionAnimator() {
- AnimatorUpdateListener listener = new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator arg0) {
- if (getVerticalGridView() == null) {
- return;
- }
- ItemBridgeAdapter.ViewHolder adapterVh = (ItemBridgeAdapter.ViewHolder)
- getVerticalGridView().findViewHolderForPosition(0);
- if (adapterVh != null && adapterVh.getViewHolder()
- instanceof PlaybackControlsRowPresenter.ViewHolder) {
- final Presenter.ViewHolder vh = ((PlaybackControlsRowPresenter.ViewHolder)
- adapterVh.getViewHolder()).mDescriptionViewHolder;
- if (vh != null) {
- vh.view.setAlpha((Float) arg0.getAnimatedValue());
- }
- }
- }
- };
-
- Context context = getContext();
- mDescriptionFadeInAnimator = loadAnimator(context,
- R.animator.lb_playback_description_fade_in);
- mDescriptionFadeInAnimator.addUpdateListener(listener);
- mDescriptionFadeInAnimator.setInterpolator(mLogDecelerateInterpolator);
-
- mDescriptionFadeOutAnimator = loadAnimator(context,
- R.animator.lb_playback_description_fade_out);
- mDescriptionFadeOutAnimator.addUpdateListener(listener);
- }
-
- void fade(boolean fadeIn) {
- if (DEBUG) Log.v(TAG, "fade " + fadeIn);
- if (getView() == null) {
- return;
- }
- if ((fadeIn && mFadingStatus == IN) || (!fadeIn && mFadingStatus == OUT)) {
- if (DEBUG) Log.v(TAG, "requested fade in progress");
- return;
- }
- if ((fadeIn && mBgAlpha == 255) || (!fadeIn && mBgAlpha == 0)) {
- if (DEBUG) Log.v(TAG, "fade is no-op");
- return;
- }
-
- mAnimationTranslateY = getVerticalGridView().getSelectedPosition() == 0
- ? mMajorFadeTranslateY : mMinorFadeTranslateY;
-
- if (mFadingStatus == IDLE) {
- if (fadeIn) {
- mBgFadeInAnimator.start();
- mControlRowFadeInAnimator.start();
- mOtherRowFadeInAnimator.start();
- mDescriptionFadeInAnimator.start();
- } else {
- mBgFadeOutAnimator.start();
- mControlRowFadeOutAnimator.start();
- mOtherRowFadeOutAnimator.start();
- mDescriptionFadeOutAnimator.start();
- }
- } else {
- if (fadeIn) {
- mBgFadeOutAnimator.reverse();
- mControlRowFadeOutAnimator.reverse();
- mOtherRowFadeOutAnimator.reverse();
- mDescriptionFadeOutAnimator.reverse();
- } else {
- mBgFadeInAnimator.reverse();
- mControlRowFadeInAnimator.reverse();
- mOtherRowFadeInAnimator.reverse();
- mDescriptionFadeInAnimator.reverse();
- }
- }
- getView().announceForAccessibility(getString(fadeIn ? R.string.lb_playback_controls_shown
- : R.string.lb_playback_controls_hidden));
-
- // If fading in while control row is focused, set initial translationY so
- // views slide in from below.
- if (fadeIn && mFadingStatus == IDLE) {
- final int count = getVerticalGridView().getChildCount();
- for (int i = 0; i < count; i++) {
- getVerticalGridView().getChildAt(i).setTranslationY(mAnimationTranslateY);
- }
- }
-
- mFadingStatus = fadeIn ? IN : OUT;
- }
-
- /**
- * Sets the list of rows for the fragment.
- */
- @Override
- public void setAdapter(ObjectAdapter adapter) {
- if (getAdapter() != null) {
- getAdapter().unregisterObserver(mObserver);
- }
- super.setAdapter(adapter);
- if (adapter != null) {
- adapter.registerObserver(mObserver);
- }
- }
-
- @Override
- protected void setupPresenter(Presenter rowPresenter) {
- if (rowPresenter instanceof PlaybackRowPresenter) {
- if (rowPresenter.getFacet(ItemAlignmentFacet.class) == null) {
- ItemAlignmentFacet itemAlignment = new ItemAlignmentFacet();
- ItemAlignmentFacet.ItemAlignmentDef def =
- new ItemAlignmentFacet.ItemAlignmentDef();
- def.setItemAlignmentOffset(0);
- def.setItemAlignmentOffsetPercent(100);
- itemAlignment.setAlignmentDefs(new ItemAlignmentFacet.ItemAlignmentDef[]
- {def});
- rowPresenter.setFacet(ItemAlignmentFacet.class, itemAlignment);
- }
- } else {
- super.setupPresenter(rowPresenter);
- }
- }
-
- @Override
- void setVerticalGridViewLayout(VerticalGridView listview) {
- if (listview == null) {
- return;
- }
-
- // we set the base line of alignment to -paddingBottom
- listview.setWindowAlignmentOffset(-mPaddingBottom);
- listview.setWindowAlignmentOffsetPercent(
- VerticalGridView.WINDOW_ALIGN_OFFSET_PERCENT_DISABLED);
-
- // align other rows that arent the last to center of screen, since our baseline is
- // -mPaddingBottom, we need subtract that from mOtherRowsCenterToBottom.
- listview.setItemAlignmentOffset(mOtherRowsCenterToBottom - mPaddingBottom);
- listview.setItemAlignmentOffsetPercent(50);
-
- // Push last row to the bottom padding
- // Padding affects alignment when last row is focused
- listview.setPadding(listview.getPaddingLeft(), listview.getPaddingTop(),
- listview.getPaddingRight(), mPaddingBottom);
- listview.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_HIGH_EDGE);
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mOtherRowsCenterToBottom = getResources()
- .getDimensionPixelSize(R.dimen.lb_playback_other_rows_center_to_bottom);
- mPaddingBottom =
- getResources().getDimensionPixelSize(R.dimen.lb_playback_controls_padding_bottom);
- mBgDarkColor =
- getResources().getColor(R.color.lb_playback_controls_background_dark);
- mBgLightColor =
- getResources().getColor(R.color.lb_playback_controls_background_light);
- mShowTimeMs =
- getResources().getInteger(R.integer.lb_playback_controls_show_time_ms);
- mMajorFadeTranslateY =
- getResources().getDimensionPixelSize(R.dimen.lb_playback_major_fade_translate_y);
- mMinorFadeTranslateY =
- getResources().getDimensionPixelSize(R.dimen.lb_playback_minor_fade_translate_y);
-
- loadBgAnimator();
- loadControlRowAnimator();
- loadOtherRowAnimator();
- loadDescriptionAnimator();
- }
-
- /**
- * Sets the background type.
- *
- * @param type One of BG_LIGHT, BG_DARK, or BG_NONE.
- */
- public void setBackgroundType(int type) {
- switch (type) {
- case BG_LIGHT:
- case BG_DARK:
- case BG_NONE:
- if (type != mBackgroundType) {
- mBackgroundType = type;
- updateBackground();
- }
- break;
- default:
- throw new IllegalArgumentException("Invalid background type");
- }
- }
-
- /**
- * Returns the background type.
- */
- public int getBackgroundType() {
- return mBackgroundType;
- }
-
- private void updateBackground() {
- if (mRootView != null) {
- int color = mBgDarkColor;
- switch (mBackgroundType) {
- case BG_DARK: break;
- case BG_LIGHT: color = mBgLightColor; break;
- case BG_NONE: color = Color.TRANSPARENT; break;
- }
- mRootView.setBackground(new ColorDrawable(color));
- }
- }
-
- void updateControlsBottomSpace(ItemBridgeAdapter.ViewHolder vh) {
- // Add extra space between rows 0 and 1
- if (vh == null && getVerticalGridView() != null) {
- vh = (ItemBridgeAdapter.ViewHolder)
- getVerticalGridView().findViewHolderForPosition(0);
- }
- if (vh != null && vh.getPresenter() instanceof PlaybackControlsRowPresenter) {
- final int adapterSize = getAdapter() == null ? 0 : getAdapter().size();
- ((PlaybackControlsRowPresenter) vh.getPresenter()).showBottomSpace(
- (PlaybackControlsRowPresenter.ViewHolder) vh.getViewHolder(),
- adapterSize > 1);
- }
- }
-
- private final ItemBridgeAdapter.AdapterListener mAdapterListener =
- new ItemBridgeAdapter.AdapterListener() {
- @Override
- public void onAttachedToWindow(ItemBridgeAdapter.ViewHolder vh) {
- if (DEBUG) Log.v(TAG, "onAttachedToWindow " + vh.getViewHolder().view);
- if ((mFadingStatus == IDLE && mBgAlpha == 0) || mFadingStatus == OUT) {
- if (DEBUG) Log.v(TAG, "setting alpha to 0");
- vh.getViewHolder().view.setAlpha(0);
- }
- if (vh.getPosition() == 0 && mResetControlsToPrimaryActionsPending) {
- resetControlsToPrimaryActions(vh);
- }
- }
- @Override
- public void onDetachedFromWindow(ItemBridgeAdapter.ViewHolder vh) {
- if (DEBUG) Log.v(TAG, "onDetachedFromWindow " + vh.getViewHolder().view);
- // Reset animation state
- vh.getViewHolder().view.setAlpha(1f);
- vh.getViewHolder().view.setTranslationY(0);
- if (vh.getViewHolder() instanceof PlaybackControlsRowPresenter.ViewHolder) {
- Presenter.ViewHolder descriptionVh = ((PlaybackControlsRowPresenter.ViewHolder)
- vh.getViewHolder()).mDescriptionViewHolder;
- if (descriptionVh != null) {
- descriptionVh.view.setAlpha(1f);
- }
- }
- }
- @Override
- public void onBind(ItemBridgeAdapter.ViewHolder vh) {
- if (vh.getPosition() == 0) {
- updateControlsBottomSpace(vh);
- }
- }
- };
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- mRootView = super.onCreateView(inflater, container, savedInstanceState);
- mBgAlpha = 255;
- updateBackground();
- getRowsSupportFragment().setExternalAdapterListener(mAdapterListener);
- return mRootView;
- }
-
- @Override
- public void onDestroyView() {
- mRootView = null;
- if (mHostCallback != null) {
- mHostCallback.onHostDestroy();
- }
- super.onDestroyView();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- // Workaround problem VideoView forcing itself to focused, let controls take focus.
- getRowsSupportFragment().getView().requestFocus();
- if (mHostCallback != null) {
- mHostCallback.onHostStart();
- }
- }
-
- private final DataObserver mObserver = new DataObserver() {
- @Override
- public void onChanged() {
- updateControlsBottomSpace(null);
- }
- };
-
- static abstract class AnimatorListener implements Animator.AnimatorListener {
- ArrayList<View> mViews = new ArrayList<View>();
- ArrayList<Integer> mLayerType = new ArrayList<Integer>();
-
- @Override
- public void onAnimationCancel(Animator animation) {
- }
- @Override
- public void onAnimationRepeat(Animator animation) {
- }
- @Override
- public void onAnimationStart(Animator animation) {
- getViews(mViews);
- for (View view : mViews) {
- mLayerType.add(view.getLayerType());
- view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
- }
- }
- @Override
- public void onAnimationEnd(Animator animation) {
- for (int i = 0; i < mViews.size(); i++) {
- mViews.get(i).setLayerType(mLayerType.get(i), null);
- }
- mLayerType.clear();
- mViews.clear();
- }
- abstract void getViews(ArrayList<View> views);
-
- };
-}
diff --git a/android/support/v17/leanback/app/PlaybackSupportFragment.java b/android/support/v17/leanback/app/PlaybackSupportFragment.java
index d63e72c6..a8741aba 100644
--- a/android/support/v17/leanback/app/PlaybackSupportFragment.java
+++ b/android/support/v17/leanback/app/PlaybackSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from PlaybackFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2016 The Android Open Source Project
*
@@ -21,13 +18,14 @@ import android.animation.AnimatorInflater;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.support.v4.app.Fragment;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.animation.LogAccelerateInterpolator;
import android.support.v17.leanback.animation.LogDecelerateInterpolator;
@@ -48,6 +46,7 @@ import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.RowPresenter;
import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
import android.support.v17.leanback.widget.VerticalGridView;
+import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.InputEvent;
@@ -450,7 +449,7 @@ public class PlaybackSupportFragment extends Fragment {
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// controls view are initially visible, make it invisible
// if app has called hideControlsOverlay() before view created.
diff --git a/android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost.java b/android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost.java
index cdf3f97a..e7450947 100644
--- a/android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost.java
+++ b/android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from VideoPlaybackFragmentGlueHost.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2016 The Android Open Source Project
*
diff --git a/android/support/v17/leanback/app/RowsFragment.java b/android/support/v17/leanback/app/RowsFragment.java
index dd0dbede..a008ad60 100644
--- a/android/support/v17/leanback/app/RowsFragment.java
+++ b/android/support/v17/leanback/app/RowsFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from RowsSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -16,6 +19,8 @@ package android.support.v17.leanback.app;
import android.animation.TimeAnimator;
import android.animation.TimeAnimator.TimeListener;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.BaseOnItemViewClickedListener;
import android.support.v17.leanback.widget.BaseOnItemViewSelectedListener;
@@ -285,7 +290,7 @@ public class RowsFragment extends BaseRowFragment implements
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (DEBUG) Log.v(TAG, "onViewCreated");
super.onViewCreated(view, savedInstanceState);
// Align the top edge of child with id row_content.
@@ -625,6 +630,11 @@ public class RowsFragment extends BaseRowFragment implements
}
+ /**
+ * The adapter that RowsFragment implements
+ * BrowseFragment.MainFragmentRowsAdapter.
+ * @see #getMainFragmentRowsAdapter().
+ */
public static class MainFragmentRowsAdapter
extends BrowseFragment.MainFragmentRowsAdapter<RowsFragment> {
diff --git a/android/support/v17/leanback/app/RowsSupportFragment.java b/android/support/v17/leanback/app/RowsSupportFragment.java
index c00f78b9..05e38130 100644
--- a/android/support/v17/leanback/app/RowsSupportFragment.java
+++ b/android/support/v17/leanback/app/RowsSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from RowsFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -19,6 +16,8 @@ package android.support.v17.leanback.app;
import android.animation.TimeAnimator;
import android.animation.TimeAnimator.TimeListener;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.BaseOnItemViewClickedListener;
import android.support.v17.leanback.widget.BaseOnItemViewSelectedListener;
@@ -288,7 +287,7 @@ public class RowsSupportFragment extends BaseRowSupportFragment implements
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (DEBUG) Log.v(TAG, "onViewCreated");
super.onViewCreated(view, savedInstanceState);
// Align the top edge of child with id row_content.
@@ -628,6 +627,11 @@ public class RowsSupportFragment extends BaseRowSupportFragment implements
}
+ /**
+ * The adapter that RowsSupportFragment implements
+ * BrowseSupportFragment.MainFragmentRowsAdapter.
+ * @see #getMainFragmentRowsAdapter().
+ */
public static class MainFragmentRowsAdapter
extends BrowseSupportFragment.MainFragmentRowsAdapter<RowsSupportFragment> {
diff --git a/android/support/v17/leanback/app/SearchFragment.java b/android/support/v17/leanback/app/SearchFragment.java
index acf47454..2154ff28 100644
--- a/android/support/v17/leanback/app/SearchFragment.java
+++ b/android/support/v17/leanback/app/SearchFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from SearchSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -16,7 +19,6 @@ package android.support.v17.leanback.app;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import android.Manifest;
-import android.app.Fragment;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
@@ -35,6 +37,7 @@ import android.support.v17.leanback.widget.SearchBar;
import android.support.v17.leanback.widget.SearchOrbView;
import android.support.v17.leanback.widget.SpeechRecognitionCallback;
import android.support.v17.leanback.widget.VerticalGridView;
+import android.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -52,12 +55,11 @@ import java.util.List;
* into a {@link RowsFragment}, in the same way that they are in a {@link
* BrowseFragment}.
*
- * <p>If you do not supply a callback via
- * {@link #setSpeechRecognitionCallback(SpeechRecognitionCallback)}, an internal speech
- * recognizer will be used for which your application will need to declare
+ * <p>A SpeechRecognizer object will be created for which your application will need to declare
* android.permission.RECORD_AUDIO in AndroidManifest file. If app's target version is >= 23 and
* the device version is >= 23, a permission dialog will show first time using speech recognition.
* 0 will be used as requestCode in requestPermissions() call.
+ * {@link #setSpeechRecognitionCallback(SpeechRecognitionCallback)} is deprecated.
* </p>
* <p>
* Speech recognition is automatically started when fragment is created, but
@@ -393,7 +395,7 @@ public class SearchFragment extends Fragment {
mIsPaused = false;
if (mSpeechRecognitionCallback == null && null == mSpeechRecognizer) {
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(
- FragmentUtil.getContext(this));
+ FragmentUtil.getContext(SearchFragment.this));
mSearchBar.setSpeechRecognizer(mSpeechRecognizer);
}
if (mPendingStartRecognitionWhenPaused) {
@@ -576,8 +578,11 @@ public class SearchFragment extends Fragment {
/**
* Sets this callback to have the fragment pass speech recognition requests
- * to the activity rather than using an internal recognizer.
+ * to the activity rather than using a SpeechRecognizer object.
+ * @deprecated Launching voice recognition activity is no longer supported. App should declare
+ * android.permission.RECORD_AUDIO in AndroidManifest file.
*/
+ @Deprecated
public void setSpeechRecognitionCallback(SpeechRecognitionCallback callback) {
mSpeechRecognitionCallback = callback;
if (mSearchBar != null) {
diff --git a/android/support/v17/leanback/app/SearchSupportFragment.java b/android/support/v17/leanback/app/SearchSupportFragment.java
index 36b560de..ed2a6792 100644
--- a/android/support/v17/leanback/app/SearchSupportFragment.java
+++ b/android/support/v17/leanback/app/SearchSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from SearchFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -19,7 +16,6 @@ package android.support.v17.leanback.app;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import android.Manifest;
-import android.support.v4.app.Fragment;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
@@ -38,6 +34,7 @@ import android.support.v17.leanback.widget.SearchBar;
import android.support.v17.leanback.widget.SearchOrbView;
import android.support.v17.leanback.widget.SpeechRecognitionCallback;
import android.support.v17.leanback.widget.VerticalGridView;
+import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -55,12 +52,11 @@ import java.util.List;
* into a {@link RowsSupportFragment}, in the same way that they are in a {@link
* BrowseSupportFragment}.
*
- * <p>If you do not supply a callback via
- * {@link #setSpeechRecognitionCallback(SpeechRecognitionCallback)}, an internal speech
- * recognizer will be used for which your application will need to declare
+ * <p>A SpeechRecognizer object will be created for which your application will need to declare
* android.permission.RECORD_AUDIO in AndroidManifest file. If app's target version is >= 23 and
* the device version is >= 23, a permission dialog will show first time using speech recognition.
* 0 will be used as requestCode in requestPermissions() call.
+ * {@link #setSpeechRecognitionCallback(SpeechRecognitionCallback)} is deprecated.
* </p>
* <p>
* Speech recognition is automatically started when fragment is created, but
@@ -579,8 +575,11 @@ public class SearchSupportFragment extends Fragment {
/**
* Sets this callback to have the fragment pass speech recognition requests
- * to the activity rather than using an internal recognizer.
+ * to the activity rather than using a SpeechRecognizer object.
+ * @deprecated Launching voice recognition activity is no longer supported. App should declare
+ * android.permission.RECORD_AUDIO in AndroidManifest file.
*/
+ @Deprecated
public void setSpeechRecognitionCallback(SpeechRecognitionCallback callback) {
mSpeechRecognitionCallback = callback;
if (mSearchBar != null) {
diff --git a/android/support/v17/leanback/app/VerticalGridFragment.java b/android/support/v17/leanback/app/VerticalGridFragment.java
index 5cf5799e..5bc52ff5 100644
--- a/android/support/v17/leanback/app/VerticalGridFragment.java
+++ b/android/support/v17/leanback/app/VerticalGridFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from VerticalGridSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2014 The Android Open Source Project
*
@@ -240,7 +243,7 @@ public class VerticalGridFragment extends BaseFragment {
@Override
protected Object createEntranceTransition() {
- return TransitionHelper.loadTransition(FragmentUtil.getContext(this),
+ return TransitionHelper.loadTransition(FragmentUtil.getContext(VerticalGridFragment.this),
R.transition.lb_vertical_grid_entrance_transition);
}
diff --git a/android/support/v17/leanback/app/VerticalGridSupportFragment.java b/android/support/v17/leanback/app/VerticalGridSupportFragment.java
index a38bac52..4cfe981a 100644
--- a/android/support/v17/leanback/app/VerticalGridSupportFragment.java
+++ b/android/support/v17/leanback/app/VerticalGridSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from VerticalGridFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2014 The Android Open Source Project
*
diff --git a/android/support/v17/leanback/app/VideoFragment.java b/android/support/v17/leanback/app/VideoFragment.java
index 41241d0b..1b2b8d07 100644
--- a/android/support/v17/leanback/app/VideoFragment.java
+++ b/android/support/v17/leanback/app/VideoFragment.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from VideoSupportFragment.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2016 The Android Open Source Project
*
@@ -38,7 +41,7 @@ public class VideoFragment extends PlaybackFragment {
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
- mVideoSurface = (SurfaceView) LayoutInflater.from(FragmentUtil.getContext(this)).inflate(
+ mVideoSurface = (SurfaceView) LayoutInflater.from(FragmentUtil.getContext(VideoFragment.this)).inflate(
R.layout.lb_video_surface, root, false);
root.addView(mVideoSurface, 0);
mVideoSurface.getHolder().addCallback(new SurfaceHolder.Callback() {
diff --git a/android/support/v17/leanback/app/VideoFragmentGlueHost.java b/android/support/v17/leanback/app/VideoFragmentGlueHost.java
index a64b521b..d123676f 100644
--- a/android/support/v17/leanback/app/VideoFragmentGlueHost.java
+++ b/android/support/v17/leanback/app/VideoFragmentGlueHost.java
@@ -1,3 +1,6 @@
+// CHECKSTYLE:OFF Generated code
+/* This file is auto-generated from VideoSupportFragmentGlueHost.java. DO NOT MODIFY. */
+
/*
* Copyright (C) 2016 The Android Open Source Project
*
diff --git a/android/support/v17/leanback/app/VideoSupportFragment.java b/android/support/v17/leanback/app/VideoSupportFragment.java
index 321bdbed..51003d35 100644
--- a/android/support/v17/leanback/app/VideoSupportFragment.java
+++ b/android/support/v17/leanback/app/VideoSupportFragment.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from VideoFragment.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2016 The Android Open Source Project
*
diff --git a/android/support/v17/leanback/app/VideoSupportFragmentGlueHost.java b/android/support/v17/leanback/app/VideoSupportFragmentGlueHost.java
index 28f919b6..66aabc41 100644
--- a/android/support/v17/leanback/app/VideoSupportFragmentGlueHost.java
+++ b/android/support/v17/leanback/app/VideoSupportFragmentGlueHost.java
@@ -1,6 +1,3 @@
-// CHECKSTYLE:OFF Generated code
-/* This file is auto-generated from VideoVideoFragmentGlueHost.java. DO NOT MODIFY. */
-
/*
* Copyright (C) 2016 The Android Open Source Project
*
diff --git a/android/support/v17/leanback/app/package-info.java b/android/support/v17/leanback/app/package-info.java
index 852a0075..b7369090 100644
--- a/android/support/v17/leanback/app/package-info.java
+++ b/android/support/v17/leanback/app/package-info.java
@@ -13,47 +13,54 @@
*/
/**
- * <p>Support classes providing high level Leanback user interface building blocks:
- * fragments and helpers.</p>
+ * <p>Support classes providing high level Leanback user interface building blocks.</p>
* <p>
- * Leanback fragments are available both as platform fragments (subclassed from
- * {@link android.app.Fragment android.app.Fragment}) and as support fragments (subclassed from
- * {@link android.support.v4.app.Fragment android.support.v4.app.Fragment}). A few of the most
+ * Leanback fragments are available both as support fragments (subclassed from
+ * {@link android.support.v4.app.Fragment android.support.v4.app.Fragment}) and as platform
+ * fragments (subclassed from {@link android.app.Fragment android.app.Fragment}). A few of the most
* commonly used leanback fragments are described here.
* </p>
* <p>
- * A {@link android.support.v17.leanback.app.BrowseFragment} includes an optional “fastlane”
+ * A {@link android.support.v17.leanback.app.BrowseSupportFragment} by default operates in the "row"
+ * mode. It includes an optional “fastlane”
* navigation side panel and a list of rows, with one-to-one correspondance between each header
* in the fastlane and a row. The application supplies the
* {@link android.support.v17.leanback.widget.ObjectAdapter} containing the list of
* rows and a {@link android.support.v17.leanback.widget.PresenterSelector} of row presenters.
* </p>
* <p>
- * A {@link android.support.v17.leanback.app.DetailsFragment} will typically consist of a large
- * overview of an item at the top,
+ * A {@link android.support.v17.leanback.app.BrowseSupportFragment} also works in a "page" mode when
+ * each row of fastlane is mapped to a fragment that the app registers in
+ * {@link android.support.v17.leanback.app.BrowseSupportFragment#getMainFragmentRegistry()}.
+ * </p>
+ * <p>
+ * A {@link android.support.v17.leanback.app.DetailsSupportFragment} will typically consist of a
+ * large overview of an item at the top,
* some actions that a user can perform, and possibly rows of additional or related items.
- * The content for this fragment is specified in the same way as for the BrowseFragment, with the
- * convention that the first element in the ObjectAdapter corresponds to the overview row.
+ * The content for this fragment is specified in the same way as for the BrowseSupportFragment, with
+ * the convention that the first element in the ObjectAdapter corresponds to the overview row.
* The {@link android.support.v17.leanback.widget.DetailsOverviewRow} and
- * {@link android.support.v17.leanback.widget.DetailsOverviewRowPresenter} provide a default template
- * for this row.
+ * {@link android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter} provide a
+ * default template for this row.
* </p>
* <p>
- * A {@link android.support.v17.leanback.app.PlaybackOverlayFragment} implements standard playback
- * transport controls with a Leanback
- * look and feel. It is recommended to use an instance of the
- * {@link android.support.v17.leanback.app.PlaybackControlGlue} with the
- * PlaybackOverlayFragment. This helper implements a standard behavior for user interaction with
- * the most commonly used controls such as fast forward and rewind.
+ * A {@link android.support.v17.leanback.app.PlaybackSupportFragment} or its subclass
+ * {@link android.support.v17.leanback.app.VideoSupportFragment} hosts
+ * {@link android.support.v17.leanback.media.PlaybackTransportControlGlue}
+ * or {@link android.support.v17.leanback.media.PlaybackBannerControlGlue} with a Leanback
+ * look and feel. It is recommended to use an instance of
+ * {@link android.support.v17.leanback.media.PlaybackTransportControlGlue}.
+ * This helper implements a standard behavior for user interaction with
+ * the most commonly used controls as well as video scrubbing.
* </p>
* <p>
- * A {@link android.support.v17.leanback.app.SearchFragment} allows the developer to accept a query
- * from a user and display the results
+ * A {@link android.support.v17.leanback.app.SearchSupportFragment} allows the developer to accept a
+ * query from a user and display the results
* using the familiar list rows.
* </p>
* <p>
- * A {@link android.support.v17.leanback.app.GuidedStepFragment} is used to guide the user through a
- * decision or series of decisions.
+ * A {@link android.support.v17.leanback.app.GuidedStepSupportFragment} is used to guide the user
+ * through a decision or series of decisions.
* </p>
**/