package net.basilwang;
import static net.basilwang.dao.Preferences.LOGON_ACCOUNT_ID;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import net.basilwang.config.SAXParse;
import net.basilwang.core.TAHelper;
import net.basilwang.dao.AccountService;
import net.basilwang.dao.Preferences;
import net.basilwang.entity.Account;
import net.basilwang.entity.ValidateResult;
import net.basilwang.utils.NetworkUtils;
import net.basilwang.utils.PreferenceUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
public class EditLongonPreferenceActivity extends SherlockActivity implements
OnClickListener, OnFocusChangeListener {
private EditText mAccountTextbox;
private EditText mUrlTextbox;
private EditText mUserTextbox;
private EditText mPassTextbox;
private EditText mOldPsdTextbox;
private EditText mNewPsdTextbox;
private EditText mNewPsdSureTextbox;
private TextView mModifyPsdTextView;
private TextView mBindUserNoTextView;
private LinearLayout mModifyPassword;
private LinearLayout mBindUserNo;
private Account account;
TAHelper taHelper;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("保存").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
EditLongonPreferenceActivity.this.finish();
}
if (item.getTitle().equals("保存")) {
String message = confirmTextBoxIsOK();
if (message.equals("OK")) {
updateUserPassword();
} else {
Toast.makeText(EditLongonPreferenceActivity.this, message,
Toast.LENGTH_SHORT).show();
}
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_Sherlock);
super.onCreate(savedInstanceState);
// Drawable dr =
// getResources().getDrawable(R.drawable.actionbar_bg_shape);
Drawable dr = getResources().getDrawable(R.drawable.actionbar_bgc);
getSupportActionBar().setIcon(R.drawable.ic_menu_cancel_holo_light);
getSupportActionBar().setBackgroundDrawable(dr);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.modify_persional);
initView();
if (!NetworkUtils.isConnect(this)) {
// 如果没有网络连接,则提示用户“没有网络连接”,并且不能进行跳转
Toast.makeText(EditLongonPreferenceActivity.this,
this.getResources().getString(R.string.nonetwork_toast),
Toast.LENGTH_SHORT).show();
}
Bundle bundle = getIntent().getExtras();
String accountName = bundle.getString("name");
AccountService service = new AccountService(this);
account = service.getAccountById(PreferenceUtils.getPreferAccountId(this));
mAccountTextbox.setText(accountName);
String tracksUrl = account.getUrl();
mUrlTextbox.setText(tracksUrl);
// select server portion of URL
int startIndex = 0;
int index = tracksUrl.indexOf("://");
if (index > 0) {
startIndex = index + 3;
}
mUrlTextbox.setSelection(startIndex, tracksUrl.length());
mUserTextbox.setText(account.getUserno());
mPassTextbox.setText(account.getPassword());
}
private void initView() {
setTitle(SAXParse.getTAConfiguration().getSelectedCollege().getName());
mAccountTextbox = (EditText) findViewById(R.id.user_identifier);
mAccountTextbox.setEnabled(false);
mAccountTextbox.setTextColor(Color.GRAY);
mUrlTextbox = (EditText) findViewById(R.id.url);
mUrlTextbox.setVisibility(View.INVISIBLE);
mUserTextbox = (EditText) findViewById(R.id.user);
mPassTextbox = (EditText) findViewById(R.id.pass);
/** 2012-12-6 mini star :entrance year will be invisible **/
EditText mEntranceyearbox = (EditText) findViewById(R.id.entranceyear);
mEntranceyearbox.setVisibility(View.INVISIBLE);
TextView entracneYear = (TextView) findViewById(R.id.entranceyear_label);
entracneYear.setVisibility(View.INVISIBLE);
initModifyPersionalView();
}
private void initModifyPersionalView() {
mOldPsdTextbox = (EditText) findViewById(R.id.origin_password);
mOldPsdTextbox.setOnFocusChangeListener(this);
mNewPsdTextbox = (EditText) findViewById(R.id.new_password);
mNewPsdTextbox.setOnFocusChangeListener(this);
mNewPsdSureTextbox = (EditText) findViewById(R.id.new_password_sure);
mNewPsdSureTextbox.setOnFocusChangeListener(this);
mModifyPsdTextView = (TextView) findViewById(R.id.modify_password_tv);
mModifyPsdTextView.setOnClickListener(this);
mBindUserNoTextView = (TextView) findViewById(R.id.bind_userNo_tv);
mBindUserNoTextView.setOnClickListener(this);
mModifyPassword = (LinearLayout) findViewById(R.id.modify_password);
mBindUserNo = (LinearLayout) findViewById(R.id.bind_userNo);
}
private void updateUserPassword() {
String token = PreferenceUtils.getPreferToken(this);
String oldPsd = getEditContent(mOldPsdTextbox).trim();
String newpsd = getEditContent(mNewPsdSureTextbox).trim();
if (!oldPsd.equals("")) {
UpdatePsdTask updatePsd = new UpdatePsdTask();
updatePsd.execute(token, oldPsd, newpsd);
} else if (!PreferenceUtils.getPreferHadSendUserNo(this)) {
savePrefs();
SharedPreferences.Editor ed = Preferences
.getEditor(EditLongonPreferenceActivity.this);
ed.putInt(LOGON_ACCOUNT_ID, account.getId());
ed.commit();
Toast.makeText(this, "学号保存成功", Toast.LENGTH_SHORT).show();
EditLongonPreferenceActivity.this.finish();
}
}
public String confirmTextBoxIsOK() {
if (!NetworkUtils.isConnect(this))
return "好像没有联网哦!";
if (getEditContent(mAccountTextbox).trim().equals(""))
return "帐号标识 不能为空";
if (getEditContent(mUserTextbox).trim().equals(""))
return "学号不能为空";
if (getEditContent(mPassTextbox).equals(""))
return "密码不能为空";
if (!isPsdTextBoxEmpty(mOldPsdTextbox)) {
if (isPsdTextBoxEmpty(mNewPsdTextbox))
return "请填写新密码";
if (isPsdTextBoxEmpty(mNewPsdSureTextbox))
return "请确认新密码";
if (!isNewPsdEquals()) {
mNewPsdSureTextbox.setText("");
return "两次输入密码的不同,请确认!";
}
}
clearModifyPsdEditText();
return "OK";
}
private boolean savePrefs() {
URI uri = null;
try {
uri = new URI(getEditContent(mUrlTextbox));
} catch (URISyntaxException ignored) {
}
account.setName(getEditContent(mAccountTextbox));
account.setUrl(uri.toString());
account.setUserno(getEditContent(mUserTextbox));
account.setPassword(getEditContent(mPassTextbox));
AccountService service = new AccountService(this);
service.update(account);
return true;
}
public Activity getActivity() {
return EditLongonPreferenceActivity.this;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.modify_password_tv:
setViewVisibility(mModifyPassword);
break;
case R.id.bind_userNo_tv:
setViewVisibility(mBindUserNo);
break;
default:
break;
}
}
private void setViewVisibility(LinearLayout view) {
if (view.getVisibility() == View.GONE) {
view.setVisibility(View.VISIBLE);
setBindUserNoEnabled(view);
getEditTextFocus(view);
} else
view.setVisibility(View.GONE);
clearModifyPsdEditText();
}
private void getEditTextFocus(LinearLayout view) {
view.getChildAt(1).requestFocus();
}
private void clearModifyPsdEditText() {
if (isPsdTextBoxEmpty(mOldPsdTextbox)) {
mNewPsdTextbox.setText("");
mNewPsdSureTextbox.setText("");
}
}
private void setBindUserNoEnabled(LinearLayout view) {
if (view.equals(mBindUserNo)
&& PreferenceUtils.getPreferHadSendUserNo(this)) {
mAccountTextbox.setEnabled(false);
mAccountTextbox.setTextColor(Color.GRAY);
mUserTextbox.setEnabled(false);
mUserTextbox.setTextColor(Color.GRAY);
mPassTextbox.setEnabled(false);
mPassTextbox.setTextColor(Color.GRAY);
Toast.makeText(this, "您已绑定学号", Toast.LENGTH_SHORT).show();
}
}
private boolean isPsdTextBoxEmpty(EditText editText) {
return getEditContent(editText).equals("") ? true : false;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
switch (v.getId()) {
case R.id.origin_password:
if (!isPsdTextBoxEmpty(mOldPsdTextbox)
&& !isPsdLengthOk(mOldPsdTextbox)) {
Toast.makeText(this, "请输入6-18位密码", Toast.LENGTH_SHORT).show();
mOldPsdTextbox.setText("");
}
break;
case R.id.new_password:
if (!isPsdLengthOk(mNewPsdTextbox)) {
Toast.makeText(this, "请输入6-18位密码", Toast.LENGTH_SHORT).show();
mNewPsdTextbox.setText("");
mNewPsdSureTextbox.setText("");
}
break;
case R.id.new_password_sure:
if (!isNewPsdEquals()) {
Toast.makeText(this, "请填写相同的新密码", Toast.LENGTH_SHORT).show();
mNewPsdSureTextbox.setText("");
}
break;
default:
break;
}
}
private boolean isNewPsdEquals() {
return getEditContent(mNewPsdSureTextbox).trim().equals(
getEditContent(mNewPsdTextbox).trim()) ? true : false;
}
private boolean isPsdLengthOk(EditText editText) {
return getEditContent(editText).trim().length() > 5 ? true : false;
}
private String getEditContent(EditText editText) {
return editText.getText().toString();
}
private class UpdatePsdTask extends
AsyncTask<String, Object, ValidateResult> {
@Override
protected void onPostExecute(ValidateResult result) {
Toast.makeText(EditLongonPreferenceActivity.this,
result.getMessage(), Toast.LENGTH_SHORT).show();
if (result.getSuccess().equals("true"))
EditLongonPreferenceActivity.this.finish();
super.onPostExecute(result);
}
@Override
protected ValidateResult doInBackground(String... params) {
ValidateResult v_result = new ValidateResult();
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://www.ruguozhai.me/api/EduStudent/ResetPsd");
post.addHeader("X-Token", params[0]);
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("oldPsd", params[1]));
postParameters.add(new BasicNameValuePair("newPsd", params[2]));
try {
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
postParameters, HTTP.UTF_8);
post.setEntity(formEntity);
HttpResponse response = httpClient.execute(post);
Log.v("result", "code="
+ response.getStatusLine().getStatusCode());
if (response.getStatusLine().getStatusCode() == 200) {
v_result = jsonData(filter(EntityUtils.toString(response
.getEntity())));
Log.v("result", "result1=" + v_result.getSuccess());
}
} catch (ClientProtocolException e) {
e.printStackTrace();
Log.v("result1", "result=" + e.toString());
} catch (IOException e) {
e.printStackTrace();
Log.v("result2", "result=" + e.toString());
}
return v_result;
}
public String filter(String s) {
String s1 = s.replace("\\r", "");
String s2 = s1.replace("\\n", "");
String s3 = s2.substring(1, s2.length() - 1);
String s4 = s3.replace(" ", "");
String result = s4.replace("\\", "");
return result;
}
public ValidateResult jsonData(String str) {
ValidateResult result = JSON.parseObject(str,
new TypeReference<ValidateResult>() {
});
return result;
}
}
}