package com.ladjzero.uzlee; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.ladjzero.hipda.User; import com.ladjzero.uzlee.utils.Utils; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.Observable; import java.util.Observer; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; public class FragmentNav extends FragmentBase implements Observer { /** * Remember the position of the selected item. */ private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; /** * Per the design guidelines, you should show the drawer on launch until the user manually * expands it. This shared preference tracks this. */ private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; @Bind(R.id.message) View message; @Bind(R.id.my_posts) View myPosts; @Bind(R.id.search) View mSearch; /** * A pointer to the current callbacks instance (the Activity). */ @Bind(R.id.nav_user_image) ImageView imageView; @Bind(R.id.nav_user_name) TextView userName; @Bind(R.id.nav_user) View userLayout; @Bind(R.id.alert_icon) TextView mAlertIcon; /** * Helper component that ties the action bar to the navigation drawer. */ private ActionBarDrawerToggle mActionBarDrawerToggle; private DrawerLayout mDrawerLayout; // private RecyclerView mDrawerList; private View mFragmentContainerView; private int mCurrentSelectedPosition = 0; private boolean mFromSavedInstanceState; private boolean mUserLearnedDrawer; private ActivityBase mContext; private LocalApi mLocalApi; private User mUser; @OnClick(R.id.nav_user) void onUserClick() { if (mUser == null || mUser.getId() == 0) { mContext.toLoginPage(); } else { Intent intent = new Intent(mContext, ActivityUser.class); intent.putExtra("uid", mUser.getId()); startActivity(intent); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Read in the flag indicating whether or not the user has demonstrated awareness of the // drawer. See PREF_USER_LEARNED_DRAWER for details. mContext = (ActivityBase) getActivity(); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); if (savedInstanceState != null) { mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); mFromSavedInstanceState = true; } Core core = App.getInstance().getCore(); mLocalApi = core.getLocalApi(); core.getApiStore().addObserver(this); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.nav, container, false); ButterKnife.bind(this, view); return view; } @Override public void onDestroyView() { super.onDestroyView(); App.getInstance().getCore().getApiStore().deleteObserver(this); } @Override public void onResume() { super.onResume(); ApiStore store = App.getInstance().getCore().getApiStore(); update(store, "user"); update(store, "unread"); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Forward the new configuration the drawer toggle component. mActionBarDrawerToggle.onConfigurationChanged(newConfig); } /** * Users of this fragment must call this method to set up the navigation drawer interactions. * * @param fragmentId The android:id of this fragment in its activity's layout. * @param drawerLayout The DrawerLayout containing this fragment's UI. * @param toolbar The Toolbar of the activity. */ public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { mFragmentContainerView = (View) getActivity().findViewById(fragmentId).getParent(); mDrawerLayout = drawerLayout; mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) { @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); if (!isAdded()) return; if (!mUserLearnedDrawer) { mUserLearnedDrawer = true; SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(getActivity()); sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); } getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); if (!isAdded()) return; getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() } }; // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, // per the navigation drawer design guidelines. if (!mUserLearnedDrawer && !mFromSavedInstanceState) { mDrawerLayout.openDrawer(mFragmentContainerView); } // Defer code dependent on restoration of previous instance state. mDrawerLayout.post(new Runnable() { @Override public void run() { mActionBarDrawerToggle.syncState(); } }); mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); } public void openDrawer() { mDrawerLayout.openDrawer(mFragmentContainerView); } public void closeDrawer() { mDrawerLayout.closeDrawer(mFragmentContainerView); } // menu key triggers this public void toggleDrawer() { boolean isOpen = isDrawerOpen(); if (isOpen) mDrawerLayout.closeDrawer(Gravity.LEFT); else mDrawerLayout.openDrawer(Gravity.LEFT); } public boolean isDrawerOpen() { return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView); } @Override public void update(Observable observable, final Object o) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { if ("user".equals(o)) { mUser = mLocalApi.getUser(); final boolean visible = mUser != null && mUser.getId() != 0; message.setVisibility(visible ? View.VISIBLE : View.GONE); myPosts.setVisibility(visible ? View.VISIBLE : View.GONE); mSearch.setVisibility(visible ? View.VISIBLE : View.GONE); userLayout.postDelayed(new Runnable() { @Override public void run() { if (visible) { ImageLoader.getInstance().displayImage(mUser.getImage(), imageView); } userName.setText(visible ? mUser.getName() : "未登录"); } }, 300); } else if ("unread".equals(o)) { int unread = mLocalApi.getUnread(); mAlertIcon.setTextColor(unread == 0 ? Utils.getThemeColor(mContext, R.attr.colorText) : Utils.getColor(mContext, R.color.commentNoBg)); // To-do next version. // if (unread > 0) { // NotificationUtils.Notification noti = new NotificationUtils.Notification(); // noti.intent = new Intent(getActivity(), ActivityAlerts.class); // noti.title = "你有新消息"; // noti.text = unread + "条未读消息"; // try { // Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); // Ringtone r = RingtoneManager.getRingtone(getActivity(), notification); // r.play(); // } catch (Exception e) { // e.printStackTrace(); // } // NotificationUtils.nofity(getActivity(), noti); // } } } }); } }