package br.edu.unibratec; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.IOException; import br.edu.unibratec.databinding.ActivityMoviesBinding; import br.edu.unibratec.http.MoviesParser; import br.edu.unibratec.model.MovieSearchResult; import br.edu.unibratec.ui.adapter.MoviesAdapter; import rx.Observable; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class MoviesActivity extends AppCompatActivity implements SearchView.OnQueryTextListener { ActivityMoviesBinding mBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBinding = DataBindingUtil.setContentView(this, R.layout.activity_movies); EventBus.getDefault().register(this); } @Override protected void onDestroy() { EventBus.getDefault().unregister(this); super.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_search, menu); MenuItem searchItem = menu.findItem(R.id.search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setOnQueryTextListener(this); return true; } @Override public boolean onQueryTextSubmit(String query) { try { Observable<MovieSearchResult> result = MoviesParser.searchByTitle(query); Subscription subscription = result .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( movieSearchResult -> EventBus.getDefault().postSticky(movieSearchResult), Throwable::printStackTrace, () -> Log.d("NGVL", "Complete!") ); } catch (IOException e) { e.printStackTrace(); } return false; } @Override public boolean onQueryTextChange(String newText) { return false; } @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEvent(MovieSearchResult event) { updateListView(event); } private void updateListView(MovieSearchResult movieSearchResult) { mBinding.listMovies.setAdapter(new MoviesAdapter(this, movieSearchResult.movies)); } }