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: I561db19130d8ed0439d0f1ab74b922e0698c3180
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
index ba6abc0..b2c45f4 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 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,30 @@
         }
     }
 
-    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
-
-        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 +274,12 @@
                     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,6 +339,19 @@
         }
     }
 
+    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
+
+        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);
@@ -373,14 +386,10 @@
         }
 
         @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 58477d1..ecf6d48 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 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,30 @@
         }
     }
 
-    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
-
-        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 +276,12 @@
                     Intent intent;
                     Bundle bundle;
                     if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
-                        GuidedStepSupportFragment.add(getFragmentManager(),
+                        GuidedStepSupportFragment.add(getActivity().getFragmentManager(),
                                 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().getFragmentManager(),
                                 new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
                         return;
                     } else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) {
@@ -341,6 +341,19 @@
         }
     }
 
+    public static class PageFragmentAdapterImpl extends MainFragmentAdapter<SampleFragment> {
+
+        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);
@@ -375,14 +388,10 @@
         }
 
         @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