package com.oreilly.demo.android.pa.clientserver.client.sync;
import org.json.JSONObject;
import com.oreilly.demo.android.pa.clientserver.client.R;
import com.oreilly.demo.android.pa.clientserver.client.sync.authsync.Authenticator;
import android.accounts.Account;
import android.accounts.AccountAuthenticatorActivity;
import android.accounts.AccountManager;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.ContactsContract;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends AccountAuthenticatorActivity {
public static final String PARAM_AUTHTOKEN_TYPE = "authtokenType";
public static final String PARAM_USERNAME = "username";
public static final String PARAM_PASSWORD = "password";
private String username;
private String password;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getVars();
setupView();
}
@Override
protected Dialog onCreateDialog(int id) {
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("Attemping to login");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
return dialog;
}
private void getVars() {
username = getIntent().getStringExtra(PARAM_USERNAME);
}
private void setupView() {
setContentView(R.layout.login);
findViewById(R.id.login).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
login();
}
});
findViewById(R.id.settings).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getBaseContext(), Settings.class));
}
});
if(username != null) {
((EditText) findViewById(R.id.username)).setText(username);
}
}
private void login() {
if(((EditText) findViewById(R.id.username)).getText() == null ||
((EditText) findViewById(R.id.username)).getText().toString().trim().length() < 1) {
Toast.makeText(this, "Please enter a Username", Toast.LENGTH_SHORT).show();
return;
}
if(((EditText) findViewById(R.id.password)).getText() == null ||
((EditText) findViewById(R.id.password)).getText().toString().trim().length() < 1) {
Toast.makeText(this, "Please enter a Password", Toast.LENGTH_SHORT).show();
return;
}
username = ((EditText) findViewById(R.id.username)).getText().toString();
password = ((EditText) findViewById(R.id.password)).getText().toString();
showDialog(0);
Handler loginHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == NetworkUtil.ERR) {
dismissDialog(0);
Toast.makeText(LoginActivity.this, "Login Failed: "+msg.obj, Toast.LENGTH_SHORT).show();
} else if(msg.what == NetworkUtil.OK) {
handleLoginResponse((JSONObject) msg.obj);
}
}
};
NetworkUtil.login(NetworkUtil.hosturl != null ? NetworkUtil.hosturl : getString(R.string.baseurl), username, password, loginHandler);
}
private void handleLoginResponse(JSONObject resp) {
dismissDialog(0);
final Account account = new Account(username, Authenticator.ACCOUNT_TYPE);
if (getIntent().getStringExtra(PARAM_USERNAME) == null) {
AccountManager.get(this).addAccountExplicitly(account, password, null);
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true);
} else {
AccountManager.get(this).setPassword(account, password);
}
Intent intent = new Intent();
intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, username);
intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, Authenticator.ACCOUNT_TYPE);
if (resp.has("token")) {
intent.putExtra(AccountManager.KEY_AUTHTOKEN, resp.optString("token"));
}
setAccountAuthenticatorResult(intent.getExtras());
setResult(RESULT_OK, intent);
finish();
}
}