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