package net.oschina.gitapp.ui; import net.oschina.gitapp.AppContext; import net.oschina.gitapp.R; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import net.oschina.gitapp.bean.URLs; import net.oschina.gitapp.bean.User; import net.oschina.gitapp.common.BroadcastController; import net.oschina.gitapp.common.StringUtils; import net.oschina.gitapp.common.UIHelper; import net.oschina.gitapp.interfaces.*; import net.oschina.gitapp.widget.BadgeView; import net.oschina.gitapp.widget.CircleImageView; /** * 导航菜单栏 * @created 2014-04-29 * @author 火蚁(http://my.oschina.net/LittleDY) * */ public class DrawerNavigationMenu extends Fragment implements OnClickListener { public static DrawerNavigationMenu newInstance() { return new DrawerNavigationMenu(); } private View mSavedView;// 当前操作的菜单项 private RelativeLayout mMenu_user_layout; private LinearLayout mMenu_user_info_layout; private LinearLayout mMenu_user_login_tips; private CircleImageView mUser_info_userface; private TextView mUser_info_username; private LinearLayout mMenu_item_explore; private LinearLayout mMenu_item_myself; private LinearLayout mMenu_item_language; private LinearLayout mMenu_item_shake; private LinearLayout mMenu_item_setting; private View mMenu_item_exit; private DrawerMenuCallBack mCallBack; private AppContext mApplication; public static BadgeView mNotification_bv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mApplication = (AppContext) getActivity().getApplication(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof DrawerMenuCallBack) { mCallBack = (DrawerMenuCallBack) activity; } // 注册一个用户发生变化的广播 BroadcastController.registerUserChangeReceiver(activity, mUserChangeReceiver); } @Override public void onDetach() { super.onDetach(); mCallBack = null; // 注销接收用户信息变更的广播 BroadcastController.unregisterReceiver(getActivity(), mUserChangeReceiver); } private BroadcastReceiver mUserChangeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //接收到变化后,更新用户资料 setupUserView(true); } }; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(view); setupUserView(mApplication.isLogin()); } private void setupUserView(final boolean reflash) { //判断是否已经登录,如果已登录则显示用户的头像与信息 if(!mApplication.isLogin()) { mUser_info_userface.setImageResource(R.drawable.mini_avatar); mUser_info_username.setText(""); mMenu_user_info_layout.setVisibility(View.GONE); mMenu_user_login_tips.setVisibility(View.VISIBLE); return; } mMenu_user_info_layout.setVisibility(View.VISIBLE); mMenu_user_login_tips.setVisibility(View.GONE); mUser_info_username.setText(""); new AsyncTask<Void, Void, User>() { @Override protected User doInBackground(Void... params) { User user = mApplication.getLoginInfo(); return user; } @Override protected void onPostExecute(User user) { if(user == null || isDetached()) { return; } // 加载用户头像 String portrait = user.getPortrait() == null || user.getPortrait().equals("null") ? "" : user.getPortrait(); if (portrait.endsWith("portrait.gif") || StringUtils.isEmpty(portrait)) { mUser_info_userface.setImageResource(R.drawable.widget_dface); } else { String faceUrl = URLs.HTTPS + URLs.HOST + URLs.URL_SPLITTER + user.getPortrait(); UIHelper.showUserFace(mUser_info_userface, faceUrl); } // 其他资料 mUser_info_username.setText(user.getName()); } }.execute(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.activity_main_drawer_menu, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } private void initBadgeView(View view) { } // 初始化界面控件 private void initView(View view) { mMenu_user_layout = (RelativeLayout) view.findViewById(R.id.menu_user_layout); mMenu_user_info_layout = (LinearLayout) view.findViewById(R.id.menu_user_info_layout); mUser_info_userface = (CircleImageView) view.findViewById(R.id.menu_user_info_userface); mUser_info_username = (TextView) view.findViewById(R.id.menu_user_info_username); mMenu_user_login_tips = (LinearLayout) view.findViewById(R.id.menu_user_info_login_tips_layout); mMenu_item_explore = (LinearLayout) view.findViewById(R.id.menu_item_explore); mMenu_item_myself = (LinearLayout) view.findViewById(R.id.menu_item_myself); mMenu_item_language = (LinearLayout) view.findViewById(R.id.menu_item_language); mMenu_item_shake = (LinearLayout) view.findViewById(R.id.menu_item_shake); mMenu_item_setting = (LinearLayout) view.findViewById(R.id.menu_item_setting); mMenu_item_exit = view.findViewById(R.id.menu_item_exit); // 绑定点击事件 mMenu_user_layout.setOnClickListener(this); mMenu_item_explore.setOnClickListener(this); mMenu_item_myself.setOnClickListener(this); mMenu_item_language.setOnClickListener(this); mMenu_item_shake.setOnClickListener(this); mMenu_item_setting.setOnClickListener(this); mMenu_item_exit.setOnClickListener(this); // 高亮发现菜单栏 highlightSelectedItem(mMenu_item_explore); initBadgeView(view); } private void highlightSelectedItem(View v) { setSelected(null, false); setSelected(v, true); } public void highlightExplore() { highlightSelectedItem(mMenu_item_explore); } private void setSelected(View v, boolean selected) { View view; if (v == null && mSavedView == null) { return; } if (v != null) { mSavedView = v; view = mSavedView; } else { view = mSavedView; } if (selected) { ViewCompat.setHasTransientState(view, true); view.setBackgroundColor(getResources() .getColor(R.color.menu_layout_item_pressed_color)); } else { ViewCompat.setHasTransientState(view, false); view.setBackgroundResource(R.drawable.menu_layout_item_selector); } } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.menu_user_layout: onClickLogin(); break; case R.id.menu_item_explore: onClickExplore(); highlightSelectedItem(v); break; case R.id.menu_item_myself: onClickMySelf(); if (mApplication.isLogin()) { highlightSelectedItem(v); } break; case R.id.menu_item_language: onClickLanguage(); break; case R.id.menu_item_shake: onClickmShake(); break; case R.id.menu_item_setting: onClickSetting(); break; case R.id.menu_item_exit: onClickExit(); break; } } private void onClickLogin() { if (mCallBack != null) { mCallBack.onClickLogin(); } } private void onClickSetting() { if (mCallBack != null) { mCallBack.onClickSetting(); } } private void onClickExplore() { if (mCallBack != null) { mCallBack.onClickExplore(); } } private void onClickMySelf() { if (mCallBack != null) { mCallBack.onClickMySelf(); } } private void onClickLanguage() { if (mCallBack != null) { mCallBack.onClickLanguage(); } } private void onClickmShake() { if (mCallBack != null) { mCallBack.onClickShake(); } } private void onClickExit() { if (mCallBack != null) { mCallBack.onClickExit(); } } }