package org.sana.android.activity; import org.sana.R; import org.sana.android.Constants; import org.sana.android.app.Locales; import org.sana.android.content.DispatchResponseReceiver; import org.sana.android.content.Uris; import org.sana.android.content.core.PatientWrapper; import org.sana.android.db.PatientInfo; import org.sana.android.fragment.PatientRunnerFragment; import org.sana.android.media.EducationResource; import org.sana.android.net.MDSInterface; import org.sana.android.provider.Encounters; import org.sana.android.provider.Events; import org.sana.android.provider.Patients; import org.sana.android.provider.Subjects; import org.sana.android.service.impl.DispatchService; import org.sana.android.util.UserDatabase; import org.sana.core.Patient; import org.sana.net.Response; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.Bundle; import android.os.PatternMatcher; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import java.io.UnsupportedEncodingException; /** Activity for creating a new patient. Each question is wrapped in a container * which presents buttons for paging. * * @author Sana Development Team */ public class PatientRunner extends BaseRunner { public static final String TAG = PatientRunner.class.getSimpleName(); private PatientRunnerFragment mFragmentPatientRunner; /** {@inheritDoc} */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.patient_runner_activity); } /** {@inheritDoc} */ @Override public void onAttachFragment(Fragment fragment) { super.onAttachFragment(fragment); if (fragment.getClass() == PatientRunnerFragment.class) { //mFragmentPatientRunner = (PatientRunnerFragment) fragment; mRunnerFragment = (PatientRunnerFragment) fragment; mRunnerFragment.setProcedureListener(this); } } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); Locales.updateLocale(this, getString(R.string.force_locale)); menu.add(0, OPTION_DISCARD_EXIT, 1, getString(R.string.menu_discard_exit)); menu.add(0, OPTION_VIEW_PAGES, 2, getString(R.string.menu_view_pages)); return true; } @Override public IntentFilter buildFilter(){ Log.i(TAG, "buildFilter()"); IntentFilter filter = new IntentFilter(Response.RESPONSE); filter.addDataScheme(Subjects.CONTENT_URI.getScheme()); try { filter.addDataType(Subjects.CONTENT_ITEM_TYPE); filter.addDataType(Subjects.CONTENT_TYPE); } catch (Exception e) { } return filter; } @Override protected void handleBroadcastResultSuccess(Intent intent){ Log.i(TAG, "handleBroadcastResultSuccess(Intent)"); setUploading(false); hideUploadingDialog(); Log.d(TAG, "...broadcast=" + intent.toUri(Intent.URI_INTENT_SCHEME)); Response.Code code = Response.Code.get(intent.getIntExtra( Response.CODE, Response.Code.UNKNOWN.code)); switch (code) { case OK: onReadSuccess(intent); break; case CREATED: onCreateSuccess(intent); break; case UPDATED: onUpdateSuccess(intent); break; default: Log.d(TAG,"...unhandled response code"); } } @Override protected void handleBroadcastResultFailure(Intent intent){ Log.i(TAG, "handleBroadcastResultFailure(Intent)"); setUploading(false); hideUploadingDialog(); onReadFailure(intent); } public void onProcedureComplete(Intent data){ Log.i(TAG, "onProcedureComplete(): " + data); startService(data); setResult(RESULT_OK,data); finish(); } @Override public void onProcedureCancelled(String message){ Log.i(TAG, "onProcedureComplete(): " + message); setResult(RESULT_CANCELED,null); finish(); } protected void onCreateSuccess(Intent intent){ Log.i(TAG,"onCreateSuccess(Intent)"); ((PatientRunnerFragment) mRunnerFragment).onCreateSuccess(intent); } protected void onCreateFailure(Intent intent){ Log.i(TAG,"onCreateFailure(Intent)"); } protected void onReadSuccess(Intent intent){ Log.i(TAG,"onReadSuccess(Intent)"); try { Uri data = intent.getData(); String systemId = data.getQueryParameter(Patients.Contract.PATIENT_ID); Log.d(TAG, "...system_id=" + systemId); if (!TextUtils.isEmpty(systemId)) { ((PatientRunnerFragment) mRunnerFragment).onPatientLookupSuccess (systemId); } else { Log.w(TAG, "...directory code. do nothing"); } } catch (Exception e) { e.printStackTrace(); onReadFailure(intent); } } protected void onReadFailure(Intent intent){ Log.i(TAG,"onReadFailure(Intent)"); try { Uri data = intent.getData(); String systemId = data.getQueryParameter(Patients.Contract.PATIENT_ID); Log.d(TAG, "...system_id=" + systemId); if(!TextUtils.isEmpty(systemId)) { ((PatientRunnerFragment) mRunnerFragment).onPatientLookupFailure( systemId); } } catch (Exception e) { e.printStackTrace(); } } protected void onUpdateSuccess(Intent intent){ Log.i(TAG,"onUpdateSuccess(Intent)"); ((PatientRunnerFragment) mRunnerFragment).onCreateSuccess(intent); } protected void onUpdateFailure(Intent intent){ Log.i(TAG,"onUpdateFailure(Intent)"); } }