package com.sf.elastic.activities;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.widget.EditText;
import android.widget.LinearLayout;
import com.jakewharton.rxbinding.widget.RxAdapter;
import com.jakewharton.rxbinding.widget.RxTextView;
import com.sf.elastic.R;
import com.sf.elastic.adapters.CityAdapter;
import com.sf.elastic.repositories.CityRepository;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.ViewById;
import java.util.concurrent.TimeUnit;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
@EActivity(R.layout.activity_main2)
@OptionsMenu(R.menu.menu_main)
public class MainActivity extends AppCompatActivity {
@ViewById(R.id.rootLayout)
public LinearLayout rootLayout;
@ViewById(R.id.toolbar)
public Toolbar toolbar;
@ViewById(R.id.recycler_view)
RecyclerView recyclerView;
@ViewById(R.id.cityName)
public EditText cityName;
@Bean
public CityRepository cityRepository;
@Bean
public CityAdapter cityAdapter;
@AfterViews
public void mainAfterViews() {
initialize();
searchOnElastic();
// executePosts();
RxTextView.textChangeEvents(cityName)
.sample(TimeUnit.SECONDS.toSeconds(2), TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(textChangeEvent -> {
cityAdapter.clearList();
Log.i(null, "------ BEGIN ------");
cityRepository
.getNextCity(textChangeEvent.text().toString())
.subscribeOn(Schedulers.newThread())
// .observeOn(AndroidSchedulers.mainThread())
// .onBackpressureDrop()
.subscribe(
city -> {
runOnUiThread(() -> cityAdapter.add(city));
Log.i(null, city.getName());
},
throwable -> Log.e(null, throwable.getMessage()),
() -> Log.i(null, "------- END -------"));
});
}
@Background
public void executePosts() {
cityRepository
.addCities();
}
@Background
public void searchOnElastic() {
cityAdapter.clearList();
cityRepository
.getNextCity("")
// .subscribeOn(Schedulers.newThread())
.subscribe(
city -> {
runOnUiThread(() -> cityAdapter.add(city));
});
}
private void initialize() {
setSupportActionBar(toolbar);
final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(cityAdapter);
}
}