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
This commit is contained in:
Dake Gu
2016-04-29 17:25:47 -07:00
parent 645fa2c1cb
commit 705f280aaf
3 changed files with 71 additions and 62 deletions

View File

@@ -60,6 +60,7 @@ for line in file:
line = line.replace('BrowseFragment', 'BrowseSupportFragment') line = line.replace('BrowseFragment', 'BrowseSupportFragment')
line = line.replace('GuidedStepFragment', 'GuidedStepSupportFragment') line = line.replace('GuidedStepFragment', 'GuidedStepSupportFragment')
line = line.replace('GuidedStepActivity', 'GuidedStepSupportActivity') line = line.replace('GuidedStepActivity', 'GuidedStepSupportActivity')
line = line.replace('getActivity().getFragmentManager()', 'getActivity().getSupportFragmentManager()')
line = line.replace('BrowseActivity', 'BrowseSupportActivity') line = line.replace('BrowseActivity', 'BrowseSupportActivity')
line = line.replace('DetailsActivity', 'DetailsSupportActivity') line = line.replace('DetailsActivity', 'DetailsSupportActivity')
line = line.replace('SearchActivity', 'SearchSupportActivity') line = line.replace('SearchActivity', 'SearchSupportActivity')

View File

@@ -228,7 +228,7 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm
public Fragment createFragment(Object rowObj) { public Fragment createFragment(Object rowObj) {
Row row = (Row) rowObj; Row row = (Row) rowObj;
if (row.getHeaderItem().getId() == HEADER_ID1) { if (row.getHeaderItem().getId() == HEADER_ID1) {
return new SampleFragment(); return new SampleRowsFragment();
} else if (row.getHeaderItem().getId() == HEADER_ID2) { } else if (row.getHeaderItem().getId() == HEADER_ID2) {
return new SampleRowsFragment(); return new SampleRowsFragment();
} else if (row.getHeaderItem().getId() == HEADER_ID3) { } 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<SampleFragment> {
public PageFragmentAdapterImpl(SampleFragment fragment) {
super(fragment);
setScalingEnabled(true);
}
@Override
public void setEntranceTransitionState(boolean state) {
getFragment().setEntranceTransitionState(state);
}
}
public static class SampleRowsFragment extends RowsFragment { public static class SampleRowsFragment extends RowsFragment {
final CardPresenter mCardPresenter = new CardPresenter(); final CardPresenter mCardPresenter = new CardPresenter();
final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
public SampleRowsFragment() { void loadFragmentData() {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); ArrayObjectAdapter adapter = (ArrayObjectAdapter) getAdapter();
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
adapter.add(row); adapter.add(row);
} }
if (getMainFragmentAdapter() != null) {
getMainFragmentAdapter().getFragmentHost()
.notifyDataReady(getMainFragmentAdapter());
}
}
public SampleRowsFragment() {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
setAdapter(adapter); setAdapter(adapter);
// simulates late data loading:
new Handler().postDelayed(new Runnable() {
public void run() {
loadFragmentData();
}
}, 500);
setOnItemViewClickedListener(new OnItemViewClickedListener() { setOnItemViewClickedListener(new OnItemViewClickedListener() {
@Override @Override
@@ -274,12 +275,12 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm
Intent intent; Intent intent;
Bundle bundle; Bundle bundle;
if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
GuidedStepFragment.add(getFragmentManager(), GuidedStepFragment.add(getActivity().getFragmentManager(),
new GuidedStepHalfScreenActivity.FirstStepFragment(), new GuidedStepHalfScreenActivity.FirstStepFragment(),
R.id.lb_guidedstep_host); R.id.lb_guidedstep_host);
return; return;
} else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { } 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); new GuidedStepActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
return; return;
} else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { } 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<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 { public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider {
final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
boolean mEntranceTransitionState = true;
public void setEntranceTransitionState(boolean state) { public void setEntranceTransitionState(boolean state) {
mEntranceTransitionState = state;
final View view = getView(); final View view = getView();
if (view == null) {
return;
}
int visibility = state ? View.VISIBLE : View.INVISIBLE; int visibility = state ? View.VISIBLE : View.INVISIBLE;
view.findViewById(R.id.tv1).setVisibility(visibility); view.findViewById(R.id.tv1).setVisibility(visibility);
view.findViewById(R.id.tv2).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; return view;
} }
@Override
public void onStart() {
super.onStart();
mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
}
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState) { 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 @Override

View File

@@ -230,7 +230,7 @@ public class BrowseSupportFragment extends android.support.v17.leanback.app.Brow
public Fragment createFragment(Object rowObj) { public Fragment createFragment(Object rowObj) {
Row row = (Row) rowObj; Row row = (Row) rowObj;
if (row.getHeaderItem().getId() == HEADER_ID1) { if (row.getHeaderItem().getId() == HEADER_ID1) {
return new SampleFragment(); return new SampleRowsSupportFragment();
} else if (row.getHeaderItem().getId() == HEADER_ID2) { } else if (row.getHeaderItem().getId() == HEADER_ID2) {
return new SampleRowsSupportFragment(); return new SampleRowsSupportFragment();
} else if (row.getHeaderItem().getId() == HEADER_ID3) { } 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<SampleFragment> {
public PageFragmentAdapterImpl(SampleFragment fragment) {
super(fragment);
setScalingEnabled(true);
}
@Override
public void setEntranceTransitionState(boolean state) {
getFragment().setEntranceTransitionState(state);
}
}
public static class SampleRowsSupportFragment extends RowsSupportFragment { public static class SampleRowsSupportFragment extends RowsSupportFragment {
final CardPresenter mCardPresenter = new CardPresenter(); final CardPresenter mCardPresenter = new CardPresenter();
final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme); final CardPresenter mCardPresenter2 = new CardPresenter(R.style.MyImageCardViewTheme);
public SampleRowsSupportFragment() { void loadFragmentData() {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter()); ArrayObjectAdapter adapter = (ArrayObjectAdapter) getAdapter();
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i)); ListRow row = new ListRow(new HeaderItem("Row " + i), createListRowAdapter(i));
adapter.add(row); adapter.add(row);
} }
if (getMainFragmentAdapter() != null) {
getMainFragmentAdapter().getFragmentHost()
.notifyDataReady(getMainFragmentAdapter());
}
}
public SampleRowsSupportFragment() {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
setAdapter(adapter); setAdapter(adapter);
// simulates late data loading:
new Handler().postDelayed(new Runnable() {
public void run() {
loadFragmentData();
}
}, 500);
setOnItemViewClickedListener(new OnItemViewClickedListener() { setOnItemViewClickedListener(new OnItemViewClickedListener() {
@Override @Override
@@ -276,12 +277,12 @@ public class BrowseSupportFragment extends android.support.v17.leanback.app.Brow
Intent intent; Intent intent;
Bundle bundle; Bundle bundle;
if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) { if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_6) {
GuidedStepSupportFragment.add(getFragmentManager(), GuidedStepSupportFragment.add(getActivity().getSupportFragmentManager(),
new GuidedStepSupportHalfScreenActivity.FirstStepFragment(), new GuidedStepSupportHalfScreenActivity.FirstStepFragment(),
R.id.lb_guidedstep_host); R.id.lb_guidedstep_host);
return; return;
} else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_5) { } 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); new GuidedStepSupportActivity.FirstStepFragment(), R.id.lb_guidedstep_host);
return; return;
} else if (((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { } 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<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 { public static class SampleFragment extends Fragment implements MainFragmentAdapterProvider {
final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this); final PageFragmentAdapterImpl mMainFragmentAdapter = new PageFragmentAdapterImpl(this);
boolean mEntranceTransitionState = true;
public void setEntranceTransitionState(boolean state) { public void setEntranceTransitionState(boolean state) {
mEntranceTransitionState = state;
final View view = getView(); final View view = getView();
if (view == null) {
return;
}
int visibility = state ? View.VISIBLE : View.INVISIBLE; int visibility = state ? View.VISIBLE : View.INVISIBLE;
view.findViewById(R.id.tv1).setVisibility(visibility); view.findViewById(R.id.tv1).setVisibility(visibility);
view.findViewById(R.id.tv2).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; return view;
} }
@Override
public void onStart() {
super.onStart();
mMainFragmentAdapter.getFragmentHost().notifyViewCreated(mMainFragmentAdapter);
}
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState) { 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 @Override