show conference name in releted events

This commit is contained in:
Felix 2020-04-05 14:14:50 +02:00
parent 5a11b8061a
commit e0de037d1e
6 changed files with 161 additions and 164 deletions

View file

@ -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")
}

View file

@ -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>>

View file

@ -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""")

View file

@ -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>>

View file

@ -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;
}
}

View file

@ -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 ->