From 930630883c20bcf235a35ff081e8e82e8b0f5898 Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Tue, 13 Feb 2018 21:12:10 +0100 Subject: [PATCH] Use intent to open file for import --- .../com/health/openscale/core/OpenScale.java | 26 ++++++-- .../gui/fragments/TableFragment.java | 59 +++++++------------ 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java index e3b70b9d..21b47b5f 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java +++ b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java @@ -21,8 +21,11 @@ import android.arch.persistence.room.Room; import android.arch.persistence.room.RoomDatabase; import android.content.Context; import android.content.SharedPreferences; +import android.database.Cursor; +import android.net.Uri; import android.os.Handler; import android.preference.PreferenceManager; +import android.provider.OpenableColumns; import android.support.v4.app.Fragment; import android.text.format.DateFormat; import android.util.Log; @@ -46,9 +49,10 @@ import com.health.openscale.core.utils.CsvHelper; import com.health.openscale.gui.fragments.FragmentUpdateListener; import java.io.BufferedReader; -import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; @@ -328,10 +332,20 @@ public class OpenScale { updateScaleData(); } - public void importData(String filename) { + private String getFilenameFromUri(Uri uri) { + Cursor cursor = context.getContentResolver().query( + uri, null, null, null, null); + cursor.moveToFirst(); + return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); + } + + public void importData(Uri uri) { try { + final String filename = getFilenameFromUri(uri); + + InputStream input = context.getContentResolver().openInputStream(uri); List csvScaleMeasurementList = - CsvHelper.importFrom(new BufferedReader(new FileReader(filename))); + CsvHelper.importFrom(new BufferedReader(new InputStreamReader(input))); final int userId = getSelectedScaleUser().getId(); for (ScaleMeasurement measurement : csvScaleMeasurementList) { @@ -340,11 +354,11 @@ public class OpenScale { measurementDAO.insertAll(csvScaleMeasurementList); updateScaleData(); - Toast.makeText(context, context.getString(R.string.info_data_imported) + " /sdcard" + filename, Toast.LENGTH_SHORT).show(); + Toast.makeText(context, context.getString(R.string.info_data_imported) + " " + filename, Toast.LENGTH_SHORT).show(); } catch (IOException e) { - Toast.makeText(context, context.getString(R.string.error_importing) + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(context, context.getString(R.string.error_importing) + ": " + e.getMessage(), Toast.LENGTH_SHORT).show(); } catch (ParseException e) { - Toast.makeText(context, context.getString(R.string.error_importing) + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(context, context.getString(R.string.error_importing) + ": " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java index 6f0b2a2d..369f7e15 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java @@ -79,6 +79,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import static android.app.Activity.RESULT_OK; import static android.util.TypedValue.COMPLEX_UNIT_DIP; public class TableFragment extends Fragment implements FragmentUpdateListener { @@ -94,7 +95,9 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { private ArrayList measurementsList; private int selectedSubpageNr; - private static String SELECTED_SUBPAGE_NR_KEY = "selectedSubpageNr"; + private static final String SELECTED_SUBPAGE_NR_KEY = "selectedSubpageNr"; + + private static final int IMPORT_DATA_REQUEST = 100; public TableFragment() { @@ -158,12 +161,9 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { @Override public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { case R.id.importData: - if (PermissionHelper.requestReadPermission(getActivity())) { - importTable(); - } + importTable(); return true; case R.id.exportData: if (PermissionHelper.requestWritePermission(getActivity())) { @@ -285,11 +285,19 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { } } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == IMPORT_DATA_REQUEST && resultCode == RESULT_OK && data != null) { + OpenScale.getInstance(getContext()).importData(data.getData()); + } + } + private void importTable() { int selectedUserId = OpenScale.getInstance(getContext()).getSelectedScaleUserId(); - if (selectedUserId == -1) - { + if (selectedUserId == -1) { AlertDialog.Builder infoDialog = new AlertDialog.Builder(getContext()); infoDialog.setMessage(getResources().getString(R.string.info_no_selected_user)); @@ -298,36 +306,14 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { infoDialog.show(); } - else - { - AlertDialog.Builder filenameDialog = new AlertDialog.Builder(getActivity()); + else { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType("text/*"); - filenameDialog.setTitle(getResources().getString(R.string.info_set_filename) + " /sdcard ..."); - - String exportFilename = prefs.getString("exportFilename", "/openScale_data_" + OpenScale.getInstance(getContext()).getSelectedScaleUser().getUserName() + ".csv"); - - final EditText txtFilename = new EditText(tableView.getContext()); - txtFilename.setText(exportFilename); - - filenameDialog.setView(txtFilename); - - filenameDialog.setPositiveButton(getResources().getString(R.string.label_ok), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - OpenScale.getInstance(getContext()).importData(Environment.getExternalStorageDirectory().getPath() + txtFilename.getText().toString()); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(tableView.getContext()); - prefs.edit().putString("exportFilename", txtFilename.getText().toString()).commit(); - updateOnView(OpenScale.getInstance(getContext()).getScaleMeasurementList()); - } - }); - - filenameDialog.setNegativeButton(getResources().getString(R.string.label_cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.dismiss(); - } - }); - - - filenameDialog.show(); + startActivityForResult( + Intent.createChooser(intent, getResources().getString(R.string.label_import)), + IMPORT_DATA_REQUEST); } } @@ -365,7 +351,6 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { filenameDialog.show(); } - private void shareTable() { final ScaleUser selectedScaleUser = OpenScale.getInstance(getContext()).getSelectedScaleUser();