/**
* 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.ui.DataDroidActivity;
import com.foxykeep.datadroidpoc.util.UserManager;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public final class CrudSyncPhoneAddEditActivity extends DataDroidActivity implements
RequestListener, OnClickListener, TextWatcher, ConnectionErrorDialogListener {
public static final String INTENT_EXTRA_PHONE = "com.foxykeep.datadroidpoc.ui.extra.phone";
private EditText mEditTextName;
private EditText mEditTextManufacturer;
private EditText mEditTextAndroidVersion;
private EditText mEditTextScreenSize;
private EditText mEditTextPrice;
private Button mButtonSubmit;
private String mUserId;
private Phone mPhone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.crud_phone_add_edit);
bindViews();
mUserId = UserManager.getUserId(this);
Intent intent = getIntent();
if (intent != null) {
mPhone = intent.getParcelableExtra(INTENT_EXTRA_PHONE);
}
setTitle(mPhone == null ? R.string.crud_sync_phone_add_title
: R.string.crud_sync_phone_edit_title);
populateViews();
}
@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);
}
}
private void bindViews() {
mEditTextName = (EditText) findViewById(R.id.et_name);
mEditTextName.addTextChangedListener(this);
mEditTextManufacturer = (EditText) findViewById(R.id.et_manufacturer);
mEditTextManufacturer.addTextChangedListener(this);
mEditTextAndroidVersion = (EditText) findViewById(R.id.et_android_version);
mEditTextAndroidVersion.addTextChangedListener(this);
mEditTextScreenSize = (EditText) findViewById(R.id.et_screen_size);
mEditTextScreenSize.addTextChangedListener(this);
mEditTextPrice = (EditText) findViewById(R.id.et_price);
mEditTextPrice.addTextChangedListener(this);
mButtonSubmit = (Button) findViewById(R.id.b_submit);
mButtonSubmit.setOnClickListener(this);
}
private void populateViews() {
if (mPhone != null) {
mEditTextName.setText(mPhone.name);
mEditTextManufacturer.setText(mPhone.manufacturer);
mEditTextAndroidVersion.setText(mPhone.androidVersion);
mEditTextScreenSize.setText(String.valueOf(mPhone.screenSize));
mEditTextPrice.setText(String.valueOf(mPhone.price));
}
}
private void callSyncPhoneAddWS() {
new ProgressDialogFragmentBuilder(this)
.setMessage(R.string.progress_dialog_message)
.setCancelable(true)
.show();
Request request = PoCRequestFactory.addSyncPhoneRequest(
mUserId,
mEditTextName.getText().toString(),
mEditTextManufacturer.getText().toString(),
mEditTextAndroidVersion.getText().toString(),
Double.parseDouble(mEditTextScreenSize.getText().toString()),
Integer.parseInt(mEditTextPrice.getText().toString()));
mRequestManager.execute(request, this);
mRequestList.add(request);
}
private void callSyncPhoneEditWS() {
new ProgressDialogFragmentBuilder(this)
.setMessage(R.string.progress_dialog_message)
.setCancelable(true)
.show();
Request request = PoCRequestFactory.editSyncPhoneRequest(
mUserId,
mPhone.serverId,
mEditTextName.getText().toString(),
mEditTextManufacturer.getText().toString(),
mEditTextAndroidVersion.getText().toString(),
Double.parseDouble(mEditTextScreenSize.getText().toString()),
Integer.parseInt(mEditTextPrice.getText().toString()));
mRequestManager.execute(request, this);
mRequestList.add(request);
}
@Override
public void onClick(View view) {
if (view == mButtonSubmit) {
if (mPhone == null) {
callSyncPhoneAddWS();
} else {
callSyncPhoneEditWS();
}
}
}
@Override
public void afterTextChanged(Editable s) {
mButtonSubmit.setEnabled(!TextUtils.isEmpty(mEditTextName.getText().toString())
&& !TextUtils.isEmpty(mEditTextManufacturer.getText().toString())
&& !TextUtils.isEmpty(mEditTextAndroidVersion.getText().toString())
&& !TextUtils.isEmpty(mEditTextScreenSize.getText().toString())
&& !TextUtils.isEmpty(mEditTextPrice.getText().toString()));
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void onRequestFinished(Request request, Bundle resultData) {
if (mRequestList.contains(request)) {
ProgressDialogFragment.dismiss(this);
mRequestList.remove(request);
switch(request.getRequestType()) {
case PoCRequestFactory.REQUEST_TYPE_CRUD_SYNC_PHONE_ADD: {
Phone phone = resultData.getParcelable(
PoCRequestFactory.BUNDLE_EXTRA_PHONE_ADD_EDIT_DATA);
Intent intent = new Intent();
intent.putExtra(CrudSyncPhoneListActivity.RESULT_EXTRA_ADDED_PHONE, phone);
setResult(RESULT_OK, intent);
finish();
break;
}
case PoCRequestFactory.REQUEST_TYPE_CRUD_SYNC_PHONE_EDIT: {
Phone phone = resultData.getParcelable(
PoCRequestFactory.BUNDLE_EXTRA_PHONE_ADD_EDIT_DATA);
Intent intent = new Intent();
intent.putExtra(CrudSyncPhoneListActivity.RESULT_EXTRA_EDITED_PHONE, phone);
setResult(RESULT_OK, intent);
finish();
break;
}
}
}
}
@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) {
int requestType = request.getRequestType();
if (requestType == PoCRequestFactory.REQUEST_TYPE_CRUD_SYNC_PHONE_ADD) {
callSyncPhoneAddWS();
} else if (requestType == PoCRequestFactory.REQUEST_TYPE_CRUD_SYNC_PHONE_EDIT) {
callSyncPhoneEditWS();
}
}
}