Makes sessions export work

od
Laurent 6 years ago
parent 0048dfb692
commit bf3439963b
  1. 43
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  2. 16
      app/src/main/java/net/pokeranalytics/android/util/FileUtils.kt
  3. 6
      app/src/main/java/net/pokeranalytics/android/util/extensions/DateExtension.kt
  4. 2
      app/src/main/res/values-de/strings.xml
  5. 2
      app/src/main/res/values-es/strings.xml
  6. 2
      app/src/main/res/values-fr/strings.xml
  7. 2
      app/src/main/res/values-hi/strings.xml
  8. 2
      app/src/main/res/values-it/strings.xml
  9. 2
      app/src/main/res/values-ja/strings.xml
  10. 2
      app/src/main/res/values-pt/strings.xml
  11. 2
      app/src/main/res/values-ru/strings.xml
  12. 2
      app/src/main/res/values-zh/strings.xml
  13. 2
      app/src/main/res/values/strings.xml
  14. 11
      app/src/main/res/xml/provider_paths.xml

@ -9,6 +9,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.core.content.FileProvider
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm import io.realm.Realm
import kotlinx.android.synthetic.main.fragment_settings.* 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.AppGuard
import net.pokeranalytics.android.util.billing.IAPProducts import net.pokeranalytics.android.util.billing.IAPProducts
import net.pokeranalytics.android.util.csv.ProductCSVDescriptors import net.pokeranalytics.android.util.csv.ProductCSVDescriptors
import net.pokeranalytics.android.util.extensions.fullDateTime import net.pokeranalytics.android.util.extensions.dateTimeFileFormatted
import net.pokeranalytics.android.util.extensions.shortDateTime
import timber.log.Timber import timber.log.Timber
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
@ -69,6 +69,7 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep
private lateinit var settingsAdapterRow: RowRepresentableAdapter private lateinit var settingsAdapterRow: RowRepresentableAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_settings, container, false) 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 sessions = getRealm().where(Session::class.java).findAll().sort("startDate")
val csv = ProductCSVDescriptors.pokerAnalyticsAndroid.toCSV(sessions) val csv = ProductCSVDescriptors.pokerAnalyticsAndroid.toCSV(sessions)
Timber.d("CSV = $csv")
try { try {
val fileName = "sessions_${Date().shortDateTime()}" val fileName = "sessions_${Date().dateTimeFileFormatted}.csv"
FileUtils.writeToFile(csv, fileName, requireContext()) FileUtils.writeFileToFilesDir(csv, fileName, requireContext())
this.shareFile(fileName) this.shareFile(fileName, "Poker Analytics Export", "CSV Sessions")
} catch (e: IOException) { } catch (e: IOException) {
Toast.makeText(requireContext(), "File write failed: ${e.message}", Toast.LENGTH_LONG).show() Toast.makeText(requireContext(), "File write failed: ${e.message}", Toast.LENGTH_LONG).show()
} }
} }
private fun shareFile(filePath: String) { private fun shareFile(filePath: String, subject: String, body: String) {
val intentShareFile = Intent(Intent.ACTION_SEND) val intent = Intent(Intent.ACTION_SEND)
val fileWithinMyDir = File(filePath) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
if (fileWithinMyDir.exists()) { val sharedFile = File(requireContext().filesDir, filePath)
intentShareFile.type = "application/pdf"
intentShareFile.putExtra( val uri = FileProvider.getUriForFile(requireContext(), "net.pokeranalytics.android.fileprovider", sharedFile)
Intent.EXTRA_STREAM,
Uri.parse("file://$filePath") if (sharedFile.exists()) {
) intent.type = "application/csv"
intentShareFile.putExtra( intent.putExtra(Intent.EXTRA_STREAM, uri)
Intent.EXTRA_SUBJECT, intent.putExtra(Intent.EXTRA_SUBJECT, subject)
"Sharing File..." intent.putExtra(Intent.EXTRA_TEXT, body)
) startActivity(Intent.createChooser(intent, "Share File"))
intentShareFile.putExtra(Intent.EXTRA_TEXT, "Sharing File...") } else {
startActivity(Intent.createChooser(intentShareFile, "Share File")) Timber.d("File located at $filePath does not exists")
} }
} }

@ -1,6 +1,10 @@
package net.pokeranalytics.android.util package net.pokeranalytics.android.util
import android.content.Context import android.content.Context
import timber.log.Timber
import java.io.BufferedWriter
import java.io.File
import java.io.FileOutputStream
import java.io.OutputStreamWriter import java.io.OutputStreamWriter
class FileUtils { class FileUtils {
@ -11,11 +15,15 @@ class FileUtils {
* Writes a [string] into a file named [fileName], using a [context] * Writes a [string] into a file named [fileName], using a [context]
* Should be surrounded by a try/catch IOException * 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)) Timber.d("Writing to: $fileName ...\n$string")
outputStreamWriter.write(string)
outputStreamWriter.close() val file = File(context.filesDir, fileName)
val fileOutputStream = FileOutputStream(file)
fileOutputStream.write(string.toByteArray())
fileOutputStream.close()
} }

