org.starfishrespect.myconsumption.android.ui.CreateAccountActivity.java Source code

Java tutorial

Introduction

Here is the source code for org.starfishrespect.myconsumption.android.ui.CreateAccountActivity.java

Source

package org.starfishrespect.myconsumption.android.ui;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.starfishrespect.myconsumption.android.R;
import org.starfishrespect.myconsumption.android.SingleInstance;
import org.starfishrespect.myconsumption.android.util.CryptoUtils;
import org.starfishrespect.myconsumption.android.util.MiscFunctions;
import org.starfishrespect.myconsumption.server.api.dto.SimpleResponseDTO;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import static org.starfishrespect.myconsumption.android.util.LogUtils.LOGD;
import static org.starfishrespect.myconsumption.android.util.LogUtils.makeLogTag;

/**
 * Create account activity
 * S23Y (2015). Licensed under the Apache License, Version 2.0.
 */
public class CreateAccountActivity extends Activity {

    private static final String TAG = makeLogTag(CreateAccountActivity.class);

    public EditText editTextUsername, editTextPassword, editTextPassword2;
    public Button buttonCreateAccount;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_account);

        editTextUsername = (EditText) findViewById(R.id.editTextUsername);
        editTextPassword = (EditText) findViewById(R.id.editTextPassword);
        editTextPassword2 = (EditText) findViewById(R.id.editTextPassword2);
        buttonCreateAccount = (Button) findViewById(R.id.buttonCreateAccount);
        buttonCreateAccount.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!MiscFunctions.isOnline(CreateAccountActivity.this)) {
                    MiscFunctions.makeOfflineDialog(CreateAccountActivity.this).show();
                    return;
                }
                if (editTextUsername.getText().toString().equals("")
                        || editTextPassword.getText().toString().equals("")
                        || editTextPassword2.getText().toString().equals("")) {
                    Toast.makeText(CreateAccountActivity.this,
                            getString(R.string.dialog_message_error_must_fill_all_fields), Toast.LENGTH_LONG)
                            .show();
                    return;
                }

                if (!editTextPassword.getText().toString().equals(editTextPassword2.getText().toString())) {
                    Toast.makeText(CreateAccountActivity.this, R.string.dialog_message_error_password_must_match,
                            Toast.LENGTH_LONG).show();
                    return;
                }

                new AsyncTask<Void, Void, Integer>() {

                    @Override
                    protected Integer doInBackground(Void... params) {
                        return createAccount();
                    }

                    @Override
                    protected void onPostExecute(Integer result) {
                        if (result == 0) {
                            setResult(RESULT_OK);
                            finish();
                        } else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(CreateAccountActivity.this);
                            builder.setTitle(R.string.dialog_title_error);
                            builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                }
                            });
                            switch (result) {
                            case SimpleResponseDTO.STATUS_ALREADY_EXISTS:
                                builder.setMessage(R.string.dialog_message_error_user_already_exists);
                                break;
                            default:
                                builder.setMessage("An error has occurred. You might want to "
                                        + "check your internet connection or contact the application provider.");
                                break;

                            }
                            builder.show();
                        }
                    }
                }.execute();
            }
        });
    }

    private int createAccount() {
        RestTemplate template = new RestTemplate();
        template.getMessageConverters().add(new FormHttpMessageConverter());
        template.getMessageConverters().add(new StringHttpMessageConverter());
        MultiValueMap<String, String> postParams = new LinkedMultiValueMap<>();
        postParams.add("password", CryptoUtils.sha256(editTextPassword.getText().toString()));
        try {
            String result = template.postForObject(
                    SingleInstance.getServerUrl() + "users/" + editTextUsername.getText().toString(), postParams,
                    String.class);
            LOGD(TAG, result);

            SimpleResponseDTO response = new ObjectMapper().readValue(result, SimpleResponseDTO.class);
            return response.getStatus();

        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }
}