package org.fossasia.openevent.activities;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import org.fossasia.openevent.R;
import org.fossasia.openevent.adapters.LocationsListAdapter;
import org.fossasia.openevent.adapters.SessionsListAdapter;
import org.fossasia.openevent.data.Microlocation;
import org.fossasia.openevent.data.Session;
import org.fossasia.openevent.dbutils.DbSingleton;
import org.fossasia.openevent.utils.ConstantStrings;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import butterknife.BindView;
import timber.log.Timber;
/**
* User: MananWason
* Date: 8/18/2015
*/
public class LocationActivity extends BaseActivity implements SearchView.OnQueryTextListener {
final private String SEARCH = "searchText";
private SessionsListAdapter sessionsListAdapter;
private List<Session> mSessions;
@BindView(R.id.recyclerView_locations) RecyclerView sessionRecyclerView;
@BindView(R.id.txt_no_sessions) TextView noSessionsView;
@BindView(R.id.toolbar_locations) Toolbar toolbar;
private String location;
private String searchText = "";
private SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
if (savedInstanceState != null && savedInstanceState.getString(SEARCH) != null) {
searchText = savedInstanceState.getString(SEARCH);
}
}
@Override
protected void onResume() {
super.onResume();
final DbSingleton dbSingleton = DbSingleton.getInstance();
location = getIntent().getStringExtra(ConstantStrings.MICROLOCATIONS);
Microlocation selectedLocation = dbSingleton.getLocationByLocationname(location);
mSessions = dbSingleton.getSessionbyLocationName(location);
//setting the grid layout to cut-off white space in tablet view
DisplayMetrics displayMetrics = this.getResources().getDisplayMetrics();
float width = displayMetrics.widthPixels / displayMetrics.density;
int spanCount = (int) (width/250.00);
sessionRecyclerView.setHasFixedSize(true);
final GridLayoutManager gridLayoutManager = new GridLayoutManager(this,spanCount);
sessionRecyclerView.setLayoutManager(gridLayoutManager);
sessionsListAdapter = new SessionsListAdapter(this, mSessions);
sessionRecyclerView.setAdapter(sessionsListAdapter);
sessionRecyclerView.scrollToPosition(LocationsListAdapter.listPosition);
sessionRecyclerView.setItemAnimator(new DefaultItemAnimator());
if (!mSessions.isEmpty()) {
noSessionsView.setVisibility(View.GONE);
sessionRecyclerView.setVisibility(View.VISIBLE);
} else {
noSessionsView.setVisibility(View.VISIBLE);
sessionRecyclerView.setVisibility(View.GONE);
}
}
@Override
protected int getLayoutResource() {
return R.layout.activity_locations;
}
@Override
public void onSaveInstanceState(Bundle bundle) {
if (searchView != null) {
bundle.putString(SEARCH, searchText);
}
super.onSaveInstanceState(bundle);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_tracks, menu);
searchView = (SearchView) menu.findItem(R.id.action_search_tracks).getActionView();
searchView.setOnQueryTextListener(this);
searchView.setQuery(searchText, false);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
searchView.clearFocus();
return false;
}
@Override
public boolean onQueryTextChange(String query) {
DbSingleton dbSingleton = DbSingleton.getInstance();
mSessions = dbSingleton.getSessionbyLocationName(location);
final List<Session> filteredModelList = filter(mSessions, query.toLowerCase(Locale.getDefault()));
Timber.tag("xyz").d(mSessions.size() + " " + filteredModelList.size());
sessionsListAdapter.animateTo(filteredModelList);
sessionRecyclerView.scrollToPosition(0);
searchText = query;
return false;
}
private List<Session> filter(List<Session> sessions, String query) {
query = query.toLowerCase(Locale.getDefault());
final List<Session> filteredTracksList = new ArrayList<>();
for (Session session : sessions) {
final String text = session.getTitle().toLowerCase(Locale.getDefault());
if (text.contains(query)) {
filteredTracksList.add(session);
}
}
return filteredTracksList;
}
}