package com.electronapps.LJPro;
import java.lang.ref.WeakReference;
import com.commonsware.cwac.wakeful.WakefulIntentService;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
public class AddAccount extends Activity {
private ProgressDialog signon;
public final static int ACCOUNT_ADDED=1;
private final String TAG=AddAccount.class.getSimpleName();
Context mContext;
private LJDB LJDBAdapter;
private Boolean waiting=false;
private boolean firstaccount=true;
private boolean DEBUG=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState!=null) {
restoreProgress(savedInstanceState);
}
Intent launched=getIntent();
firstaccount=Boolean.parseBoolean(launched.getStringExtra("allowback"));
mContext=getApplicationContext();
Log.d(TAG,"setting ContentView");
setContentView(R.layout.addaccount);
getWindow().setBackgroundDrawableResource(R.drawable.background_old);
}
@Override
protected
void onResume() {
super.onResume();
IntentFilter mErrors=new IntentFilter();
mErrors.addAction(LJNet.LJ_XMLERROR);
mErrors.addAction(LJNet.LJ_ACCOUNTADDED);
mErrors.addAction(LJNet.LJ_WRONGLOGIN);
registerReceiver(LJAddAcountReceiver,mErrors);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(LJAddAcountReceiver);
}
@Override
protected void onSaveInstanceState(Bundle saveState) {
super.onSaveInstanceState(saveState);
saveState.putBoolean("waiting",waiting);
}
private void restoreProgress(Bundle savedInstanceState) {
waiting=savedInstanceState.getBoolean("waiting");
if (waiting) {
LJPro app=(LJPro) getApplication();
ProgressDialog refresher=(ProgressDialog) app.Dialog.get();
refresher.dismiss();
String logingon=getString(R.string.signon);
app.Dialog=new WeakReference<ProgressDialog>(ProgressDialog.show(AddAccount.this, "", logingon, true));
}
}
private class SignIn extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... params) {
LJDBAdapter=LJDB.getDB(getApplicationContext());
LJDBAdapter.open();
return null;
}
@Override
protected void onPostExecute(Void result){
LJPro app=(LJPro) getApplication();
String logingon=getString(R.string.signon);
EditText uname=(EditText) findViewById(R.id.uname);
EditText psswd=(EditText) findViewById(R.id.pwd);
if (DEBUG) {
uname.setText("jfelectron");
psswd.setText("2891jf!");
}
boolean haveaccount=false;
String username=uname.getText().toString();
String password=psswd.getText().toString();
if(username.equals("")||password.equals("")) {
haveaccount=true;
AlertDialog.Builder builder=new AlertDialog.Builder(AddAccount.this);
builder.setCancelable(true);
builder.setTitle(getString(R.string.loginreqs));
builder.setNegativeButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
(builder.create()).show();
return;
}
String [] args=new String[1];
args[0]=LJDB.KEY_ACCOUNTNAME;
Cursor accounts=LJDBAdapter.getAllAccounts(args);
if (accounts.getCount()>0) {
accounts.moveToFirst();
while(!accounts.isAfterLast()) {
if(accounts.getString(0).equals(username)) {
haveaccount=true;
AlertDialog.Builder builder=new AlertDialog.Builder(AddAccount.this);
builder.setCancelable(true);
builder.setTitle(getString(R.string.accountexists));
builder.setNegativeButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
(builder.create()).show();
accounts.close();
return;
}
accounts.moveToNext();
}
}
if(!haveaccount) {
accounts.close();
app.Dialog=new WeakReference<ProgressDialog>(ProgressDialog.show(AddAccount.this, "", logingon, true));
Intent addacct=new Intent("com.electronapps.LJPro.intent.newaccount");
addacct.putExtra("journalname", username);
addacct.putExtra("passMD5",Md5.MD5(password));
addacct.putExtra("password",password);
WakefulIntentService.sendWakefulWork(mContext, addacct);
}
}
}
public void doSignIn(View view) {
waiting=true;
SignIn signIn=new SignIn();
signIn.execute();
}
public void doNewAcct(View view) {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.livejournal.com/create.bml"));
startActivity(i);
}
public BroadcastReceiver LJAddAcountReceiver=new BroadcastReceiver()
{
//TODO: Register receiver in OnCreate
@Override
public void onReceive(Context context, Intent intent)
{
String action=intent.getAction();
LJPro app=(LJPro) getApplication();
ProgressDialog signon=(ProgressDialog) app.Dialog.get();
signon.dismiss();
if (action.equals(LJNet.LJ_XMLERROR)|action.equals(LJNet.LJ_WRONGLOGIN)) {
removeStickyBroadcast(intent);
dispErrorDialog(action);
}
else if (intent.getAction().equals(LJNet.LJ_ACCOUNTADDED)) {
removeStickyBroadcast(intent);
handleLogin();
}
}
};
void dismissDialog() {
if (signon.isShowing()) {
signon.dismiss();
signon=null;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (firstaccount && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
//TODO: Make some toast and butter it
return true;
}
return super.onKeyDown(keyCode, event);
}
private void dispErrorDialog(String error) {
AlertDialog builder =new AlertDialog.Builder(AddAccount.this).create();
if (error.equals(LJNet.LJ_XMLERROR)) {
String xmlerror=getString(R.string.xmlerror);
builder.setMessage(xmlerror);
}
else if (error.equals(LJNet.LJ_WRONGLOGIN)) {
String xmlerror=getString(R.string.wrongpw);
builder.setMessage(xmlerror);
}
builder.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
} });
builder.show();
}
private void handleLogin() {
Intent added=new Intent(LJNet.LJ_ACCOUNTADDED);
EditText uname=(EditText) findViewById(R.id.uname);
added.putExtra("journalname",uname.getText().toString());
setResult(ACCOUNT_ADDED,added);
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
//LJDBAdapter.close();
}
}