package com.octo.android.robospice.sample.springandroid; 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.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.Toast; import com.octo.android.robospice.JacksonSpringAndroidSpiceService; import com.octo.android.robospice.SpiceManager; import com.octo.android.robospice.persistence.DurationInMillis; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; import com.octo.android.robospice.sample.springandroid.model.Follower; import com.octo.android.robospice.sample.springandroid.model.FollowerList; public class MainActivity extends Activity { private static final String KEY_LAST_REQUEST_CACHE_KEY = "lastRequestCacheKey"; private SpiceManager spiceManager = new SpiceManager( JacksonSpringAndroidSpiceService.class); private ArrayAdapter<String> followersAdapter; private String lastRequestCacheKey; @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 searchButton = (Button) findViewById(R.id.search_button); final EditText searchQuery = (EditText) findViewById(R.id.search_field); ListView followersList = (ListView) findViewById(R.id.search_results); followersAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1); followersList.setAdapter(followersAdapter); searchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { performRequest(searchQuery.getText().toString()); // clear focus LinearLayout linearLayout = (LinearLayout) findViewById(R.id.search_layout); linearLayout.requestFocus(); // hide keyboard InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchQuery.getWindowToken(), 0); } }); } private void performRequest(String user) { MainActivity.this.setProgressBarIndeterminateVisibility(true); FollowersRequest request = new FollowersRequest(user); lastRequestCacheKey = request.createCacheKey(); spiceManager.execute(request, lastRequestCacheKey, DurationInMillis.ONE_MINUTE, new ListFollowersRequestListener()); } @Override protected void onSaveInstanceState(Bundle outState) { if (!TextUtils.isEmpty(lastRequestCacheKey)) { outState.putString(KEY_LAST_REQUEST_CACHE_KEY, lastRequestCacheKey); } super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); if (savedInstanceState.containsKey(KEY_LAST_REQUEST_CACHE_KEY)) { lastRequestCacheKey = savedInstanceState .getString(KEY_LAST_REQUEST_CACHE_KEY); spiceManager.addListenerIfPending(FollowerList.class, lastRequestCacheKey, new ListFollowersRequestListener()); spiceManager.getFromCache(FollowerList.class, lastRequestCacheKey, DurationInMillis.ONE_MINUTE, new ListFollowersRequestListener()); } } private class ListFollowersRequestListener implements RequestListener<FollowerList> { @Override public void onRequestFailure(SpiceException e) { Toast.makeText(MainActivity.this, "Error during request: " + e.getLocalizedMessage(), Toast.LENGTH_LONG) .show(); MainActivity.this.setProgressBarIndeterminateVisibility(false); } @Override public void onRequestSuccess(FollowerList listFollowers) { // listFollowers could be null just if contentManager.getFromCache(...) // doesn't return anything. if (listFollowers == null) { return; } followersAdapter.clear(); for (Follower follower : listFollowers) { followersAdapter.add(follower.getLogin()); } followersAdapter.notifyDataSetChanged(); MainActivity.this.setProgressBarIndeterminateVisibility(false); } } }