/**
* Copyright (c) 2016, smuyyh@gmail.com All Rights Reserved.
* # #
* # _oo0oo_ #
* # o8888888o #
* # 88" . "88 #
* # (| -_- |) #
* # 0\ = /0 #
* # ___/`---'\___ #
* # .' \\| |# '. #
* # / \\||| : |||# \ #
* # / _||||| -:- |||||- \ #
* # | | \\\ - #/ | | #
* # | \_| ''\---/'' |_/ | #
* # \ .-\__ '-' ___/-. / #
* # ___'. .' /--.--\ `. .'___ #
* # ."" '< `.___\_<|>_/___.' >' "". #
* # | | : `- \`.;`\ _ /`;.`/ - ` : | | #
* # \ \ `_. \_ __\ /__ _/ .-` / / #
* # =====`-.____`.___ \_____/___.-`___.-'===== #
* # `=---=' #
* # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #
* # #
* # 佛祖保佑 永无BUG #
* # #
*/
package com.justwayward.reader.ui.activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.view.menu.MenuBuilder;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import com.google.gson.Gson;
import com.justwayward.reader.R;
import com.justwayward.reader.base.BaseActivity;
import com.justwayward.reader.base.Constant;
import com.justwayward.reader.bean.user.TencentLoginResult;
import com.justwayward.reader.component.AppComponent;
import com.justwayward.reader.component.DaggerMainComponent;
import com.justwayward.reader.manager.EventManager;
import com.justwayward.reader.manager.SettingManager;
import com.justwayward.reader.service.DownloadBookService;
import com.justwayward.reader.ui.contract.MainContract;
import com.justwayward.reader.ui.fragment.CommunityFragment;
import com.justwayward.reader.ui.fragment.FindFragment;
import com.justwayward.reader.ui.fragment.RecommendFragment;
import com.justwayward.reader.ui.presenter.MainActivityPresenter;
import com.justwayward.reader.utils.LogUtils;
import com.justwayward.reader.utils.SharedPreferencesUtil;
import com.justwayward.reader.utils.ToastUtils;
import com.justwayward.reader.view.GenderPopupWindow;
import com.justwayward.reader.view.LoginPopupWindow;
import com.justwayward.reader.view.RVPIndicator;
import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import org.json.JSONObject;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
import butterknife.Bind;
/**
* https://github.com/JustWayward/BookReader
*/
public class MainActivity extends BaseActivity implements MainContract.View, LoginPopupWindow.LoginTypeListener {
@Bind(R.id.indicator)
RVPIndicator mIndicator;
@Bind(R.id.viewpager)
ViewPager mViewPager;
private List<Fragment> mTabContents;
private FragmentPagerAdapter mAdapter;
private List<String> mDatas;
@Inject
MainActivityPresenter mPresenter;
// 退出时间
private long currentBackPressedTime = 0;
// 退出间隔
private static final int BACK_PRESSED_INTERVAL = 2000;
private LoginPopupWindow popupWindow;
public static Tencent mTencent;
public IUiListener loginListener;
private GenderPopupWindow genderPopupWindow;
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void setupActivityComponent(AppComponent appComponent) {
DaggerMainComponent.builder()
.appComponent(appComponent)
.build()
.inject(this);
}
@Override
public void initToolBar() {
mCommonToolbar.setLogo(R.mipmap.logo);
setTitle("");
}
@Override
public void initDatas() {
startService(new Intent(this, DownloadBookService.class));
mTencent = Tencent.createInstance("1105670298", MainActivity.this);
mDatas = Arrays.asList(getResources().getStringArray(R.array.home_tabs));
mTabContents = new ArrayList<>();
mTabContents.add(new RecommendFragment());
mTabContents.add(new CommunityFragment());
mTabContents.add(new FindFragment());
mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return mTabContents.size();
}
@Override
public Fragment getItem(int position) {
return mTabContents.get(position);
}
};
}
@Override
public void configViews() {
mIndicator.setTabItemTitles(mDatas);
mViewPager.setAdapter(mAdapter);
mViewPager.setOffscreenPageLimit(3);
mIndicator.setViewPager(mViewPager, 0);
mPresenter.attachView(this);
mIndicator.postDelayed(new Runnable() {
@Override
public void run() {
showChooseSexPopupWindow();
}
}, 500);
}
public void showChooseSexPopupWindow() {
if (genderPopupWindow == null) {
genderPopupWindow = new GenderPopupWindow(MainActivity.this);
}
if (!SettingManager.getInstance().isUserChooseSex()
&& !genderPopupWindow.isShowing()) {
genderPopupWindow.showAtLocation(mCommonToolbar, Gravity.CENTER, 0, 0);
}
}
public void setCurrentItem(int position) {
mViewPager.setCurrentItem(position);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_search:
startActivity(new Intent(MainActivity.this, SearchActivity.class));
break;
case R.id.action_login:
if (popupWindow == null) {
popupWindow = new LoginPopupWindow(this);
popupWindow.setLoginTypeListener(this);
}
popupWindow.showAtLocation(mCommonToolbar, Gravity.CENTER, 0, 0);
break;
case R.id.action_my_message:
if (popupWindow == null) {
popupWindow = new LoginPopupWindow(this);
popupWindow.setLoginTypeListener(this);
}
popupWindow.showAtLocation(mCommonToolbar, Gravity.CENTER, 0, 0);
break;
case R.id.action_sync_bookshelf:
showDialog();
mPresenter.syncBookShelf();
/* if (popupWindow == null) {
popupWindow = new LoginPopupWindow(this);
popupWindow.setLoginTypeListener(this);
}
popupWindow.showAtLocation(mCommonToolbar, Gravity.CENTER, 0, 0);*/
break;
case R.id.action_scan_local_book:
ScanLocalBookActivity.startActivity(this);
break;
case R.id.action_wifi_book:
WifiBookActivity.startActivity(this);
break;
case R.id.action_feedback:
FeedbackActivity.startActivity(this);
break;
case R.id.action_night_mode:
if (SharedPreferencesUtil.getInstance().getBoolean(Constant.ISNIGHT, false)) {
SharedPreferencesUtil.getInstance().putBoolean(Constant.ISNIGHT, false);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
} else {
SharedPreferencesUtil.getInstance().putBoolean(Constant.ISNIGHT, true);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
recreate();
break;
case R.id.action_settings:
SettingActivity.startActivity(this);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - currentBackPressedTime > BACK_PRESSED_INTERVAL) {
currentBackPressedTime = System.currentTimeMillis();
ToastUtils.showToast(getString(R.string.exit_tips));
return true;
} else {
finish(); // 退出
}
} else if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
return true;
}
return super.dispatchKeyEvent(event);
}
/**
* 显示item中的图片;
*
* @param view
* @param menu
* @return
*/
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
if (menu != null) {
if (menu.getClass() == MenuBuilder.class) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onPrepareOptionsPanel(view, menu);
}
@Override
public void loginSuccess() {
ToastUtils.showSingleToast("登陆成功");
}
@Override
public void syncBookShelfCompleted() {
dismissDialog();
EventManager.refreshCollectionList();
}
@Override
public void onLogin(ImageView view, String type) {
if (type.equals("QQ")) {
if (!mTencent.isSessionValid()) {
if (loginListener == null) loginListener = new BaseUIListener();
mTencent.login(this, "all", loginListener);
}
}
//4f45e920ff5d1a0e29d997986cd97181
}
@Override
public void showError() {
ToastUtils.showSingleToast("同步异常");
dismissDialog();
}
@Override
public void complete() {
}
public class BaseUIListener implements IUiListener {
@Override
public void onComplete(Object o) {
JSONObject jsonObject = (JSONObject) o;
String json = jsonObject.toString();
Gson gson = new Gson();
TencentLoginResult result = gson.fromJson(json, TencentLoginResult.class);
LogUtils.e(result.toString());
mPresenter.login(result.openid, result.access_token, "QQ");
}
@Override
public void onError(UiError uiError) {
}
@Override
public void onCancel() {
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) {
Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onDestroy() {
super.onDestroy();
DownloadBookService.cancel();
stopService(new Intent(this, DownloadBookService.class));
if (mPresenter != null) {
mPresenter.detachView();
}
}
}