package org.aisen.weibo.sina.ui.fragment.account;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.common.utils.ViewUtils;
import org.aisen.android.component.bitmaploader.BitmapLoader;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.network.task.WorkTask;
import org.aisen.android.support.inject.ViewInject;
import org.aisen.android.ui.activity.basic.BaseActivity;
import org.aisen.android.ui.fragment.ARecycleViewFragment;
import org.aisen.android.ui.fragment.adapter.ARecycleViewItemView;
import org.aisen.android.ui.fragment.itemview.IITemView;
import org.aisen.android.ui.fragment.itemview.IItemViewCreator;
import org.aisen.android.ui.widget.CircleImageView;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.base.AppContext;
import org.aisen.weibo.sina.base.MyApplication;
import org.aisen.weibo.sina.service.PublishService;
import org.aisen.weibo.sina.service.UnreadService;
import org.aisen.weibo.sina.service.notifier.UnreadCountNotifier;
import org.aisen.weibo.sina.service.publisher.PublishNotifier;
import org.aisen.weibo.sina.sinasdk.bean.UnreadCount;
import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser;
import org.aisen.weibo.sina.support.bean.AccountBean;
import org.aisen.weibo.sina.support.utils.AccountUtils;
import org.aisen.weibo.sina.support.utils.ImageConfigUtils;
import org.aisen.weibo.sina.support.utils.ThemeUtils;
import org.aisen.weibo.sina.support.utils.UMengUtil;
import org.aisen.weibo.sina.ui.activity.base.MainActivity;
import org.aisen.weibo.sina.ui.activity.base.SinaCommonActivity;
import org.aisen.weibo.sina.ui.fragment.base.BizFragment;
import java.util.ArrayList;
import java.util.List;
/**
* 账号列表,显示在左侧的菜单里面
*
* Created by wangdan on 16/1/21.
*/
public class AccountFragment extends ARecycleViewFragment<AccountBean, ArrayList<AccountBean>> {
public static final String TAG = "Account";
public static void launch(Activity from) {
SinaCommonActivity.launch(from, AccountFragment.class, null);
}
// 登录账号
public static void login(AccountBean accountBean, boolean toMain) {
if (AppContext.isLoggedIn()) {
// 1、清理定时发布
MyApplication.removeAllPublishAlarm();
// 2、清理正在发布的数据
PublishService.stopPublish();
// 3、重新开始读取未读消息
UnreadService.stopService();
// 4、清理未读消息
UnreadCountNotifier.mCount = new UnreadCount();
// 5、清理通知栏
PublishNotifier.cancelAll();
}
// 登录该账号
AppContext.login(accountBean);
AccountUtils.setLogedinAccount(accountBean);
// 进入首页
if (toMain) {
MainActivity.login();
MainActivity.runCheckAccountTask(accountBean);
}
}
@ViewInject(id = R.id.btnAccountAdd, click = "addAccount")
View btnAccountAdd;
@Override
public int inflateContentView() {
return R.layout.ui_account;
}
@Override
protected void setupRefreshConfig(RefreshConfig config) {
super.setupRefreshConfig(config);
config.footerMoreEnable = false;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
BaseActivity activity = (BaseActivity) getActivity();
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
activity.getSupportActionBar().setTitle(R.string.title_acount);
setHasOptionsMenu(true);
}
@Override
public IItemViewCreator<AccountBean> configItemViewCreator() {
return new IItemViewCreator<AccountBean>() {
@Override
public View newContentView(LayoutInflater inflater, ViewGroup parent, int viewType) {
return inflater.inflate(R.layout.item_account, parent, false);
}
@Override
public IITemView<AccountBean> newItemView(View convertView, int viewType) {
return new AccountItemView(convertView);
}
};
}
@Override
public void requestData(RefreshMode mode) {
new AccountTask().execute();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
final AccountBean account = getAdapterItems().get(position);
// 重新授权Aisen
if (account.getAccessToken() == null || account.getAccessToken().isExpired()) {
new AlertDialogWrapper.Builder(getActivity())
.setTitle(R.string.remind)
.setMessage(R.string.account_expired)
.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
WebLoginFragment.launch(AccountFragment.this, WebLoginFragment.Client.aisen, account.getAccount(), account.getPassword(), BizFragment.REQUEST_CODE_AUTH);
}
})
.show();
return;
}
login(account, true);
getActivity().finish();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_account, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 新增授权
if (item.getItemId() == R.id.add) {
addAccount(null);
}
return super.onOptionsItemSelected(item);
}
void addAccount(View v) {
WebLoginFragment.launch(this, WebLoginFragment.Client.aisen, null, null, BizFragment.REQUEST_CODE_AUTH);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == BizFragment.REQUEST_CODE_AUTH) {
if (resultCode == Activity.RESULT_CANCELED) {
}
else if (resultCode == Activity.RESULT_OK) {
AccountBean accountBean = (AccountBean) data.getSerializableExtra("account");
AccountUtils.newAccount(accountBean);
requestData(RefreshMode.reset);
}
}
}
class AccountItemView extends ARecycleViewItemView<AccountBean> {
@ViewInject(id = R.id.txtName)
TextView txtName;
@ViewInject(id = R.id.txtDesc)
TextView txtDesc;
@ViewInject(id = R.id.imgPhoto)
ImageView imgPhoto;
@ViewInject(id = R.id.viewCover)
CircleImageView viewCover;
@ViewInject(id = R.id.txtTokenInfo)
TextView txtTokenInfo;
@ViewInject(id = R.id.btnRight, click = "deleteAccount")
View btnRight;
@ViewInject(id = R.id.divider)
View divider;
ColorDrawable grayDrawable;
public AccountItemView(View itemView) {
super(getActivity(), itemView);
}
@Override
public void onBindData(View convertView, AccountBean data, int position) {
if (grayDrawable == null)
grayDrawable = new ColorDrawable(Color.parseColor("#99000000"));
WeiBoUser user = data.getUser();
BitmapLoader.getInstance().display(AccountFragment.this,
data.getUser().getAvatar_large(), imgPhoto, ImageConfigUtils.getPhotoConfig());
txtName.setText(user.getScreen_name());
txtDesc.setText(user.getDescription() + "");
txtTokenInfo.setText(R.string.account_relogin_remind);
if (data.getAccessToken() == null || data.getAccessToken().isExpired()) {
txtTokenInfo.setVisibility(View.VISIBLE);
} else {
txtTokenInfo.setVisibility(View.GONE);
}
if (AppContext.isLoggedIn())
viewCover.setVisibility(data.getUser().getIdstr().equals(AppContext.getAccount().getUser().getIdstr()) ? View.GONE : View.VISIBLE);
else
viewCover.setVisibility(View.VISIBLE);
viewCover.setImageDrawable(grayDrawable);
btnRight.setTag(data);
divider.setVisibility(itemPosition() == itemSize() - 1 ? View.GONE : View.VISIBLE);
}
void deleteAccount(View v) {
final AccountBean account = (AccountBean) v.getTag();
new AlertDialogWrapper.Builder(getActivity())
.setTitle(R.string.remind)
.setMessage(R.string.account_destory_account_remind)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
new WorkTask<Void, Void, Boolean>() {
@Override
protected void onPrepare() {
super.onPrepare();
ViewUtils.createProgressDialog(getActivity(), getString(R.string.account_delete_account_loading), ThemeUtils.getThemeColor()).show();
}
@Override
public Boolean workInBackground(Void... params) throws TaskException {
Logger.w(TAG, "删除账号 uid = " + account.getUid());
AccountUtils.remove(account.getUid());
// 如果是登录账号,退出登录
if (AppContext.isLoggedIn() && account.getUid().equals(AppContext.getAccount().getUser().getIdstr()))
AppContext.logout();
try {
Thread.sleep(300);
} catch (Exception e) {
}
return true;
}
@Override
protected void onSuccess(Boolean result) {
super.onSuccess(result);
ViewUtils.dismissProgressDialog();
requestData(RefreshMode.reset);
}
}.execute();
}
})
.show();
}
}
class AccountTask extends APagingTask<Void, Void, ArrayList<AccountBean>> {
public AccountTask() {
super(RefreshMode.reset);
}
@Override
protected List<AccountBean> parseResult(ArrayList<AccountBean> result) {
return result;
}
@Override
protected ArrayList<AccountBean> workInBackground(RefreshMode mode, String previousPage,
String nextPage, Void... params) throws TaskException {
return (ArrayList<AccountBean>) AccountUtils.queryAccount();
}
}
@Override
public boolean onBackClick() {
if (!AppContext.isLoggedIn()) {
new AlertDialogWrapper.Builder(getActivity()).setTitle(R.string.remind)
.setMessage(R.string.account_account_exit_remind)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// android.os.Process.killProcess(android.os.Process.myPid());
getActivity().finish();
}
})
.show();
return true;
}
return super.onBackClick();
}
@Override
public void onResume() {
super.onResume();
UMengUtil.onPageStart(getActivity(), getString(R.string.title_acount) + "页");
}
@Override
public void onPause() {
super.onPause();
UMengUtil.onPageEnd(getActivity(), getString(R.string.title_acount) + "页");
}
}