package com.example.slidingmenu.yujing.client.activity.controller;
import org.json.JSONException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import com.example.slidingmenu.R;
import com.example.slidingmenu.yujing.client.activity.AboutActivity;
import com.example.slidingmenu.yujing.client.activity.ProfileActivity;
import com.example.slidingmenu.yujing.client.activity.letter.SendLetterActivity;
import com.example.slidingmenu.yujing.client.activity.loginsignin.LoginActivity;
import com.example.slidingmenu.yujing.client.activity.loginsignin.SignProfileActivity;
import com.example.slidingmenu.yujing.client.application.ClientApplication;
import com.example.slidingmenu.yujing.client.broadcastreceiver.LoginLogoutBroadCast;
import com.example.slidingmenu.yujing.client.database.table.Friend;
import com.example.slidingmenu.yujing.client.network.HttpClient;
import com.example.slidingmenu.yujing.client.network.Request;
import com.example.slidingmenu.yujing.client.network.mode.LoginoutResponseParam;
import com.example.slidingmenu.yujing.client.network.mode.RequestParam;
public class BaseActivity extends Activity{
private static final int DIALOG_YES_NO_MESSAGE = 0;
private static final int DIALOG_YES_NO_LOGOUT = 1;
protected static final int ADD_FRIEND = 222;
public static final int SEND_LETTER = 55;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onKeyDown(int arg0, KeyEvent arg1) {
if(arg0 == KeyEvent.KEYCODE_BACK) {
showDialog(DIALOG_YES_NO_MESSAGE);
}
return super.onKeyDown(arg0, arg1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.base_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_profile:
profile();
break;
case R.id.menu_letter:
sendLetter();
break;
case R.id.menu_signin:
startActivity(new Intent(this, SignProfileActivity.class));
break;
case R.id.menu_logout:
showDialog(DIALOG_YES_NO_LOGOUT);
break;
case R.id.menu_about:
startActivity(new Intent(BaseActivity.this, AboutActivity.class));
break;
case R.id.menu_quit:
showDialog(DIALOG_YES_NO_MESSAGE);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
protected void sendLetter() {
startActivityForResult(new Intent(this, SendLetterActivity.class), SEND_LETTER);
}
private void profile() {
ClientApplication ca = (ClientApplication) this.getApplication();
SharedPreferences share = ca.getLoginUserInfo();
Intent intent = new Intent(this, ProfileActivity.class);
ContentValues values = new ContentValues();
values.put(Friend.mobile, share.getString(RequestParam.USER_NAME, ""));
intent.putExtra("values", values);
startActivity(intent);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_YES_NO_MESSAGE:
return new AlertDialog.Builder(BaseActivity.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.alter)
.setMessage(getString(R.string.is_quit))
.setPositiveButton(R.string.comfirm, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
finish();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})
.create();
case DIALOG_YES_NO_LOGOUT:
return new AlertDialog.Builder(BaseActivity.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.alter)
.setMessage(getString(R.string.is_logout))
.setPositiveButton(R.string.comfirm, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setRequestParam();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})
.create();
default:
break;
}
return super.onCreateDialog(id);
}
private void setRequestParam() {
ClientApplication client = (ClientApplication) this.getApplication();
SharedPreferences shared = client.getLoginUserInfo();
RequestParam requestParam = new RequestParam();
requestParam.setUserName(shared.getString(RequestParam.USER_NAME, ""));
requestParam.setPassword(shared.getString(RequestParam.PASSWORD, ""));
requestParam.setRequestType(RequestParam.LOGOUT);
requestParam.setRandomKey("1234");
requestParam.setParams(new String[]{"5"});
new LogoutTask().execute(requestParam);
}
private void sendLogOutBroadCast() {
Intent intent = new Intent(BaseActivity.this, LoginLogoutBroadCast.class);
intent.setAction(LoginLogoutBroadCast.BROADCAST_LOGOUT);
sendBroadcast(intent);
}
private class LogoutTask extends AsyncTask<RequestParam, Integer, Boolean>{
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(BaseActivity.this, "", getText(R.string.waiting));
super.onPreExecute();
}
@Override
protected Boolean doInBackground(RequestParam... param) {
if(!HttpClient.isConnect(BaseActivity.this)) {
return false;
}
RequestParam requestParam = param[0];
String res = Request.request(requestParam.getJSON());
if ("".equals(res)) {
return false;
}
try {
LoginoutResponseParam response = new LoginoutResponseParam(res);
if (response.getResult() != LoginoutResponseParam.RESULT_SUCCESS) {
return false;
}
return true;
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
dialog.dismiss();
sendLogOutBroadCast();
super.onPostExecute(result);
if (result) {
startActivity(new Intent(BaseActivity.this, LoginActivity.class));
ClientActivity c = (ClientActivity) BaseActivity.this.getParent();
c.finish();
}
}
}
}