/* * Copyright 2013 JNRain * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may obtain a * copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package org.jnrain.mobile.ui.nav; import name.xen0n.cytosol.app.CytosolFragment; import name.xen0n.cytosol.ui.widget.NavItem; import name.xen0n.cytosol.ui.widget.NavItemView; import name.xen0n.cytosol.ui.widget.NavMenuAdapter; import org.jnrain.mobile.R; import org.jnrain.mobile.accounts.kbs.KBSLogoutRequest; import org.jnrain.mobile.accounts.kbs.KBSLogoutRequestListener; import org.jnrain.mobile.ui.AboutActivity; import org.jnrain.mobile.ui.kbs.GlobalHotPostsListFragment; import org.jnrain.mobile.ui.kbs.SectionListFragment; import org.jnrain.mobile.ui.preferences.SettingsActivity; import org.jnrain.mobile.util.AccountStateListener; import org.jnrain.mobile.util.GlobalState; import roboguice.inject.InjectView; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; @SuppressWarnings("rawtypes") public class NavFragment extends CytosolFragment implements AccountStateListener { @InjectView(R.id.textUserID) TextView textUserID; @InjectView(R.id.listNavMenu) ListView listNavMenu; NavMenuAdapter _menuAdapter; @Override public void onAttach(Activity activity) { super.onAttach(activity); _menuAdapter = new JNRainNavMenuAdapter(getActivity()); // register self NavManager.setNavFragment(this); } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frag_nav, container, false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setUserName(GlobalState.getUserName()); GlobalState.registerAccountStateListener(this); // nav menu _menuAdapter.addItem(new NavItem( R.string.title_kbs_global_hot_posts_list, R.drawable.ic_nav_hotpost, true, true) { @Override public void onNavItemActivated(Context context) { NavFragment.this.clearBackStack(); NavFragment.this.switchMainContentTo( new GlobalHotPostsListFragment(), false); } }); _menuAdapter.addItem(new NavItem( R.string.title_kbs_section_list, R.drawable.ic_nav_sections, true) { @Override public void onNavItemActivated(Context context) { NavFragment.this.clearBackStack(); NavFragment.this.switchMainContentTo( new SectionListFragment(), false); } }); _menuAdapter.addItem(new NavItem( R.string.title_preference, R.drawable.ic_nav_settings, false) { @Override public void onNavItemActivated(Context context) { SettingsActivity.show(context); } }); _menuAdapter.addItem(new NavItem( R.string.title_about, R.drawable.ic_nav_about, false) { @Override public void onNavItemActivated(Context context) { AboutActivity.show(context); } }); _menuAdapter.addItem(new NavItem( R.string.nav_remove_account, R.drawable.ic_nav_logout, false) { @SuppressWarnings("unchecked") @Override public void onNavItemActivated(Context context) { // change UID display setUserName(R.string.uid_logging_out); // make request _listener.makeSpiceRequest( new KBSLogoutRequest(), new KBSLogoutRequestListener(getActivity(), true)); } }); listNavMenu.setAdapter(_menuAdapter); listNavMenu .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick( AdapterView<?> parent, View view, int position, long id) { NavItem item = _menuAdapter.getItem(position); // update active status of items if (item.canActivate()) { clearMenuItemActiveStatus(); ((NavItemView) view).setActive(true); } // notify activation item.onNavItemActivated(getActivity()); } }); } public void clearMenuItemActiveStatus() { int viewCount = listNavMenu.getChildCount(); for (int i = 0; i < viewCount; i++) { NavItemView view = (NavItemView) listNavMenu.getChildAt(i); view.setActive(false); } } public void setUserName(String uid) { textUserID.setText(uid); } public void setUserName(int resId) { textUserID.setText(resId); } @Override public void onAccountLoggedIn(String uid) { setUserName(uid); } @Override public void onAccountLoggedOut() { // set user name setUserName(R.string.uid_logged_out); } }