package net.dev123.yibo.service.task; import java.util.Date; import java.util.List; import net.dev123.commons.util.ListUtil; import net.dev123.commons.util.StringUtil; import net.dev123.exception.LibException; import net.dev123.yibo.AccountsActivity; import net.dev123.yibo.R; import net.dev123.yibo.YiBoApplication; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.GlobalVars; import net.dev123.yibo.common.ResourceBook; import net.dev123.yibo.common.YiBoMeUtil; import net.dev123.yibo.db.ConfigSystemDao; import net.dev123.yibo.db.LocalAccount; import net.dev123.yibo.db.LocalAccountDao; import net.dev123.yibo.service.adapter.AccountListAdapter; import net.dev123.yibome.YiBoMe; import net.dev123.yibome.entity.Account; import net.dev123.yibome.entity.AccountSyncResult; import android.app.ProgressDialog; import android.os.AsyncTask; import android.util.Log; import android.widget.Button; import android.widget.Toast; public class PassportSyncTask extends AsyncTask<Void, Void, Boolean> { private static final String TAG = PassportSyncTask.class.getSimpleName(); private AccountsActivity context; private AccountListAdapter alAdapter; private AccountSyncResult syncResult; private ProgressDialog progressDialog; private Button btnSync; private LocalAccountDao localAccountDao; private String message; public PassportSyncTask(AccountsActivity context) { this.context = context; this.alAdapter = context.getAccountListAdapter(); } @Override protected void onPreExecute() { btnSync = (Button) context.findViewById(R.id.btnAccountSync); btnSync.setEnabled(false); progressDialog = ProgressDialog.show(context, "", context.getString(R.string.msg_passport_syncing), true, false); progressDialog.setOwnerActivity(context); } @Override protected Boolean doInBackground(Void... arg) { boolean isSynced = false; localAccountDao = new LocalAccountDao(context); List<? extends Account> accountList = localAccountDao.findAll(); YiBoMe yiboMe = YiBoMeUtil.getYiBoMeOAuth(context); if (yiboMe == null) { return isSynced; } try { syncResult = yiboMe.syncAccounts(accountList); isSynced = localAccountDao.syncToDatabase(syncResult); } catch (LibException e) { if (Constants.DEBUG) { Log.d(TAG, e.getMessage()); } message = ResourceBook.getStatusCodeValue(e.getExceptionCode(), context); } return isSynced; } protected void onPostExecute(Boolean isSynced) { if (isSynced) { ConfigSystemDao configDao = new ConfigSystemDao(context); configDao.put(Constants.LAST_SYNC_TIME, new Date(), "最后同步时间"); List<LocalAccount> accountList = localAccountDao.findAllValid(); //判断同步完成后YiBo的当前用户是否为空,首次进入即同步的时候,是没有当前用户的 YiBoApplication yibo = (YiBoApplication) context.getApplication(); LocalAccount current = yibo.getCurrentAccount(); if (current != null) { // 重新从数据库取一次,因为当前帐号可能已被删除 current = localAccountDao.findById(current.getAccountId()); } if (current == null) { current = localAccountDao.getDefaultAccount(); if (current == null) { if (ListUtil.isNotEmpty(accountList)) { current = accountList.get(0); } } } yibo.setCurrentAccount(current); alAdapter.clear(); if (ListUtil.isNotEmpty(accountList)) { for (LocalAccount account : accountList) { alAdapter.add(account); } } alAdapter.notifyDataSetChanged(); GlobalVars.reloadAccounts(context); context.updatePassportView(); message = context.getString(R.string.msg_passport_sync_success); } try { if (progressDialog != null) { progressDialog.dismiss(); } } catch(Exception e) {} btnSync.setEnabled(true); if (StringUtil.isNotEmpty(message)) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } } }