package com.pan.simplepicture.view.activity;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.mikepenz.aboutlibraries.Libs;
import com.mikepenz.aboutlibraries.LibsBuilder;
import com.mikepenz.fontawesome_typeface_library.FontAwesome;
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
import com.pan.materialdrawer.AccountHeader;
import com.pan.materialdrawer.AccountHeaderBuilder;
import com.pan.materialdrawer.Drawer;
import com.pan.materialdrawer.DrawerBuilder;
import com.pan.materialdrawer.holder.BadgeStyle;
import com.pan.materialdrawer.holder.StringHolder;
import com.pan.materialdrawer.model.DividerDrawerItem;
import com.pan.materialdrawer.model.PrimaryDrawerItem;
import com.pan.materialdrawer.model.ProfileDrawerItem;
import com.pan.materialdrawer.model.interfaces.IDrawerItem;
import com.pan.materialdrawer.model.interfaces.IProfile;
import com.pan.materialdrawer.util.RecyclerViewCacheUtil;
import com.pan.simplepicture.R;
import com.pan.simplepicture.adapter.ArticleAdapter;
import com.pan.simplepicture.adapter.FragmentAdapter;
import com.pan.simplepicture.adapter.JuzimiAdapter;
import com.pan.simplepicture.bean.User;
import com.pan.simplepicture.presenter.BasePresenter;
import com.pan.simplepicture.presenter.MainPresenter;
import com.pan.simplepicture.utils.ContextUtils;
import com.pan.simplepicture.utils.ScreenUtils;
import com.pan.simplepicture.utils.UserManager;
import com.pan.simplepicture.view.impl.IMainView;
import com.pan.simplepicture.widget.CustomDialog;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.update.UmengUpdateAgent;
import java.util.Arrays;
import butterknife.Bind;
import butterknife.ButterKnife;
import de.greenrobot.event.EventBus;
public class MainActivity extends BaseActivity implements IMainView {
private static final int PROFILE_SETTING = 1;
//save our header or result
private AccountHeader headerResult = null;
private Drawer result = null;
@Override
public int getContentLayout() {
return R.layout.activity_sample_dark_toolbar;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.game:
startActivity(new Intent(this, SmallGameActivity.class));
break;
case R.id.app:
startActivity(new Intent(this, AppRecommendActivity.class));
break;
}
return super.onOptionsItemSelected(item);
}
private void login(SHARE_MEDIA platform) {
if (mPresenter == null || !(mPresenter instanceof MainPresenter)) return;
((MainPresenter) mPresenter).login(this, platform);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mPresenter == null || !(mPresenter instanceof MainPresenter)) return;
((MainPresenter) mPresenter).onActResult(requestCode, resultCode, data);
}
@Override
public BasePresenter getPresenter() {
return new MainPresenter();
}
private IProfile profile;
@Override
public void bindView(Bundle savedInstanceState) {
UmengUpdateAgent.update(this);
EventBus.getDefault().register(this);
setupVideoViewPager();
// Create a few sample profile
// NOTE you have to define the loader logic too. See the CustomApplication for more details
if (UserManager.getInstance().isLogin()) {
profile = new ProfileDrawerItem().withName(UserManager.getInstance().getUser().screen_name).withEmail("朋友,欢迎您回来 !").withIcon(Uri.parse(UserManager.getInstance().getUser().profile_image_url)).withIdentifier(100);
} else {
profile = new ProfileDrawerItem().withName("未登录").withEmail("朋友,欢迎您回来 !").withIcon(R.drawable.ic_default).withIdentifier(100);
}
// Create the AccountHeader
headerResult = new AccountHeaderBuilder().withOnlyMainProfileImageVisible(true).withSelectionListEnabled(false)
.withActivity(this).withHeightDp(230)
.withHeaderBackground(R.drawable.slider_bg)
.addProfiles(
profile
)
.withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
@Override
public boolean onProfileChanged(View view, IProfile profile, boolean current) {
//sample usage of the onProfileChanged listener
//if the clicked item has the identifier 1 add a new profile ;)
/* if (profile instanceof IDrawerItem && ((IDrawerItem) profile).getIdentifier() == PROFILE_SETTING) {
int count = 100 + headerResult.getProfiles().size() + 1;
IProfile newProfile = new ProfileDrawerItem().withNameShown(true).withName("Batman" + count).withEmail("batman" + count + "@gmail.com").withIcon(R.drawable.profile5).withIdentifier(count);
if (headerResult.getProfiles() != null) {
//we know that there are 2 setting elements. set the new profile above them ;)
headerResult.addProfile(newProfile, headerResult.getProfiles().size() - 2);
} else {
headerResult.addProfiles(newProfile);
headerResult.setActiveProfile();
}
}*/
if (UserManager.getInstance().isLogin())
return true;
View login_dialog = ContextUtils.inflate(MainActivity.this, R.layout.login_dialog);
final CustomDialog dialog = new CustomDialog(MainActivity.this, login_dialog,
ScreenUtils.getInstance(MainActivity.this).getWidth() - ContextUtils.dip2px(MainActivity.this, 40),
ContextUtils.dip2px(MainActivity.this, 260), Gravity.CENTER);
ButterKnife.findById(login_dialog, R.id.login_qq).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
((MainPresenter) mPresenter).login(MainActivity.this, SHARE_MEDIA.QQ);
}
});
ButterKnife.findById(login_dialog, R.id.login_sina).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
((MainPresenter) mPresenter).login(MainActivity.this, SHARE_MEDIA.SINA);
}
});
ButterKnife.findById(login_dialog, R.id.cancle).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
});
dialog.show();
return true;
}
})
.withSavedInstance(savedInstanceState)
.build();
//Create the drawer
result = new DrawerBuilder()
.withActivity(this)
.withToolbar(getToolbar())
.withHasStableIds(true)
.withAccountHeader(headerResult) //set the AccountHeader we created earlier for the header
.addDrawerItems(
new PrimaryDrawerItem().withName(R.string.drawer_item_compact_header).withIcon(GoogleMaterial.Icon.gmd_videocam).withIdentifier(1).withSelectable(true),
new PrimaryDrawerItem().withName(R.string.drawer_item_non_translucent_status_drawer).withIcon(FontAwesome.Icon.faw_picture_o).withIdentifier(2).withSelectable(true).withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_red_700)),
new PrimaryDrawerItem().withName(R.string.drawer_item_action_bar_drawer).withIcon(GoogleMaterial.Icon.gmd_text_format).withIdentifier(3).withSelectable(true),
new DividerDrawerItem(),
/* new PrimaryDrawerItem().withName(R.string.drawer_item_multi_drawer).withIcon(FontAwesome.Icon.faw_eye).withIdentifier(4).withSelectable(false),
new DividerDrawerItem(),*/
new PrimaryDrawerItem().withName(R.string.drawer_item_keyboard_util_drawer).withIcon(GoogleMaterial.Icon.gmd_settings).withIdentifier(5).withSelectable(false)
// new SwitchDrawerItem().withName("日间模式").withIcon(Octicons.Icon.oct_tools).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener)
) // add the items we want to use with our Drawer
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
//check if the drawerItem is set.
//there are different reasons for the drawerItem to be null
//--> click on the header
//--> click on the footer
//those items don't contain a drawerItem
if (drawerItem != null) {
Intent intent = null;
if (drawerItem.getIdentifier() == 1 && dId != 1) {
dId = 1;
mTabLayout.removeAllTabs();
mViewPager.removeAllViews();
setupVideoViewPager();
// intent = new Intent(MainActivity.this, TopicActivity.class);
} else if (drawerItem.getIdentifier() == 2 && dId != 2) {
dId = 2;
mTabLayout.removeAllTabs();
mViewPager.removeAllViews();
setupPictureViewPager();
} else if (drawerItem.getIdentifier() == 3 && dId != 3) {
dId = 3;
mTabLayout.removeAllTabs();
mViewPager.removeAllViews();
setupTextViewPager();
} /*else if (drawerItem.getIdentifier() == 4) {
// intent = new Intent(MainActivity.this, SmallGameActivity.class);
}*/ else if (drawerItem.getIdentifier() == 5) {
intent = new Intent(MainActivity.this, SettingActivity.class);
MainActivity.this.startActivity(intent);
return true;
} else if (drawerItem.getIdentifier() == 6) {
//
/* if (mSweetSheet != null && !mSweetSheet.isShow()) {
mSweetSheet.show();
return false;
}*/
} else if (drawerItem.getIdentifier() == 20) {
intent = new LibsBuilder()
.withFields(R.string.class.getFields())
.withActivityStyle(Libs.ActivityStyle.LIGHT_DARK_TOOLBAR)
.intent(MainActivity.this);
}
if (intent != null) {
MainActivity.this.startActivity(intent);
}
}
return false;
}
})
.withSavedInstance(savedInstanceState)
.withShowDrawerOnFirstLaunch(true)
.build();
//if you have many different types of DrawerItems you can magically pre-cache those items to get a better scroll performance
//make sure to init the cache after the DrawerBuilder was created as this will first clear the cache to make sure no old elements are in
RecyclerViewCacheUtil.getInstance().withCacheSize(2).init(result);
//only set the active selection or active profile if we do not recreate the activity
if (savedInstanceState == null) {
result.setSelection(1, false);
//set the active profile
headerResult.setActiveProfile(profile);
}
result.updateBadge(4, new StringHolder(10 + ""));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
private int dId = 1;
@Override
public int getToolBarId() {
return R.id.toolbar;
}
@Bind(R.id.viewpager)
public ViewPager mViewPager;
@Bind(R.id.tabs)
public TabLayout mTabLayout;
@Override
protected void onStop() {
super.onStop();
if (result != null && result.isDrawerOpen()) {
result.closeDrawer();
}
}
private void setupVideoViewPager() {
String[] titles = getResources().getStringArray(R.array.video_tab);
FragmentAdapter adapter =
new FragmentAdapter(getSupportFragmentManager(), Arrays.asList(titles));
mViewPager.setAdapter(adapter);
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setTabsFromPagerAdapter(adapter);
}
private void setupPictureViewPager() {
String[] titles = getResources().getStringArray(R.array.pictrue_tab);
JuzimiAdapter adapter =
new JuzimiAdapter(getSupportFragmentManager(), Arrays.asList(titles));
mViewPager.setAdapter(adapter);
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setTabsFromPagerAdapter(adapter);
}
private void setupTextViewPager() {
String[] titles = getResources().getStringArray(R.array.text_tab);
ArticleAdapter adapter =
new ArticleAdapter(getSupportFragmentManager(), Arrays.asList(titles));
mViewPager.setAdapter(adapter);
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setTabsFromPagerAdapter(adapter);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
//add the values which need to be saved from the drawer to the bundle
outState = result.saveInstanceState(outState);
//add the values which need to be saved from the accountHeader to the bundle
outState = headerResult.saveInstanceState(outState);
super.onSaveInstanceState(outState);
}
@Override
public void onBackPressed() {
//handle the back press :D close the drawer first and if the drawer is closed close the activity
if (result != null && result.isDrawerOpen()) {
result.closeDrawer();
} else {
super.onBackPressed();
}
}
public void onEventMainThread(String remove) {
if (headerResult != null && "remove".equals(remove)) {
headerResult.removeProfile(profile);
profile = new ProfileDrawerItem().withName("未登录").withEmail("朋友,欢迎您回来 !").withIcon(R.drawable.ic_default).withIdentifier(100);
headerResult.addProfiles(profile);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
public void setUserInfo(User user) {
if (headerResult != null) {
headerResult.removeProfile(profile);
profile = new ProfileDrawerItem().withName(user.screen_name).withEmail("朋友,欢迎您回来 !").withIcon(Uri.parse(user.profile_image_url)).withIdentifier(100);
headerResult.addProfiles(profile);
}
}
}