package com.troy.xifan.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.widget.FrameLayout;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.chenenyu.router.annotation.Route;
import com.troy.xifan.App;
import com.troy.xifan.R;
import com.troy.xifan.config.Constants;
import com.troy.xifan.eventbus.NotificationEvent;
import com.troy.xifan.fragment.HomeFragment;
import com.troy.xifan.fragment.MessageFragment;
import com.troy.xifan.fragment.ProfileFragment;
import com.troy.xifan.fragment.SearchFragment;
import com.troy.xifan.http.HttpRequestFactory;
import com.troy.xifan.http.callback.SimpleHttpRequestCallback;
import com.troy.xifan.http.exception.ApiException;
import com.troy.xifan.http.request.BaseRequestParams;
import com.troy.xifan.model.response.UserRes;
import com.troy.xifan.service.NotificationService;
import com.troy.xifan.util.SharedPreUtils;
import it.sephiroth.android.library.bottomnavigation.BadgeProvider;
import it.sephiroth.android.library.bottomnavigation.BottomNavigation;
import java.util.ArrayList;
import java.util.List;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@Route(Constants.Router.MAIN)
public class MainActivity extends BaseActivity
implements BottomNavigation.OnMenuItemSelectionListener {
public static final String EXTRA_NEW_MSG = "new_msg";
@BindView(R.id.navigation_view) BottomNavigation mBottomNavigationView;
@BindView(R.id.fragment_container) FrameLayout mFrameLayout;
private FragmentManager mFragmentManager;
private List<Fragment> mFragmentList = new ArrayList<>();
private BadgeProvider mBadgeProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initViews();
getUserInfo();
EventBus.getDefault().register(this);
//避免重复add fragment
if (savedInstanceState == null) {
initFragments();
}
startService(new Intent(this, NotificationService.class));
}
@Override
public void initViews() {
mBottomNavigationView.setOnMenuItemClickListener(this);
mBottomNavigationView.setDefaultSelectedIndex(0);
mBadgeProvider = mBottomNavigationView.getBadgeProvider();
showBadge();
}
private void initFragments() {
mFragmentManager = getSupportFragmentManager();
mFragmentList.add(HomeFragment.newInstance());
mFragmentList.add(MessageFragment.newInstance());
mFragmentList.add(SearchFragment.newInstance());
mFragmentList.add(ProfileFragment.newInstance());
//默认选中主页
mFragmentManager.beginTransaction()
.add(R.id.fragment_container, mFragmentList.get(0))
.commit();
}
private void hideFragments(FragmentTransaction fragmentTransaction) {
for (Fragment fragment : mFragmentList) {
fragmentTransaction.hide(fragment);
}
}
@Subscribe
public void onMessageNotifi(NotificationEvent event) {
mBadgeProvider.show(R.id.action_message);
}
public void removeMessageBadge() {
if (mBadgeProvider.hasBadge(R.id.action_message)) {
mBadgeProvider.remove(R.id.action_message);
}
}
@Override
public void onMenuItemSelect(@IdRes final int itemId, final int position,
final boolean fromUser) {
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
Fragment fragment = mFragmentList.get(position);
hideFragments(fragmentTransaction);
if (!fragment.isAdded()) {
fragmentTransaction.add(R.id.fragment_container, fragment);
}
fragmentTransaction.show(fragment);
fragmentTransaction.commit();
}
@Override
public void onMenuItemReselect(@IdRes final int itemId, final int position,
final boolean fromUser) {
}
private void showBadge() {
boolean hasNewMsg = getIntent().getBooleanExtra(EXTRA_NEW_MSG, false);
if (hasNewMsg) {
mBadgeProvider.show(R.id.action_message);
}
}
//获取用户信息
private void getUserInfo() {
BaseRequestParams request = new BaseRequestParams();
HttpRequestFactory.getInstance()
.getUserInfo(request, new SimpleHttpRequestCallback<UserRes>() {
@Override
public void onSuccess(UserRes userRes) {
App.getInstance().setUser(userRes);
SharedPreUtils.pusString(Constants.SharedPreferences.KEY_USER_ID,
userRes.getId());
}
@Override
public void onFail(ApiException apiException) {
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}