package com.pandaq.pandaeye.activities;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.design.widget.BottomSheetBehavior;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.pandaq.pandaeye.BaseActivity;
import com.pandaq.pandaeye.R;
import com.pandaq.pandaeye.modules.news.NewsMainFragment;
import com.pandaq.pandaeye.modules.setting.ChoosePhotoActivity;
import com.pandaq.pandaeye.modules.setting.aboutme.AboutActivity;
import com.pandaq.pandaeye.modules.video.videohome.mvp.VideoHomeFragment;
import com.pandaq.pandaeye.modules.zhihu.home.mvp.ZhihuDailyFragment;
import com.pandaq.pandaeye.rxbus.RxBus;
import com.pandaq.pandaeye.rxbus.RxConstants;
import com.pandaq.pandaeye.utils.BlurImageUtils;
import com.pandaq.pandaeye.utils.DataCleanManager;
import com.pandaq.pandaeye.utils.ViewUtils;
import com.pandaq.pandaeye.widget.NavItem;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import butterknife.BindView;
import butterknife.ButterKnife;
import de.hdodenhof.circleimageview.CircleImageView;
/**
* Created by PandaQ on 2016/9/7.
* email : 767807368@qq.com
*/
public class MainActivity extends BaseActivity implements BottomNavigationBar.OnTabSelectedListener, View.OnClickListener {
private final int ABOUT_ME = 10;
private final int FAVORITE = 11;
private final int VIDEO = 12;
private final int SHARE = 13;
@BindView(R.id.drawer_layout)
DrawerLayout mDrawerLayout;
@BindView(R.id.bottom_navgation)
BottomNavigationBar mBottomNavgation;
@BindView(R.id.fl_bottom_navgation)
FrameLayout mFlBottomNavgation;
@BindView(R.id.userimage)
CircleImageView mUserimage;
@BindView(R.id.navigation_header_container)
LinearLayout mNavigationHeaderContainer;
private Fragment mCurrentFrag;
private FragmentManager fm;
private Fragment mZhihuFragment;
private Fragment mNewsFragment;
private Fragment mBubbleFragment;
private BottomSheetBehavior mBottomSheetBehavior;
private boolean drawerOpen = false;
private NavItem mCleanItem;
private int drawerIntentAction;
private final int ACTION_GET_PIC = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
fm = getSupportFragmentManager();
mBottomSheetBehavior = BottomSheetBehavior.from(mFlBottomNavgation);
mBottomSheetBehavior.setPeekHeight(0);
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
initView();
}
float down_y;
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (drawerOpen) {
return super.dispatchTouchEvent(event);
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
down_y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
if (event.getY() - down_y > 20) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
if (event.getY() - down_y < -150) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
break;
case MotionEvent.ACTION_UP:
if (event.getY() - down_y > 20) {
if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
}
if (event.getY() - down_y < -150) {
if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_COLLAPSED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
break;
}
return super.dispatchTouchEvent(event);
}
/**
* 几个Fragment都采用懒加载的方式,只有当用户可见状态下才做数据初始化操作
*/
private void initView() {
mZhihuFragment = new ZhihuDailyFragment();
mBubbleFragment = new VideoHomeFragment();
mNewsFragment = new NewsMainFragment();
Picasso.with(this)
.load("file://" + ViewUtils.getAppFile(this, "images/user.png"))
.error(getResources().getDrawable(R.drawable.userimage))
.into(mUserimage, new Callback() {
@Override
public void onSuccess() {
Bitmap overlay = BlurImageUtils.blur(mUserimage, 3, 3);
mNavigationHeaderContainer.setBackground(new BitmapDrawable(getResources(), overlay));
}
@Override
public void onError() {
Bitmap overlay = BlurImageUtils.blur(mUserimage, 3, 3);
mNavigationHeaderContainer.setBackground(new BitmapDrawable(getResources(), overlay));
}
});
initNavigation();
switchContent(mZhihuFragment);
mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
drawerView.setClickable(true);
drawerOpen = true;
mCleanItem.setTvActionState(DataCleanManager.getTotalCacheSize(MainActivity.this));
// action 初始化
drawerIntentAction = 0;
}
@Override
public void onDrawerClosed(View drawerView) {
drawerOpen = false;
switch (drawerIntentAction) {
case FAVORITE:
break;
case VIDEO:
break;
case ABOUT_ME:
Intent intent = new Intent(MainActivity.this, AboutActivity.class);
startActivity(intent);
break;
case SHARE:
break;
default:
break;
}
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
mUserimage.setOnClickListener(this);
mDrawerLayout.findViewById(R.id.nav_favorite).setOnClickListener(this);
mDrawerLayout.findViewById(R.id.nav_download).setOnClickListener(this);
mDrawerLayout.findViewById(R.id.nav_share).setOnClickListener(this);
mDrawerLayout.findViewById(R.id.nav_about).setOnClickListener(this);
mCleanItem = (NavItem) mDrawerLayout.findViewById(R.id.nav_clean);
mCleanItem.setOnClickListener(this);
}
private void initNavigation() {
mBottomNavgation
.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE)
.setMode(BottomNavigationBar.MODE_SHIFTING)
.addItem(new BottomNavigationItem(R.drawable.ic_home, getString(R.string.nav_00_title)).setActiveColorResource(R.color.colorPrimary))
.addItem(new BottomNavigationItem(R.drawable.ic_view_headline, getString(R.string.nav_01_title)).setActiveColorResource(R.color.colorPrimary))
.addItem(new BottomNavigationItem(R.drawable.ic_live_tv, getString(R.string.nav_02_title)).setActiveColorResource(R.color.colorPrimary))
//暂时没想好做个神马功能
// .addItem(new BottomNavigationItem(R.drawable.ic_explore, getString(R.string.nav_03_title)).setActiveColorResource(R.color.colorPrimary))
.setFirstSelectedPosition(0)
.setTabSelectedListener(this)
.initialise();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
return id == R.id.action_settings || super.onOptionsItemSelected(item);
}
@Override
public void onTabSelected(int position) {
switch (position) {
case 0:
switchContent(mZhihuFragment);
break;
case 1:
switchContent(mNewsFragment);
break;
case 2:
switchContent(mBubbleFragment);
break;
// case 3:
// switchContent(mMovieFragment);
// break;
default:
break;
}
}
@Override
public void onTabUnselected(int position) {
}
@Override
public void onTabReselected(int position) {
}
/**
* 动态添加fragment,不会重复创建fragment
*
* @param to 将要加载的fragment
*/
public void switchContent(Fragment to) {
if (mCurrentFrag != to) {
if (!to.isAdded()) {// 如果to fragment没有被add则增加一个fragment
if (mCurrentFrag != null) {
fm.beginTransaction().hide(mCurrentFrag).commit();
}
fm.beginTransaction()
.add(R.id.main_view, to)
.commit();
} else {
fm.beginTransaction().hide(mCurrentFrag).show(to).commit(); // 隐藏当前的fragment,显示下一个
}
mCurrentFrag = to;
}
}
private Long firstTime = 0L;
@Override
public void onBackPressed() {
if (drawerOpen) {
mDrawerLayout.closeDrawers();
return;
}
if (mBottomSheetBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
RxBus.getDefault().postWithCode(RxConstants.BACK_PRESSED_CODE, RxConstants.BACK_PRESSED_DATA);
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 1500) {
showLongToast(this, getString(R.string.back_again_exit));
firstTime = secondTime;
} else {
System.exit(0);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.userimage:
takePhoto();
break;
case R.id.nav_favorite:
drawerIntentAction = FAVORITE;
Toast.makeText(this, "敬请期待", Toast.LENGTH_SHORT).show();
break;
case R.id.nav_download:
drawerIntentAction = VIDEO;
Toast.makeText(this, "敬请期待", Toast.LENGTH_SHORT).show();
break;
case R.id.nav_share:
drawerIntentAction = SHARE;
this.showShare("发现有趣的熊猫眼!https://github.com/PandaQAQ/PandaEye/blob/master/README.md", "分享下载地址");
break;
case R.id.nav_about:
drawerIntentAction = ABOUT_ME;
mDrawerLayout.closeDrawers();
break;
case R.id.nav_clean:
DataCleanManager.clearAllCache(this);
mCleanItem.setTvActionState(DataCleanManager.getTotalCacheSize(this));
break;
}
}
private void takePhoto() {
Intent intent = new Intent(this, ChoosePhotoActivity.class);
startActivityForResult(intent, ACTION_GET_PIC);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ACTION_GET_PIC && data != null) {
Bitmap bitmap = data.getExtras().getParcelable("data");
mUserimage.setImageBitmap(bitmap);
Bitmap overlay = BlurImageUtils.blur(mUserimage, 3, 3);
mNavigationHeaderContainer.setBackground(new BitmapDrawable(getResources(), overlay));
saveUserImage(bitmap);
}
}
private void saveUserImage(Bitmap bitmap) {
// 保存头像到sdcard
FileOutputStream fos;
try {
File file = new File(ViewUtils.getAppFile(this, "images"));
File image = new File(ViewUtils.getAppFile(this, "images/user.png"));
if (!file.exists()) {
file.mkdirs();
if (!image.exists()) {
image.createNewFile();
}
}
fos = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void showShare(String url, String shareTitle) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, url);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(shareIntent, shareTitle));
}
}