package org.onebrick.android.activities;
import android.app.Dialog;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.squareup.otto.Subscribe;
import org.onebrick.android.R;
import org.onebrick.android.core.OneBrickApplication;
import org.onebrick.android.events.FetchEventsEvent;
import org.onebrick.android.events.Status;
import org.onebrick.android.fragments.DialogSelectChapterFragment;
import org.onebrick.android.fragments.HomeEventsFragment;
import org.onebrick.android.fragments.SearchResultsFragment;
import org.onebrick.android.fragments.SelectChapterFragment;
import org.onebrick.android.helpers.LoginManager;
import org.onebrick.android.models.Chapter;
import butterknife.ButterKnife;
public class HomeActivity extends AppCompatActivity
implements SelectChapterFragment.OnSelectChapterListener, SearchView.OnQueryTextListener, MenuItemCompat.OnActionExpandListener {
public static final String EXTRA_CHAPTER_ID = "chapter_id";
public static final String EXTRA_CHAPTER_NAME = "chapter_name";
Fragment eventListFragment;
private Dialog mSelectChapterDialog;
private SearchView mSearchView;
private String mSearchQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.bind(this);
Intent intent = getIntent();
final int chapterId = intent.getIntExtra(EXTRA_CHAPTER_ID, -1);
final String chapterName = intent.getStringExtra(EXTRA_CHAPTER_NAME);
eventListFragment = HomeEventsFragment.newInstance(chapterName, chapterId);
final FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.flHomeContainer, eventListFragment).commit();
getSupportActionBar().setTitle(chapterName);
// close fragment when back button is pressed
fm.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if (getFragmentManager().getBackStackEntryCount() == 0) finish();
}
});
OneBrickApplication.getInstance().getBus().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
OneBrickApplication.getInstance().getBus().unregister(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.home, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchItem = menu.findItem(R.id.mi_search);
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
mSearchView.setOnQueryTextListener(this);
MenuItemCompat.setOnActionExpandListener(searchItem, this);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.mi_search:
return true;
case R.id.mi_login:
startActivity(new Intent(HomeActivity.this, LoginActivity.class));
return true;
case R.id.mi_select_chapter: {
showDialogToSelectChapter();
return true;
}
case R.id.mi_my_events:
showMyEvents();
return true;
case R.id.mi_logout:
logout();
return true;
}
return super.onOptionsItemSelected(item);
}
private void showMyEvents() {
final LoginManager loginManager = LoginManager.getInstance(HomeActivity.this);
if (!loginManager.isLoggedIn()) {
final Intent loginActivity = new Intent(HomeActivity.this, LoginActivity.class);
startActivity(loginActivity);
} else {
startActivity(new Intent(HomeActivity.this, MyEventsActivity.class));
overridePendingTransition(R.anim.right_in, R.anim.left_out);
}
}
private void showDialogToSelectChapter() {
FragmentManager fm = getSupportFragmentManager();
DialogSelectChapterFragment selectChapterFragment = DialogSelectChapterFragment.newInstance(getString(R.string.select_chapter));
selectChapterFragment.show(fm, "dialog fragment");
}
private void logout() {
final LoginManager loginManager = LoginManager.getInstance(this);
loginManager.logout();
getSupportActionBar().invalidateOptionsMenu();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
final LoginManager loginManager = LoginManager.getInstance(this);
if (loginManager.isLoggedIn()) {
menu.findItem(R.id.mi_login).setVisible(false);
menu.findItem(R.id.mi_logout).setVisible(true);
} else {
menu.findItem(R.id.mi_login).setVisible(true);
menu.findItem(R.id.mi_logout).setVisible(false);
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onSelectChapter(@NonNull Chapter chapter) {
if (mSelectChapterDialog != null && mSelectChapterDialog.isShowing()) {
mSelectChapterDialog.dismiss();
mSelectChapterDialog = null;
}
OneBrickApplication.getInstance().setChapterName(chapter.getChapterName());
OneBrickApplication.getInstance().setChapterId(chapter.getChapterId());
displayEventsInChapter(chapter);
}
private void displayEventsInChapter(Chapter ch) {
eventListFragment = HomeEventsFragment.newInstance(ch.getChapterName(), ch.getChapterId());
final FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.flHomeContainer, eventListFragment).commit();
getSupportActionBar().setTitle(ch.getChapterName());
}
@Override
public boolean onQueryTextSubmit(String query) {
mSearchQuery = query;
displaySearchResults(mSearchQuery);
// Reset SearchView
mSearchView.clearFocus();
mSearchView.setQuery(mSearchQuery, false);
mSearchView.setIconified(false);
return false;
}
private void displaySearchResults(String query) {
int chapterId = OneBrickApplication.getInstance().getChapterId();
String chapterName = OneBrickApplication.getInstance().getChapterName();
eventListFragment = SearchResultsFragment.newInstance(chapterName, chapterId, query);
final FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.flHomeContainer, eventListFragment).commit();
}
@Override
public boolean onQueryTextChange(String query) {
return false;
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// go back to initial status
displaySearchResults("");
return true;
}
@Subscribe
public void onFetchEventsEvent(FetchEventsEvent event) {
if (event.status == Status.NO_NETWORK) {
Toast.makeText(this, R.string.no_network, Toast.LENGTH_LONG).show();
} else if (event.status == Status.FAILED) {
Toast.makeText(this, R.string.failed_to_fetch_chapters, Toast.LENGTH_LONG).show();
}
}
}