add loading-overlay

This commit is contained in:
Felix 2017-11-19 22:16:07 +01:00
parent 652f370761
commit 7a7aea2612
6 changed files with 63 additions and 10 deletions

View file

@ -26,6 +26,7 @@ public class ConferencesTabBrowseFragment extends BrowseFragment {
private Toolbar mToolbar; private Toolbar mToolbar;
private Context mContext; private Context mContext;
private ViewPager mViewPager; private ViewPager mViewPager;
private View loadingOverlay;
public static ConferencesTabBrowseFragment newInstance(int columnCount) { public static ConferencesTabBrowseFragment newInstance(int columnCount) {
ConferencesTabBrowseFragment fragment = new ConferencesTabBrowseFragment(); ConferencesTabBrowseFragment fragment = new ConferencesTabBrowseFragment();
@ -64,17 +65,21 @@ public class ConferencesTabBrowseFragment extends BrowseFragment {
mViewPager = view.findViewById(R.id.viewpager); mViewPager = view.findViewById(R.id.viewpager);
loadingOverlay = view.findViewById(R.id.loading_overlay);
getViewModel().getConferenceGroups() getViewModel().getConferenceGroups()
.observe(this,conferenceGroups -> { .observe(this, conferenceGroups -> {
ConferenceGroupsFragmentPager fragmentPager ConferenceGroupsFragmentPager fragmentPager
= new ConferenceGroupsFragmentPager(this.getContext(), getChildFragmentManager()); = new ConferenceGroupsFragmentPager(this.getContext(), getChildFragmentManager());
fragmentPager.setContent(conferenceGroups); fragmentPager.setContent(conferenceGroups);
mViewPager.setAdapter(fragmentPager); mViewPager.setAdapter(fragmentPager);
mViewPager.onRestoreInstanceState(getArguments().getParcelable(VIEWPAGER_STATE)); mViewPager.onRestoreInstanceState(getArguments().getParcelable(VIEWPAGER_STATE));
TabLayout tabLayout = view.findViewById(R.id.sliding_tabs); TabLayout tabLayout = view.findViewById(R.id.sliding_tabs);
tabLayout.setupWithViewPager(mViewPager); tabLayout.setupWithViewPager(mViewPager);
setLoadingOverlayVisibility(false);
}); });
getViewModel().updateConferences(); // TODO show and dismiss loading-spinner getViewModel().updateConferences().observe(this,
loadingFinished -> setLoadingOverlayVisibility(!loadingFinished));
return view; return view;
} }
@ -90,6 +95,16 @@ public class ConferencesTabBrowseFragment extends BrowseFragment {
listener = null; listener = null;
} }
private void setLoadingOverlayVisibility(boolean visible) {
if (loadingOverlay != null) {
if (visible) {
loadingOverlay.setVisibility(View.VISIBLE);
} else {
loadingOverlay.setVisibility(View.INVISIBLE);
}
}
}
public interface OnInteractionListener { public interface OnInteractionListener {
void onConferenceSelected(long conferenceId); void onConferenceSelected(long conferenceId);
} }

View file

