package oraculum.droid.ui;
import java.util.UUID;
import oraculum.droid.R;
import oraculum.droid.provider.DroidHDContract;
import oraculum.droid.provider.DroidHDContract.Clientes;
import oraculum.droid.ui.ClientesFragment.ClientesQuery;
import oraculum.droid.util.DialogsTools;
import oraculum.droid.util.NotifyingAsyncQueryHandler;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class ClientesDetailFragment extends Fragment implements
NotifyingAsyncQueryHandler.AsyncQueryListener,
CompoundButton.OnCheckedChangeListener{
private Uri mClienteUri;
private Clientes cliente;
private ViewGroup mRootView;
private NotifyingAsyncQueryHandler mCliente;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = BaseActivity
.fragmentArgumentsToIntent(getArguments());
mClienteUri = intent.getData();
if (mClienteUri == null) {
return;
}
setHasOptionsMenu(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (mClienteUri == null) {
return;
}
if ( Clientes.isNewUri(mClienteUri) ) {
// Create one new Familia object
cliente = new Clientes();
//updateEnderecoDetailFragment();
return;
} else {
mCliente = new NotifyingAsyncQueryHandler(getActivity()
.getContentResolver(), this);
mCliente.startQuery(ClienteQuery._TOKEN, mClienteUri,
ClienteQuery.PROJECTION);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mRootView = (ViewGroup) inflater.inflate(
R.layout.clientes_form, null);
Button btnSalvar = (Button) mRootView.findViewById(R.id.btnSalvar);
btnSalvar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
onSave();
}
});
Button btnVoltar = (Button) mRootView.findViewById(R.id.btnVoltar);
btnVoltar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
redirectListClientes();
}
});
Button btnApagar = (Button) mRootView.findViewById(R.id.btnApagar);
if ( Clientes.isNewUri(mClienteUri) ) {
btnApagar.setVisibility(View.INVISIBLE);
}
else {
btnApagar.setVisibility(View.VISIBLE);
btnApagar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showAlertDel();
}
});
}
// Load UF list
final Spinner ufSpinner = (Spinner) mRootView.findViewById(R.id.spEstado);
final ArrayAdapter<CharSequence> ufApapter = ArrayAdapter.createFromResource(mRootView.getContext(), R.array.UfLabels, android.R.layout.simple_spinner_item);
ufSpinner.setAdapter(ufApapter);
// definindo rio como default
ufSpinner.setSelection(18);
return mRootView;
}
private Boolean validateCliente() {
try {
cliente.nome = ((EditText)mRootView.findViewById(R.id.txtNome)).getText().toString();
cliente.tel = ((EditText)mRootView.findViewById(R.id.txtTel)).getText().toString();
cliente.tel2 = ((EditText)mRootView.findViewById(R.id.txtTel2)).getText().toString();
cliente.email = ((EditText)mRootView.findViewById(R.id.txtEmail)).getText().toString();
cliente.end = ((EditText)mRootView.findViewById(R.id.txtEnd)).getText().toString();
cliente.num = ((EditText)mRootView.findViewById(R.id.txtNum)).getText().toString();
cliente.comp = ((EditText)mRootView.findViewById(R.id.txtComp)).getText().toString();
cliente.bairro = ((EditText)mRootView.findViewById(R.id.txtBairro)).getText().toString();
cliente.cidade = ((EditText)mRootView.findViewById(R.id.txtCidade)).getText().toString();
cliente.cep = ((EditText)mRootView.findViewById(R.id.txtCEP)).getText().toString();
int ufPosition = ((Spinner)mRootView.findViewById(R.id.spEstado)).getSelectedItemPosition();
cliente.estado = mRootView.getResources().getStringArray(R.array.UfValues)[ufPosition];
cliente._id = UUID.randomUUID().toString();
return cliente.isValid();
} catch (Exception e) {
DialogsTools.showWarnDialog(getActivity(), "Aviso", e.toString());
}
return false;
}
private void onSave() {
if (validateCliente()) {
mCliente = new NotifyingAsyncQueryHandler(getActivity()
.getContentResolver(), this);
// Save or Update
if ( Clientes.isNewUri(mClienteUri)) {
mCliente.startInsert(mClienteUri, cliente.toContentValues());
} else {
mCliente.startUpdate(mClienteUri, cliente.toContentValues());
}
Toast.makeText(getActivity(), R.string.save_cliente,
Toast.LENGTH_SHORT).show();
redirectListClientes();
}
}
private void showAlertDel() {
AlertDialog.Builder delAlert = new AlertDialog.Builder(getActivity())
.setTitle(R.string.alerta_title)
.setIcon(android.R.drawable.ic_delete)
.setMessage(getString(R.string.alerta_text))
.setCancelable(false)
.setPositiveButton(R.string.accept,
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
onDelete();
dialog.dismiss();
}
})
.setNegativeButton(R.string.decline,
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
delAlert.show();
}
private void onDelete() {
mCliente.startDelete(mClienteUri);
Toast.makeText(getActivity(), R.string.del_cliente,
Toast.LENGTH_SHORT).show();
redirectListClientes();
}
private void redirectListClientes() {
final Intent intent = new Intent(Intent.ACTION_VIEW, Clientes.CONTENT_URI);
intent.putExtra(Intent.EXTRA_TITLE, getString(R.string.title_list_clientes));
startActivity(intent);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
}
@Override
public void onQueryComplete(int token, Object cookie, Cursor cursor) {
if (getActivity() == null) {
return;
}
if (token == ClientesQuery._TOKEN) {
try {
cliente = new Clientes();
if (!cursor.moveToFirst()) {
return;
}
cliente._id = (cursor.getString(ClienteQuery.cliente_id));
cliente.nome = (cursor.getString(ClienteQuery.nome));
cliente.tel = (cursor.getString(ClienteQuery.tel));
cliente.tel2 = (cursor.getString(ClienteQuery.tel2));
cliente.email = (cursor.getString(ClienteQuery.email));
cliente.end = (cursor.getString(ClienteQuery.end));
cliente.num = (cursor.getString(ClienteQuery.num));
cliente.comp = (cursor.getString(ClienteQuery.comp));
cliente.bairro = (cursor.getString(ClienteQuery.bairro));
cliente.cidade = (cursor.getString(ClienteQuery.cidade));
cliente.estado = (cursor.getString(ClienteQuery.estado));
cliente.cep = (cursor.getString(ClienteQuery.cep));
updateClienteDetailFragment();
} finally {
cursor.close();
}
}
}
private void updateClienteDetailFragment() {
final EditText nomeText = (EditText) mRootView
.findViewById(R.id.txtNome);
final EditText telText = (EditText) mRootView
.findViewById(R.id.txtTel);
final EditText tel2Text = (EditText) mRootView
.findViewById(R.id.txtTel2);
final EditText emailText = (EditText) mRootView
.findViewById(R.id.txtEmail);
final EditText endText = (EditText) mRootView
.findViewById(R.id.txtEnd);
final EditText numText = (EditText) mRootView
.findViewById(R.id.txtNum);
final EditText compText = (EditText) mRootView
.findViewById(R.id.txtComp);
final EditText bairroText = (EditText) mRootView
.findViewById(R.id.txtBairro);
final EditText cidadeText = (EditText) mRootView
.findViewById(R.id.txtCidade);
final EditText cepText = (EditText) mRootView
.findViewById(R.id.txtCEP);
// Load UF list
final Spinner estadoSpinner = (Spinner) mRootView.findViewById(R.id.spEstado);
final ArrayAdapter<CharSequence> estadoApapter = ArrayAdapter.createFromResource(mRootView.getContext(), R.array.UfLabels, android.R.layout.simple_spinner_item);
estadoSpinner.setAdapter(estadoApapter);
nomeText.setText(cliente.nome);
telText.setText(cliente.tel);
tel2Text.setText(cliente.tel2);
emailText.setText(cliente.email);
endText.setText(cliente.end);
numText.setText(cliente.num);
compText.setText(cliente.comp);
bairroText.setText(cliente.bairro);
cidadeText.setText(cliente.cidade);
cepText.setText(cliente.cep);
String[] estadoValues = mRootView.getResources().getStringArray(R.array.UfValues);
for ( int i = 0; i < estadoValues.length; i++ ) {
if ( estadoValues[i].equals(cliente.estado) ) {
estadoSpinner.setSelection(i);
break;
}
}
}
/** {@link oraculum.droid.provider.DroidHDContract.Clientes} query parameters. */
public interface ClienteQuery {
int _TOKEN = 0x1;
String[] PROJECTION = {
DroidHDContract.Clientes.cliente_id,
DroidHDContract.Clientes.cliente_nome,
DroidHDContract.Clientes.cliente_tel,
DroidHDContract.Clientes.cliente_tel2,
DroidHDContract.Clientes.cliente_email,
DroidHDContract.Clientes.cliente_end,
DroidHDContract.Clientes.cliente_num,
DroidHDContract.Clientes.cliente_comp,
DroidHDContract.Clientes.cliente_bairro,
DroidHDContract.Clientes.cliente_cidade,
DroidHDContract.Clientes.cliente_estado,
DroidHDContract.Clientes.cliente_cep,
};
int cliente_id = 0;
int nome = 1;
int tel = 2;
int tel2 = 3;
int email = 4;
int end = 5;
int num = 6;
int comp = 7;
int bairro = 8;
int cidade = 9;
int estado = 10;
int cep = 11;
}
}