From 0671994bba8809ccf52184653fff22782712b150 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 25 Aug 2020 11:27:28 +0200 Subject: [PATCH] Upgrade targetSdkVersion from 28 to 29 --- app/build.gradle | 16 ++------ .../android/model/filter/QueryCondition.kt | 4 +- .../android/model/realm/Currency.kt | 2 +- .../android/model/realm/Session.kt | 9 ++++- .../ui/activity/components/BaseActivity.kt | 8 ++-- .../android/ui/fragment/SettingsFragment.kt | 4 +- .../android/ui/fragment/StatisticsFragment.kt | 4 +- .../android/ui/modules/feed/FeedFragment.kt | 10 +---- .../ui/modules/filter/FiltersFragment.kt | 3 +- .../handhistory/model/HandHistoryViewModel.kt | 2 +- .../handhistory/replayer/ReplayerAnimator.kt | 2 +- .../pokeranalytics/android/util/ImageUtils.kt | 38 +------------------ .../android/util/Preferences.kt | 4 +- .../android/util/csv/CSVField.kt | 7 ++-- .../android/util/video/MMediaMuxer.kt | 5 ++- 15 files changed, 37 insertions(+), 81 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 23df8bf2..2e3bbdff 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ repositories { android { - compileSdkVersion 28 + compileSdkVersion 29 buildToolsVersion "28.0.3" compileOptions { @@ -33,7 +33,7 @@ android { defaultConfig { applicationId "net.pokeranalytics.android" minSdkVersion 23 - targetSdkVersion 28 + targetSdkVersion 29 versionCode 96 versionName "5.0.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -65,7 +65,7 @@ android { } } flavorDimensions 'endOfUse' - productFlavors { + productFlavors { // already used: 50000, 51000, 52000 standard { dimension = 'endOfUse' } @@ -74,16 +74,6 @@ android { versionNameSuffix = '_april2021' versionCode = 52100 + android.defaultConfig.versionCode } - june2020 { - dimension = 'endOfUse' - versionNameSuffix = '_june2020' - versionCode = 52000 + android.defaultConfig.versionCode - } - august2020 { - dimension = 'endOfUse' - versionNameSuffix = '_august2020' - versionCode = 50000 + android.defaultConfig.versionCode - } } configurations { diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index 4417b496..df26b424 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -814,8 +814,8 @@ sealed class QueryCondition : FilterElementRow { } is EndedToTime -> { val calendar = Calendar.getInstance() - singleValue?.let { - calendar.time = singleValue + singleValue?.let { date -> + calendar.time = date realmQuery.lessThanOrEqualTo(fieldName, calendar.hourMinute()) if (otherQueryCondition is StartedFromTime) { otherQueryCondition.singleValue?.let { startTime -> diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt index 6796bc84..98b11a0c 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt @@ -31,7 +31,7 @@ open class Currency : RealmObject() { field = value } catch (e: Exception) { // make app crash earlier than later, possibly to show an error message to the user in the future - throw PAIllegalStateException(e.localizedMessage) + throw PAIllegalStateException(e.localizedMessage ?: e.toString()) } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index faf740ab..8a03db98 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -199,7 +199,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat this.updateTimeParameter(field) this.computeNetDuration() - // nullifies endate when setting the start date after the end date + // nullifies enddate when setting the start date after the end date if (value != null && this.endDate != null && value.after(this.endDate)) { this.endDate = null } @@ -1117,7 +1117,12 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat // Stat Entry override fun entryTitle(context: Context): String { - return DateFormat.getDateInstance(DateFormat.SHORT).format(this.startDate) + val date = this.startDate + return if (date != null) { + DateFormat.getDateInstance(DateFormat.SHORT).format(date) + } else { + "Date missing" + } } override fun formattedValue(stat: Stat): TextFormat { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/BaseActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/BaseActivity.kt index 32d01d4d..88280372 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/components/BaseActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/components/BaseActivity.kt @@ -93,11 +93,9 @@ abstract class BaseActivity : AppCompatActivity() { } - override fun onOptionsItemSelected(item: MenuItem?): Boolean { - item?.let { - if (it.itemId == android.R.id.home) { - onBackPressed() - } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + onBackPressed() } return super.onOptionsItemSelected(item) } 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 40fe71f2..46a3199c 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 @@ -16,6 +16,7 @@ import io.realm.Realm import kotlinx.android.synthetic.main.fragment_settings.* import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.R +import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.model.realm.Session @@ -86,7 +87,8 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep RequestCode.CURRENCY.value -> { if (resultCode == Activity.RESULT_OK) { data?.let { - Preferences.setCurrencyCode(data.getStringExtra(CurrenciesFragment.INTENT_CURRENCY_CODE), requireContext()) + val currencyCode = data.getStringExtra(CurrenciesFragment.INTENT_CURRENCY_CODE) ?: throw PAIllegalStateException("Missing currency code") + Preferences.setCurrencyCode(currencyCode, requireContext()) val realm = Realm.getDefaultInstance() realm.executeTransaction { realm.where(Currency::class.java).isNull("code").or().equalTo("code", UserDefaults.currency.currencyCode).findAll().forEach { currency -> diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt index e9682c7e..f52c1d23 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt @@ -18,6 +18,7 @@ import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.ComputableGroup import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.realm.ComputableResult @@ -94,7 +95,8 @@ class StatisticsFragment : FilterableFragment() { super.onActivityResult(requestCode, resultCode, data) if (requestCode == FilterActivityRequestCode.CREATE_FILTER.ordinal && resultCode == Activity.RESULT_OK) { data?.let { - this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName)) + val filterId = it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName) ?: throw PAIllegalStateException("Missing filter id") + this.saveFilter(this.requireContext(), filterId) } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt index e5d0370c..a06335f0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedFragment.kt @@ -39,7 +39,6 @@ import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.billing.AppGuard import net.pokeranalytics.android.util.extensions.count import timber.log.Timber -import java.text.SimpleDateFormat import java.util.* class FeedFragment : FilterableFragment(), RowRepresentableDelegate { @@ -73,7 +72,6 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { private lateinit var realmTransactions: RealmResults private lateinit var realmHandHistories: RealmResults - private lateinit var betaLimitDate: Date private var newSessionCreated: Boolean = false private var adapterHasBeenSet: Boolean = false @@ -194,10 +192,8 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { } } else if (requestCode == FilterActivityRequestCode.CREATE_FILTER.ordinal && resultCode == RESULT_OK) { data?.let { - this.saveFilter( - this.requireContext(), - it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName) - ) + val filterId = it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName) ?: throw PAIllegalStateException("Missing filter id") + this.saveFilter(this.requireContext(), filterId) } } else if (requestCode == RequestCode.NEW_TRANSACTION.value && resultCode == RESULT_OK) { this.selectTab(Tab.TRANSACTIONS) @@ -325,8 +321,6 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { */ private fun initData() { - val sdf = SimpleDateFormat("dd/M/yyyy hh:mm", Locale.getDefault()) - betaLimitDate = sdf.parse("17/7/2019 10:00") this.currentFilterable = FilterableType.SESSION val viewManager = SmoothScrollLinearLayoutManager(requireContext()) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt index 019b78f1..9177d529 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FiltersFragment.kt @@ -13,6 +13,7 @@ import kotlinx.android.synthetic.main.fragment_editable_data.recyclerView import kotlinx.android.synthetic.main.fragment_filters.* import kotlinx.android.synthetic.main.fragment_filters.view.toolbar import net.pokeranalytics.android.R +import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter @@ -67,7 +68,7 @@ open class FiltersFragment : RealmFragment(), RowRepresentableDelegate { updateMostUsedFilters() if (resultCode == RESULT_OK && data != null && data.hasExtra(FiltersActivity.IntentKey.FILTER_ID.keyName)) { - val filterId = data.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName) + val filterId = data.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName) ?: throw PAIllegalStateException("Missing filter id") finishActivityWithResult(filterId) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt index 4e49c679..0ebe9f0b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/HandHistoryViewModel.kt @@ -523,7 +523,7 @@ class HandHistoryViewModel : ViewModel(), RowRepresentableDataSource, CardCentra val amount = try { this.currentAmount?.let { - DecimalFormat.getNumberInstance().parse(it).toDouble() + DecimalFormat.getNumberInstance().parse(it)?.toDouble() } // this.currentAmount?.toDouble() } catch (e: NumberFormatException) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerAnimator.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerAnimator.kt index a959e8c2..b275f9c6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerAnimator.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/replayer/ReplayerAnimator.kt @@ -484,7 +484,7 @@ class ReplayerAnimator(var handHistory: HandHistory, var export: Boolean) { // Timber.d("STEP [$index] >> ($handStep): Frame count = ${this.frameManager.totalFrames}") - (0 until this.frameManager.totalFrames).forEach { f -> + (0 until this.frameManager.totalFrames).forEach { _ -> // Timber.d("FRAME [$f] >> step: $currentStepIndex, frame: $currentFrameIndex, vo: ${this.visualOccurences}, type: ${this.frameType}") val bitmap = Bitmap.createBitmap(this.width.toInt(), this.height.toInt(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/java/net/pokeranalytics/android/util/ImageUtils.kt b/app/src/main/java/net/pokeranalytics/android/util/ImageUtils.kt index a4ca4dce..911eb734 100755 --- a/app/src/main/java/net/pokeranalytics/android/util/ImageUtils.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/ImageUtils.kt @@ -265,21 +265,7 @@ object ImageUtils { } } - - /** - * Update the gallery with the current file - * - * @param context Context - * @param filePath The file to add - */ - fun updateGallery(context: Context, filePath: String) { - val mediaScanIntent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) - val f = File(filePath) - val contentUri = Uri.fromFile(f) - mediaScanIntent.data = contentUri - context.sendBroadcast(mediaScanIntent) - } - + /** * Save the bitmap in a file */ @@ -312,27 +298,5 @@ object ImageUtils { } } - - /** - * Bitmap resizer - */ - fun bitmapResizer(bitmap: Bitmap, newWidth: Int, newHeight: Int): Bitmap { - val scaledBitmap = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888) - - val ratioX = newWidth / bitmap.width.toFloat() - val ratioY = newHeight / bitmap.height.toFloat() - val middleX = newWidth / 2.0f - val middleY = newHeight / 2.0f - - val scaleMatrix = Matrix() - scaleMatrix.setScale(ratioX, ratioY, middleX, middleY) - - val canvas = Canvas(scaledBitmap) - canvas.matrix = scaleMatrix - canvas.drawBitmap(bitmap, middleX - bitmap.width / 2, middleY - bitmap.height / 2, Paint(FILTER_BITMAP_FLAG)) - - return scaledBitmap - - } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/util/Preferences.kt b/app/src/main/java/net/pokeranalytics/android/util/Preferences.kt index 73479cdb..5fa4ec6a 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/Preferences.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/Preferences.kt @@ -132,9 +132,9 @@ class Preferences { private fun getCurrencyLocale(context: Context): Locale? { getCurrencyCode(context)?.let { currencyCode -> - UserDefaults.availableCurrencyLocales.filter { + UserDefaults.availableCurrencyLocales.firstOrNull { Currency.getInstance(it).currencyCode == currencyCode - }.firstOrNull()?.let { + }?.let { return it } } diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt index e56c2eda..ceca1380 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt @@ -5,7 +5,6 @@ import net.pokeranalytics.android.model.realm.TournamentFeature import net.pokeranalytics.android.util.CSVNumberFormat import timber.log.Timber import java.text.DateFormat -import java.text.NumberFormat import java.text.ParseException import java.text.SimpleDateFormat import java.util.* @@ -26,7 +25,7 @@ interface NumberCSVField: TypedCSVField { // val formatter = NumberFormat.getInstance(Locale.US) return try { - CSVNumberFormat.parse(value).toDouble() + CSVNumberFormat.parse(value)?.toDouble() } catch (e: ParseException) { Timber.d("Field > Unparseable number: $value") null @@ -47,7 +46,7 @@ interface NumberCSVField: TypedCSVField { // val formatter = NumberFormat.getInstance(Locale.US) return try { - CSVNumberFormat.parse(value).toDouble() + CSVNumberFormat.parse(value)?.toDouble() } catch (e: ParseException) { Timber.d("Field $header > Unparseable number: $value") null @@ -72,7 +71,7 @@ interface IntCSVField: TypedCSVField { } return try { - CSVNumberFormat.parse(value).toInt() + CSVNumberFormat.parse(value)?.toInt() } catch (e: ParseException) { Timber.d("Field $header > Unparseable number: $value") null diff --git a/app/src/main/java/net/pokeranalytics/android/util/video/MMediaMuxer.kt b/app/src/main/java/net/pokeranalytics/android/util/video/MMediaMuxer.kt index 2aa57641..abd13f6e 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/video/MMediaMuxer.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/video/MMediaMuxer.kt @@ -188,11 +188,12 @@ class MMediaMuxer { try { val formattedDate = Date().dateTimeFileFormatted - outputPath = File( + val path = File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "video_${formattedDate}.mp4" ).toString() - mediaMuxer = MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4) + outputPath = path + mediaMuxer = MediaMuxer(path, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4) } catch (ioe: IOException) { Loge("MediaMuxer creation failed: ${ioe.message}") }