package vandy.mooc.activities;
import java.util.List;
import java.util.Locale;
import vandy.mooc.R;
import vandy.mooc.operations.AcronymOps;
import vandy.mooc.retrofit.AcronymData.AcronymExpansion;
import vandy.mooc.utils.AcronymDataArrayAdapter;
import vandy.mooc.utils.GenericActivity;
import vandy.mooc.utils.Utils;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
/**
* This Activity prompts the user for Acronyms to expand via Retrofit
* and view via the results. Extends LifecycleLoggingActivity so its
* lifecycle hook methods are logged automatically.
*/
public class AcronymActivity extends GenericActivity<AcronymOps> {
/**
* Acronym entered by the user.
*/
protected EditText mEditText;
/**
* The ListView that will display the results to the user.
*/
private ListView mListView;
/**
* A custom ArrayAdapter used to display the list of AcronymData objects.
*/
private AcronymDataArrayAdapter mAdapter;
/**
* Hook method called when a new instance of Activity is created. One time
* initialization code goes here, e.g., runtime configuration changes.
*
* @param Bundle
* object that contains saved state information.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// Get references to the UI components.
setContentView(R.layout.main_activity);
// Store the EditText that holds the urls entered by the user
// (if any).
mEditText = (EditText) findViewById(R.id.editText1);
// Store the ListView for displaying the results entered.
mListView = (ListView) findViewById(R.id.listView1);
// Create a local instance of our custom Adapter for our
// ListView.
mAdapter = new AcronymDataArrayAdapter(this);
// Set the adapter to the ListView.
mListView.setAdapter(mAdapter);
// Always call super class for necessary
// initialization/implementation.
super.onCreate(savedInstanceState,
AcronymOps.class);
}
/**
* Initiate the synchronous acronym lookup when the user presses
* the "Look Up" button.
*/
public void expandAcronym(View v) {
// Get the acronym entered by the user and convert to so it's
// consistent with what we get back from the Acronym web
// service.
final String acronym =
mEditText.getText().toString().trim().toUpperCase(Locale.ENGLISH);
if (acronym.isEmpty())
Utils.showToast(this,
"no acronym provided");
else {
// Reset the display for the next acronym expansion.
resetDisplay();
// Expand the acronym.
getOps().expandAcronym(acronym);
}
mEditText.requestFocus();
mEditText.selectAll();
}
/**
* Display the acronym expansions to the user.
*
* @param results
* List of acronym expansions to display.
*/
public void displayResults(List<AcronymExpansion> results,
String errorMessage) {
Log.d(TAG, "results = " + results);
if (results == null
|| results.size() == 0)
Utils.showToast(this,
errorMessage);
else {
Log.d(TAG,
"displayResults() with number of acronyms = "
+ results.size());
// Add the results to the Adapter and notify changes.
mAdapter.clear();
mAdapter.addAll(results);
mAdapter.notifyDataSetChanged();
}
}
/**
* Reset the display prior to attempting to expand a new acronym.
*/
private void resetDisplay() {
Utils.hideKeyboard(this,
mEditText.getWindowToken());
mAdapter.clear();
mAdapter.notifyDataSetChanged();
}
}