diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index 88dbf1c4..ecb5170c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -9,6 +9,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.core.content.FileProvider import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm import kotlinx.android.synthetic.main.fragment_settings.* @@ -35,8 +36,7 @@ import net.pokeranalytics.android.util.UserDefaults import net.pokeranalytics.android.util.billing.AppGuard import net.pokeranalytics.android.util.billing.IAPProducts import net.pokeranalytics.android.util.csv.ProductCSVDescriptors -import net.pokeranalytics.android.util.extensions.fullDateTime -import net.pokeranalytics.android.util.extensions.shortDateTime +import net.pokeranalytics.android.util.extensions.dateTimeFileFormatted import timber.log.Timber import java.io.File import java.io.IOException @@ -69,6 +69,7 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep private lateinit var settingsAdapterRow: RowRepresentableAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) return inflater.inflate(R.layout.fragment_settings, container, false) } @@ -215,33 +216,35 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep val sessions = getRealm().where(Session::class.java).findAll().sort("startDate") val csv = ProductCSVDescriptors.pokerAnalyticsAndroid.toCSV(sessions) + Timber.d("CSV = $csv") + try { - val fileName = "sessions_${Date().shortDateTime()}" - FileUtils.writeToFile(csv, fileName, requireContext()) - this.shareFile(fileName) + val fileName = "sessions_${Date().dateTimeFileFormatted}.csv" + FileUtils.writeFileToFilesDir(csv, fileName, requireContext()) + this.shareFile(fileName, "Poker Analytics Export", "CSV Sessions") } catch (e: IOException) { Toast.makeText(requireContext(), "File write failed: ${e.message}", Toast.LENGTH_LONG).show() } } - private fun shareFile(filePath: String) { - - val intentShareFile = Intent(Intent.ACTION_SEND) - val fileWithinMyDir = File(filePath) - - if (fileWithinMyDir.exists()) { - intentShareFile.type = "application/pdf" - intentShareFile.putExtra( - Intent.EXTRA_STREAM, - Uri.parse("file://$filePath") - ) - intentShareFile.putExtra( - Intent.EXTRA_SUBJECT, - "Sharing File..." - ) - intentShareFile.putExtra(Intent.EXTRA_TEXT, "Sharing File...") - startActivity(Intent.createChooser(intentShareFile, "Share File")) + private fun shareFile(filePath: String, subject: String, body: String) { + + val intent = Intent(Intent.ACTION_SEND) + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + + val sharedFile = File(requireContext().filesDir, filePath) + + val uri = FileProvider.getUriForFile(requireContext(), "net.pokeranalytics.android.fileprovider", sharedFile) + + if (sharedFile.exists()) { + intent.type = "application/csv" + intent.putExtra(Intent.EXTRA_STREAM, uri) + intent.putExtra(Intent.EXTRA_SUBJECT, subject) + intent.putExtra(Intent.EXTRA_TEXT, body) + startActivity(Intent.createChooser(intent, "Share File")) + } else { + Timber.d("File located at $filePath does not exists") } } diff --git a/app/src/main/java/net/pokeranalytics/android/util/FileUtils.kt b/app/src/main/java/net/pokeranalytics/android/util/FileUtils.kt index 22c20553..666bf06b 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/FileUtils.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/FileUtils.kt @@ -1,6 +1,10 @@ package net.pokeranalytics.android.util import android.content.Context +import timber.log.Timber +import java.io.BufferedWriter +import java.io.File +import java.io.FileOutputStream import java.io.OutputStreamWriter class FileUtils { @@ -11,11 +15,15 @@ class FileUtils { * Writes a [string] into a file named [fileName], using a [context] * Should be surrounded by a try/catch IOException */ - fun writeToFile(string: String, fileName: String, context: Context) { + fun writeFileToFilesDir(string: String, fileName: String, context: Context) { - val outputStreamWriter = OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)) - outputStreamWriter.write(string) - outputStreamWriter.close() + Timber.d("Writing to: $fileName ...\n$string") + + val file = File(context.filesDir, fileName) + + val fileOutputStream = FileOutputStream(file) + fileOutputStream.write(string.toByteArray()) + fileOutputStream.close() } diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt index 2b7f5cf5..47b4716a 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt @@ -113,6 +113,12 @@ fun Date.getMonthAndYear(): String { return SimpleDateFormat("MMMM yyyy", Locale.getDefault()).format(this).capitalize() } +// Returns a file friendly date time string +val Date.dateTimeFileFormatted: String + get() { + return SimpleDateFormat("yy_MM_dd_hh_mm_ss", Locale.getDefault()).format(this) + } + // Return the netDuration between two dates fun Date.getFormattedDuration(toDate: Date): String { val difference = (toDate.time - this.time).toInt() diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6997376d..b5fc0c48 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -176,7 +176,7 @@ Die eingegrenzte Suche ergab keine Ergebnisse Bestätigung Kontakt - CSV (Importvorgang fehlgeschlagen) + CSV One of the lines in your CSV file is not well formed. Please check your file or contact the support. Währung Aktueller Monat diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b4d8dbba..8566c321 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -112,7 +112,7 @@ Los filtros aún no dieron ningún resultado. Confirmación Contáctanos - CSV (no se puede importar) + CSV Una de las líneas en tu archivo CSV no está bien formada. Verifica el archivo o contacta al soporte. Divisa Mes en curso diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 34703d39..14f8d682 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -180,7 +180,7 @@ Le filtre ne retourne aucun résultat Confirmation Contactez-nous - CSV (ne peut être importé) + CSV Une ligne de votre fichier CSV est mal formée. Veuillez vérifier votre fichier ou contacter le support. Devise Ce mois-ci diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 65ffdd86..6d5e34c2 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -112,7 +112,7 @@ फिल्टर से कोई परिणाम नहीं मिलेे पुष्टीकरण हमें संपर्क करें - CSV (इम्पोर्ट नहीं किया जा सकता) + CSV आपकी CSV फाइल में लाइनों से एक अच्छी तरह फार्मेट नहीं की गई है. कृपया अपनी फाइल जाँचे या सहायता टीम से संपर्क करें. करेंसी वर्तमान महीना diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 4a7bcabd..054efd71 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -112,7 +112,7 @@ Il filtraggio non ha dato alcun risultato Conferma Contattaci - CSV (non si può importare) + CSV Una delle linee nel tuo file CSV non è ben formata. Controlla il tuo file o contatta l\'assistenza. Valuta Mese corrente diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 4a5de6ec..2bb60ca9 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -112,7 +112,7 @@ フィルタリングでは結果が戻されませんでした 確認 ご連絡ください - CSV (インポートできません) + CSV CSV ファイルのいずれかの行が正しく形成されていません。ファイルをご確認いただくが、サポートまでお問い合わせください。 通貨 今月 diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 75c8f211..8f6762a8 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -112,7 +112,7 @@ O filtro não apresentou nenhum resultado Confirmação Contate-nos - CSV (Não pode ser importado) + CSV Uma das linhas do seu arquivo CSV não está no formato correto. Por favor, verifique o seu arquivo ou contate o suporte. Moeda Mês atual diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 52562e59..f5e7392e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -112,7 +112,7 @@ Не найдено результатов после фильтрации Подтверждение Напишите нам - CSV (Импорт невозможен) + CSV Одна из строк в вашем файле CSV отформатирована некорректно. Пожалуйста проверьте ваш файл или свяжитесь со службой поддержки. Валюта Текущий месяц diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index c3edfccd..c3f9cc97 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -98,7 +98,7 @@ 比较 确认 联系我们 - CSV(无法导入) + CSV CSV文件中的线之一不合适。请核查你的文件或联系支持团队。 货币 本月 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c0c1ccb0..f8699124 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -174,7 +174,7 @@ Filtering did not yield any results Confirmation Contact us - CSV (Cannot be imported) + CSV One of the lines in your CSV file is not well formed. Please check your file or contact the support. Currency Current month diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml index 43873cba..bfe997bf 100644 --- a/app/src/main/res/xml/provider_paths.xml +++ b/app/src/main/res/xml/provider_paths.xml @@ -1,11 +1,10 @@ - - + + + + + \ No newline at end of file