@ -113,6 +113,12 @@ fun Date.getMonthAndYear(): String {
return SimpleDateFormat("MMMM yyyy", Locale.getDefault()).format(this).capitalize() 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 // Return the netDuration between two dates
fun Date.getFormattedDuration(toDate: Date): String { fun Date.getFormattedDuration(toDate: Date): String {
val difference = (toDate.time - this.time).toInt() val difference = (toDate.time - this.time).toInt()

@ -176,7 +176,7 @@
<string name="conditioning_report_filtering_returns_no_data">Die eingegrenzte Suche ergab keine Ergebnisse</string> <string name="conditioning_report_filtering_returns_no_data">Die eingegrenzte Suche ergab keine Ergebnisse</string>
<string name="confirmation">Bestätigung</string> <string name="confirmation">Bestätigung</string>
<string name="contact">Kontakt</string> <string name="contact">Kontakt</string>
<string name="csv">CSV (Importvorgang fehlgeschlagen)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">One of the lines in your CSV file is not well formed. Please check your file or contact the support.</string> <string name="csv_bad_row_error_message">One of the lines in your CSV file is not well formed. Please check your file or contact the support.</string>
<string name="currency">Währung</string> <string name="currency">Währung</string>
<string name="current_month">Aktueller Monat</string> <string name="current_month">Aktueller Monat</string>

@ -112,7 +112,7 @@
<string name="conditioning_report_filtering_returns_no_data">Los filtros aún no dieron ningún resultado.</string> <string name="conditioning_report_filtering_returns_no_data">Los filtros aún no dieron ningún resultado.</string>
<string name="confirmation">Confirmación</string> <string name="confirmation">Confirmación</string>
<string name="contact">Contáctanos</string> <string name="contact">Contáctanos</string>
<string name="csv">CSV (no se puede importar)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">Una de las líneas en tu archivo CSV no está bien formada. Verifica el archivo o contacta al soporte.</string> <string name="csv_bad_row_error_message">Una de las líneas en tu archivo CSV no está bien formada. Verifica el archivo o contacta al soporte.</string>
<string name="currency">Divisa</string> <string name="currency">Divisa</string>
<string name="current_month">Mes en curso</string> <string name="current_month">Mes en curso</string>

@ -180,7 +180,7 @@
<string name="conditioning_report_filtering_returns_no_data">Le filtre ne retourne aucun résultat</string> <string name="conditioning_report_filtering_returns_no_data">Le filtre ne retourne aucun résultat</string>
<string name="confirmation">Confirmation</string> <string name="confirmation">Confirmation</string>
<string name="contact">Contactez-nous</string> <string name="contact">Contactez-nous</string>
<string name="csv">CSV (ne peut être importé)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">Une ligne de votre fichier CSV est mal formée. Veuillez vérifier votre fichier ou contacter le support.</string> <string name="csv_bad_row_error_message">Une ligne de votre fichier CSV est mal formée. Veuillez vérifier votre fichier ou contacter le support.</string>
<string name="currency">Devise</string> <string name="currency">Devise</string>
<string name="current_month">Ce mois-ci</string> <string name="current_month">Ce mois-ci</string>

@ -112,7 +112,7 @@
<string name="conditioning_report_filtering_returns_no_data">िटर सई परिम नहि</string> <string name="conditioning_report_filtering_returns_no_data">िटर सई परिम नहि</string>
<string name="confirmation">करण</string> <string name="confirmation">करण</string>
<string name="contact">हमपरक कर</string> <string name="contact">हमपरक कर</string>
<string name="csv">CSV (इमट नहि सकत)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">आपक CSV फइल मइन एक अच तरह फट नह गई ह. कपय अपनइल ज सहयतम सपरक कर.</string> <string name="csv_bad_row_error_message">आपक CSV फइल मइन एक अच तरह फट नह गई ह. कपय अपनइल ज सहयतम सपरक कर.</string>
<string name="currency">कर</string> <string name="currency">कर</string>
<string name="current_month">वरतमन मह</string> <string name="current_month">वरतमन मह</string>

@ -112,7 +112,7 @@
<string name="conditioning_report_filtering_returns_no_data">Il filtraggio non ha dato alcun risultato</string> <string name="conditioning_report_filtering_returns_no_data">Il filtraggio non ha dato alcun risultato</string>
<string name="confirmation">Conferma</string> <string name="confirmation">Conferma</string>
<string name="contact">Contattaci</string> <string name="contact">Contattaci</string>
<string name="csv">CSV (non si può importare)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">Una delle linee nel tuo file CSV non è ben formata. Controlla il tuo file o contatta l\'assistenza.</string> <string name="csv_bad_row_error_message">Una delle linee nel tuo file CSV non è ben formata. Controlla il tuo file o contatta l\'assistenza.</string>
<string name="currency">Valuta</string> <string name="currency">Valuta</string>
<string name="current_month">Mese corrente</string> <string name="current_month">Mese corrente</string>

@ -112,7 +112,7 @@
<string name="conditioning_report_filtering_returns_no_data">フィルタリングでは結果が戻されませんでした</string> <string name="conditioning_report_filtering_returns_no_data">フィルタリングでは結果が戻されませんでした</string>
<string name="confirmation">確認</string> <string name="confirmation">確認</string>
<string name="contact">ご連絡ください</string> <string name="contact">ご連絡ください</string>
<string name="csv">CSV (インポートできません)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">CSV ファイルのいずれかの行が正しく形成されていません。ファイルをご確認いただくが、サポートまでお問い合わせください。</string> <string name="csv_bad_row_error_message">CSV ファイルのいずれかの行が正しく形成されていません。ファイルをご確認いただくが、サポートまでお問い合わせください。</string>
<string name="currency">通貨</string> <string name="currency">通貨</string>
<string name="current_month">今月</string> <string name="current_month">今月</string>

@ -112,7 +112,7 @@
<string name="conditioning_report_filtering_returns_no_data">O filtro não apresentou nenhum resultado</string> <string name="conditioning_report_filtering_returns_no_data">O filtro não apresentou nenhum resultado</string>
<string name="confirmation">Confirmação</string> <string name="confirmation">Confirmação</string>
<string name="contact">Contate-nos</string> <string name="contact">Contate-nos</string>
<string name="csv">CSV (Não pode ser importado)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">Uma das linhas do seu arquivo CSV não está no formato correto. Por favor, verifique o seu arquivo ou contate o suporte.</string> <string name="csv_bad_row_error_message">Uma das linhas do seu arquivo CSV não está no formato correto. Por favor, verifique o seu arquivo ou contate o suporte.</string>
<string name="currency">Moeda</string> <string name="currency">Moeda</string>
<string name="current_month">Mês atual</string> <string name="current_month">Mês atual</string>

@ -112,7 +112,7 @@
<string name="conditioning_report_filtering_returns_no_data">Не найдено результатов после фильтрации</string> <string name="conditioning_report_filtering_returns_no_data">Не найдено результатов после фильтрации</string>
<string name="confirmation">Подтверждение</string> <string name="confirmation">Подтверждение</string>
<string name="contact">Напишите нам</string> <string name="contact">Напишите нам</string>
<string name="csv">CSV (Импорт невозможен)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">Одна из строк в вашем файле CSV отформатирована некорректно. Пожалуйста проверьте ваш файл или свяжитесь со службой поддержки.</string> <string name="csv_bad_row_error_message">Одна из строк в вашем файле CSV отформатирована некорректно. Пожалуйста проверьте ваш файл или свяжитесь со службой поддержки.</string>
<string name="currency">Валюта</string> <string name="currency">Валюта</string>
<string name="current_month">Текущий месяц</string> <string name="current_month">Текущий месяц</string>

@ -98,7 +98,7 @@
<string name="comparison">比较</string> <string name="comparison">比较</string>
<string name="confirmation">确认</string> <string name="confirmation">确认</string>
<string name="contact">联系我们</string> <string name="contact">联系我们</string>
<string name="csv">CSV(无法导入)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">CSV文件中的线之一不合适。请核查你的文件或联系支持团队。</string> <string name="csv_bad_row_error_message">CSV文件中的线之一不合适。请核查你的文件或联系支持团队。</string>
<string name="currency">货币</string> <string name="currency">货币</string>
<string name="current_month">本月</string> <string name="current_month">本月</string>

@ -174,7 +174,7 @@
<string name="conditioning_report_filtering_returns_no_data">Filtering did not yield any results</string> <string name="conditioning_report_filtering_returns_no_data">Filtering did not yield any results</string>
<string name="confirmation">Confirmation</string> <string name="confirmation">Confirmation</string>
<string name="contact">Contact us</string> <string name="contact">Contact us</string>
<string name="csv">CSV (Cannot be imported)</string> <string name="csv">CSV</string>
<string name="csv_bad_row_error_message">One of the lines in your CSV file is not well formed. Please check your file or contact the support.</string> <string name="csv_bad_row_error_message">One of the lines in your CSV file is not well formed. Please check your file or contact the support.</string>
<string name="currency">Currency</string> <string name="currency">Currency</string>
<string name="current_month">Current month</string> <string name="current_month">Current month</string>

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path
name="files"
path="." />
<external-path <files-path name="files" path="." />
name="external_files"
path="." /> <external-path name="external_files" path="." />
<!-- <cache-path name="name" path="path" />-->
</paths> </paths>
Loading…
Cancel
Save