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 @@ - + +