package net.basilwang; import static net.basilwang.dao.Preferences.ENTRACETEAR; import static net.basilwang.dao.Preferences.LOGON_ACCOUNT_ID; import java.net.URI; import java.net.URISyntaxException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import net.basilwang.config.SAXParse; import net.basilwang.dao.AccountService; import net.basilwang.dao.Preferences; import net.basilwang.dao.SemesterService; import net.basilwang.entity.Account; import net.basilwang.entity.Semester; import net.basilwang.utils.PreferenceUtils; import android.app.Activity; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.view.ActionMode; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; public class LogonPreferenceActivity extends SherlockActivity { private EditText mAccountTextbox; private EditText mUrlTextbox; private EditText mUserTextbox; private EditText mPassTextbox; private EditText mEntranceyear; // private Spinner mInterval; SharedPreferences preference = null; ActionMode mMode; /** Un used filed **/ // private Button mCheckSettings; public void initView() { mAccountTextbox = (EditText) findViewById(R.id.user_identifier); mAccountTextbox.setText(PreferenceUtils.getPreferUserName(this)); 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); mEntranceyear = (EditText) findViewById(R.id.entranceyear); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.synchronize_settings); // Drawable dr = // getResources().getDrawable(R.drawable.actionbar_bg_shape); getSupportActionBar().setIcon(R.drawable.ic_menu_cancel_holo_light); Drawable dr = getResources().getDrawable(R.drawable.actionbar_bgc); getSupportActionBar().setBackgroundDrawable(dr); getSupportActionBar().setDisplayHomeAsUpEnabled(true); setTitle(SAXParse.getTAConfiguration().getSelectedCollege().getName()); initView(); String tracksUrl = Preferences.getTracksUrl(this); 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(Preferences.getTracksUser(this)); mPassTextbox.setText(Preferences.getTracksPassword(this)); } @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) { LogonPreferenceActivity.this.finish(); } if (item.getTitle().equals("保存")) { if (saveNewUser()) { savePrefs(); LogonPreferenceActivity.this.finish(); } } return super.onOptionsItemSelected(item); } public Activity getActivity() { return this; } public String confirmTextBoxIsNotNull() { if (mAccountTextbox.getText().toString().trim().equals("")) return "帐号标识 不能为空"; if (mUserTextbox.getText().toString().trim().equals("")) return "学号不能为空"; if (mPassTextbox.getText().toString().equals("")) return "密码不能为空"; if (mEntranceyear.getText().toString().equals("")) return "入学年份不能为空"; int entracneYear = getEntranceyear(); if (entracneYear < 2005 || entracneYear > 2020) return "入学年份格式不正确"; return "OK"; } private boolean savePrefs() { SharedPreferences.Editor ed = Preferences.getEditor(this); URI uri = null; try { uri = new URI(mUrlTextbox.getText().toString()); } catch (URISyntaxException ignored) { } // 2012-05-18 王华杰 去掉空格 Account account = new Account(); account.setName(mAccountTextbox.getText().toString().trim()); account.setUrl(uri.toString()); account.setUserno(mUserTextbox.getText().toString().trim()); account.setPassword(mPassTextbox.getText().toString()); AccountService service = new AccountService(this); service.save(account); UserAndPassUtil.getInstance().setUsername( mUserTextbox.getText().toString()); UserAndPassUtil.getInstance().setPassword( mPassTextbox.getText().toString()); // 2012-09-29 basilwang save and set at the same time account = service.getAccountByName(account.getName()); ed.putInt(LOGON_ACCOUNT_ID, account.getId()); saveEntranceyearPrefer(ed); AddNewSemestersForAccount(account.getId()); ed.commit(); return true; } public int getEntranceyear() { return Integer.valueOf(mEntranceyear.getText().toString()); } public void saveEntranceyearPrefer(SharedPreferences.Editor ed) { ed.putInt(ENTRACETEAR, getEntranceyear()); } public void AddNewSemestersForAccount(int accountId) { new SemesterInit(getEntranceyear(), accountId); } public int getCurrentYear() { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); return cal.get(Calendar.YEAR); } public boolean saveNewUser() { String message = confirmTextBoxIsNotNull(); if (message.equals("OK") == false) { Toast.makeText(LogonPreferenceActivity.this, message, Toast.LENGTH_SHORT).show(); return false; } Toast.makeText(LogonPreferenceActivity.this, "保存成功", Toast.LENGTH_SHORT) .show(); return true; } public class SemesterInit { private SemesterService semesterService; public SemesterInit() { } public SemesterInit(int entranceYear, int accountId) { this.semesterService = new SemesterService(getActivity()); addNewSemesters(entranceYear, accountId); updateBeginAndEndDate(); } public void updateBeginAndEndDate() { String arrays[][] = { { "2012-09-01", "2013-01-28" }, { "2013-03-04", "2013-07-15" } }; String semesters[] = { "2012-2013|1", "2012-2013|2" }; DateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < arrays.length; i++) { try { long beginDate = dateFormate.parse(arrays[i][0]).getTime(); long endDate = dateFormate.parse(arrays[i][1]).getTime(); Semester semester = new Semester(semesters[i], beginDate, endDate); semesterService.updateBeginAndEndDataOfSemester(semester); } catch (ParseException e) { e.printStackTrace(); return; } } } public void addNewSemesters(int entranceYear, int accountId) { if (accountHasSemestersOrNot(semesterService, accountId) == true) { // true, account has semesters semesterService.deleteSemestersByAccountId(accountId); } semesterService.saveSemesterList(produceSemesters(entranceYear, accountId)); } /** * If account has semesters,drop them and add new semesters * * @return if account has semesters ,return true,otherwise,return false */ public boolean accountHasSemestersOrNot( SemesterService semesterService, int accountId) { if (semesterService.getSemestersByAccountId(accountId) == null) { return false; } return true; } public List<Semester> produceSemesters(int entranceYear, int accountId) { int index = getColleageYear(); String[] semesterNames = new String[index * 2]; int count = 0; for (int i = entranceYear; i < index + entranceYear; i++) { for (int j = 1; j <= 2; j++) { semesterNames[count] = i + "-" + (i + 1) + "|" + j; count++; } } List<Semester> semesters = new ArrayList<Semester>( semesterNames.length); for (int i = 0; i < semesterNames.length; i++) { Semester semester = new Semester(semesterNames[i], accountId); semesters.add(semester); } return semesters; } /** * @return The max years you may need to study in school */ public int getColleageYear() { return 5; } } }