Created
April 16, 2017 06:39
-
-
Save lobotomit/e7a0ac28a00755fcb8274fc0b58d36a5 to your computer and use it in GitHub Desktop.
AccountManager Android
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.ereyesalvarez.eadu.activities; | |
| import android.accounts.Account; | |
| import android.accounts.AccountAuthenticatorActivity; | |
| import android.accounts.AccountManager; | |
| import android.content.Intent; | |
| import android.os.AsyncTask; | |
| import android.os.Bundle; | |
| import android.util.Log; | |
| import android.view.View; | |
| import android.widget.Button; | |
| import android.widget.EditText; | |
| import android.widget.TextView; | |
| import android.widget.Toast; | |
| import com.ereyesalvarez.eadu.R; | |
| import com.ereyesalvarez.eadu.services.ServerAutenticateService; | |
| public class SignInActivity extends AccountAuthenticatorActivity { | |
| private final String TAG = this.getClass().getSimpleName(); | |
| public final static String ARG_ACCOUNT_TYPE = "ACCOUNT_TYPE"; | |
| public final static String ARG_AUTH_TYPE = "AUTH_TYPE"; | |
| public final static String ARG_ACCOUNT_NAME = "ACCOUNT_NAME"; | |
| public final static String ARG_IS_ADDING_NEW_ACCOUNT = "IS_ADDING_ACCOUNT"; | |
| public static final String KEY_ERROR_MESSAGE = "ERR_MSG"; | |
| public final static String PARAM_USER_PASS = "USER_PASS"; | |
| private final int REQ_SIGN_UP = 1; | |
| private AccountManager mAccountManager; //Account Manager | |
| private String mAuthTokenType; //Tipo de Token | |
| // UI References: | |
| private EditText mEmailView; | |
| private EditText mPasswordView; | |
| private Button mSubmitButton; | |
| private TextView mRegisterView; | |
| /** | |
| * onCreate | |
| * @param savedInstanceState savedInstanceState | |
| */ | |
| @Override | |
| protected void onCreate(Bundle savedInstanceState) { | |
| super.onCreate(savedInstanceState); | |
| setContentView(R.layout.activity_signin); //Ponemos el layout | |
| //Link UI Elements: | |
| mEmailView = (EditText) findViewById(R.id.accountName); | |
| mPasswordView = (EditText) findViewById(R.id.accountPassword); | |
| mSubmitButton = (Button) findViewById(R.id.submit); | |
| mRegisterView = (TextView) findViewById(R.id.signUp); | |
| //Inicializamos el accManager. | |
| mAccountManager = AccountManager.get(getBaseContext()); | |
| String accountName = getIntent().getStringExtra(ARG_ACCOUNT_NAME); //Nombre de la cuenta. | |
| if (mAuthTokenType == null) | |
| mAuthTokenType = "Full access"; | |
| if (accountName != null) { | |
| mEmailView.setText(accountName); //Escribimos el nombre de la cuenta si existe. | |
| } | |
| /* | |
| * ClickListener: Botón: Submit. | |
| * Llamamos al método submit | |
| */ | |
| mSubmitButton.setOnClickListener(new View.OnClickListener() { | |
| @Override | |
| public void onClick(View v) { | |
| submit(); | |
| } | |
| }); | |
| /* | |
| * ClickListener: Botón SignUp. | |
| * Cambiamos a registro. | |
| * Como solo hay un AuthenticatorActivity: | |
| * llamamos la actividad Sign Up, conseguimos sus resultados y sus resultados in: | |
| * setAccountAuthenticatorResult(). Ver finishLogin(). | |
| */ | |
| mRegisterView.setOnClickListener(new View.OnClickListener() { | |
| @Override | |
| public void onClick(View v) { | |
| Intent signup = new Intent(getBaseContext(), SignUpActivity.class); //Llamamos a registrar | |
| signup.putExtras(getIntent().getExtras()); | |
| startActivityForResult(signup, REQ_SIGN_UP); //Iniciamos la actividad de registro. | |
| } | |
| }); | |
| } | |
| /** | |
| * On Activity Result | |
| * Cuando se devuelve un intent que se hace con lo que devuelve. | |
| * @param requestCode Código que envió, sirve para identificar el intent. | |
| * @param resultCode Código que devuelve la actividad llamada. | |
| * @param data Datos adicionales. | |
| */ | |
| @Override | |
| protected void onActivityResult(int requestCode, int resultCode, Intent data) { | |
| //Si la actividad era la de registro y el resultado ha sido OK. | |
| if (requestCode == REQ_SIGN_UP && resultCode == RESULT_OK) { | |
| finishLogin(data); //Finalizamos el login. | |
| } else | |
| super.onActivityResult(requestCode, resultCode, data); | |
| } | |
| /** | |
| * Envía los datos de login | |
| */ | |
| public void submit() { | |
| //Recuperamos los datos de usuario y password. | |
| final String userName = mEmailView.getText().toString(); | |
| final String userPass = mPasswordView.getText().toString(); | |
| //Tipo de cuenta. TODO: revisar tipo de cuenta. | |
| final String accountType = getIntent().getStringExtra(ARG_ACCOUNT_TYPE); | |
| /* | |
| * Inicio de AsyncTask | |
| */ | |
| new AsyncTask<String, Void, Intent>() { | |
| @Override | |
| protected Intent doInBackground(String... params) { | |
| Log.d(TAG, "Started authenticating"); | |
| String authToken = null; // Almacenara el Token de autenticación. | |
| Bundle data = new Bundle(); // Bundle de datos. | |
| try { | |
| //TODO: Llamar a servicio real. | |
| authToken = ServerAutenticateService.userSignIn(userName, userPass, mAuthTokenType); | |
| //Ponemos los elementos importantes en el data que pasara a finalizar login. | |
| data.putString(AccountManager.KEY_ACCOUNT_NAME, userName); | |
| data.putString(AccountManager.KEY_ACCOUNT_TYPE, accountType); | |
| data.putString(AccountManager.KEY_AUTHTOKEN, authToken); | |
| data.putString(PARAM_USER_PASS, userPass); | |
| } catch (Exception e) { | |
| //Ponemos el error message si falla. | |
| data.putString(KEY_ERROR_MESSAGE, e.getMessage()); | |
| } | |
| //Creamos el intent para pasar los datos. | |
| final Intent res = new Intent(); | |
| res.putExtras(data); //Ponemos los datos en el intent. | |
| return res; //Mandamos el intent a onPostExecute | |
| } | |
| @Override | |
| protected void onPostExecute(Intent intent) { | |
| //Si hay error lo mostramos, sino finalizamos el LogIn. | |
| if (intent.hasExtra(KEY_ERROR_MESSAGE)) { | |
| Toast.makeText(getBaseContext(), intent.getStringExtra(KEY_ERROR_MESSAGE), Toast.LENGTH_SHORT).show(); | |
| } else { | |
| finishLogin(intent); | |
| } | |
| } | |
| }.execute(); | |
| } | |
| /** | |
| * | |
| * @param intent Intent con los datos del registro / login | |
| */ | |
| private void finishLogin(Intent intent) { | |
| Log.d(TAG, "finishLogin"); | |
| //Guardamos los datos del intent. | |
| String accountName = intent.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); | |
| String accountPassword = intent.getStringExtra(PARAM_USER_PASS); | |
| //Creamos una cuenta. Con el nombre de la cuenta, y el tipo de cuenta. | |
| final Account account = new Account(accountName, intent.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE)); | |
| //Se selecciona si se debe añadir cuenta o solo poner el password. | |
| if (getIntent().getBooleanExtra(ARG_IS_ADDING_NEW_ACCOUNT, false)) { | |
| Log.d(TAG, "> finishLogin > addAccountExplicitly"); | |
| String authtoken = intent.getStringExtra(AccountManager.KEY_AUTHTOKEN); | |
| String authtokenType = mAuthTokenType; | |
| // Creamos la cuenta en el dispositivo y colocamos el token que obtenemos. | |
| // No poner el token causara otra call al server para autenticar el usuario. | |
| mAccountManager.addAccountExplicitly(account, accountPassword, null); | |
| mAccountManager.setAuthToken(account, authtokenType, authtoken); | |
| } else { | |
| Log.d(TAG, "> finishLogin > setPassword"); | |
| mAccountManager.setPassword(account, accountPassword); //Colocamos el password adecuado. | |
| } | |
| setAccountAuthenticatorResult(intent.getExtras()); | |
| setResult(RESULT_OK, intent); | |
| finish(); //Finalizamos la actividad. | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.ereyesalvarez.eadu.activities; | |
| import android.accounts.AccountManager; | |
| import android.app.Activity; | |
| import android.content.Intent; | |
| import android.os.AsyncTask; | |
| import android.os.Bundle; | |
| import android.util.Log; | |
| import android.view.View; | |
| import android.widget.Button; | |
| import android.widget.EditText; | |
| import android.widget.TextView; | |
| import android.widget.Toast; | |
| import com.ereyesalvarez.eadu.R; | |
| import com.ereyesalvarez.eadu.services.ServerAutenticateService; | |
| import static com.ereyesalvarez.eadu.activities.SignInActivity.ARG_ACCOUNT_TYPE; | |
| import static com.ereyesalvarez.eadu.activities.SignInActivity.PARAM_USER_PASS; | |
| import static com.ereyesalvarez.eadu.activities.SignInActivity.KEY_ERROR_MESSAGE; | |
| /** | |
| * Se encarga del proceso de Sign up (registro). | |
| * No implementa AuthenticatorActivity por que devuelve el resultado a la actividad login (AuthenticatorActivity) | |
| * con un marcador de añadir nueva cuenta. | |
| */ | |
| public class SignUpActivity extends Activity { | |
| private String TAG = getClass().getSimpleName(); | |
| private String mAccountType; //Tipo de Cuenta | |
| // UI References: | |
| private EditText mNameView; | |
| private EditText mEmailView; | |
| private EditText mPasswordView; | |
| private Button mSubmitButton; | |
| private TextView mLogInView; | |
| /** | |
| * onCreate | |
| * @param savedInstanceState savedInstanceState | |
| */ | |
| @Override | |
| protected void onCreate(Bundle savedInstanceState) { | |
| super.onCreate(savedInstanceState); | |
| mAccountType = getIntent().getStringExtra(ARG_ACCOUNT_TYPE); //Pedimos el tipo de cuenta. | |
| setContentView(R.layout.activity_signup); //Ponemos el layout | |
| //Link UI Elements: | |
| mNameView = (EditText) findViewById(R.id.name); | |
| mEmailView = (EditText) findViewById(R.id.accountName); | |
| mPasswordView = (EditText) findViewById(R.id.accountPassword); | |
| mSubmitButton = (Button) findViewById(R.id.submit); | |
| mLogInView = (TextView) findViewById(R.id.alreadyMember); | |
| /* | |
| * ClickListener: Botón alreadyMember. | |
| * Cambiamos a login. | |
| * Finaliza la actividad y devuelve el resultado cancelado. | |
| */ | |
| mLogInView.setOnClickListener(new View.OnClickListener() { | |
| @Override | |
| public void onClick(View v) { | |
| setResult(RESULT_CANCELED); | |
| finish(); | |
| } | |
| }); | |
| /* | |
| * ClickListener: Botón: Submit. | |
| * Llamamos al método createAccount. | |
| */ | |
| mSubmitButton.setOnClickListener(new View.OnClickListener() { | |
| @Override | |
| public void onClick(View v) { | |
| createAccount(); | |
| } | |
| }); | |
| } | |
| /* | |
| * Si pulsamos atrás finaliza la actividad y devolvemos cancelado. | |
| */ | |
| @Override | |
| public void onBackPressed() { | |
| setResult(RESULT_CANCELED); | |
| super.onBackPressed(); | |
| } | |
| /** | |
| * Crea la cuenta en segundo plano. | |
| */ | |
| private void createAccount() { | |
| //TODO: Validación de los datos. | |
| new AsyncTask<String, Void, Intent>() { | |
| String name = mNameView.getText().toString().trim(); | |
| String accountName = mEmailView.getText().toString().trim(); | |
| String accountPassword = mPasswordView.getText().toString().trim(); | |
| @Override | |
| protected Intent doInBackground(String... params) { | |
| Log.d(TAG, "Started authenticating"); | |
| String authtoken = null; | |
| Bundle data = new Bundle(); | |
| try { | |
| // TODO: Cambiar. | |
| //authtoken = ServerAutenticateService.userSignUp(name, accountName, accountPassword, AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS); | |
| // TODO: realizar servicio de autentciación. | |
| authtoken = ServerAutenticateService.userSignUp(name, accountName, accountPassword, "Full access"); //Devuelve el token. | |
| //Guardamos los datos para el intent. | |
| data.putString(AccountManager.KEY_ACCOUNT_NAME, accountName); | |
| data.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccountType); | |
| data.putString(AccountManager.KEY_AUTHTOKEN, authtoken); | |
| data.putString(PARAM_USER_PASS, accountPassword); | |
| } catch (Exception e) { | |
| data.putString(KEY_ERROR_MESSAGE, e.getMessage()); | |
| } | |
| final Intent res = new Intent(); | |
| res.putExtras(data); | |
| return res; | |
| } | |
| @Override | |
| protected void onPostExecute(Intent intent) { | |
| if (intent.hasExtra(KEY_ERROR_MESSAGE)) { | |
| Toast.makeText(getBaseContext(), intent.getStringExtra(KEY_ERROR_MESSAGE), Toast.LENGTH_SHORT).show(); | |
| } else { | |
| setResult(RESULT_OK, intent); | |
| finish(); | |
| } | |
| } | |
| }.execute(); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment