diff options
Diffstat (limited to 'android/support/v17/leanback/app')
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> **/ |