package it.bz.its.angelhack.threedudes.hikingbuddy.activities;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import it.bz.its.angelhack.threedudes.hikingbuddy.R;
import it.bz.its.angelhack.threedudes.hikingbuddy.Utils;
import it.bz.its.angelhack.threedudes.hikingbuddy.enums.HttpCodes;
import it.bz.its.angelhack.threedudes.hikingbuddy.models.Auth;
import it.bz.its.angelhack.threedudes.hikingbuddy.models.AuthResponse;
import it.bz.its.angelhack.threedudes.hikingbuddy.models.RestErrorResponse;
import it.bz.its.angelhack.threedudes.hikingbuddy.models.User;
import it.bz.its.angelhack.threedudes.hikingbuddy.services.UserService;
import retrofit.Callback;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class LoginActivity extends AppCompatActivity {
private static final String TAG = "LoginActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// Bypass the login if it has already been made
SharedPreferences prefs = getSharedPreferences("infos", MODE_PRIVATE);
String prefToken = prefs.getString("token", "");
if (prefToken.isEmpty() == false) {
Log.d(TAG, "Token restored from preference: " + prefToken);
gotoProfileActivity();
finish();
}
// Load used views
final TextView tvUserName = (TextView) this.findViewById(R.id.tv_login_email);
final TextView tvPassword = (TextView) this.findViewById(R.id.tv_login_password);
Button btLogin = (Button) this.findViewById(R.id.bt_login);
btLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RestAdapter restAdapter = Utils.getRestAdapter(null);
UserService us = restAdapter.create(UserService.class);
final ProgressDialog progDialog = Utils.newLoadingDialog(LoginActivity.this, "Login in ...");
progDialog.show();
us.login(tvUserName.getText().toString(), tvPassword.getText().toString(), new Callback<AuthResponse>() {
@Override
public void success(AuthResponse us, Response response2) {
// Store the acquired token
SharedPreferences.Editor editor = getSharedPreferences("infos", MODE_PRIVATE).edit();
Auth authModel = us.getAuthToken();
User authUser = authModel.getUser();
editor.putString("token", authModel.getToken());
editor.putString("name", authUser.getFirstName());
editor.putString("avatar", authUser.getPicture().getThumbImageUri());
editor.apply();
// Go to the user's profile page
gotoProfileActivity();
progDialog.dismiss();
}
@Override
public void failure(RetrofitError error) {
HttpCodes httpCode = HttpCodes.getFromNumericValue(error.getResponse().getStatus());
RestErrorResponse restErrorResp = (RestErrorResponse) error.getBodyAs(RestErrorResponse.class);
switch (httpCode) {
case UNPROCESSABLE:
Utils.showOkAlertDialog(LoginActivity.this,
"Bad credentials?",
restErrorResp.getJoinedErrors(),
null);
break;
default:
Utils.showOkAlertDialog(LoginActivity.this, "Problem", error.getMessage(), null);
break;
}
progDialog.dismiss();
}
});
}
});
}
private void gotoProfileActivity() {
Intent profileStarter = new Intent(LoginActivity.this, MainActivity.class);
startActivity(profileStarter);
}
}