package org.aisen.weibo.sina.ui.activity.base;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.app.Fragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import com.umeng.analytics.MobclickAgent;
import org.aisen.android.common.context.GlobalContext;
import org.aisen.android.common.md.MDHelper;
import org.aisen.android.common.utils.ActivityHelper;
import org.aisen.android.common.utils.Logger;
import org.aisen.weibo.sina.ui.widget.sheetfab.MaterialSheetFab;
import org.aisen.weibo.sina.ui.widget.sheetfab.MaterialSheetFabEventListener;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.network.task.WorkTask;
import org.aisen.android.support.action.IAction;
import org.aisen.android.support.inject.ViewInject;
import org.aisen.android.ui.activity.basic.BaseActivity;
import org.aisen.android.ui.fragment.ABaseFragment;
import org.aisen.android.ui.fragment.APagingFragment;
import org.aisen.android.ui.fragment.ATabsFragment;
import org.aisen.android.ui.fragment.ATabsTabLayoutFragment;
import org.aisen.android.ui.widget.AsToolbar;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.base.AppContext;
import org.aisen.weibo.sina.base.AppSettings;
import org.aisen.weibo.sina.service.OfflineService;
import org.aisen.weibo.sina.sinasdk.SinaSDK;
import org.aisen.weibo.sina.sinasdk.bean.Group;
import org.aisen.weibo.sina.sinasdk.bean.TokenInfo;
import org.aisen.weibo.sina.support.action.WebLoginAction;
import org.aisen.weibo.sina.support.bean.AccountBean;
import org.aisen.weibo.sina.support.utils.AccountUtils;
import org.aisen.weibo.sina.support.utils.OfflineUtils;
import org.aisen.weibo.sina.support.utils.ThemeUtils;
import org.aisen.weibo.sina.ui.activity.profile.WeiboClientActivity;
import org.aisen.weibo.sina.ui.activity.publish.PublishActivity;
import org.aisen.weibo.sina.ui.fragment.account.WebLoginFragment;
import org.aisen.weibo.sina.ui.fragment.base.BizFragment;
import org.aisen.weibo.sina.ui.fragment.comment.CommentPagerFragment;
import org.aisen.weibo.sina.ui.fragment.comment.NotificationPagerFragment;
import org.aisen.weibo.sina.ui.fragment.draft.DraftFragment;
import org.aisen.weibo.sina.ui.fragment.friendship.FriendshipPagerFragment;
import org.aisen.weibo.sina.ui.fragment.mention.MentionPagerFragment;
import org.aisen.weibo.sina.ui.fragment.menu.FabGroupsFragment;
import org.aisen.weibo.sina.ui.fragment.menu.MenuFragment;
import org.aisen.weibo.sina.ui.fragment.search.SearchFragment;
import org.aisen.weibo.sina.ui.fragment.secondgroups.JokesPagerFragment;
import org.aisen.weibo.sina.ui.fragment.secondgroups.WallpaperFragment;
import org.aisen.weibo.sina.ui.fragment.settings.CacheClearFragment;
import org.aisen.weibo.sina.ui.fragment.settings.NotificationSettingsFragment;
import org.aisen.weibo.sina.ui.fragment.settings.OtherItemFragment;
import org.aisen.weibo.sina.ui.fragment.settings.SettingsPagerFragment;
import org.aisen.weibo.sina.ui.fragment.timeline.TimelineDefFragment;
import org.aisen.weibo.sina.ui.fragment.timeline.TimelineGroupsFragment;
import org.aisen.weibo.sina.ui.widget.MainFloatingActionButton;
import java.util.ArrayList;
/**
* 首页,维护各菜单的切换,响应各种Intent事件<br/>
* 参照这两个链接:
* 1、http://www.soloho.cc/blog/how-do-i-use-drawerlayout-to-display-over-the-actionbar-or-toolbar-and-under-the-status-bar
* 2、http://www.jianshu.com/p/ab937c80ed6e
*
* Created by wangdan on 15/4/23.
*/
public class MainActivity extends BaseActivity
implements FabGroupsFragment.OnFabGroupSelectedCallback, MenuFragment.OnMenuCallback, AisenActivityHelper.EnableSwipeback {
public static final String ACTION_LOGIN = "org.aisen.sina.weibo.ACTION_LOGIN";
public static final String ACTION_NOTIFICATION = "org.aisen.sina.weibo.ACTION_NOTIFICATION";
public static final String ACTION_NOTIFICATION_MS = "org.aisen.sina.weibo.ACTION_NOTIFICATION_MS";
public static final String ACTION_NOTIFICATION_MC = "org.aisen.sina.weibo.ACTION_NOTIFICATION_MC";
public static final int REQUEST_CODE_AUTH = 11156;
private static MainActivity mInstance;
@ViewInject(id = R.id.drawer)
private DrawerLayout mDrawerLayout;
@ViewInject(id = R.id.fab)
MainFloatingActionButton fabBtn;
@ViewInject(id = R.id.appbar)
AppBarLayout appBarLayout;
@ViewInject(id = R.id.tabLayout)
TabLayout tabLayout;
private ActionBarDrawerToggle drawerToggle;
private MaterialSheetFab materialSheetFab;
private MenuFragment menuFragment;
private FabGroupsFragment fabGroupsFragment;
private int newIntentNotificationIndex = -1;
private String toolbarTitle;
public static void login() {
Intent intent = new Intent(GlobalContext.getInstance(), MainActivity.class);
intent.setAction(ACTION_LOGIN);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
GlobalContext.getInstance().startActivity(intent);
}
public static MainActivity getInstance() {
return mInstance;
}
@Override
public void onDestroy() {
super.onDestroy();
mInstance = null;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ui_main);
CacheClearFragment.clearCompress();
BizFragment bizFragment = BizFragment.createBizFragment(this);
bizFragment.createFabAnimator(fabBtn);
fabBtn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// 触发一次刷新
((AsToolbar) getToolbar()).performDoublcClick();
appBarLayout.setExpanded(true);
return true;
}
});
bizFragment.getFabAnimator().setDuration(200);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(false);
setupDrawer(savedInstanceState);
setupMenu(savedInstanceState);
setupFab(savedInstanceState);
setupAppBarLayout(savedInstanceState);
if (savedInstanceState != null) {
toolbarTitle = savedInstanceState.getString("toolbarTitle");
if (!TextUtils.isEmpty(toolbarTitle))
getSupportActionBar().setTitle(toolbarTitle);
}
mInstance = this;
OtherItemFragment.checkPhotoPermission(this, true);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (!TextUtils.isEmpty(toolbarTitle))
outState.putString("toolbarTitle", toolbarTitle);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent == null)
return;
String action = intent.getAction();
// 切换账号
if (ACTION_LOGIN.equals(action)) {
setupFab(null);
menuFragment.changeAccount();
}
else {
if (ACTION_NOTIFICATION.equals(action) && MenuFragment.MENU_FRIENDSHIP == Integer.parseInt(intent.getStringExtra("type"))) {
FriendshipPagerFragment.launch(this, AppContext.getAccount().getUser(), 1);
}
else {
int menuId = getActionType(intent, action);
menuFragment.triggerMenuClick(menuId);
}
}
}
private int getActionType(Intent intent, String action) {
int type = MenuFragment.MENU_MAIN;
// 处理点击Notification时,设置显示菜单
if (ACTION_LOGIN.equals(action)) {
type = MenuFragment.MENU_MAIN;
}
// 新通知
else if (ACTION_NOTIFICATION.equals(action)) {
type = Integer.parseInt(intent.getStringExtra("type"));
if (type == MenuFragment.MENU_CMT) {
newIntentNotificationIndex = 0;
type = MenuFragment.MENU_NOTIFICATION;
}
}
// 新提及微博
else if (ACTION_NOTIFICATION_MS.equals(action)) {
ActivityHelper.putShareData(this, "showMensitonType", "showMentionStatus");
newIntentNotificationIndex = 1;
type = MenuFragment.MENU_NOTIFICATION;
}
// 新提及评论
else if (ACTION_NOTIFICATION_MC.equals(action)) {
ActivityHelper.putShareData(this, "showMensitonType", "showMentionCmt");
newIntentNotificationIndex = 2;
type = MenuFragment.MENU_NOTIFICATION;
}
return type;
}
private void setupDrawer(Bundle savedInstanceState) {
drawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
getToolbar(), R.string.draw_open, R.string.draw_close) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
}
private void setupMenu(Bundle savedInstanceState) {
if (savedInstanceState == null) {
int menuId = MenuFragment.MENU_MAIN;
Intent intent = getIntent();
if (intent != null && !TextUtils.isEmpty(intent.getAction())) {
menuId = getActionType(intent, intent.getAction());
}
if (menuId == MenuFragment.MENU_MD) {
menuFragment = MenuFragment.newInstance(MenuFragment.MENU_MD);
getFragmentManager().beginTransaction().add(R.id.menu_frame, menuFragment, "MenuFragment").commit();
}
else if (menuId == MenuFragment.MENU_FRIENDSHIP) {
menuFragment = MenuFragment.newInstance(MenuFragment.MENU_MAIN);
getFragmentManager().beginTransaction().add(R.id.menu_frame, menuFragment, "MenuFragment").commit();
FriendshipPagerFragment.launch(this, AppContext.getAccount().getUser(), 1);
}
else {
menuFragment = MenuFragment.newInstance(menuId);
getFragmentManager().beginTransaction().add(R.id.menu_frame, menuFragment, "MenuFragment").commit();
}
}
else {
menuFragment = (MenuFragment) getFragmentManager().findFragmentByTag("MenuFragment");
}
}
private void setupFab(Bundle savedInstanceState) {
ArrayList<Group> groupList = new ArrayList<>();
// 全部微博
Group group = new Group();
group.setName(getString(R.string.timeline_all));
group.setId("statusesFriendsTimeLine");
groupList.add(group);
// 互相关注
group = new Group();
group.setName(getString(R.string.timeline_bilateral));
group.setId("statusesBilateralTimeLine");
groupList.add(group);
// 发给我的
group = new Group();
group.setName(getString(R.string.timeline_tome));
group.setId("statusesToMe");
groupList.add(group);
// 分组微博
groupList.addAll(AppContext.getAccount().getGroups().getLists());
fabGroupsFragment = (FabGroupsFragment) getFragmentManager().findFragmentById(R.id.fragmentFabGroups);
fabGroupsFragment.resetSelectedPosition();
fabGroupsFragment.setItems(groupList);
View sheetView = findViewById(R.id.fab_sheet);
View overlay = findViewById(R.id.overlay);
int sheetColor = getResources().getColor(R.color.comm_white);
int fabColor = MDHelper.resolveColor(this, R.attr.colorPrimary, Color.BLACK);
materialSheetFab = new MaterialSheetFab(fabBtn, sheetView, overlay, sheetColor, fabColor);
materialSheetFab.setEventListener(new MaterialSheetFabEventListener() {
@Override
public void onShowSheet() {
super.onShowSheet();
fabGroupsFragment.show();
MobclickAgent.onEvent(MainActivity.this, "fab_groups");
}
});
materialSheetFab.showFab();
}
private void setupAppBarLayout(Bundle savedInstanceState) {
// 随着ToolBar的移动,来控制Fab的显示和隐藏
// appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
//
// @Override
// public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
// float percent = Math.abs(verticalOffset) * 1.0f / SystemUtils.getActionBarHeight(MainActivity.this);
//
// int translationY = fabBtn.getHeight() + getResources().getDimensionPixelSize(R.dimen.fab_spacing);
// fabBtn.setTranslationY(translationY * (percent));
// }
//
// });
if (savedInstanceState != null) {
Fragment fragment = getFragmentManager().findFragmentByTag("MainFragment");
// 如果是TabsFragment,显示TabLayout
if (fragment != null) {
if (fragment instanceof ATabsFragment) {
tabLayout.setVisibility(View.VISIBLE);
}
else {
tabLayout.setVisibility(View.GONE);
}
// 显示AppBarLayout
appBarLayout.setExpanded(true, true);
}
}
}
/**
* 选择了侧边栏,切换侧边栏菜单
*
* @param item
* @return
*/
@Override
public void onMenuClicked(MenuFragment.NavMenuItem item, boolean closeDrawer) {
invalidateOptionsMenu();
ABaseFragment fragment = null;
// 切换ContentFragment,或者跳转到新的界面
switch (item.id) {
// 首页
case MenuFragment.MENU_MAIN:
fabGroupsFragment.triggerLastPosition();
break;
// 通知
case MenuFragment.MENU_NOTIFICATION:
fragment = NotificationPagerFragment.newInstance(newIntentNotificationIndex);
newIntentNotificationIndex = -1;
break;
// 提及
case MenuFragment.MENU_MENTION:
fragment = MentionPagerFragment.newInstance();
break;
// 评论
case MenuFragment.MENU_CMT:
fragment = CommentPagerFragment.newInstance();
break;
// 私信
case MenuFragment.MENU_MD:
new IAction(MainActivity.this, new WebLoginAction(MainActivity.this, BizFragment.createBizFragment(this))) {
@Override
public void doAction() {
WeiboClientActivity.launchDM(MainActivity.this);
}
}.run();
MobclickAgent.onEvent(MainActivity.this, "md");
break;
// 热门微博
case MenuFragment.MENU_HOT_STATUS:
WeiboClientActivity.launchHotStatuses(this);
MobclickAgent.onEvent(MainActivity.this, "hot_status");
break;
// 草稿箱
case MenuFragment.MENU_DRAT:
fragment = DraftFragment.newInstance();
break;
// 设置
case MenuFragment.MENU_SETTINGS:
SettingsPagerFragment.launch(this);
break;
// 轻松一刻
case MenuFragment.MENU_JOKE:
fragment = JokesPagerFragment.newInstance();
MobclickAgent.onEvent(this, "menu_joke");
break;
// 精美壁纸
case MenuFragment.MENU_WALLPAPER:
fragment = WallpaperFragment.newInstance();
MobclickAgent.onEvent(this, "menu_wallpaper");
break;
}
if (fragment != null) {
setFragemnt(fragment, getString(item.toolbarRes));
}
// 隐藏Fab按钮
if (item.id == 1) {
fabBtn.setVisibility(View.VISIBLE);
// 显示Fab
BizFragment.createBizFragment(this).getFabAnimator().show();
}
else {
fabBtn.setVisibility(View.GONE);
}
// 关闭侧边栏
if (closeDrawer) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
closeDrawer();
}
}, 300);
}
}
@Override
public boolean onMenuSelected(MenuFragment.NavMenuItem item) {
// 设置可以选中的菜单项
switch (item.id) {
// 首页
case MenuFragment.MENU_MAIN:
// 通知
case MenuFragment.MENU_NOTIFICATION:
// 提及
case MenuFragment.MENU_MENTION:
// 评论
case MenuFragment.MENU_CMT:
// 草稿箱
case MenuFragment.MENU_DRAT:
// 轻松一刻
case MenuFragment.MENU_JOKE:
// 精美壁纸
case MenuFragment.MENU_WALLPAPER:
return true;
default:
return false;
}
}
@Override
public boolean onMenuSameClicked(MenuFragment.NavMenuItem item) {
invalidateOptionsMenu();
// 重复点击了通知
if (item.id == MenuFragment.MENU_NOTIFICATION) {
Fragment fragment = getFragmentManager().findFragmentByTag("MainFragment");
if (fragment instanceof ATabsTabLayoutFragment && newIntentNotificationIndex != -1) {
ATabsTabLayoutFragment tabsTabLayoutFragment = (ATabsTabLayoutFragment) fragment;
tabsTabLayoutFragment.getViewPager().setCurrentItem(newIntentNotificationIndex);
((APagingFragment) tabsTabLayoutFragment.getCurrentFragment()).requestDataDelaySetRefreshing(AppSettings.REQUEST_DATA_DELAY);
newIntentNotificationIndex = -1;
}
}
closeDrawer();
return true;
}
/**
* 选择了分组,切换查看分组微博
*
* @param position
* @param group
*/
@Override
public void onGroupSelected(int position, Group group) {
Fragment fragment = null;
if (position <= 2) {
fragment = TimelineDefFragment.newInstance(group.getId());
}
else {
fragment = TimelineGroupsFragment.newInstance(group);
}
setFragemnt(fragment, group.getName());
if (materialSheetFab.isSheetVisible()) {
materialSheetFab.hideSheet();
}
}
private void setFragemnt(final Fragment fragment, CharSequence title) {
if (fragment == null)
return;
toolbarTitle = title.toString();
getSupportActionBar().setTitle(toolbarTitle);
// 如果是TabsFragment,显示TabLayout
if (fragment instanceof ATabsFragment) {
tabLayout.setVisibility(View.VISIBLE);
}
else {
tabLayout.setVisibility(View.GONE);
}
// 显示AppBarLayout
appBarLayout.setExpanded(true, true);
// .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
View view = findViewById(R.id.content_frame);
view.setAlpha(0.0f);
ObjectAnimator anim = ObjectAnimator.ofFloat(view, "alpha", view.getAlpha(), 1.0f);
anim.setDuration(600);
anim.start();
getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment, "MainFragment").commit();
}
private Handler mHandler = new Handler();
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
if (drawerToggle != null)
drawerToggle.syncState();
}
public boolean isDrawerOpened() {
return mDrawerLayout.isDrawerOpen(Gravity.LEFT) || mDrawerLayout.isDrawerOpen(Gravity.RIGHT);
}
public void closeDrawer() {
mDrawerLayout.closeDrawers();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.publish).setVisible(AppSettings.getFabBtnType() == 1);
if (OfflineService.getInstance() == null || OfflineService.getInstance().getStatus() == OfflineService.OfflineStatus.init ||
OfflineService.getInstance().getStatus() == OfflineService.OfflineStatus.finished) {
menu.findItem(R.id.toggle_offline).setVisible(true);
menu.findItem(R.id.stop_offline).setVisible(false);
}
else {
menu.findItem(R.id.toggle_offline).setVisible(false);
menu.findItem(R.id.stop_offline).setVisible(true);
}
menu.findItem(R.id.notification_settings).setVisible(menuFragment.getSelectedId() == MenuFragment.MENU_NOTIFICATION);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle != null && drawerToggle.onOptionsItemSelected(item))
return true;
if (android.R.id.home == item.getItemId()) {
if (mDrawerLayout.isDrawerVisible(GravityCompat.START))
mDrawerLayout.closeDrawers();
else
mDrawerLayout.openDrawer(GravityCompat.START);
return true;
}
// 关于
// if (item.getItemId() == R.id.about)
// AboutWebFragment.launchAbout(this);
// 意见反馈
// else if (item.getItemId() == R.id.feedback)
// PublishActivity.publishFeedback(this);
// 退出
if (item.getItemId() == R.id.exitapp) {
finish();
MobclickAgent.onEvent(this, "exitapp");
}
// 新微博
else if (item.getItemId() == R.id.publish)
PublishActivity.publishStatus(this, null);
// 开始离线
else if (item.getItemId() == R.id.toggle_offline) {
OfflineUtils.toggleOffline(this);
MobclickAgent.onEvent(this, "toggle_offline");
}
// 停止离线
else if (item.getItemId() == R.id.stop_offline) {
OfflineService.stopOffline();
MobclickAgent.onEvent(this, "stop_offline");
}
// 通知设置
else if (item.getItemId() == R.id.notification_settings)
NotificationSettingsFragment.launch(this);
// 搜索
else if (item.getItemId() == R.id.search) {
new IAction(MainActivity.this, new WebLoginAction(MainActivity.this, BizFragment.createBizFragment(this))) {
@Override
public void doAction() {
SearchFragment.launch(MainActivity.this, "");
MobclickAgent.onEvent(MainActivity.this, "toggle_search");
}
}.run();
}
return super.onOptionsItemSelected(item);
}
private boolean canFinish = false;
@Override
public boolean onBackClick() {
if (AppSettings.isAppResident()) {
// if (menuFragment.backToMain()) {
// return true;
// } else {
if (isDrawerOpened()) {
closeDrawer();
return true;
}
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
// }
return true;
}
else {
if (!canFinish) {
canFinish = true;
showMessage(R.string.hint_exit);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
canFinish = false;
}
}, 1500);
return true;
}
return super.onBackClick();
}
}
@Override
protected void onResume() {
super.onResume();
// 修复偶尔Fab按钮不见了
if (menuFragment != null && menuFragment.getSelectedId() == 1) {
if (fabBtn.getVisibility() != View.VISIBLE) {
fabBtn.setVisibility(View.VISIBLE);
}
}
if (!AppContext.isLoggedIn()) {
finish();
return;
}
if (AppContext.getAccount().getAccessToken().isExpired()) {
requestLogin(this, AppContext.getAccount());
}
invalidateOptionsMenu();
}
@Override
protected int configTheme() {
return ThemeUtils.themeArr[AppSettings.getThemeColor()][1];
}
@Override
public boolean canSwipe() {
return false;
}
public static void runCheckAccountTask(AccountBean account) {
// 已经过期了就不用检查了
if (!account.getAccessToken().isExpired()) {
new CheckAccountValidTask().execute(account);
}
}
public static class CheckAccountValidTask extends WorkTask<AccountBean, Void, TokenInfo> {
@Override
public TokenInfo workInBackground(AccountBean... params) throws TaskException {
Logger.w("run CheckAccountValidTask");
TokenInfo token = null;
TokenInfo adToken = null;
try {
AccountBean account = params[0];
// Aisen授权
try {
token = SinaSDK.getInstance(account.getAccessToken()).getTokenInfo(account.getAccessToken().getToken());
} catch (TaskException e) {
e.printStackTrace();
if ("21327".equals(e.getCode()) ||
"21317".equals(e.getCode())) {
token = new TokenInfo();
token.setExpire_in(0);
}
}
if (token != null)
account.getAccessToken().setExpires_in(token.getExpire_in());
// Weico授权
try {
if (account.getAdvancedToken() != null)
adToken = SinaSDK.getInstance(account.getAdvancedToken()).getTokenInfo(account.getAdvancedToken().getToken());
else {
adToken = new TokenInfo();
adToken.setExpire_in(0);
}
} catch (TaskException e) {
e.printStackTrace();
if ("21327".equals(e.getCode()) ||
"21317".equals(e.getCode())) {
adToken = new TokenInfo();
adToken.setExpire_in(0);
}
}
if (account.getAdvancedToken() != null && adToken != null)
account.getAdvancedToken().setExpires_in(adToken.getExpire_in());
} catch (Throwable e) {
}
if (token != null) {
token.setUid(params[0].getUid());
}
return token;
}
@Override
protected void onSuccess(TokenInfo tokenInfo) {
super.onSuccess(tokenInfo);
// 同一登录账户
if (tokenInfo != null && AppContext.isLoggedIn() && AppContext.getAccount().getUid().equals(tokenInfo.getUid())) {
if (BaseActivity.getRunningActivity() != null && BaseActivity.getRunningActivity() instanceof MainActivity) {
if (getParams()[0].getAccessToken().isExpired())
requestLogin(BaseActivity.getRunningActivity(), getParams()[0]);
}
}
}
}
private static void requestLogin(final Activity activity, final AccountBean account) {
new AlertDialogWrapper.Builder(activity)
.setMessage(R.string.account_account_expired)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.account_relogin, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
WebLoginFragment.launch(activity, WebLoginFragment.Client.aisen, account.getAccount(), account.getPassword(), REQUEST_CODE_AUTH);
}
})
.show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_AUTH) {
if (resultCode == Activity.RESULT_OK) {
AccountBean accountBean = (AccountBean) data.getSerializableExtra("account");
AppContext.getAccount().setAccessToken(accountBean.getAccessToken());
if (accountBean.getUser() != null) {
AppContext.getAccount().setUser(accountBean.getUser());
}
if (accountBean.getGroups() != null) {
AppContext.getAccount().setGroups(accountBean.getGroups());
}
AccountUtils.newAccount(AppContext.getAccount());
AccountUtils.setLogedinAccount(AppContext.getAccount());
login();
}
}
}
}