/** * 2011 Foxykeep (http://datadroid.foxykeep.com) * <p> * Licensed under the Beerware License : <br /> * As long as you retain this notice you can do whatever you want with this stuff. If we meet some * day, and you think this stuff is worth it, you can buy me a beer in return */ package com.foxykeep.datadroidpoc.ui.crud; import com.foxykeep.datadroid.requestmanager.Request; import com.foxykeep.datadroid.requestmanager.RequestManager.RequestListener; import com.foxykeep.datadroidpoc.R; import com.foxykeep.datadroidpoc.data.model.Phone; import com.foxykeep.datadroidpoc.data.requestmanager.PoCRequestFactory; import com.foxykeep.datadroidpoc.dialogs.ConnectionErrorDialogFragment; import com.foxykeep.datadroidpoc.dialogs.ConnectionErrorDialogFragment.ConnectionErrorDialogListener; import com.foxykeep.datadroidpoc.dialogs.ProgressDialogFragment; import com.foxykeep.datadroidpoc.dialogs.ProgressDialogFragment.ProgressDialogFragmentBuilder; import com.foxykeep.datadroidpoc.dialogs.QuestionDialogFragment.QuestionDialogFragmentBuilder; import com.foxykeep.datadroidpoc.ui.DataDroidActivity; import com.foxykeep.datadroidpoc.util.UserManager; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.TextView; public final class CrudSyncPhoneViewActivity extends DataDroidActivity implements RequestListener, ConnectionErrorDialogListener { private static final String SAVED_STATE_PHONE = "savedStatePhone"; private static final String SAVED_STATE_IS_PHONE_EDITED = "savedStateIsPhoneEdited"; public static final String INTENT_EXTRA_PHONE = "com.foxykeep.datadroidpoc.ui.extra.phone"; private static final int ACTIVITY_FOR_RESULT_EDIT = 1; public static final String RESULT_EXTRA_EDITED_PHONE = "resultExtraEditedPhone"; private Phone mPhone; private boolean mIsPhoneEdited; private String mUserId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.crud_phone_view); Intent intent = getIntent(); if (savedInstanceState != null) { mPhone = savedInstanceState.getParcelable(SAVED_STATE_PHONE); mIsPhoneEdited = savedInstanceState.getBoolean(SAVED_STATE_IS_PHONE_EDITED); } else if (intent != null) { mPhone = intent.getParcelableExtra(INTENT_EXTRA_PHONE); mIsPhoneEdited = false; } populateViews(); mUserId = UserManager.getUserId(this); } @Override protected void onResume() { super.onResume(); for (int i = 0; i < mRequestList.size(); i++) { Request request = mRequestList.get(i); if (mRequestManager.isRequestInProgress(request)) { mRequestManager.addRequestListener(this, request); } else { ProgressDialogFragment.dismiss(this); mRequestManager.callListenerWithCachedData(this, request); i--; mRequestList.remove(request); } } } @Override protected void onPause() { super.onPause(); if (!mRequestList.isEmpty()) { mRequestManager.removeRequestListener(this); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable(SAVED_STATE_PHONE, mPhone); outState.putBoolean(SAVED_STATE_IS_PHONE_EDITED, mIsPhoneEdited); } private void populateViews() { ((TextView) findViewById(R.id.tv_name)).setText(mPhone.name); ((TextView) findViewById(R.id.tv_manufacturer)).setText(mPhone.manufacturer); ((TextView) findViewById(R.id.tv_android_version)).setText(mPhone.androidVersion); ((TextView) findViewById(R.id.tv_screen_size)).setText(getString( R.string.crud_phone_view_tv_screen_size_format, mPhone.screenSize)); ((TextView) findViewById(R.id.tv_price)).setText(getString( R.string.crud_phone_view_tv_price_format, mPhone.price)); } private void callSyncPhoneDeleteWS() { new ProgressDialogFragmentBuilder(this) .setMessage(R.string.progress_dialog_message) .setCancelable(true) .show(); Request request = PoCRequestFactory.deleteSyncPhonesRequest(mUserId, String.valueOf(mPhone.serverId)); mRequestManager.execute(request, this); mRequestList.add(request); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case ACTIVITY_FOR_RESULT_EDIT: if (resultCode == RESULT_OK) { mPhone = data.getParcelableExtra(RESULT_EXTRA_EDITED_PHONE); mIsPhoneEdited = true; populateViews(); } break; default: super.onActivityResult(requestCode, resultCode, data); break; } } @Override public void onBackPressed() { if (mIsPhoneEdited) { Intent resultData = new Intent(); resultData.putExtra(CrudSyncPhoneListActivity.RESULT_EXTRA_EDITED_PHONE, mPhone); setResult(RESULT_OK, resultData); } super.onBackPressed(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.crud_phone_view, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch (itemId) { case R.id.menu_edit: { Intent intent = new Intent(this, CrudSyncPhoneAddEditActivity.class); intent.putExtra(CrudSyncPhoneAddEditActivity.INTENT_EXTRA_PHONE, mPhone); startActivityForResult(intent, ACTIVITY_FOR_RESULT_EDIT); return true; } case R.id.menu_delete: { QuestionDialogFragmentBuilder b = new QuestionDialogFragmentBuilder(this); b.setTitle(R.string.crud_phone_view_dialog_delete_confirm_title); b.setMessage(getString(R.string.crud_phone_view_dialog_delete_confirm_message, mPhone.name)); b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callSyncPhoneDeleteWS(); } }); b.setNegativeButton(android.R.string.cancel, null); b.show(); return true; } default: return super.onContextItemSelected(item); } } @Override public void onRequestFinished(Request request, Bundle resultData) { if (mRequestList.contains(request)) { ProgressDialogFragment.dismiss(this); mRequestList.remove(request); long[] syncDeletedPhoneIdArray = resultData .getLongArray(PoCRequestFactory.BUNDLE_EXTRA_PHONE_DELETE_DATA); Intent data = new Intent(); data.putExtra(CrudSyncPhoneListActivity.RESULT_EXTRA_DELETED_PHONE_ID, syncDeletedPhoneIdArray[0]); setResult(RESULT_OK, data); finish(); } } @Override public void onRequestConnectionError(Request request, int statusCode) { if (mRequestList.contains(request)) { ProgressDialogFragment.dismiss(this); mRequestList.remove(request); ConnectionErrorDialogFragment.show(this, request, this); } } @Override public void onRequestDataError(Request request) { if (mRequestList.contains(request)) { ProgressDialogFragment.dismiss(this); mRequestList.remove(request); showBadDataErrorDialog(); } } @Override public void onRequestCustomError(Request request, Bundle resultData) { // Never called. } @Override public void connectionErrorDialogCancel(Request request) {} @Override public void connectionErrorDialogRetry(Request request) { callSyncPhoneDeleteWS(); } }