package com.yelinaung.ottofit; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; import com.squareup.otto.Subscribe; import com.squareup.phrase.Phrase; import com.yelinaung.ottofit.event.ApiErrorEvent; import com.yelinaung.ottofit.event.RepoFoundEvent; import com.yelinaung.ottofit.event.SearchRepoEvent; import com.yelinaung.ottofit.model.GitHub; import com.yelinaung.ottofit.model.Item; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; public class MyActivity extends Activity { @InjectView(R.id.search_wrapper) RelativeLayout searchWrapper; @InjectView(R.id.reponame_edittext) EditText repoName; @InjectView(R.id.search_progress) ProgressBar searchProgress; @InjectView(R.id.result) TextView result; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); ButterKnife.inject(this); } @SuppressWarnings("unused") @OnClick(R.id.search_btn) public void searchRepo() { if (repoName.getText().toString().trim().length() == 0) { repoName.setError("Please enter a repo name"); } else { BusProvider.getInstance().post(new SearchRepoEvent()); showProgress(true); result.setText(""); } } @Subscribe public void onRepoSearch(SearchRepoEvent event) { Async.buildApi().repoList(repoName.getText().toString().trim(), new Callback<GitHub>() { @Override public void success(GitHub gitHub, Response response) { if (gitHub != null) { BusProvider.getInstance().post(new RepoFoundEvent(gitHub)); } } @Override public void failure(RetrofitError error) { BusProvider.getInstance().post(new ApiErrorEvent(error)); } }); } @Subscribe public void onRepoFound(RepoFoundEvent event) { showProgress(false); GitHub gh = event.repo; Toast.makeText(this, "Total repo found : " + gh.items.size(), Toast.LENGTH_SHORT).show(); for (Item i : gh.items) { if (i.language != null) { CharSequence formatted = Phrase.from(this, R.string.repo) .put("name", i.name) .put("language", i.language) .format(); result.append(formatted); } } } @Subscribe public void onSearchError(ApiErrorEvent event) { showProgress(false); Toast.makeText(this, event.error.getMessage(), Toast.LENGTH_SHORT).show(); Log.i("error", event.error.getMessage()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.my, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); return id == R.id.action_settings || super.onOptionsItemSelected(item); } public void showProgress(final boolean show) { // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow // for very easy animations. If available, use these APIs to fade-in // the progress spinner. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); searchWrapper.setVisibility(show ? View.GONE : View.VISIBLE); searchWrapper.animate() .setDuration(shortAnimTime) .alpha(show ? 0 : 1) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { searchWrapper.setVisibility(show ? View.GONE : View.VISIBLE); } }); searchProgress.setVisibility(show ? View.VISIBLE : View.GONE); searchProgress.animate() .setDuration(shortAnimTime) .alpha(show ? 1 : 0) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { searchProgress.setVisibility(show ? View.VISIBLE : View.GONE); } }); } else { // The ViewPropertyAnimator APIs are not available, so simply show // and hide the relevant UI components. searchProgress.setVisibility(show ? View.VISIBLE : View.GONE); searchWrapper.setVisibility(show ? View.GONE : View.VISIBLE); } } @Override protected void onResume() { super.onResume(); BusProvider.getInstance().register(this); } @Override protected void onPause() { super.onPause(); BusProvider.getInstance().unregister(this); } }