package io.codetail.fragments; import android.accounts.AccountManager; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import butterknife.ButterKnife; import butterknife.InjectView; import codetail.graphics.drawables.DrawableHelper; import codetail.graphics.drawables.RippleDrawable; import codetail.utils.ThemeUtils; import codetail.utils.ViewUtils; import codetail.widget.FrameLayoutCompat; import io.codetail.watchme.R; public class NavigationFragment extends BaseWatchMeFragment{ public static final String USER_PICTURE_URL = "userPictureUrl"; @InjectView(R.id.naviagition_container) LinearLayout mContainer; @InjectView(R.id.profile) FrameLayoutCompat mProfile; @InjectView(R.id.avatar) ImageView mAvatar; @InjectView(R.id.username) TextView mUsername; private int mSelectedPosition = -1; private int mPrimaryIconColor; private int mAccentIconColor; private ColorStateList mRippleOverlay; private CharSequence[] mNavigationItems; private AccountManager mAccountManager; final View.OnClickListener mOnNavigationSelected = new View.OnClickListener() { @Override public void onClick(View v) { int selectedItem = mContainer.indexOfChild(v); ((DrawerLayout) getWatchMeActivity().findViewById(R.id.drawer_container)) .closeDrawer(GravityCompat.START); getSource().onNavigationItemSelected(getFragmentManager(), selectedItem); setSelected(selectedItem); } }; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_navigation, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ButterKnife.inject(this, view); ViewUtils.setVisibilityWithGoneFlag(mProfile, false); Context context = getActivity(); mAccountManager = AccountManager.get(context); mPrimaryIconColor = ThemeUtils.getThemeColor(context, R.attr.navigationActionsPrimaryColor); mPrimaryIconColor = withAlpha(190, mPrimaryIconColor); mAccentIconColor = ThemeUtils.getThemeColor(context, R.attr.navigationActionsAccentColor); mAccentIconColor = withAlpha(190, mAccentIconColor); mRippleOverlay = ThemeUtils.getThemeColorStateList(context, R.attr.navigationRippleOverlayColor); populateNavigationMenu(); } /** * @return current selected item position, * return negative number if nothing selected */ public int getSelectedPosition(){ return mSelectedPosition; } /** * Populate navigation drawer with items */ private void populateNavigationMenu() { LayoutInflater factory = LayoutInflater.from(getActivity()); CharSequence[] navItems = getSource().getNavigationItems(); Drawable[] icons = getSource().getNavigationIcons(); for(int index = 0; index < navItems.length; index++){ CharSequence item = navItems[index]; Drawable icon = icons[index]; DrawableHelper.setTint(icon, mPrimaryIconColor); TextView itemView = (TextView) factory.inflate(R.layout.drawer_menu_item, mContainer, false); itemView.setText(item); itemView.setOnClickListener(mOnNavigationSelected); itemView.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); RippleDrawable.makeFor(itemView, mRippleOverlay, true); mContainer.addView(itemView); } mNavigationItems = navItems; } /** * Checks new selected item, and restore default state * of previously selected * * @param position position of item */ public void setSelected(int position){ if(mSelectedPosition != -1) { setSelectedInternal(mSelectedPosition, false); } setSelectedInternal(position, true); getWatchMeActivity().getToolbar().setTitle(mNavigationItems[position]); mSelectedPosition = position; } /** * Marks item view as selected or not * @see android.view.View#setSelected(boolean) * * @param position position of item * @param selected state of item */ private void setSelectedInternal(int position, boolean selected){ TextView item = (TextView) mContainer.getChildAt(position); item.setSelected(selected); DrawableHelper.setTint(item.getCompoundDrawables()[0], selected ? mAccentIconColor : mPrimaryIconColor); } static int withAlpha(int alpha, int color){ return Color.argb(alpha, color, color, color); } }