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('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')

View File

@@ -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<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 +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<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);
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

View File

@@ -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<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 +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<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);
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