package net.coding.program;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.RadioButton;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.readystatesoftware.viewbadger.BadgeView;
import net.coding.program.common.ClickSmallImage;
import net.coding.program.common.Global;
import net.coding.program.common.ImageLoadTool;
import net.coding.program.common.Unread;
import net.coding.program.common.UnreadNotify;
import net.coding.program.common.ui.BaseFragment;
import net.coding.program.maopao.MaopaoListFragment;
import net.coding.program.model.AccountInfo;
import net.coding.program.model.UserObject;
import net.coding.program.setting.FeedbackActivity_;
import net.coding.program.user.UserDetailActivity_;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.ViewById;
import org.json.JSONException;
import org.json.JSONObject;
import de.hdodenhof.circleimageview.CircleImageView;
@EFragment(R.layout.fragment_navigation_drawer)
public class NavigationDrawerFragment extends BaseFragment implements UnreadNotify.UnreadNotifyObserver {
final int radioIds[] = {
R.id.radio0,
R.id.radio1,
R.id.radio2,
R.id.radio3,
R.id.radio4
};
final int RESULT_REQUEST_USERINFO = 21;
@ViewById
TextView name;
@ViewById
TextView sign;
@ViewById
TextView follows;
@ViewById
TextView fans;
RadioButton radios[] = new RadioButton[radioIds.length];
@ViewById
CircleImageView circleIcon;
BadgeView badgeProject;
BadgeView badgeMessage;
String HOST = Global.HOST_API + "/user/key/%s";
int mSelectMenuPos = 0;
private NavigationDrawerCallbacks mCallbacks;
private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
private View mFragmentContainerView;
View.OnClickListener clickItem = new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < radios.length; ++i) {
if (v.equals(radios[i])) {
selectItem(i);
} else {
radios[i].setChecked(false);
}
}
}
};
private boolean mFirstDisplay = true;
// 4.1系统bug,setHasOptionsMenu(true) 如果放在 onCreate 中会报错
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
@AfterViews
void init() {
UserObject user = AccountInfo.loadAccount(getActivity());
setControlContent(user);
for (int i = 0; i < radioIds.length; ++i) {
radios[i] = (RadioButton) getView().findViewById(radioIds[i]);
radios[i].setOnClickListener(clickItem);
}
radios[0].setChecked(true);
badgeProject = (BadgeView) getView().findViewById(R.id.badge0);
badgeProject.setVisibility(View.INVISIBLE);
badgeMessage = (BadgeView) getView().findViewById(R.id.badge3);
badgeMessage.setVisibility(View.INVISIBLE);
if (mFirstDisplay) {
updateUserinfo();
}
}
@Click
protected final void buttonFeedback(View view) {
FeedbackActivity_.intent(getActivity()).start();
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
@Click
void circleIcon(View v) {
new ClickSmallImage(this).onClick(v);
updateUserinfo();
}
private void updateNotify() {
if (!isResumed()) {
return;
}
Unread unread = ((MyApp) getActivity().getApplication()).sUnread;
UnreadNotify.displayNotify(badgeProject, unread.getProject());
UnreadNotify.displayNotify(badgeMessage, unread.getNotify());
}
private void setControlContent(UserObject user) {
name.setText(user.name);
sign.setText(user.slogan);
follows.setText(String.valueOf(user.follows_count));
fans.setText(String.valueOf(user.fans_count));
ImageLoader.getInstance().displayImage(user.avatar, circleIcon, ImageLoadTool.options);
MaopaoListFragment.ClickImageParam param = new MaopaoListFragment.ClickImageParam(user.avatar);
circleIcon.setTag(param);
}
public void updateUserinfo() {
UserObject oldUser = AccountInfo.loadAccount(getActivity());
getNetwork(String.format(HOST, oldUser.global_key), HOST);
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(HOST)) {
if (code == 0) {
UserObject user = new UserObject(respanse.getJSONObject("data"));
AccountInfo.saveAccount(getActivity(), user);
MyApp.sUserObject = user;
setControlContent(user);
} else {
showErrorMsg(code, respanse);
}
}
}
public boolean isDrawerOpen() {
return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
}
public void showDrawer(boolean show) {
if (show) {
mDrawerLayout.openDrawer(mFragmentContainerView);
} else {
mDrawerLayout.closeDrawers();
}
}
public void setUp(int fragmentId, DrawerLayout drawerLayout) {
mFragmentContainerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
ActionBar actionBar = getActionBarActivity().getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(getActivity(),
mDrawerLayout,
R.string.empty,
R.string.empty) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (!isAdded()) {
return;
}
if (mCallbacks != null) {
mCallbacks.onNavigationDrawerItemSelected(mSelectMenuPos);
}
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
updateNotify();
UnreadNotify.update(getActivity());
if (!isAdded()) {
return;
}
getActivity().invalidateOptionsMenu();
}
};
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
private void selectItem(int position) {
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(mFragmentContainerView);
mSelectMenuPos = position;
}
}
@Click
void userInfo() {
UserDetailActivity_
.intent(this)
.globalKey(MyApp.sUserObject.global_key)
.startForResult(RESULT_REQUEST_USERINFO);
}
@OnActivityResult(RESULT_REQUEST_USERINFO)
void onResultUserinfo() {
updateUserinfo();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallbacks = (NavigationDrawerCallbacks) activity;
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
}
UnreadNotify.UnreadNotifySubject.getInstance().registerObserver(this);
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
UnreadNotify.UnreadNotifySubject.getInstance().unregisterObserver(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (mDrawerLayout != null && isDrawerOpen()) {
showGlobalContextActionBar();
}
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return mDrawerToggle.onOptionsItemSelected(item)
|| super.onOptionsItemSelected(item);
}
private void showGlobalContextActionBar() {
ActionBar actionBar = getActionBarActivity().getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayShowCustomEnabled(false);
}
@Override
public void update() {
updateNotify();
}
public interface NavigationDrawerCallbacks {
void onNavigationDrawerItemSelected(int position);
}
}