Fixes on CSV exporting

This commit is contained in:
Alexandros Schillings
2014-04-16 09:09:16 +01:00
parent 7f0d5838eb
commit d14e4f85d7
4 changed files with 107 additions and 8 deletions
+3
View File
@@ -41,5 +41,8 @@
<string name="label_tx_power">TX Power:</string>
<string name="label_uuid">UUID:</string>
<string name="about_dialog_text">This is a sample application using the Bluetooth LE Library.\n\nGithub: https://github.com/alt236/Bluetooth-LE-Library---Android\n\nCopyright: Alexandros Schillings</string>
<string name="exporter_email_subject">Bluetooth LE Scan Results (%s)</string>
<string name="exporter_email_body">Please find attached the scan results.</string>
<string name="exporter_email_picker_text">Please select your email client:</string>
</resources>
@@ -15,7 +15,9 @@ import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice;
import uk.co.alt236.bluetoothlelib.device.IBeaconDevice;
import uk.co.alt236.bluetoothlelib.util.ByteUtils;
import uk.co.alt236.bluetoothlelib.util.IBeaconUtils;
import uk.co.alt236.btlescan.R;
import uk.co.alt236.btlescan.util.CsvWriterHelper;
import uk.co.alt236.btlescan.util.TimeFormatter;
import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor;
import android.content.Context;
import android.content.Intent;
@@ -99,16 +101,15 @@ public class BluetoothLeDeviceStore {
sb.append(CsvWriterHelper.addStuff("minor"));
sb.append(CsvWriterHelper.addStuff("txPower"));
sb.append(CsvWriterHelper.addStuff("distance"));
sb.append(CsvWriterHelper.addStuff("distance"));
sb.append(CsvWriterHelper.addStuff("accuracy"));
sb.append('\n');
for(BluetoothLeDevice device : list){
sb.append(CsvWriterHelper.addStuff(device.getAddress()));
sb.append(CsvWriterHelper.addStuff(device.getName()));
sb.append(CsvWriterHelper.addStuff(device.getFirstTimestamp()));
sb.append(CsvWriterHelper.addStuff(TimeFormatter.getIsoDateTime(device.getFirstTimestamp())));
sb.append(CsvWriterHelper.addStuff(device.getFirstRssi()));
sb.append(CsvWriterHelper.addStuff(device.getTimestamp()));
sb.append(CsvWriterHelper.addStuff(TimeFormatter.getIsoDateTime(device.getTimestamp())));
sb.append(CsvWriterHelper.addStuff(device.getRssi()));
sb.append(CsvWriterHelper.addStuff(ByteUtils.byteArrayToHexString(device.getScanRecord())));
final boolean isIBeacon = IBeaconUtils.isThisAnIBeacon(device);
@@ -152,22 +153,27 @@ public class BluetoothLeDeviceStore {
public void shareDataAsEmail(Context context){
String to = null;
String subject = "Bluetooth LE Scan Results";
String message = "Please find attached the scan results.";
final long timeInMillis = System.currentTimeMillis();
final String to = null;
final String subject = context.getString(
R.string.exporter_email_subject,
TimeFormatter.getIsoDateTime(timeInMillis));
final String message = context.getString(R.string.exporter_email_body);
final Intent i = new Intent(Intent.ACTION_SEND);
i.setType("plain/text");
try {
final File outputDir = context.getCacheDir();
final File outputFile = File.createTempFile("export_tmp", ".csv", outputDir);
final File outputFile = File.createTempFile("bluetooth_le_" + timeInMillis, ".csv", outputDir);
outputFile.setReadable(true, false);
generateFile(outputFile, getListAsCsv());
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(outputFile));
i.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
i.putExtra(Intent.EXTRA_SUBJECT, subject);
i.putExtra(Intent.EXTRA_TEXT, message);
context.startActivity(Intent.createChooser(i, "Please select your email client:"));
context.startActivity(Intent.createChooser(i, context.getString(R.string.exporter_email_picker_text)));
} catch (IOException e) {
e.printStackTrace();
@@ -0,0 +1,18 @@
package uk.co.alt236.btlescan.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class TimeFormatter {
private final static String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS zzz";
private final static SimpleDateFormat ISO_FORMATTER = new UtcDateFormatter(ISO_FORMAT, Locale.US);
public static String getIsoDateTime(Date date){
return ISO_FORMATTER.format(date);
}
public static String getIsoDateTime(long millis){
return getIsoDateTime(new Date(millis));
}
}
@@ -0,0 +1,72 @@
/*******************************************************************************
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* GenieConnect Ltd. ("COMPANY") CONFIDENTIAL
* Unpublished Copyright (c) 2010-2013 GenieConnect Ltd., All Rights Reserved.
*
* NOTICE:
* All information contained herein is, and remains the property of COMPANY.
* The intellectual and technical concepts contained herein are proprietary to
* COMPANY and may be covered by U.S. and Foreign Patents, patents in process, and
* are protected by trade secret or copyright law. Dissemination of this
* information or reproduction of this material is strictly forbidden unless prior
* written permission is obtained from COMPANY. Access to the source code
* contained herein is hereby forbidden to anyone except current COMPANY employees,
* managers or contractors who have executed Confidentiality and Non-disclosure
* agreements explicitly covering such access.
*
* The copyright notice above does not evidence any actual or intended publication
* or disclosure of this source code, which includes information that is
* confidential and/or proprietary, and is a trade secret, of COMPANY.
*
* ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, OR PUBLIC
* DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT THE EXPRESS WRITTEN
* CONSENT OF COMPANY IS STRICTLY PROHIBITED, AND IN VIOLATION OF APPLICABLE LAWS
* AND INTERNATIONAL TREATIES. THE RECEIPT OR POSSESSION OF THIS SOURCE CODE
* AND/OR RELATED INFORMATION DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE,
* DISCLOSE OR DISTRIBUTE ITS CONTENTS, OR TO MANUFACTURE, USE, OR SELL ANYTHING
* THAT IT MAY DESCRIBE, IN WHOLE OR IN PART.
******************************************************************************/
package uk.co.alt236.btlescan.util;
import java.text.DateFormatSymbols;
import java.util.Locale;
import java.util.TimeZone;
import android.annotation.SuppressLint;
public class UtcDateFormatter extends java.text.SimpleDateFormat{
private static final long serialVersionUID = 1L;
private static final String TIME_ZONE_STRING = "UTC";
private static final TimeZone TIME_ZONE_UTC = TimeZone.getTimeZone(TIME_ZONE_STRING);
@SuppressLint("SimpleDateFormat")
public UtcDateFormatter(String template){
super(template);
super.setTimeZone(TIME_ZONE_UTC);
}
@SuppressLint("SimpleDateFormat")
public UtcDateFormatter(String template, DateFormatSymbols symbols){
super(template, symbols);
super.setTimeZone(TIME_ZONE_UTC);
}
public UtcDateFormatter(String template, Locale locale){
super(template, locale);
super.setTimeZone(TIME_ZONE_UTC);
}
/*
* This function will throw an UnsupportedOperationException.
* You are not be able to change the TimeZone of this object
*
* (non-Javadoc)
* @see java.text.DateFormat#setTimeZone(java.util.TimeZone)
*/
@Override
public void setTimeZone(TimeZone timezone){
throw new UnsupportedOperationException("This SimpleDateFormat can only be in " + TIME_ZONE_STRING);
}
}