package org.commcare.activities; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.TextView; import org.commcare.CommCareApp; import org.commcare.CommCareApplication; import org.commcare.dalvik.R; import org.commcare.android.database.global.models.ApplicationRecord; import org.commcare.utils.MultipleAppsUtil; import org.javarosa.core.services.locale.Localization; /** * Activity to perform asynchronous initialization of an application * * @author amstone */ public class SeatAppActivity extends Activity { private static final String KEY_IN_PROGRESS = "initialization_in_progress"; public final static String KEY_APP_TO_SEAT = "app_to_seat"; private boolean inProgress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.screen_seat_app); TextView tv = (TextView)findViewById(R.id.text); tv.setText(Localization.get("seating.app")); inProgress = savedInstanceState != null && savedInstanceState.getBoolean(KEY_IN_PROGRESS, false); if (!inProgress) { String idOfAppToSeat = getIntent().getStringExtra(KEY_APP_TO_SEAT); ApplicationRecord record = MultipleAppsUtil.getAppById(idOfAppToSeat); if (record == null) { // No record was found for the given id Intent i = new Intent(getIntent()); setResult(RESULT_CANCELED, i); finish(); } ThreadHandler handler = new ThreadHandler(this); Thread t = new Thread(new SeatAppProcess(record, handler)); setInProgress(true); t.start(); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(KEY_IN_PROGRESS, inProgress); } @Override public void onBackPressed() { // Make it impossible to quit in the middle of this activity } private void setInProgress(boolean b) { this.inProgress = b; } private static class ThreadHandler extends Handler { private final SeatAppActivity activity; public ThreadHandler(SeatAppActivity a) { this.activity = a; } @Override public void handleMessage(Message msg) { activity.setInProgress(false); Intent i = new Intent(activity.getIntent()); activity.setResult(RESULT_OK, i); activity.finish(); } } private static class SeatAppProcess implements Runnable { private final ApplicationRecord record; private final ThreadHandler handler; public SeatAppProcess(ApplicationRecord record, ThreadHandler handler) { this.record = record; this.handler = handler; } @Override public void run() { CommCareApplication.instance().initializeAppResources(new CommCareApp(this.record)); handler.sendEmptyMessage(0); } } }