package com.mindtherobot.samples.asyncmvc; import static com.mindtherobot.samples.asyncmvc.controller.ControllerProtocol.*; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import com.mindtherobot.samples.asyncmvc.controller.Controller; import com.mindtherobot.samples.asyncmvc.model.Model; import com.mindtherobot.samples.asyncmvc.model.ModelData; public class DemoActivity extends Activity implements Handler.Callback, OnClickListener { private static final String TAG = DemoActivity.class.getSimpleName(); private Controller controller; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ((Button) findViewById(R.id.update)).setOnClickListener(this); ((Button) findViewById(R.id.quit)).setOnClickListener(this); controller = new Controller(new Model()); controller.addOutboxHandler(new Handler(this)); // messages will go to .handleMessage() controller.getInboxHandler().sendEmptyMessage(V_REQUEST_DATA); // request initial data } @Override protected void onDestroy() { // I think it is a good idea to not fail in onDestroy() try { controller.dispose(); } catch (Throwable t) { Log.e(TAG, "Failed to destroy the controller", t); } super.onDestroy(); } @Override public boolean handleMessage(Message msg) { Log.d(TAG, "Received message: " + msg); switch (msg.what) { case C_QUIT: onQuit(); return true; case C_DATA: onData((ModelData) msg.obj); return true; case C_UPDATE_STARTED: onUpdateStarted(); return true; case C_UPDATE_FINISHED: onUpdateFinished(); return true; } return false; } private void onUpdateStarted() { ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar); progressBar.setVisibility(View.VISIBLE); } private void onUpdateFinished() { ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar); progressBar.setVisibility(View.GONE); // request the updated data controller.getInboxHandler().sendEmptyMessage(V_REQUEST_DATA); } private void onData(ModelData data) { TextView dataView = (TextView) findViewById(R.id.data_view); dataView.setText("The answer is "+ data.getAnswer()); } private void onQuit() { Log.d(TAG, "Activity quitting"); finish(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.update: controller.getInboxHandler().sendEmptyMessage(V_REQUEST_UPDATE); break; case R.id.quit: controller.getInboxHandler().sendEmptyMessage(V_REQUEST_QUIT); break; } } }