package com.octo.android.robospice.sample.okhttp;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.octo.android.robospice.SpiceManager;
import com.octo.android.robospice.UncachedSpiceService;
import com.octo.android.robospice.persistence.exception.SpiceException;
import com.octo.android.robospice.request.listener.RequestListener;
import com.octo.android.robospice.sample.basic.R;
public class MainActivity extends Activity {
private static final String KEY_RESULT = "result";
/***
* With {@link UncachedSpiceService} there is no cache management. Remember to declare it in
* AndroidManifest.xml
*/
private SpiceManager spiceManager = new SpiceManager(SampleOkHttpSpiceService.class);
private TextView resultTextView;
private EditText wordField;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
initUIComponents();
}
@Override
protected void onStart() {
spiceManager.start(this);
super.onStart();
}
@Override
protected void onStop() {
spiceManager.shouldStop();
super.onStop();
}
private void initUIComponents() {
Button reverseButton = (Button) findViewById(R.id.reverse_button);
wordField = (EditText) findViewById(R.id.word_field);
resultTextView = (TextView) findViewById(R.id.result);
reverseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
performRequest(wordField.getText().toString());
}
});
}
private void performRequest(String searchQuery) {
resultTextView.setText("");
MainActivity.this.setProgressBarIndeterminateVisibility(true);
ReverseStringRequest request = new ReverseStringRequest(searchQuery);
spiceManager.execute(request, new ReverseStringRequestListener());
hideKeyboard();
}
private void hideKeyboard() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(wordField.getWindowToken(), 0);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.container);
linearLayout.requestFocus();
}
private final class ReverseStringRequestListener implements RequestListener<String> {
@Override
public void onRequestFailure(SpiceException spiceException) {
Toast.makeText(MainActivity.this, "Error: " + spiceException.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onRequestSuccess(String result) {
MainActivity.this.setProgressBarIndeterminateVisibility(false);
resultTextView.setText(getString(R.string.result_text, result));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
String result = resultTextView.getText().toString();
if (!TextUtils.isEmpty(result)) {
outState.putString(KEY_RESULT, result);
}
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
spiceManager.addListenerIfPending(String.class, null, new ReverseStringRequestListener());
if (savedInstanceState.containsKey(KEY_RESULT)) {
String result = savedInstanceState.getString(KEY_RESULT);
resultTextView.setText(result);
}
super.onRestoreInstanceState(savedInstanceState);
}
}