package net.networksaremadeofstring.cyllell; import java.lang.reflect.Method; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.app.ActionBar.TabListener; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.ActionMode; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.bugsense.trace.BugSenseHandler; public class MainLanding extends SherlockFragmentActivity { private SharedPreferences settings = null; FragmentManager fm; int requestCode; //Used for evaluating what the settings Activity returned (Should always be 1) Fragment viewNodes = null; Fragment viewCookbooks = null; Fragment viewRoles = null; Fragment viewEnvironments = null; Fragment viewSearch = null; Fragment viewSettings = null; Boolean fragmentSet = false; ActionMode mActionMode; public CyllellCache cacheDB; ActionBar actionBar; Boolean EnableTabs = false; @Override public void onSaveInstanceState(Bundle savedInstanceState) { savedInstanceState.putBoolean("fragmentSet", true); super.onSaveInstanceState(savedInstanceState); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(savedInstanceState != null && savedInstanceState.getBoolean("fragmentSet")) fragmentSet = savedInstanceState.getBoolean("fragmentSet"); BugSenseHandler.setup(this, "84aff884"); settings = getSharedPreferences("Cyllell", 0); setContentView(R.layout.main); //See if this is the first time the app has run (and subsequently have no Chef details) if(settings.getBoolean("FirstRun", true) == true) { Toast.makeText(MainLanding.this, "Before continuing you will need to configure your settings...", Toast.LENGTH_LONG).show(); Intent LauncherIntent = new Intent(MainLanding.this, SettingsLanding.class); MainLanding.this.startActivityForResult(LauncherIntent, requestCode); } else { CheckDatabase(); } if(fragmentSet) { Log.i("FragmentSet","Fragment was true"); } else { fm = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); Fragment fragment = new TabletWelcome(); fragmentTransaction.replace(R.id.MainFragment, fragment); fragmentTransaction.commit(); } if(actionBar == null) { actionBar = getSupportActionBar(); actionBar.setTitle(""); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); AddTabs(); } } private void AddTabs() { Tab NodesTab = actionBar.newTab().setText(R.string.TabsNodes).setTabListener(new TabListener(){ @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if(viewNodes == null) viewNodes = new ViewNodes_Fragment(); viewNodes.setHasOptionsMenu(true); ft.replace(R.id.MainFragment, viewNodes); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { Log.i("onTabReselected","Nodes tab reselected"); viewNodes = new ViewNodes_Fragment(); viewNodes.setHasOptionsMenu(true); ft.replace(R.id.MainFragment, viewNodes); }}); NodesTab.setIcon(R.drawable.ic_action_nodes); //If in portrait mode the false seems to get ignored and we switch straight to it. actionBar.addTab(NodesTab, false); Tab cookbooksTab = actionBar.newTab().setText(R.string.TabsCookbooks).setTabListener(new TabListener(){ @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if(viewCookbooks == null) viewCookbooks = new ViewCookbooks_Fragment(); ft.replace(R.id.MainFragment, viewCookbooks); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { //We should probably ask if they want to refresh? viewCookbooks = new ViewCookbooks_Fragment(); ft.replace(R.id.MainFragment, viewCookbooks); }}); cookbooksTab.setIcon(R.drawable.ic_action_cookbook); actionBar.addTab(cookbooksTab,false); Tab rolesTab = actionBar.newTab().setText(R.string.TabsRoles).setTabListener(new TabListener(){ @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if(viewRoles == null) { viewRoles = new ViewRoles_Fragment(); } ft.replace(R.id.MainFragment, viewRoles); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { viewRoles = new ViewRoles_Fragment(); ft.replace(R.id.MainFragment, viewRoles); }}); rolesTab.setIcon(R.drawable.ic_action_roles); actionBar.addTab(rolesTab,false); Tab envTab = actionBar.newTab().setText(R.string.TabsEnv).setTabListener(new TabListener(){ @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if(viewEnvironments == null) viewEnvironments = new ViewEnvironments_Fragment(); ft.replace(R.id.MainFragment, viewEnvironments); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { viewEnvironments = new ViewEnvironments_Fragment(); ft.replace(R.id.MainFragment, viewEnvironments); }}); envTab.setIcon(R.drawable.ic_action_environments); actionBar.addTab(envTab,false); Tab searchTab = actionBar.newTab().setText(R.string.TabsSearch).setTabListener(new TabListener(){ @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if(viewSearch == null) viewSearch = new Search_Fragment(); ft.replace(R.id.MainFragment, viewSearch); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { viewSearch = new Search_Fragment(); ft.replace(R.id.MainFragment, viewSearch); }}); searchTab.setIcon(R.drawable.ic_action_search); actionBar.addTab(searchTab,false); } private void CheckDatabase() { if(settings.getBoolean("DatabaseCreated", false) == true) { cacheDB = new CyllellCache(MainLanding.this.getApplicationContext()); try { Cuts Cut = new Cuts(MainLanding.this.getApplicationContext()); cacheDB.RefreshCache(Cut); } catch(Exception e) { BugSenseHandler.log("CheckDataBase", e); } } else { Intent DatabaseIntent = new Intent(MainLanding.this, CreateDatabase.class); MainLanding.this.startActivity(DatabaseIntent); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //Check what the result was from the Settings Activity //In theory the Settings activity should perform validation and only finish() if the settings pass validation if(resultCode == 1) { SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("FirstRun", false); editor.commit(); CheckDatabase(); } else if(resultCode == 2) { Toast.makeText(MainLanding.this, "Cyllell cannot start without configured settings.\n\nExiting....", Toast.LENGTH_LONG).show(); finish(); } else //There is the potential for an infinite loop of unhappiness here but I doubt it'll happen { Toast.makeText(MainLanding.this, "Settings did not validate, returning to the settings screen.", Toast.LENGTH_LONG).show(); Intent LauncherIntent = new Intent(MainLanding.this, SettingsLanding.class); MainLanding.this.startActivityForResult(LauncherIntent, requestCode); } } @Override public boolean onCreateOptionsMenu (Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.tablet_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings: { Intent ViewSettingsIntent = new Intent(MainLanding.this, ViewSettings.class); MainLanding.this.startActivity(ViewSettingsIntent); return true; } } return false; } @Override public void onDestroy() { super.onDestroy(); cacheDB.close(); } }