diff --git a/app/app.iml b/app/app.iml
index e64578e..a4ae69a 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -49,13 +49,6 @@
-
-
-
-
-
-
-
@@ -63,6 +56,13 @@
+
+
+
+
+
+
+
@@ -70,13 +70,6 @@
-
-
-
-
-
-
-
@@ -84,6 +77,13 @@
+
+
+
+
+
+
+
@@ -102,7 +102,6 @@
-
@@ -166,7 +165,9 @@
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 380ea94..74d6aad 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -43,7 +43,8 @@ dependencies {
compile 'com.beardedhen:androidbootstrap:2.3.2'
- testCompile "org.robolectric:robolectric:3.6.1"
+ compile 'net.sf.opencsv:opencsv:2.3'
- compile 'com.beardedhen:androidbootstrap:2.3.2'
+ testCompile "org.robolectric:robolectric:3.6.1"
+ testCompile 'org.threeten:threetenbp:1.3.3'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 153841d..8e59acb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,7 @@
+
list = repository.fetchAll();
+
+ //TODO パーミッションを確認するフローを追加する
+ File file = new File(Environment.getExternalStorageDirectory().getPath(), exportedName);
+ Log.d("EXPORT_FILE", file.getAbsolutePath());
+ try {
+ if (!file.createNewFile()) {
+ return;
+ }
+ CSVWriter writer = new CSVWriter(new PrintWriter(file));
+ for (DiverLog log : list) {
+ writer.writeNext(DiverLogHelper.toStringArray(log));
+ }
+ writer.flush();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/app/src/main/java/com/slymapp/diverlog/domain/DiverLogExporter.java b/app/src/main/java/com/slymapp/diverlog/domain/DiverLogExporter.java
new file mode 100644
index 0000000..d1d6861
--- /dev/null
+++ b/app/src/main/java/com/slymapp/diverlog/domain/DiverLogExporter.java
@@ -0,0 +1,18 @@
+package com.slymapp.diverlog.domain;
+
+import android.content.Context;
+
+/**
+ * ダイバーログの外部保存・読み込みをするインターフェース
+ */
+public interface DiverLogExporter {
+
+ /**
+ * ダイバーログをファイル保存する
+ * 外部保存をするため、外部ストレージの書き込みパーミッションが必要
+ *
+ * @param context {@link Context}
+ * @param exportedName 出力ファイル名
+ */
+ void exportAllLog(Context context, String exportedName);
+}
diff --git a/app/src/main/java/com/slymapp/diverlog/utils/DateUtils.java b/app/src/main/java/com/slymapp/diverlog/utils/DateUtils.java
index 69f7846..8c5f9f9 100644
--- a/app/src/main/java/com/slymapp/diverlog/utils/DateUtils.java
+++ b/app/src/main/java/com/slymapp/diverlog/utils/DateUtils.java
@@ -34,13 +34,22 @@ public static String toDateString(Date date) {
/**
* {@link Date} を時刻形式に変換する
- * @param date {@link}
+ * @param date {@link Date}
* @return 時刻形式 (HH:mm)
*/
public static String toTimeString(Date date) {
return DateUtils.format(date, TIME_PATTERN);
}
+ /**
+ * {@link Date} を日時形式に変換する
+ * @param date {@link Date}
+ * @return 日時形式 (yyyy-MM-dd HH:mm:ss)
+ */
+ public static String toDateTimeString(Date date){
+ return DateUtils.format(date, "yyyy-MM-dd HH:mm:ss");
+ }
+
/**
* 日付から{@link Date}を生成する
*
diff --git a/app/src/main/java/com/slymapp/diverlog/utils/DiverLogHelper.java b/app/src/main/java/com/slymapp/diverlog/utils/DiverLogHelper.java
new file mode 100644
index 0000000..89e3835
--- /dev/null
+++ b/app/src/main/java/com/slymapp/diverlog/utils/DiverLogHelper.java
@@ -0,0 +1,34 @@
+package com.slymapp.diverlog.utils;
+
+import com.slymapp.diverlog.domain.DiverLog;
+
+/**
+ * {@link com.slymapp.diverlog.domain.DiverLog}のヘルパークラス
+ */
+public class DiverLogHelper {
+
+ /**
+ * {@link DiverLog}を文字列配列に変換する
+ * @param diverLog {@link DiverLog}
+ * @return ダイビングNo,ダイビング日時,潜水場所,開始時圧力,終了時圧力,開始時間,終了時間,入水方法,透明度,スーツ種別,ウェイト,平均深度,最大深度,水温
+ */
+ public static String[] toStringArray(DiverLog diverLog) {
+ return new String[]{
+ String.valueOf(diverLog.getDivingNumber()),
+ DateUtils.toDateTimeString(diverLog.getDate()),
+ diverLog.getWeather(),
+ diverLog.getPlace(),
+ String.valueOf(diverLog.getStartPressure()),
+ String.valueOf(diverLog.getEndPressure()),
+ DateUtils.toDateTimeString(diverLog.getStartTime()),
+ DateUtils.toDateTimeString(diverLog.getEndTime()),
+ diverLog.getEntryMethod(),
+ String.valueOf(diverLog.getTransparent()),
+ diverLog.getSuits(),
+ String.valueOf(diverLog.getWeight()),
+ String.valueOf(diverLog.getAverageDepth()),
+ String.valueOf(diverLog.getMaxDepth()),
+ String.valueOf(diverLog.getTemperature())
+ };
+ }
+}
diff --git a/app/src/main/java/com/slymapp/diverlog/view/DummyFragment.java b/app/src/main/java/com/slymapp/diverlog/view/DummyFragment.java
index 45c0344..994e849 100644
--- a/app/src/main/java/com/slymapp/diverlog/view/DummyFragment.java
+++ b/app/src/main/java/com/slymapp/diverlog/view/DummyFragment.java
@@ -1,12 +1,17 @@
package com.slymapp.diverlog.view;
+import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Toast;
import com.slymapp.diverlog.R;
+import com.slymapp.diverlog.databinding.FragmentDummyBinding;
+import com.slymapp.diverlog.domain.DiverLogCsvExporter;
+import com.slymapp.diverlog.domain.DiverLogExporter;
/**
* Hello Worldを表示する、画面遷移の実装のダミー画面
@@ -16,6 +21,17 @@ public class DummyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- return inflater.inflate(R.layout.fragment_main, container, false);
+ View view = inflater.inflate(R.layout.fragment_dummy, container, false);
+ FragmentDummyBinding binding = DataBindingUtil.bind(view);
+ binding.sampleButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ DiverLogExporter exporter = new DiverLogCsvExporter();
+ exporter.exportAllLog(getContext(), "DiverLogList.csv");
+ Toast.makeText(view.getContext(), "exported!!", Toast.LENGTH_SHORT).show();
+ }
+ });
+ return view;
}
+
}
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
index 03fb772..8e7d0a7 100644
--- a/app/src/main/res/layout/content_main.xml
+++ b/app/src/main/res/layout/content_main.xml
@@ -5,4 +5,4 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
- tools:layout="@layout/fragment_main" />
+ tools:layout="@layout/fragment_dummy" />
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_dummy.xml
similarity index 60%
rename from app/src/main/res/layout/fragment_main.xml
rename to app/src/main/res/layout/fragment_dummy.xml
index 31b99b8..7443c77 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_dummy.xml
@@ -1,5 +1,7 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/slymapp/diverlog/utils/DiverLogHelperTest.java b/app/src/test/java/com/slymapp/diverlog/utils/DiverLogHelperTest.java
new file mode 100644
index 0000000..bc511c8
--- /dev/null
+++ b/app/src/test/java/com/slymapp/diverlog/utils/DiverLogHelperTest.java
@@ -0,0 +1,61 @@
+package com.slymapp.diverlog.utils;
+
+import com.slymapp.diverlog.domain.DiverLog;
+
+import org.junit.Test;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+public class DiverLogHelperTest {
+ @Test
+ public void toStringArray() throws Exception {
+ DiverLog diverLog = createDiverLogMock();
+
+ String[] actual = DiverLogHelper.toStringArray(diverLog);
+
+ assertThat(actual, is(notNullValue()));
+ assertThat(actual.length, is(15));
+ assertThat(actual[0], is("1"));
+ assertThat(actual[1], is("2017-12-23 00:00:00"));
+ assertThat(actual[2], is("晴れ"));
+ assertThat(actual[3], is("どこかの海"));
+ assertThat(actual[4], is("300"));
+ assertThat(actual[5], is("0"));
+ assertThat(actual[6], is("2017-12-23 12:00:00"));
+ assertThat(actual[7], is("2017-12-23 12:30:00"));
+ assertThat(actual[8], is("ボート"));
+ assertThat(actual[9], is("30"));
+ assertThat(actual[10], is("ドライ"));
+ assertThat(actual[11], is("15"));
+ assertThat(actual[12], is("20.0"));
+ assertThat(actual[13], is("40.0"));
+ assertThat(actual[14], is("10.0"));
+ }
+
+ private DiverLog createDiverLogMock() {
+ DiverLog diverLog = new DiverLog();
+ diverLog.setDivingNumber(1);
+ diverLog.setDate(new GregorianCalendar(2017, Calendar.DECEMBER, 23, 0, 0, 0).getTime());
+ diverLog.setWeather("晴れ");
+ diverLog.setPlace("どこかの海");
+ diverLog.setStartPressure(300);
+ diverLog.setEndPressure(0);
+ diverLog.setStartTime(new GregorianCalendar(2017, Calendar.DECEMBER, 23, 12, 0, 0).getTime());
+ diverLog.setEndTime(new GregorianCalendar(2017, Calendar.DECEMBER, 23, 12, 30, 0).getTime());
+ diverLog.setEntryMethod("ボート");
+ diverLog.setTransparent(30);
+ diverLog.setSuits("ドライ");
+ diverLog.setWeight(15);
+ diverLog.setAverageDepth(20f);
+ diverLog.setMaxDepth(40f);
+ diverLog.setTemperature(10f);
+ return diverLog;
+ }
+
+
+}
\ No newline at end of file