@ -42,6 +42,7 @@ public class EventsListFragment extends BrowseFragment implements SearchView.OnQ
private LinearLayoutManager layoutManager; private LinearLayoutManager layoutManager;
private SearchView searchView; private SearchView searchView;
private View loadingOverlay;
public static EventsListFragment newInstance(long conferenceId, int columnCount) { public static EventsListFragment newInstance(long conferenceId, int columnCount) {
EventsListFragment fragment = new EventsListFragment(); EventsListFragment fragment = new EventsListFragment();
@ -75,6 +76,7 @@ public class EventsListFragment extends BrowseFragment implements SearchView.OnQ
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_events_list, container, false); View view = inflater.inflate(R.layout.fragment_events_list, container, false);
loadingOverlay = view.findViewById(R.id.loading_overlay);
Context context = view.getContext(); Context context = view.getContext();
RecyclerView recyclerView = view.findViewById(R.id.list); RecyclerView recyclerView = view.findViewById(R.id.list);
if (columnCount <= 1) { if (columnCount <= 1) {
@ -89,6 +91,7 @@ public class EventsListFragment extends BrowseFragment implements SearchView.OnQ
Observer<List<PersistentEvent>> listObserver = persistentEvents -> { Observer<List<PersistentEvent>> listObserver = persistentEvents -> {
setEvents(persistentEvents); setEvents(persistentEvents);
setLoadingOverlayVisibility(false);
}; };
Resources resources = getResources(); Resources resources = getResources();
@ -108,7 +111,9 @@ public class EventsListFragment extends BrowseFragment implements SearchView.OnQ
}); });
getViewModel().getEventsforConference(conferenceId).observe(this, listObserver); getViewModel().getEventsforConference(conferenceId).observe(this, listObserver);
getViewModel().updateEventsForConference(conferenceId); // TODO show/dismiss loading-spinner getViewModel().updateEventsForConference(conferenceId).observe(this,
loadingFinished -> setLoadingOverlayVisibility(!loadingFinished)
);
} }
} }
return view; return view;
@ -161,6 +166,16 @@ public class EventsListFragment extends BrowseFragment implements SearchView.OnQ
return true; return true;
} }
private void setLoadingOverlayVisibility(boolean visible){
if(loadingOverlay != null){
if(visible){
loadingOverlay.setVisibility(View.VISIBLE);
} else {
loadingOverlay.setVisibility(View.INVISIBLE);
}
}
}
public interface OnInteractionListener extends OnEventSelectedListener { public interface OnInteractionListener extends OnEventSelectedListener {
void setToolbarTitle(String title); void setToolbarTitle(String title);
} }

View file

@ -47,9 +47,7 @@ class Downloader(val recordingApi: RecordingService,
private val TAG: String? = Downloader::class.simpleName private val TAG: String? = Downloader::class.simpleName
fun updateEventsForConference(conferenceId: Long, listener: ((List<Long>) -> Unit)? = null) { fun updateEventsForConference(conferenceId: Long, listener: ((List<Long>) -> Unit)? = null): MutableLiveData<Boolean> {
if (conferenceId < 0)
return
val updateFinished = MutableLiveData<Boolean>() val updateFinished = MutableLiveData<Boolean>()
updateFinished.value = false updateFinished.value = false
recordingApi.getConference(conferenceId) recordingApi.getConference(conferenceId)
@ -61,7 +59,7 @@ class Downloader(val recordingApi: RecordingService,
}, { t: Throwable? -> }, { t: Throwable? ->
Log.d(TAG, t?.message, t) Log.d(TAG, t?.message, t)
}) })
return updateFinished
} }
fun updateRecordingsForEvent(eventId: Long, listener: ((List<Long>) -> Unit)? = null) { fun updateRecordingsForEvent(eventId: Long, listener: ((List<Long>) -> Unit)? = null) {

View file

@ -1,8 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView <FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/list" android:id="@+id/list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -10,4 +14,8 @@
app:layout_anchor="@id/toolbar" app:layout_anchor="@id/toolbar"
app:layout_anchorGravity="bottom|end" app:layout_anchorGravity="bottom|end"
app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:listitem="@layout/item_conference_cardview"/> tools:listitem="@layout/item_conference_cardview"/>
<include layout="@layout/loading_overlay"/>
</FrameLayout>

View file

@ -38,4 +38,5 @@
app:layout_anchorGravity="bottom" app:layout_anchorGravity="bottom"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/> app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<include layout="@layout/loading_overlay"/>
</android.support.design.widget.CoordinatorLayout> </android.support.design.widget.CoordinatorLayout>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/loading_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_trans80"
tools:showIn="@layout/fragment_tab_pager_layout">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"/>
</FrameLayout>