package com.fourtails.usuariolecturista;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast;
import com.fourtails.usuariolecturista.jobs.AssignMeterToUserBackendJob;
import com.fourtails.usuariolecturista.jobs.CheckIfUserHasMeterJob;
import com.fourtails.usuariolecturista.jobs.RegisterMeterBackendJob;
import com.fourtails.usuariolecturista.model.Meter;
import com.fourtails.usuariolecturista.ottoEvents.AndroidBus;
import com.fourtails.usuariolecturista.ottoEvents.AssignMeterToUserBackendEvent;
import com.fourtails.usuariolecturista.ottoEvents.CheckIfUserHasMeterEvent;
import com.fourtails.usuariolecturista.ottoEvents.RegisterMeterBackendEvent;
import com.orhanobut.logger.Logger;
import com.path.android.jobqueue.JobManager;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* This Activity tries to register the new created user and the meter into the
* inner database and also the backend
*/
public class MeterRegistrationActivity extends ActionBarActivity {
private static final String TAG = "MeterRegistration";
volatile boolean running;
private boolean meterExists = false;
ProgressDialog progressDialog;
String emailAsUserIdFromActivity;
JobManager jobManager;
Meter meter;
public static Bus bus;
@OnClick(R.id.buttonAddMeter)
public void clickedButtonAddMeter() {
registerMeter();
}
@Bind(R.id.editTextMeterNumber)
EditText meterNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
running = true;
setContentView(R.layout.activity_meter_registration);
ButterKnife.bind(this);
bus = new AndroidBus();
bus.register(this);
jobManager = FirstApplication.getInstance().getJobManager();
emailAsUserIdFromActivity = getIntent().getExtras().getString(ServiceChooserActivity.EXTRA_USER_EMAIL);
checkIfUserHasMeter();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (progressDialog != null) {
progressDialog.dismiss();
}
running = false;
}
/**
* DatabaseSave
* BackendCall
* checks if the user already has a meter linked to it
*/
private void checkIfUserHasMeter() {
if (running) {
progressDialog = ProgressDialog.show(MeterRegistrationActivity.this, getString(R.string.DialogTitleCheckingParameters), getString(R.string.DialogContentPleaseWait), true);
}
jobManager.addJobInBackground(new CheckIfUserHasMeterJob(emailAsUserIdFromActivity));
}
@Subscribe
public void checkIfUserHasMeterResponse(CheckIfUserHasMeterEvent event) {
meterExists = event.getMeterExists();
if (running) {
progressDialog.dismiss();
}
if (event.getResultCode() == 1) {
if (meterExists) {
setSharedPrefJmasMeterRegisteredTrue();
Intent intent = new Intent(MeterRegistrationActivity.this, MainActivity.class);
startActivity(intent);
finish();
Logger.i("BACKEND, Good-checkIfUserHasMeter");
}
}
}
/**
* Registers the meter in the database
*/
public void registerMeter() {
if (!meterExists) {
meter = new Meter(
meterNumber.getText().toString(),
0L,
"Cicasa",
null
);
registerMeterBackend(meter);
}
}
/**
* DatabaseSave
* BackendCall
* Tries to register the meter on the backend if successful it saves it into the database
*/
private void registerMeterBackend(Meter meter) {
progressDialog = ProgressDialog.show(MeterRegistrationActivity.this, getString(R.string.dialogTitleRegisterMeterBE), getString(R.string.DialogContentPleaseWait), true);
jobManager.addJobInBackground(new RegisterMeterBackendJob(meter.accountNumber));
}
@Subscribe
public void registerMeterBackendResponse(RegisterMeterBackendEvent event) {
if (event.getResultCode() == 1) {
Logger.i("BACKEND-registerMeter, Good-registerMeterBackend");
meter.save(); // we only save if successful
assignMeterToUserBackend(meter.accountNumber);
} else if (event.getResultCode() == 2) {
Toast.makeText(this, "El medidor ya esta registrado en otra cuenta", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}
/**
* BackendCall
* tries to assign the meter to the newly created user
*
* @param accountNumber the meterNumber
*/
private void assignMeterToUserBackend(String accountNumber) {
jobManager.addJobInBackground(new AssignMeterToUserBackendJob(accountNumber, emailAsUserIdFromActivity));
}
@Subscribe
public void assignMeterToUserBackendResponse(AssignMeterToUserBackendEvent event) {
progressDialog.dismiss();
if (event.getResultCode() == 1) {
Logger.i("BACKEND-assignMeter, Good-assignMeterToUserBackend");
setSharedPrefJmasMeterRegisteredTrue();
Intent intent = new Intent(MeterRegistrationActivity.this, MainActivity.class);
startActivity(intent);
finish();
} else if (event.getResultCode() == 99) {
Logger.e("BACKEND-assignMeter, Bad-assignMeterToUserBackend");
}
}
public void setSharedPrefJmasMeterRegisteredTrue() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(ServiceChooserActivity.PREF_METER_JMAS_REGISTERED, true); // there is one meter registered
editor.apply();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_meter_registration, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}