/*************************************************************************************
* Product: SFAndroid (Sales Force Mobile) *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* Copyright (C) 2012-2014 E.R.P. Consultores y Asociados, S.A. All Rights Reserved. *
* Contributor(s): Yamel Senih www.erpconsultoresyasociados.com *
*************************************************************************************/
package org.spinsuite.view;
import org.spinsuite.adapters.FragmentTabsAdapter;
import org.spinsuite.base.R;
import org.spinsuite.util.ActivityParameter;
import org.spinsuite.util.DisplayMenuItem;
import org.spinsuite.util.Env;
import org.spinsuite.view.custom.Cust_ViewPager;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TabWidget;
/**
*
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a>
*
*/
public class TV_Base extends FragmentActivity
implements TabHost.OnTabChangeListener,
ViewPager.OnPageChangeListener{
/** Adapter Fragment */
private FragmentTabsAdapter mAdapterList;
/** Pager */
private Cust_ViewPager mViewPager;
/** Parameters */
protected ActivityParameter param;
/** Activity No */
protected int m_ActivityNo = 0;
/** Tab Host */
private TabHost mTabHost;
/** Drawer Layout */
private DrawerLayout m_DLayout;
/** List View with options */
private ListView m_DList;
/** Toggle */
private ActionBarDrawerToggle m_DToggle;
/** Flag (Drawer Loaded) */
private boolean isDrawerLoaded = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.tv_base);
Bundle bundle = getIntent().getExtras();
if(bundle != null){
param = (ActivityParameter)bundle.getParcelable("Param");
}
if(param == null)
param = new ActivityParameter();
//
m_ActivityNo = Env.getActivityNo(this);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mViewPager = (Cust_ViewPager)findViewById(R.id.v_pager);
mAdapterList = new FragmentTabsAdapter(this, mTabHost, mViewPager);
// Add Listener
mTabHost.setOnTabChangedListener(this);
mViewPager.setOnPageChangeListener(this);
//
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
}
/**
* Load Drawer
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 14/03/2014, 09:23:22
* @return void
*/
protected void loadDrawer(){
//
m_DLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
//
m_DList = (ListView) findViewById(R.id.left_drawer);
//
m_DLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
m_DList.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position,
long arg3) {
// Selected Option
onSelectedDrawerOption((DisplayMenuItem) adapter.getItemAtPosition(position));
}
});
m_DToggle = new ActionBarDrawerToggle(this, m_DLayout,
R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerClosed(View view) {
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
invalidateOptionsMenu();
}
};
// Set Toggle
m_DLayout.setDrawerListener(m_DToggle);
//
isDrawerLoaded = true;
}
/**
* To implemented by user
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 15/03/2014, 11:37:09
* @param item
* @return void
*/
protected void onSelectedDrawerOption(DisplayMenuItem item){
//
}
/**
* Is Drawer Loader
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 16/03/2014, 10:29:47
* @return
* @return boolean
*/
protected boolean isDrawerLoaded(){
return isDrawerLoaded;
}
/**
* Is Drawer Layout Open
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 16/03/2014, 10:32:25
* @return
* @return boolean
*/
protected boolean isDrawerLayoutOpen(){
if(isDrawerLoaded)
return m_DLayout.isDrawerOpen(m_DList);
return false;
}
/**
* Get Drawer List
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 14/03/2014, 17:43:59
* @return
* @return ListView
*/
protected ListView getDrawerList(){
return m_DList;
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
if(isDrawerLoaded)
m_DToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(isDrawerLoaded)
m_DToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(isDrawerLoaded) {
if (m_DToggle.onOptionsItemSelected(item)) {
return true;
}
}
// Handle action buttons
switch(item.getItemId()) {
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(isDrawerLoaded){
boolean drawerOpen = m_DLayout.isDrawerOpen(m_DList);
if(drawerOpen)
menu.setGroupVisible(R.id.group_tab_menu, false);
}
return super.onPrepareOptionsMenu(menu);
}
/**
* Add Fragment Tab in FragmentActivity
* @author Yamel Senih 03/05/2012, 19:08:05
* @param clazz
* @param bundle
* @param tabTag
* @param title
* @param img
* @return void
*/
protected void addFagment(Class<?> clazz, String tag, int title, Bundle bundle){
mAdapterList.addTab(clazz, tag, title, bundle);
}
/**
* Add Fragment Tab in FragmentActivity
* @author Yamel Senih 05/02/2013, 16:58:49
* @param clazz
* @param title
* @return void
*/
protected void addFagment(Class<?> clazz, String tag, int title){
mAdapterList.addTab(clazz, tag, title, null);
}
/**
* Add Fragment Tab in FragmentActivity with String title
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 16/02/2014, 13:23:35
* @param clazz
* @param tag
* @param title
* @return void
*/
protected void addFagment(Class<?> clazz, String tag, String title){
mAdapterList.addTab(clazz, tag, title, null);
}
/**
* Add Fragment Tab
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 17/02/2014, 09:05:17
* @param clazz
* @param tag
* @param title
* @param param
* @return void
*/
protected void addFagment(Class<?> clazz, String tag, String title, Bundle param){
mAdapterList.addTab(clazz, tag, title, param);
}
/**
* Get Current Fragment from View Pager
* @author Yamel Senih 05/02/2013, 17:11:23
* @return
* @return Fragment
*/
protected Fragment getCurrentFragment() {
return mAdapterList.getCurrentFragment(mViewPager);
}
/**
* Get Fragment from index
* @author Yamel Senih 05/02/2013, 17:12:46
* @param index
* @return
* @return Fragment
*/
protected Fragment getFragment(int index) {
return mAdapterList.getActiveFragment(index, mViewPager);
}
/**
* Set Current Fragment Tab
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 16/03/2014, 10:45:26
* @param index
* @return void
*/
protected void setCurrentFragment(int index) {
mViewPager.setCurrentItem(index);
}
/**
* Enabled ViewPager Navigation
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 13/06/2013, 17:29:58
* @param enabled
* @return void
*/
public void setPagingEnabled(boolean enabled){
mViewPager.setPagingEnabled(enabled);
}
@Override
public void onTabChanged(String tabId) {
int position = mTabHost.getCurrentTab();
mViewPager.setCurrentItem(position);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
TabWidget widget = mTabHost.getTabWidget();
int oldFocusability = widget.getDescendantFocusability();
widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
mTabHost.setCurrentTab(position);
widget.setDescendantFocusability(oldFocusability);
}
@Override
public void onPageScrollStateChanged(int state) {
}
}