From 705f280aafa6a78ac382498c9a4913b6fe8f352a Mon Sep 17 00:00:00 2001 From: Dake Gu Date: Fri, 29 Apr 2016 17:25:47 -0700 Subject: [PATCH] SupportLeanbackDemo: support delay loading page fragment data Matching ag/989598 to notifyDataReady() when page fragment has loaded its data. Also fixed a bug using the wrong FragmentManager to open GuidedStepFragment. Bug 28471536 Change-Id: I4ce2108f0b587773ac29e8fd3b134e700121c81c --- samples/SupportLeanbackDemos/generatev4.py | 1 + .../android/leanback/BrowseFragment.java | 66 ++++++++++--------- .../leanback/BrowseSupportFragment.java | 66 ++++++++++--------- 3 files changed, 71 insertions(+), 62 deletions(-) diff --git a/samples/SupportLeanbackDemos/generatev4.py b/samples/SupportLeanbackDemos/generatev4.py index 9a2bdda73..7c9f0fe9f 100755 --- a/samples/SupportLeanbackDemos/generatev4.py +++ b/samples/SupportLeanbackDemos/generatev4.py @@ -60,6 +60,7 @@ for line in file: line = line.replace('BrowseFragment', 'BrowseSupportFragment') line = line.replace('GuidedStepFragment', 'GuidedStepSupportFragment') line = line.replace('GuidedStepActivity', 'GuidedStepSupportActivity') + line = line.replace('getActivity().getFragmentManager()', 'getActivity().getSupportFragmentManager()') line = line.replace('BrowseActivity', 'BrowseSupportActivity') line = line.replace('DetailsActivity', 'DetailsSupportActivity') line = line.replace('SearchActivity', 'SearchSupportActivity') diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java index ba6abc022..802c4d32b 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java @@ -228,7 +228,7 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm public Fragment createFragment(Object rowObj) { Row row = (Row) rowObj; if (row.getHeaderItem().getId() == HEADER_ID1) { - return new SampleFragment(); + return new SampleRowsFragment(); } else if (row.getHeaderItem().getId() == HEADER_ID2) { return new SampleRowsFragment(); } else if (row.getHeaderItem().getId() == HEADER_ID3) { @@ -239,30 +239,31 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm } } - public static class PageFragmentAdapterImpl extends MainFragmentAdapter { - - public PageFragmentAdapterImpl(SampleFragment fragment) { - super(fragment); - setScalingEnabled(true); - } - - @Override - public void setEntranceTransitionState(boolean state) { - getFragment().setEntranceTransitionState(state); - } - } - public static class SampleRowsFragment extends RowsFragment { final CardPresenter mCardPresenter = new CardPresenter(); final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); - public SampleRowsFragment() { - ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); + void loadFragmentData() { + ArrayObjectAdapter adapter = (ArrayObjectAdapter) getAdapter(); for (int i = 0; i < 4; i++) { ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); adapter.add(row); } + if (getMainFragmentAdapter() != null) { + getMainFragmentAdapter().getFragmentHost() + .notifyDataReady(getMainFragmentAdapter()); + } + } + + public SampleRowsFragment() { + ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); setAdapter(adapter); + // simulates late data loading: + new Handler().postDelayed(new Runnable() { + public void run() { + loadFragmentData(); + } + }, 500); setOnItemViewClickedListener(new OnItemViewClickedListener() { @Override @@ -274,12 +275,12 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm Intent intent; Bundle bundle; if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { - GuidedStepFragment.add(getFragmentManager(), + GuidedStepFragment.add(getActivity().getFragmentManager(), new GuidedStepHalfScreenActivity.FirstStepFragment(), R.id.lb_guidedstep_host); return; } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { - GuidedStepFragment.add(getFragmentManager(), + GuidedStepFragment.add(getActivity().getFragmentManager(), new GuidedStepActivity.FirstStepFragment(), R.id.lb_guidedstep_host); return; } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { @@ -339,18 +340,25 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm } } + public static class PageFragmentAdapterImpl extends MainFragmentAdapter { + + public PageFragmentAdapterImpl(SampleFragment fragment) { + super(fragment); + setScalingEnabled(true); + } + + @Override + public void setEntranceTransitionState(boolean state) { + getFragment().setEntranceTransitionState(state); + } + } + public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider { final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); - boolean mEntranceTransitionState = true; - public void setEntranceTransitionState(boolean state) { - mEntranceTransitionState = state; final View view = getView(); - if (view == null) { - return; - } int visibility = state ? View.VISIBLE : View.INVISIBLE; view.findViewById(R.id.tv1).setVisibility(visibility); view.findViewById(R.id.tv2).setVisibility(visibility); @@ -372,15 +380,11 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm return view; } - @Override - public void onStart() { - super.onStart(); - mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter); - } - @Override public void onViewCreated(View view, Bundle savedInstanceState) { - setEntranceTransitionState(mEntranceTransitionState); + // static layout has view and data ready immediately + mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter); + mMainFragmentAdapter.getFragmentHost().notifyDataReady(mMainFragmentAdapter); } @Override diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java index 58477d12a..48c1462d6 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java @@ -230,7 +230,7 @@ public class BrowseSupportFragment extends android.support.v17.leanback.app.Brow public Fragment createFragment(Object rowObj) { Row row = (Row) rowObj; if (row.getHeaderItem().getId() == HEADER_ID1) { - return new SampleFragment(); + return new SampleRowsSupportFragment(); } else if (row.getHeaderItem().getId() == HEADER_ID2) { return new SampleRowsSupportFragment(); } else if (row.getHeaderItem().getId() == HEADER_ID3) { @@ -241,30 +241,31 @@ public class BrowseSupportFragment extends android.support.v17.leanback.app.Brow } } - public static class PageFragmentAdapterImpl extends MainFragmentAdapter { - - public PageFragmentAdapterImpl(SampleFragment fragment) { - super(fragment); - setScalingEnabled(true); - } - - @Override - public void setEntranceTransitionState(boolean state) { - getFragment().setEntranceTransitionState(state); - } - } - public static class SampleRowsSupportFragment extends RowsSupportFragment { final CardPresenter mCardPresenter = new CardPresenter(); final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); - public SampleRowsSupportFragment() { - ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); + void loadFragmentData() { + ArrayObjectAdapter adapter = (ArrayObjectAdapter) getAdapter(); for (int i = 0; i < 4; i++) { ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); adapter.add(row); } + if (getMainFragmentAdapter() != null) { + getMainFragmentAdapter().getFragmentHost() + .notifyDataReady(getMainFragmentAdapter()); + } + } + + public SampleRowsSupportFragment() { + ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); setAdapter(adapter); + // simulates late data loading: + new Handler().postDelayed(new Runnable() { + public void run() { + loadFragmentData(); + } + }, 500); setOnItemViewClickedListener(new OnItemViewClickedListener() { @Override @@ -276,12 +277,12 @@ public class BrowseSupportFragment extends android.support.v17.leanback.app.Brow Intent intent; Bundle bundle; if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { - GuidedStepSupportFragment.add(getFragmentManager(), + GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(), new GuidedStepSupportHalfScreenActivity.FirstStepFragment(), R.id.lb_guidedstep_host); return; } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { - GuidedStepSupportFragment.add(getFragmentManager(), + GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(), new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host); return; } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { @@ -341,18 +342,25 @@ public class BrowseSupportFragment extends android.support.v17.leanback.app.Brow } } + public static class PageFragmentAdapterImpl extends MainFragmentAdapter { + + public PageFragmentAdapterImpl(SampleFragment fragment) { + super(fragment); + setScalingEnabled(true); + } + + @Override + public void setEntranceTransitionState(boolean state) { + getFragment().setEntranceTransitionState(state); + } + } + public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider { final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); - boolean mEntranceTransitionState = true; - public void setEntranceTransitionState(boolean state) { - mEntranceTransitionState = state; final View view = getView(); - if (view == null) { - return; - } int visibility = state ? View.VISIBLE : View.INVISIBLE; view.findViewById(R.id.tv1).setVisibility(visibility); view.findViewById(R.id.tv2).setVisibility(visibility); @@ -374,15 +382,11 @@ public class BrowseSupportFragment extends android.support.v17.leanback.app.Brow return view; } - @Override - public void onStart() { - super.onStart(); - mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter); - } - @Override public void onViewCreated(View view, Bundle savedInstanceState) { - setEntranceTransitionState(mEntranceTransitionState); + // static layout has view and data ready immediately + mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter); + mMainFragmentAdapter.getFragmentHost().notifyDataReady(mMainFragmentAdapter); } @Override