mirror of
https://github.com/NiciDieNase/chaosflix
synced 2025-02-16 21:18:23 +00:00
show conference name in releted events
This commit is contained in:
parent
5a11b8061a
commit
e0de037d1e
6 changed files with 161 additions and 164 deletions
|
@ -263,6 +263,7 @@ class MediaRepository(
|
|||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val guids = relatedEventDao.getRelatedEventsForEventSuspend(event.id)
|
||||
val relatedEvents: List<Event> = guids.mapNotNull { findEventForGuid(it) }
|
||||
|
||||
if (guids.size != relatedEvents.size) {
|
||||
Log.e(TAG, "Could not find all related Events")
|
||||
}
|
||||
|
|
|
@ -22,7 +22,9 @@ abstract class EventDao : BaseDao<Event>() {
|
|||
@Query("SELECT * FROM event WHERE guid = :guid LIMIT 1")
|
||||
abstract fun findEventByGuid(guid: String): LiveData<Event?>
|
||||
|
||||
@Query("SELECT * FROM event WHERE guid = :guid LIMIT 1")
|
||||
@Query("""SELECT event.*, conference.acronym as conference FROM event
|
||||
JOIN conference ON event.conferenceId = conference.id
|
||||
WHERE guid = :guid LIMIT 1""")
|
||||
abstract suspend fun findEventByGuidSync(guid: String): Event?
|
||||
|
||||
@Query("SELECT * FROM event WHERE id in (:ids)")
|
||||
|
@ -73,7 +75,7 @@ abstract class EventDao : BaseDao<Event>() {
|
|||
// @Query("SELECT * FROM event JOIN conference ON event.conferenceId=conference.id WHERE event.id = :eventId")
|
||||
// abstract suspend fun getAllEventsWithConference(eventId: Long): List<EventWithConference>
|
||||
|
||||
@Query("""SELECT event.*, conference.title as conference
|
||||
@Query("""SELECT event.*, conference.acronym as conference
|
||||
FROM event JOIN conference ON event.conferenceId=conference.id
|
||||
WHERE conference.id = :confernceId""")
|
||||
abstract fun getEventsWithConferenceForConfernce(confernceId: Long): LiveData<List<Event>>
|
||||
|
|
|
@ -9,7 +9,7 @@ import androidx.room.Query
|
|||
@Dao
|
||||
interface PlaybackProgressDao {
|
||||
|
||||
@Query("""SELECT event.*, progress.progress, progress.watch_date, conference.title as conference
|
||||
@Query("""SELECT event.*, progress.progress, progress.watch_date, conference.acronym as conference
|
||||
FROM playback_progress as progress
|
||||
JOIN event ON event_guid = event.guid
|
||||
JOIN conference ON event.conferenceId = conference.id""")
|
||||
|
|
|
@ -18,7 +18,7 @@ abstract class WatchlistItemDao : BaseDao<WatchlistItem>() {
|
|||
@Query("SELECT * FROM watchlist_item")
|
||||
abstract fun getAllSync(): List<WatchlistItem>
|
||||
|
||||
@Query("""SELECT event.*, conference.title as conference FROM watchlist_item
|
||||
@Query("""SELECT event.*, conference.acronym as conference FROM watchlist_item
|
||||
JOIN event ON watchlist_item.event_guid=event.guid
|
||||
JOIN conference ON event.conferenceId = conference.id""")
|
||||
abstract fun getWatchlistEvents(): LiveData<List<Event>>
|
||||
|
|
|
@ -12,19 +12,17 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
import android.widget.SearchView;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import de.nicidienase.chaosflix.common.mediadata.MediaRepository;
|
||||
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Conference;
|
||||
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Event;
|
||||
|
@ -37,174 +35,174 @@ import kotlin.Unit;
|
|||
|
||||
public class EventsListFragment extends BrowseFragment implements SearchView.OnQueryTextListener {
|
||||
|
||||
private static final String ARG_COLUMN_COUNT = "column-count";
|
||||
private static final String ARG_TYPE = "type";
|
||||
private static final String ARG_CONFERENCE = "conference";
|
||||
private static final String LAYOUTMANAGER_STATE = "layoutmanager-state";
|
||||
private static final String TAG = EventsListFragment.class.getSimpleName();
|
||||
private static final String ARG_COLUMN_COUNT = "column-count";
|
||||
private static final String ARG_TYPE = "type";
|
||||
private static final String ARG_CONFERENCE = "conference";
|
||||
private static final String LAYOUTMANAGER_STATE = "layoutmanager-state";
|
||||
private static final String TAG = EventsListFragment.class.getSimpleName();
|
||||
|
||||
public static final int TYPE_EVENTS = 0;
|
||||
public static final int TYPE_BOOKMARKS = 1;
|
||||
public static final int TYPE_IN_PROGRESS = 2;
|
||||
public static final int TYPE_EVENTS = 0;
|
||||
public static final int TYPE_BOOKMARKS = 1;
|
||||
public static final int TYPE_IN_PROGRESS = 2;
|
||||
|
||||
private int columnCount = 1;
|
||||
private OnEventSelectedListener listener;
|
||||
private int columnCount = 1;
|
||||
private OnEventSelectedListener listener;
|
||||
|
||||
private EventRecyclerViewAdapter eventAdapter;
|
||||
private Conference conference;
|
||||
private EventRecyclerViewAdapter eventAdapter;
|
||||
private Conference conference;
|
||||
|
||||
private RecyclerView.LayoutManager layoutManager;
|
||||
private Snackbar snackbar;
|
||||
private int type;
|
||||
private RecyclerView.LayoutManager layoutManager;
|
||||
private Snackbar snackbar;
|
||||
private int type;
|
||||
|
||||
public static EventsListFragment newInstance(int type, Conference conference, int columnCount) {
|
||||
EventsListFragment fragment = new EventsListFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(ARG_TYPE, type);
|
||||
args.putInt(ARG_COLUMN_COUNT, columnCount);
|
||||
args.putParcelable(ARG_CONFERENCE, conference);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
public static EventsListFragment newInstance(int type, Conference conference, int columnCount) {
|
||||
EventsListFragment fragment = new EventsListFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(ARG_TYPE, type);
|
||||
args.putInt(ARG_COLUMN_COUNT, columnCount);
|
||||
args.putParcelable(ARG_CONFERENCE, conference);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
setHasOptionsMenu(true);
|
||||
if (context instanceof OnEventSelectedListener) {
|
||||
listener = (OnEventSelectedListener) context;
|
||||
} else {
|
||||
throw new RuntimeException(context.toString() + " must implement OnListFragmentInteractionListener");
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
setHasOptionsMenu(true);
|
||||
if (context instanceof OnEventSelectedListener) {
|
||||
listener = (OnEventSelectedListener) context;
|
||||
} else {
|
||||
throw new RuntimeException(context.toString() + " must implement OnListFragmentInteractionListener");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getArguments() != null) {
|
||||
columnCount = getArguments().getInt(ARG_COLUMN_COUNT);
|
||||
type = getArguments().getInt(ARG_TYPE);
|
||||
conference = getArguments().getParcelable(ARG_CONFERENCE);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getArguments() != null) {
|
||||
columnCount = getArguments().getInt(ARG_COLUMN_COUNT);
|
||||
type = getArguments().getInt(ARG_TYPE);
|
||||
conference = getArguments().getParcelable(ARG_CONFERENCE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
FragmentEventsListBinding binding = FragmentEventsListBinding.inflate(inflater, container, false);
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
FragmentEventsListBinding binding = FragmentEventsListBinding.inflate(inflater, container, false);
|
||||
|
||||
AppCompatActivity activity = (AppCompatActivity) requireActivity();
|
||||
activity.setSupportActionBar(binding.incToolbar.toolbar);
|
||||
setOverlay(binding.incOverlay.loadingOverlay);
|
||||
AppCompatActivity activity = (AppCompatActivity) requireActivity();
|
||||
activity.setSupportActionBar(binding.incToolbar.toolbar);
|
||||
setOverlay(binding.incOverlay.loadingOverlay);
|
||||
|
||||
if (columnCount <= 1) {
|
||||
layoutManager = new LinearLayoutManager(getContext());
|
||||
} else {
|
||||
layoutManager = new StaggeredGridLayoutManager(columnCount, StaggeredGridLayoutManager.VERTICAL);
|
||||
}
|
||||
binding.list.setLayoutManager(layoutManager);
|
||||
if (columnCount <= 1) {
|
||||
layoutManager = new LinearLayoutManager(getContext());
|
||||
} else {
|
||||
layoutManager = new StaggeredGridLayoutManager(columnCount, StaggeredGridLayoutManager.VERTICAL);
|
||||
}
|
||||
binding.list.setLayoutManager(layoutManager);
|
||||
|
||||
eventAdapter = new EventRecyclerViewAdapter(event -> {
|
||||
listener.onEventSelected(event);
|
||||
return Unit.INSTANCE;
|
||||
});
|
||||
eventAdapter.setHasStableIds(true);
|
||||
binding.list.setAdapter(eventAdapter);
|
||||
eventAdapter = new EventRecyclerViewAdapter(event -> {
|
||||
listener.onEventSelected(event);
|
||||
return Unit.INSTANCE;
|
||||
});
|
||||
eventAdapter.setHasStableIds(true);
|
||||
binding.list.setAdapter(eventAdapter);
|
||||
|
||||
Observer<List<Event>> listObserver = persistentEvents -> {
|
||||
setLoadingOverlayVisibility(false);
|
||||
if (persistentEvents != null) {
|
||||
setEvents(persistentEvents);
|
||||
}
|
||||
};
|
||||
Observer<List<Event>> listObserver = persistentEvents -> {
|
||||
setLoadingOverlayVisibility(false);
|
||||
if (persistentEvents != null) {
|
||||
setEvents(persistentEvents);
|
||||
}
|
||||
};
|
||||
|
||||
if (type == TYPE_BOOKMARKS) {
|
||||
setupToolbar(binding.incToolbar.toolbar, R.string.bookmarks);
|
||||
eventAdapter.setShowConferenceName(true);
|
||||
getViewModel().getBookmarkedEvents().observe(this, listObserver);
|
||||
} else if (type == TYPE_IN_PROGRESS) {
|
||||
setupToolbar(binding.incToolbar.toolbar, R.string.continue_watching);
|
||||
eventAdapter.setShowConferenceName(true);
|
||||
getViewModel().getInProgressEvents().observe(this, listObserver);
|
||||
} else if (type == TYPE_EVENTS) {
|
||||
{
|
||||
setupToolbar(binding.incToolbar.toolbar, conference.getTitle(), false);
|
||||
getViewModel().getEventsforConference(conference).observe(this, events -> {
|
||||
if(events != null){
|
||||
setEvents(events);
|
||||
setLoadingOverlayVisibility(false);
|
||||
}
|
||||
});
|
||||
getViewModel().updateEventsForConference(conference).observe(this, state -> {
|
||||
MediaRepository.State downloaderState = state.getState();
|
||||
switch (downloaderState) {
|
||||
case RUNNING:
|
||||
setLoadingOverlayVisibility(true);
|
||||
break;
|
||||
case DONE:
|
||||
setLoadingOverlayVisibility(false);
|
||||
break;
|
||||
}
|
||||
if (state.getError() != null) {
|
||||
showSnackbar(state.getError());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return binding.getRoot();
|
||||
}
|
||||
if (type == TYPE_BOOKMARKS) {
|
||||
setupToolbar(binding.incToolbar.toolbar, R.string.bookmarks);
|
||||
eventAdapter.setShowConferenceName(true);
|
||||
getViewModel().getBookmarkedEvents().observe(this, listObserver);
|
||||
} else if (type == TYPE_IN_PROGRESS) {
|
||||
setupToolbar(binding.incToolbar.toolbar, R.string.continue_watching);
|
||||
eventAdapter.setShowConferenceName(true);
|
||||
getViewModel().getInProgressEvents().observe(this, listObserver);
|
||||
} else if (type == TYPE_EVENTS) {
|
||||
{
|
||||
setupToolbar(binding.incToolbar.toolbar, conference.getTitle(), false);
|
||||
getViewModel().getEventsforConference(conference).observe(this, events -> {
|
||||
if (events != null) {
|
||||
setEvents(events);
|
||||
setLoadingOverlayVisibility(false);
|
||||
}
|
||||
});
|
||||
getViewModel().updateEventsForConference(conference).observe(this, state -> {
|
||||
MediaRepository.State downloaderState = state.getState();
|
||||
switch (downloaderState) {
|
||||
case RUNNING:
|
||||
setLoadingOverlayVisibility(true);
|
||||
break;
|
||||
case DONE:
|
||||
setLoadingOverlayVisibility(false);
|
||||
break;
|
||||
}
|
||||
if (state.getError() != null) {
|
||||
showSnackbar(state.getError());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void showSnackbar(String message) {
|
||||
if (snackbar != null) {
|
||||
snackbar.dismiss();
|
||||
}
|
||||
snackbar = Snackbar.make(getView(), message, Snackbar.LENGTH_LONG);
|
||||
snackbar.setAction("Okay", view -> snackbar.dismiss());
|
||||
snackbar.show();
|
||||
}
|
||||
private void showSnackbar(String message) {
|
||||
if (snackbar != null) {
|
||||
snackbar.dismiss();
|
||||
}
|
||||
snackbar = Snackbar.make(getView(), message, Snackbar.LENGTH_LONG);
|
||||
snackbar.setAction("Okay", view -> snackbar.dismiss());
|
||||
snackbar.show();
|
||||
}
|
||||
|
||||
private void setEvents(List<Event> events) {
|
||||
eventAdapter.setItems(events);
|
||||
private void setEvents(List<Event> events) {
|
||||
eventAdapter.setItems(events);
|
||||
|
||||
Parcelable layoutState = getArguments().getParcelable(LAYOUTMANAGER_STATE);
|
||||
if (layoutState != null) { layoutManager.onRestoreInstanceState(layoutState); }
|
||||
}
|
||||
Parcelable layoutState = getArguments().getParcelable(LAYOUTMANAGER_STATE);
|
||||
if (layoutState != null) {
|
||||
layoutManager.onRestoreInstanceState(layoutState);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
getArguments().putParcelable(LAYOUTMANAGER_STATE, layoutManager.onSaveInstanceState());
|
||||
}
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
getArguments().putParcelable(LAYOUTMANAGER_STATE, layoutManager.onSaveInstanceState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
inflater.inflate(R.menu.events_menu, menu);
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
inflater.inflate(R.menu.events_menu, menu);
|
||||
MenuItem searchMenuItem = menu.findItem(R.id.search);
|
||||
SearchView searchView = (SearchView) searchMenuItem.getActionView();
|
||||
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
|
||||
searchView.setSearchableInfo(searchManager.
|
||||
getSearchableInfo(getActivity().getComponentName()));
|
||||
searchView.setSubmitButtonEnabled(true);
|
||||
searchView.setIconified(false);
|
||||
searchView.setOnQueryTextListener(this);
|
||||
}
|
||||
|
||||
MenuItem searchMenuItem = menu.findItem(R.id.search);
|
||||
SearchView searchView = (SearchView) searchMenuItem.getActionView();
|
||||
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
|
||||
@Override
|
||||
public void onDetach() {
|
||||
super.onDetach();
|
||||
listener = null;
|
||||
}
|
||||
|
||||
searchView.setSearchableInfo(searchManager.
|
||||
getSearchableInfo(getActivity().getComponentName()));
|
||||
searchView.setSubmitButtonEnabled(true);
|
||||
searchView.setIconified(false);
|
||||
searchView.setOnQueryTextListener(this);
|
||||
}
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
super.onDetach();
|
||||
listener = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextChange(String newText) {
|
||||
eventAdapter.getFilter().filter(newText);
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean onQueryTextChange(String newText) {
|
||||
eventAdapter.getFilter().filter(newText);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,6 +80,7 @@ class EventDetailsFragment : androidx.fragment.app.Fragment() {
|
|||
relatedEventsAdapter = EventRecyclerViewAdapter {
|
||||
viewModel.relatedEventSelected(it)
|
||||
}
|
||||
relatedEventsAdapter.showConferenceName = true
|
||||
adapter = relatedEventsAdapter
|
||||
val columns: Int = resources.getInteger(R.integer.num_columns)
|
||||
layoutManager = if (columns == 1) {
|
||||
|
@ -87,11 +88,6 @@ class EventDetailsFragment : androidx.fragment.app.Fragment() {
|
|||
} else {
|
||||
StaggeredGridLayoutManager(columns, StaggeredGridLayoutManager.VERTICAL)
|
||||
}
|
||||
val itemDecoration = androidx.recyclerview.widget.DividerItemDecoration(
|
||||
binding.relatedItemsList.context,
|
||||
LinearLayoutManager.VERTICAL
|
||||
)
|
||||
addItemDecoration(itemDecoration)
|
||||
}
|
||||
|
||||
binding.appbar.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset ->
|
||||
|
|
Loading…
Add table
Reference in a new issue