|
@@ -2,10 +2,15 @@ package de.tudarmstadt.informatik.hostage.ui2.fragment;
|
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
import android.app.Activity;
|
|
|
+import android.app.AlertDialog;
|
|
|
import android.app.FragmentManager;
|
|
|
import android.content.Context;
|
|
|
+import android.content.DialogInterface;
|
|
|
import android.content.Intent;
|
|
|
+import android.content.SharedPreferences;
|
|
|
import android.os.Bundle;
|
|
|
+import android.os.Environment;
|
|
|
+import android.preference.PreferenceManager;
|
|
|
import android.util.Log;
|
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.Menu;
|
|
@@ -16,9 +21,12 @@ import android.view.ViewGroup;
|
|
|
import android.widget.ExpandableListView;
|
|
|
import android.widget.ImageButton;
|
|
|
import android.widget.ProgressBar;
|
|
|
+import android.widget.Toast;
|
|
|
|
|
|
import com.google.android.gms.maps.model.LatLng;
|
|
|
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileOutputStream;
|
|
|
import java.text.DateFormat;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
@@ -30,9 +38,12 @@ import java.util.HashMap;
|
|
|
import java.util.Random;
|
|
|
|
|
|
import de.tudarmstadt.informatik.hostage.R;
|
|
|
+import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
|
|
|
import de.tudarmstadt.informatik.hostage.deprecated.UglyDbHelper;
|
|
|
import de.tudarmstadt.informatik.hostage.logging.Record;
|
|
|
+import de.tudarmstadt.informatik.hostage.logging.formatter.TraCINgFormatter;
|
|
|
import de.tudarmstadt.informatik.hostage.sync.BluetoothSync;
|
|
|
+import de.tudarmstadt.informatik.hostage.sync.NFCSync;
|
|
|
import de.tudarmstadt.informatik.hostage.ui.LogFilter;
|
|
|
import de.tudarmstadt.informatik.hostage.ui.LogFilter.SortType;
|
|
|
import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
|
|
@@ -80,7 +91,9 @@ public class RecordOverviewFragment extends UpNavigatibleFragment implements Che
|
|
|
private String sectionToOpen = "";
|
|
|
private ArrayList<Integer> openSections;
|
|
|
|
|
|
- public void setFilter(LogFilter filter){
|
|
|
+ private SharedPreferences pref;
|
|
|
+
|
|
|
+ public void setFilter(LogFilter filter){
|
|
|
this.filter = filter;
|
|
|
}
|
|
|
|
|
@@ -107,7 +120,7 @@ public class RecordOverviewFragment extends UpNavigatibleFragment implements Che
|
|
|
getActivity().setTitle(getResources().getString(R.string.drawer_records));
|
|
|
|
|
|
dbh = new UglyDbHelper(this.getActivity().getBaseContext());
|
|
|
-
|
|
|
+ pref = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
|
|
//this.addRecordToDB(5, 2);
|
|
|
|
|
|
// Get the message from the intent
|
|
@@ -316,13 +329,91 @@ public class RecordOverviewFragment extends UpNavigatibleFragment implements Che
|
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
|
switch (item.getItemId()) {
|
|
|
case R.id.records_action_synchronize:
|
|
|
- getActivity().startActivity(new Intent(this.getActivity(), BluetoothSync.class));
|
|
|
+
|
|
|
+ AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
|
|
|
+ builder.setTitle("Synchronize records");
|
|
|
+ builder.setItems(new String[]{
|
|
|
+ "Via Bluetooth",
|
|
|
+ "Via NFC",
|
|
|
+ "Via CASED database"
|
|
|
+ }, new DialogInterface.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(DialogInterface dialog, int position) {
|
|
|
+ switch(position){
|
|
|
+ case 0:
|
|
|
+ getActivity().startActivity(new Intent(getActivity(), BluetoothSync.class));
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ getActivity().startActivity(new Intent(getActivity(), NFCSync.class));
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 2:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ builder.create();
|
|
|
+ builder.show();
|
|
|
+
|
|
|
+
|
|
|
+ return true;
|
|
|
+ case R.id.records_action_export:
|
|
|
+ AlertDialog.Builder builderExport = new AlertDialog.Builder(getActivity());
|
|
|
+ builderExport.setTitle("Choose export format");
|
|
|
+ builderExport.setItems(R.array.format, new DialogInterface.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(DialogInterface dialog, int position) {
|
|
|
+ RecordOverviewFragment.this.exportDatabase(position);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ builderExport.create();
|
|
|
+ builderExport.show();
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ private void exportDatabase(int format) {
|
|
|
+ try {
|
|
|
+ FileOutputStream log;
|
|
|
+ String filename = "hostage_" + format + "_" + System.currentTimeMillis() + ".log";
|
|
|
+
|
|
|
+ String externalLocation = pref.getString("pref_external_location",
|
|
|
+ "");
|
|
|
+
|
|
|
+ String root = Environment.getExternalStorageDirectory()
|
|
|
+ .toString();
|
|
|
+ if (root != null && HelperUtils.isExternalStorageWritable()) {
|
|
|
+ File dir = new File(root + externalLocation);
|
|
|
+ dir.mkdirs();
|
|
|
+ File file = new File(dir, filename);
|
|
|
+ log = new FileOutputStream(file);
|
|
|
+ } else {
|
|
|
+ Toast.makeText(getActivity(), "Could not write to SD Card",
|
|
|
+ Toast.LENGTH_SHORT).show();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ ArrayList<Record> records = dbh.getAllRecords();
|
|
|
+ for (Record record : records) {
|
|
|
+ log.write((record.toString((format == 1) ? TraCINgFormatter
|
|
|
+ .getInstance() : null)).getBytes());
|
|
|
+ }
|
|
|
+ log.flush();
|
|
|
+ log.close();
|
|
|
+ Toast.makeText(
|
|
|
+ getActivity(),
|
|
|
+ "Exported records to " + externalLocation + filename, Toast.LENGTH_LONG)
|
|
|
+ .show();
|
|
|
+ } catch (Exception e) {
|
|
|
+ Toast.makeText(getActivity(), "Could not write to SD Card",
|
|
|
+ Toast.LENGTH_SHORT).show();
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/*****************************
|
|
|
*
|