package vandy.mooc.view; import java.util.List; import vandy.mooc.R; import vandy.mooc.common.LifecycleLoggingActivity; import vandy.mooc.common.Utils; import vandy.mooc.model.aidl.AcronymExpansion; import vandy.mooc.MVP; import vandy.mooc.presenter.AcronymPresenter; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.EditText; /** * The main Activity that prompts the user for Acronyms to expand via * AcronymServiceSync and AcronymServiceAsync and view the results. * Extends LifecycleLoggingActivity so its lifecycle hook methods are * logged automatically. */ public class AcronymExpansionActivity extends LifecycleLoggingActivity implements MVP.RequiredViewOps { /** * Provides acronym-related operations. */ private AcronymPresenter mAcronymPresenter; /** * Acronym entered by the user. */ protected EditText mEditText; /** * 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) { // Always call super class for necessary // initialization/implementation. super.onCreate(savedInstanceState); // Get references to the UI components. setContentView(R.layout.acronym_expansion_activity); // Store the EditText that holds the urls entered by the user // (if any). mEditText = ((EditText) findViewById(R.id.editText1)); // Create the AcronymPresenter object one time. mAcronymPresenter = new AcronymPresenter(); mAcronymPresenter.onCreate(this); } /** * Hook method called by Android when this Activity is * destroyed. */ @Override protected void onDestroy() { // Destroy the presenter layer, passing in whether this is // triggered by a runtime configuration or not. mAcronymPresenter.onDestroy(isChangingConfigurations()); // Always call super class for necessary operations when an // Activity is destroyed. super.onDestroy(); } /** * Hook method invoked when the screen orientation changes. */ @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Forward to the configuration changed method. mAcronymPresenter.onConfigurationChanged(newConfig); } /* * Initiate the synchronous acronym lookup when the user presses * the "Look Up Sync" button. */ public void expandAcronymSync(View v) { // Hide the keyboard. Utils.hideKeyboard(this, mEditText.getWindowToken()); // Try to get an acronym entered by the user. final String acronym = Utils.uppercaseInput(this, mEditText.getText().toString().trim(), true); if (acronym != null) { Log.d(TAG, "calling expandAcronymSync() for " + acronym); // Synchronously expand the acronym. if (mAcronymPresenter.expandAcronymSync(acronym) == false) // Show error message to user. Utils.showToast(this, "Call already in progress"); // Return focus to edit box and select all text in it // after query. mEditText.requestFocus(); mEditText.selectAll(); } } /* * Initiate the asynchronous acronym lookup when the user presses * the "Look Up Async" button. */ public void expandAcronymAsync(View v) { // Hide the keyboard. Utils.hideKeyboard(this, mEditText.getWindowToken()); // Try to get an acronym entered by the user. final String acronym = Utils.uppercaseInput(this, mEditText.getText().toString().trim(), true); if (acronym != null) { Log.d(TAG, "calling expandAcronymAsync() for " + acronym); // Synchronously expand the acronym. if (mAcronymPresenter.expandAcronymAsync(acronym) == false) // Show error message to user. Utils.showToast(this, "Call already in progress"); // Return focus to edit box and select all text in it // after query. mEditText.requestFocus(); mEditText.selectAll(); } } /** * Start a new Activity that displays the Acronym Expansions to * the user. * * @param results * List of AcronymExpansions to display. */ @Override public void displayResults(List<AcronymExpansion> results, String errorMessage) { if (results == null) Utils.showToast(this, errorMessage); else { Log.d(TAG, "displayResults() with number of acronyms = " + results.size()); // Create an intent that will start an Activity to display // the Acronym Expansions to the user. final Intent intent = DisplayExpansionActivity.makeIntent(results); // Verify that the intent will resolve to an Activity. if (intent.resolveActivity(getPackageManager()) != null) // Start the DisplayAcronymExpansionsActivity with // this implicit intent. startActivity(intent); else // Show error message to user. Utils.showToast(this, "No Activity found to display Acronym Expansions"); } } /** * Return the Activity context. */ @Override public Context getActivityContext() { return this; } /** * If the activity is being torn down in order to be * recreated with a new configuration, returns true; * else returns false. */ @Override public boolean isChangingConfigurations() { return super.isChangingConfigurations(); } }