package com.example.surgerylog; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FilenameFilter; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.StreamCorruptedException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Locale; import java.util.Map; import net.redroid.medlog.R; import com.csvreader.CsvReader; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.app.NavUtils; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Spinner; import android.widget.SpinnerAdapter; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends FragmentActivity { /** * The {@link android.support.v4.view.PagerAdapter} that will provide * fragments for each of the sections. We use a * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which * will keep every loaded fragment in memory. If this becomes too memory * intensive, it may be best to switch to a * {@link android.support.v4.app.FragmentStatePagerAdapter}. */ SectionsPagerAdapter mSectionsPagerAdapter; /** * The {@link ViewPager} that will host the section contents. */ ViewPager mViewPager; // MedTree root public MedLogRoot Root; public List DataBase; public MedLogInfo CurrentInfo = new MedLogInfo(); // MedTree description file public int ProcessDescriptionFileNumColumns = 8; public String AppFolder = Environment.getExternalStorageDirectory() + "//MedLog"; public String TemplateDescriptionFile = Environment.getExternalStorageDirectory() + "//MedLog//template.csv"; public String ExportFile = Environment.getExternalStorageDirectory() + "//MedLog//export.csv"; public String MedLogConfigFile = Environment.getExternalStorageDirectory() + "//MedLog//config.bin"; public String MedLogDataBaseFile = Environment.getExternalStorageDirectory() + "//MedLog//database.bin"; private int MessageTime = 1; @Override protected void onCreate(Bundle savedInstanceState) { //Log.e("Trace", "MainActiviyy START"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Create root Root = new MedLogRoot(); // Create the adapter that will return a fragment for each of the three // primary sections of the app. mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); CheckAppFolder(); LoadMedLogConfig(); LoadMedLogDB(); //Log.e("Trace", "MainActiviyy OUT"); } // @Override // public boolean onCreateOptionsMenu(Menu menu) { // // Inflate the menu; this adds items to the action bar if it is present. // getMenuInflater().inflate(R.menu.main, menu); // return true; // } private void CheckAppFolder() { File appFolder = new File(AppFolder); if(appFolder.exists() == false) { appFolder.mkdir(); } } public void LoadMedLogConfig() { try { //Log.e("Trace Cfg", "input file"); FileInputStream fis = new FileInputStream(MedLogConfigFile); //FileInputStream fis = getApplicationContext().openFileInput(MedLogConfigFile); //FileInputStream fis = getApplicationContext().openFileInput("MedLogConfig.bin"); //Log.e("Trace Cfg", "input stream"); ObjectInputStream is = new ObjectInputStream(fis); //Log.e("Trace Cfg", "read object"); Root = (MedLogRoot) is.readObject(); //Log.e("Trace Cfg", "close file"); is.close(); //Log.e("Trace Cfg", "done loading"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block //e.printStackTrace(); //Log.e("TrTrace Cfgace", "File not found during load."); } catch (StreamCorruptedException e) { // TODO Auto-generated catch block //e.printStackTrace(); //Log.e("Trace Cfg", "Stream corrupted during load."); } catch (IOException e) { // TODO Auto-generated catch block //e.printStackTrace(); //Log.e("Trace Cfg", "IO Exception during load."); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block //e.printStackTrace(); //Log.e("Trace Cfg", "Class not found during load."); } } public void SaveMedLogConfig() { try { //Log.e("Trace Cfg", "get context"); Context c = getApplicationContext(); //Log.e("Trace Cfg", "open output file"); //FileOutputStream fos = getApplicationContext().openFileOutput(MedLogConfigFile, Context.MODE_PRIVATE); FileOutputStream fos = new FileOutputStream(MedLogConfigFile); //Log.e("Trace Cfg", "new output stream"); ObjectOutputStream os = new ObjectOutputStream(fos); //Log.e("Trace Cfg", "write"); os.writeObject(Root); //Log.e("Trace Cfg", "close"); os.close(); //Log.e("Trace Cfg", "done"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); //Log.e("Trace Cfg", "File not found during save."); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); //Log.e("Trace Cfg", "IO Exception during save."); } } public void LoadMedLogDB() { try { //Log.e("Trace DB", "input file"); FileInputStream fis = new FileInputStream(MedLogDataBaseFile); //Log.e("Trace DB", "input stream"); ObjectInputStream is = new ObjectInputStream(fis); //Log.e("Trace DB", "read object"); DataBase = (List) is.readObject(); //Log.e("Trace DB", "close file"); is.close(); //Log.e("Trace DB", "done loading"); } catch (FileNotFoundException e) { //Log.e("Trace DB", "File not found during load."); } catch (StreamCorruptedException e) { //Log.e("Trace DB", "Stream corrupted during load."); } catch (IOException e) { //Log.e("Trace DB", "IO Exception during data base load."); } catch (ClassNotFoundException e) { //Log.e("Trace DB", "Class 'List' not found during load."); } finally { if(DataBase == null) { // create empty data base DataBase = new ArrayList(); } } } public void SaveMedLogDB() { try { //Log.e("Trace DB", "get context"); Context c = getApplicationContext(); //Log.e("Trace DB", "open output file"); FileOutputStream fos = new FileOutputStream(MedLogDataBaseFile); //Log.e("Trace DB", "new output stream"); ObjectOutputStream os = new ObjectOutputStream(fos); //Log.e("Trace DB", "write"); os.writeObject(DataBase); //Log.e("Trace DB", "close"); os.close(); //Log.e("Trace DB", "done"); } catch (FileNotFoundException e) { //Log.e("Trace DB", "File not found during save."); } catch (IOException e) { //Log.e("Trace DB", "IO Exception during save."); } } public void AddNewEntry() { DataBase.add(CurrentInfo); SaveMedLogDB(); Root.GrowTreeWithInfo(CurrentInfo); SaveMedLogConfig(); CurrentInfo = new MedLogInfo(); } public void ShowMessage(int messageId) { for (int i=0; i < MessageTime; i++) { Toast.makeText(this, messageId, Toast.LENGTH_LONG).show(); } } public void ShowMessage(String message) { for (int i=0; i < MessageTime; i++) { Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } } /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to * one of the sections/tabs/pages. */ public class SectionsPagerAdapter extends FragmentStatePagerAdapter //FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { //Log.e("Trace", "new frag IN"); // getItem is called to instantiate the fragment for the given page. // Return a DummySectionFragment (defined as a static inner class // below) with the page number as its lone argument. Fragment fragment; if(position == 0) { fragment = new NewEntryFragment(); } else if(position == 1) { fragment = new ViewDataFragment(); } else { fragment = new FileOperationsFragment(); } Bundle args = new Bundle(); args.putInt(NewEntryFragment.ARG_SECTION_NUMBER, position + 1); fragment.setArguments(args); // retain instances //Log.e("Trace", "new frag"); return fragment; } @Override public int getCount() { // Show 3 total pages. return 3; } @Override public CharSequence getPageTitle(int position) { Locale l = Locale.getDefault(); switch (position) { case 0: return getString(R.string.title_section1).toUpperCase(l); case 1: return getString(R.string.title_section2).toUpperCase(l); case 2: return getString(R.string.title_section3).toUpperCase(l); } return null; } } }