package bg.mentormate.academy.radarapp.activities;
import android.content.Intent;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import com.parse.ParseException;
import com.parse.ParseGeoPoint;
import java.util.ArrayList;
import bg.mentormate.academy.radarapp.R;
import bg.mentormate.academy.radarapp.data.LocalDb;
import bg.mentormate.academy.radarapp.models.UserDetail;
import bg.mentormate.academy.radarapp.models.Follow;
import bg.mentormate.academy.radarapp.models.User;
import bg.mentormate.academy.radarapp.tools.NotificationHelper;
public class RegisterActivity extends ActionBarActivity implements View.OnClickListener {
private EditText mEtUsername;
private EditText mEtPassword;
private EditText mEtEmail;
private Button mBtnRegister;
private Button mBtnCancel;
private ProgressBar mProgresBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
getSupportActionBar().hide();
init();
}
private void init() {
mEtUsername = (EditText) findViewById(R.id.etUsername);
mEtPassword = (EditText) findViewById(R.id.etPassword);
mEtEmail = (EditText) findViewById(R.id.etEmail);
mBtnRegister = (Button) findViewById(R.id.btnRegister);
mBtnCancel = (Button) findViewById(R.id.btnCancel);
mProgresBar = (ProgressBar) findViewById(R.id.progressBar);
mBtnRegister.setOnClickListener(this);
mBtnCancel.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btnRegister:
register();
break;
case R.id.btnCancel:
finish();
break;
}
}
private void register() {
String username = mEtUsername.getText().toString().trim();
String password = mEtPassword.getText().toString().trim();
String email = mEtEmail.getText().toString().trim();
if (username.isEmpty() || password.isEmpty() || email.isEmpty()) {
// The inputs are empty, show an alert
NotificationHelper.alert(this, getString(R.string.dialog_error_title),
getString(R.string.signup_invalid_inputs_message));
} else {
// Create the new user in Parse.com
createUser(username, password, email);
}
}
private void createUser(String username, String password, String email) {
CreateUserTask createUserTask = new CreateUserTask();
createUserTask.execute(username, password, email);
}
private void hideProgressBar() {
mProgresBar.setVisibility(View.GONE);
}
private void showProgressBar() {
mProgresBar.setVisibility(View.VISIBLE);
}
private void goToMain(User user) {
LocalDb.getInstance().setCurrentUser(user);
Intent homeIntent = new Intent(this, MainActivity.class);
homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(homeIntent);
}
/**
* Background job for creating a new user
*/
private class CreateUserTask extends AsyncTask<String, ParseException, Void> {
@Override
protected void onPreExecute() {
showProgressBar();
}
@Override
protected Void doInBackground(String... params) {
String username = params[0];
String password = params[1];
String email = params[2];
User newUser = new User();
newUser.setUsername(username);
newUser.setPassword(password);
newUser.setEmail(email);
// Retrieve user current Location
UserDetail userDetail = new UserDetail();
Location location = getLocation();
if (location != null) {
userDetail.setLocation(new ParseGeoPoint(location.getLatitude(),
location.getLongitude()));
} else {
userDetail.setLocation(new ParseGeoPoint(0, 0));
}
userDetail.setProvider(LocationManager.NETWORK_PROVIDER);
// Create an empty follow row
Follow emptyFollow = new Follow();
emptyFollow.setFollowers(new ArrayList<User>());
emptyFollow.setFollowings(new ArrayList<User>());
try {
// Save the new follow table
emptyFollow.save();
newUser.setFollow(emptyFollow);
// Save empty location (0,9)
userDetail.save();
newUser.setUserDetail(userDetail);
// sign-up the new user
newUser.signUp();
goToMain(newUser);
} catch (final ParseException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
NotificationHelper.alert(RegisterActivity.this,
getString(R.string.dialog_error_title),
e.getMessage());
}
});
}
return null;
}
private Location getLocation() {
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location == null) {
location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
return location;
}
@Override
protected void onPostExecute(Void aVoid) {
hideProgressBar();
}
}
}