diff --git a/android/build.gradle b/android/build.gradle index 9500f32..79be2d0 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -3,17 +3,6 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' -def acraProperties = new Properties() -try { - def acraPropertiesFile = project.file("acra.properties") - acraProperties.load(new FileInputStream(acraPropertiesFile)) -} catch (FileNotFoundException ignored) { - logger.warn("Unable to load ACRA properties. Error reporting won't be available") - acraProperties['url'] = "" - acraProperties['user'] = "" - acraProperties['pass'] = "" -} - android { compileSdkVersion 30 compileOptions { @@ -33,9 +22,6 @@ android { useSupportLibrary = true } testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - buildConfigField "String", "ACRA_URL", "\"${acraProperties['url']}\"" - buildConfigField "String", "ACRA_USER", "\"${acraProperties['user']}\"" - buildConfigField "String", "ACRA_PASS", "\"${acraProperties['pass']}\"" } buildTypes { release { @@ -74,8 +60,6 @@ dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' implementation 'androidx.navigation:navigation-fragment-ktx:2.3.2' implementation 'androidx.navigation:navigation-ui-ktx:2.3.2' - implementation "ch.acra:acra-http:$acra_version" - implementation "ch.acra:acra-advanced-scheduler:$acra_version" debugImplementation "com.willowtreeapps.hyperion:hyperion-core:$hyperion" debugImplementation "com.willowtreeapps.hyperion:hyperion-attr:$hyperion" diff --git a/android/src/main/java/com/wbrawner/budget/AppModule.kt b/android/src/main/java/com/wbrawner/budget/AppModule.kt index a1c13e5..494a88b 100644 --- a/android/src/main/java/com/wbrawner/budget/AppModule.kt +++ b/android/src/main/java/com/wbrawner/budget/AppModule.kt @@ -1,12 +1,21 @@ package com.wbrawner.budget +import android.app.Application +import android.util.Log import com.wbrawner.budget.common.util.ErrorHandler -import com.wbrawner.budget.util.AcraErrorHandler import dagger.Module import dagger.Provides @Module class AppModule { @Provides - fun provideErrorHandler(): ErrorHandler = AcraErrorHandler() + fun provideErrorHandler(): ErrorHandler = object : ErrorHandler { + override fun init(application: Application) { + // no-op + } + + override fun reportException(t: Throwable, message: String?) { + Log.e("ErrorHandler", "Report exception: $message", t) + } + } } \ No newline at end of file diff --git a/android/src/main/java/com/wbrawner/budget/ui/transactions/TransactionFormActivity.kt b/android/src/main/java/com/wbrawner/budget/ui/transactions/TransactionFormActivity.kt index e37ca81..7878a2d 100644 --- a/android/src/main/java/com/wbrawner/budget/ui/transactions/TransactionFormActivity.kt +++ b/android/src/main/java/com/wbrawner/budget/ui/transactions/TransactionFormActivity.kt @@ -1,6 +1,5 @@ package com.wbrawner.budget.ui.transactions -import android.app.DatePickerDialog import android.app.TimePickerDialog import android.content.Intent import android.os.Bundle @@ -15,6 +14,7 @@ import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.core.app.NavUtils import androidx.core.app.TaskStackBuilder +import com.google.android.material.datepicker.MaterialDatePicker import com.wbrawner.budget.AllowanceApplication import com.wbrawner.budget.R import com.wbrawner.budget.common.budget.Budget @@ -77,17 +77,17 @@ class TransactionFormActivity : AppCompatActivity(), CoroutineScope { transactionDate.setOnClickListener { val currentDate = DateFormat.getDateFormat(this@TransactionFormActivity) .parse(transactionDate.text.toString()) ?: Date() - DatePickerDialog( - this@TransactionFormActivity, - { _, year, month, dayOfMonth -> - transactionDate.text = DateFormat.getDateFormat(this@TransactionFormActivity) - .format(Date(year, month, dayOfMonth)) - }, - currentDate.year + 1900, - currentDate.month, - currentDate.date - ) - .show() + MaterialDatePicker.Builder.datePicker() + .setSelection(currentDate.time) + .setTheme(R.style.DateTimePickerDialogTheme) + .build() + .also { picker -> + picker.addOnPositiveButtonClickListener { + transactionDate.text = DateFormat.getDateFormat(this@TransactionFormActivity) + .format(Date(it)) + } + } + .show(supportFragmentManager, null) } transactionTime.setOnClickListener { val currentDate = DateFormat.getTimeFormat(this@TransactionFormActivity) diff --git a/android/src/main/java/com/wbrawner/budget/ui/transactions/TransactionListFragment.kt b/android/src/main/java/com/wbrawner/budget/ui/transactions/TransactionListFragment.kt index c86b101..14048c2 100644 --- a/android/src/main/java/com/wbrawner/budget/ui/transactions/TransactionListFragment.kt +++ b/android/src/main/java/com/wbrawner/budget/ui/transactions/TransactionListFragment.kt @@ -56,7 +56,7 @@ class TransactionListFragment : ListWithAddButtonFragment reloadItems() diff --git a/android/src/main/java/com/wbrawner/budget/util/AcraErrorHandler.kt b/android/src/main/java/com/wbrawner/budget/util/AcraErrorHandler.kt deleted file mode 100644 index d9faf6c..0000000 --- a/android/src/main/java/com/wbrawner/budget/util/AcraErrorHandler.kt +++ /dev/null @@ -1,68 +0,0 @@ -package com.wbrawner.budget.util - -import android.app.Application -import android.app.job.JobInfo -import android.util.Log -import com.wbrawner.budget.BuildConfig -import com.wbrawner.budget.common.util.ErrorHandler -import org.acra.ACRA -import org.acra.ReportField -import org.acra.config.CoreConfigurationBuilder -import org.acra.config.HttpSenderConfigurationBuilder -import org.acra.config.SchedulerConfigurationBuilder -import org.acra.data.StringFormat -import org.acra.sender.HttpSender - -class AcraErrorHandler : ErrorHandler { - - override fun init(application: Application) { - if (BuildConfig.ACRA_URL.isBlank() - || BuildConfig.ACRA_USER.isBlank() - || BuildConfig.ACRA_PASS.isBlank()) { - return - } - val builder = CoreConfigurationBuilder(application) - .setBuildConfigClass(BuildConfig::class.java) - .setReportFormat(StringFormat.JSON) - .setReportContent( - ReportField.ANDROID_VERSION, - ReportField.APP_VERSION_CODE, - ReportField.APP_VERSION_NAME, - ReportField.APPLICATION_LOG, - ReportField.AVAILABLE_MEM_SIZE, - ReportField.BRAND, - ReportField.BUILD_CONFIG, - ReportField.CRASH_CONFIGURATION, - ReportField.CUSTOM_DATA, // Not currently used, but might be useful in the future - ReportField.INITIAL_CONFIGURATION, - ReportField.PACKAGE_NAME, - ReportField.PHONE_MODEL, - ReportField.SHARED_PREFERENCES, - ReportField.STACK_TRACE, - ReportField.STACK_TRACE_HASH, - ReportField.THREAD_DETAILS, - ReportField.TOTAL_MEM_SIZE, - ReportField.USER_APP_START_DATE, - ReportField.USER_CRASH_DATE - ) - builder.getPluginConfigurationBuilder(HttpSenderConfigurationBuilder::class.java) - .setUri(BuildConfig.ACRA_URL) - .setHttpMethod(HttpSender.Method.POST) - .setBasicAuthLogin(BuildConfig.ACRA_USER) - .setBasicAuthPassword(BuildConfig.ACRA_PASS) - .setEnabled(true) - builder.getPluginConfigurationBuilder(SchedulerConfigurationBuilder::class.java) - .setRequiresNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) - .setRequiresBatteryNotLow(true) - .setEnabled(true) - ACRA.init(application, builder) - } - - override fun reportException(t: Throwable, message: String?) { - @Suppress("ConstantConditionIf") - if (BuildConfig.DEBUG) { - Log.e("AcraErrorHandler", "Caught exception: $message", t) - } - ACRA.getErrorReporter().handleException(t) - } -} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8501da3..55a0fb2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.acra_version = '5.7.0' ext.dagger = '2.23.1' ext.hyperion = '0.9.27' ext.kotlin_version = '1.4.21'