diff --git a/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.kt b/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.kt index 1bcd24b7a..019024135 100644 --- a/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.kt +++ b/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.kt @@ -2,12 +2,22 @@ package org.tasks.billing import android.app.Activity import android.content.Context -import com.android.billingclient.api.* -import com.android.billingclient.api.BillingClient.* +import com.android.billingclient.api.AcknowledgePurchaseParams +import com.android.billingclient.api.BillingClient.BillingResponseCode +import com.android.billingclient.api.BillingClient.SkuType +import com.android.billingclient.api.BillingClient.newBuilder +import com.android.billingclient.api.BillingClientStateListener +import com.android.billingclient.api.BillingFlowParams import com.android.billingclient.api.BillingFlowParams.ProrationMode import com.android.billingclient.api.BillingFlowParams.SubscriptionUpdateParams +import com.android.billingclient.api.BillingResult +import com.android.billingclient.api.ConsumeParams import com.android.billingclient.api.Purchase.PurchaseState import com.android.billingclient.api.Purchase.PurchasesResult +import com.android.billingclient.api.PurchasesUpdatedListener +import com.android.billingclient.api.SkuDetailsParams +import com.android.billingclient.api.consumePurchase +import com.android.billingclient.api.querySkuDetails import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.NonCancellable @@ -125,7 +135,7 @@ class BillingClientImpl( .setPurchaseToken(purchase.purchaseToken) .build() withContext(Dispatchers.IO) { - suspendCoroutine { cont -> + suspendCoroutine { cont -> billingClient.acknowledgePurchase(params) { Timber.d("acknowledge: ${it.responseCodeString} $purchase") cont.resume(it) diff --git a/app/src/googleplay/java/org/tasks/billing/Security.kt b/app/src/googleplay/java/org/tasks/billing/Security.kt index fe16fd5aa..278b60d40 100644 --- a/app/src/googleplay/java/org/tasks/billing/Security.kt +++ b/app/src/googleplay/java/org/tasks/billing/Security.kt @@ -28,7 +28,7 @@ package org.tasks.billing * by implementing security measure X is greater than the money you would lose if you don't * implement X. Talk to a UX designer if you find yourself obsessing over security. * - * The good news is, in implementing [BillingRepository], a number of measures is taken to help + * The good news is, in implementing BillingRepository, a number of measures is taken to help * prevent fraudulent activities in your app. We don't just focus on tech savvy hackers, but also * on fraudulent users who may want to exploit loopholes. Just to name an obvious case: * triangulation using Google Play, your secure server, and a local cache helps against non-techie diff --git a/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt b/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt index 093e7d508..a51e6a42d 100644 --- a/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt +++ b/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt @@ -36,7 +36,7 @@ class GoogleMapFragment @Inject constructor( } override val mapPosition: MapPosition? - get() = map?.cameraPosition?.let { it -> + get() = map?.cameraPosition?.let { val target = it.target return MapPosition(target.latitude, target.longitude, it.zoom) } diff --git a/app/src/main/java/com/todoroo/andlib/sql/Operator.kt b/app/src/main/java/com/todoroo/andlib/sql/Operator.kt index e64b4ca5f..4aa5a8e8f 100644 --- a/app/src/main/java/com/todoroo/andlib/sql/Operator.kt +++ b/app/src/main/java/com/todoroo/andlib/sql/Operator.kt @@ -14,7 +14,6 @@ class Operator private constructor(private val operator: String) { val `in` = Operator("IN") val exists = Operator("EXISTS") val gt = Operator(">") - val gte = Operator(">=") val lt = Operator("<") val lte = Operator("<=") } diff --git a/app/src/main/java/com/todoroo/andlib/sql/UnaryCriterion.kt b/app/src/main/java/com/todoroo/andlib/sql/UnaryCriterion.kt index 636e3e460..b65a2abb0 100644 --- a/app/src/main/java/com/todoroo/andlib/sql/UnaryCriterion.kt +++ b/app/src/main/java/com/todoroo/andlib/sql/UnaryCriterion.kt @@ -19,8 +19,6 @@ open class UnaryCriterion private constructor(private val expression: Field, ope fun gt(field: Field, value: Any?): Criterion = UnaryCriterion(field, Operator.gt, value) - fun gte(field: Field, value: Any?): Criterion = UnaryCriterion(field, Operator.gte, value) - fun lt(field: Field, value: Any?): Criterion = UnaryCriterion(field, Operator.lt, value) fun lte(field: Field, value: Any?): Criterion = UnaryCriterion(field, Operator.lte, value) diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index 0d8bccd14..99dffc1b0 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -306,11 +306,11 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL setupRefresh(swipeRefreshLayout) setupRefresh(emptyRefreshLayout) binding.toolbar.title = filter.listingTitle - binding.appbarlayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { _, verticalOffset -> + binding.appbarlayout.addOnOffsetChangedListener { _, verticalOffset -> if (verticalOffset == 0 && binding.bottomAppBar.isScrolledDown) { binding.bottomAppBar.performShow() } - }) + } val toolbar = if (preferences.isTopAppBar) { binding.bottomAppBar.isVisible = false with (binding.fab) { @@ -639,7 +639,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL VOICE_RECOGNITION_REQUEST_CODE -> if (resultCode == Activity.RESULT_OK) { lifecycleScope.launch { val match: List? = data!!.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS) - if (match != null && match.isNotEmpty() && match[0].isNotEmpty()) { + if (!match.isNullOrEmpty() && match[0].isNotEmpty()) { var recognizedSpeech = match[0] recognizedSpeech = (recognizedSpeech.substring(0, 1) .uppercase(Locale.getDefault()) diff --git a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.kt index ad25c6eb0..134730848 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.kt @@ -192,7 +192,7 @@ open class TaskAdapter( return false } - internal fun findParent(indent: Int, to: Int): TaskContainer? { + private fun findParent(indent: Int, to: Int): TaskContainer? { if (indent == 0 || to == 0) { return null } diff --git a/app/src/main/java/com/todoroo/astrid/api/BooleanCriterion.kt b/app/src/main/java/com/todoroo/astrid/api/BooleanCriterion.kt index e9c5979cf..b0f443346 100644 --- a/app/src/main/java/com/todoroo/astrid/api/BooleanCriterion.kt +++ b/app/src/main/java/com/todoroo/astrid/api/BooleanCriterion.kt @@ -3,7 +3,7 @@ package com.todoroo.astrid.api import android.os.Parcel import android.os.Parcelable -class BooleanCriterion constructor() : CustomFilterCriterion(), Parcelable { +class BooleanCriterion() : CustomFilterCriterion(), Parcelable { constructor(identifier: String, title: String, sql: String): this() { this.identifier = identifier diff --git a/app/src/main/java/com/todoroo/astrid/api/SearchFilter.kt b/app/src/main/java/com/todoroo/astrid/api/SearchFilter.kt index b7c7ea2ba..537e32777 100644 --- a/app/src/main/java/com/todoroo/astrid/api/SearchFilter.kt +++ b/app/src/main/java/com/todoroo/astrid/api/SearchFilter.kt @@ -7,7 +7,12 @@ import com.todoroo.andlib.sql.Join import com.todoroo.andlib.sql.Query import com.todoroo.andlib.sql.QueryTemplate import com.todoroo.astrid.data.Task -import org.tasks.data.* +import org.tasks.data.CaldavCalendar +import org.tasks.data.CaldavTask +import org.tasks.data.Geofence +import org.tasks.data.Place +import org.tasks.data.Tag +import org.tasks.data.UserActivity class SearchFilter : Filter { private constructor() @@ -21,7 +26,7 @@ class SearchFilter : Filter { @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { /** {@inheritDoc} */ - override fun createFromParcel(source: Parcel): SearchFilter? { + override fun createFromParcel(source: Parcel): SearchFilter { val item = SearchFilter() item.readFromParcel(source) return item diff --git a/app/src/main/java/com/todoroo/astrid/core/CriterionInstance.kt b/app/src/main/java/com/todoroo/astrid/core/CriterionInstance.kt index d20cbbe6a..6dbec8844 100644 --- a/app/src/main/java/com/todoroo/astrid/core/CriterionInstance.kt +++ b/app/src/main/java/com/todoroo/astrid/core/CriterionInstance.kt @@ -34,20 +34,27 @@ class CriterionInstance { // $NON-NLS-1$ val titleFromCriterion: String get() { - if (criterion is MultipleSelectCriterion) { - if (selectedIndex >= 0 && (criterion as MultipleSelectCriterion).entryTitles != null && selectedIndex < (criterion as MultipleSelectCriterion).entryTitles.size) { - val title = (criterion as MultipleSelectCriterion).entryTitles[selectedIndex] - return criterion.text.replace("?", title) + when (criterion) { + is MultipleSelectCriterion -> { + if (selectedIndex >= 0 && (criterion as MultipleSelectCriterion).entryTitles != null && selectedIndex < (criterion as MultipleSelectCriterion).entryTitles.size) { + val title = (criterion as MultipleSelectCriterion).entryTitles[selectedIndex] + return criterion.text.replace("?", title) + } + return criterion.text } - return criterion.text - } else if (criterion is TextInputCriterion) { - return if (selectedText == null) { - criterion.text - } else criterion.text.replace("?", selectedText!!) - } else if (criterion is BooleanCriterion) { - return criterion.name + + is TextInputCriterion -> { + return if (selectedText == null) { + criterion.text + } else criterion.text.replace("?", selectedText!!) + } + + is BooleanCriterion -> { + return criterion.name + } + // $NON-NLS-1$ + else -> throw UnsupportedOperationException("Unknown criterion type") } - throw UnsupportedOperationException("Unknown criterion type") // $NON-NLS-1$ } // $NON-NLS-1$ @@ -56,16 +63,23 @@ class CriterionInstance { if (type == TYPE_UNIVERSE) { return null } - if (criterion is MultipleSelectCriterion) { - return if (selectedIndex >= 0 && (criterion as MultipleSelectCriterion).entryValues != null && selectedIndex < (criterion as MultipleSelectCriterion).entryValues.size) { - (criterion as MultipleSelectCriterion).entryValues[selectedIndex] - } else criterion.text - } else if (criterion is TextInputCriterion) { - return selectedText - } else if (criterion is BooleanCriterion) { - return criterion.name + when (criterion) { + is MultipleSelectCriterion -> { + return if (selectedIndex >= 0 && (criterion as MultipleSelectCriterion).entryValues != null && selectedIndex < (criterion as MultipleSelectCriterion).entryValues.size) { + (criterion as MultipleSelectCriterion).entryValues[selectedIndex] + } else criterion.text + } + + is TextInputCriterion -> { + return selectedText + } + + is BooleanCriterion -> { + return criterion.name + } + // $NON-NLS-1$ + else -> throw UnsupportedOperationException("Unknown criterion type") } - throw UnsupportedOperationException("Unknown criterion type") // $NON-NLS-1$ } private fun serialize(): String { diff --git a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt index f77ca55fe..67a1e43cd 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt @@ -112,8 +112,8 @@ class TaskDao @Inject constructor( } private suspend fun afterUpdate(task: Task, original: Task?) { - val completionDateModified = task.completionDate != original?.completionDate ?: 0 - val deletionDateModified = task.deletionDate != original?.deletionDate ?: 0 + val completionDateModified = task.completionDate != (original?.completionDate ?: 0) + val deletionDateModified = task.deletionDate != (original?.deletionDate ?: 0) val justCompleted = completionDateModified && task.isCompleted val justDeleted = deletionDateModified && task.isDeleted if (task.calendarURI?.isNotBlank() == true) { diff --git a/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.kt b/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.kt index e05510b6c..d770a42ff 100644 --- a/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.kt +++ b/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.kt @@ -121,8 +121,7 @@ class Astrid2TaskProvider : ContentProvider() { } private fun tagNameToLong(tag: String?): Long { - val m: MessageDigest - m = try { + val m: MessageDigest = try { MessageDigest.getInstance("MD5") } catch (e: NoSuchAlgorithmException) { Timber.e(e) @@ -173,7 +172,8 @@ class Astrid2TaskProvider : ContentProvider() { projection: Array?, selection: String?, selectionArgs: Array?, - sortOrder: String?): Cursor? { + sortOrder: String? + ): Cursor { return when (URI_MATCHER.match(uri)) { URI_TASKS -> tasks URI_TAGS -> tags diff --git a/app/src/main/java/com/todoroo/astrid/repeats/RepeatTaskHelper.kt b/app/src/main/java/com/todoroo/astrid/repeats/RepeatTaskHelper.kt index 11e0847cf..ec063ac13 100644 --- a/app/src/main/java/com/todoroo/astrid/repeats/RepeatTaskHelper.kt +++ b/app/src/main/java/com/todoroo/astrid/repeats/RepeatTaskHelper.kt @@ -75,7 +75,7 @@ class RepeatTaskHelper @Inject constructor( val previousDueDate = oldDueDate .takeIf { it > 0 } - ?: newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate) + ?: (newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate)) rescheduleAlarms(task.id, previousDueDate, newDueDate) taskCompleter.setComplete(task, false) broadcastCompletion(task, previousDueDate) diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.kt b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.kt index baf51d0bd..193c32ce9 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.kt +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.kt @@ -353,8 +353,7 @@ class SubtasksFilterUpdater @Inject constructor( node: Node, children: JSONArray, callback: ((Node?) -> Unit)?) { for (i in 1 until children.length()) { val subarray = children.optJSONArray(i) - var uuid: String - uuid = if (subarray == null) { + val uuid: String = if (subarray == null) { children.getString(i) } else { subarray.getString(0) diff --git a/app/src/main/java/com/todoroo/astrid/utility/TitleParser.kt b/app/src/main/java/com/todoroo/astrid/utility/TitleParser.kt index 1cc19651d..9855cedb3 100644 --- a/app/src/main/java/com/todoroo/astrid/utility/TitleParser.kt +++ b/app/src/main/java/com/todoroo/astrid/utility/TitleParser.kt @@ -14,7 +14,8 @@ import org.tasks.Strings.isNullOrEmpty import org.tasks.data.TagDataDao import org.tasks.repeats.RecurrenceUtils.newRecur import timber.log.Timber -import java.util.* +import java.util.Calendar +import java.util.Locale import java.util.regex.Matcher import java.util.regex.Pattern @@ -403,7 +404,7 @@ object TitleParser { ) for (i in words.indices) { wordsToNum[words[i]] = i + 1 - wordsToNum[Integer.toString(i + 1)] = i + 1 + wordsToNum[(i + 1).toString()] = i + 1 } wordsToNum["other"] = 2 val pattern = Pattern.compile("(?i)\\bevery (\\w*)\\b") diff --git a/app/src/main/java/org/tasks/Notifier.kt b/app/src/main/java/org/tasks/Notifier.kt index 7ff484653..4fbf1adcd 100644 --- a/app/src/main/java/org/tasks/Notifier.kt +++ b/app/src/main/java/org/tasks/Notifier.kt @@ -69,7 +69,7 @@ class Notifier @Inject constructor( .setGroupSummary(true) .setGroup(filter.listingTitle) .setStyle(style) - notificationManager.notify(filter.listingTitle.hashCode().toLong(), builder, true, false, false) + notificationManager.notify(filter.listingTitle.hashCode().toLong(), builder, alert = true, nonstop = false, fiveTimes = false) } suspend fun triggerNotifications(place: Long, geofences: List, arrival: Boolean) = diff --git a/app/src/main/java/org/tasks/activities/DragAndDropDiffer.kt b/app/src/main/java/org/tasks/activities/DragAndDropDiffer.kt index 7e7965524..3242f2980 100644 --- a/app/src/main/java/org/tasks/activities/DragAndDropDiffer.kt +++ b/app/src/main/java/org/tasks/activities/DragAndDropDiffer.kt @@ -16,7 +16,7 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.scan -import java.util.* +import java.util.Queue interface DragAndDropDiffer : ListUpdateCallback { val channel: Channel> @@ -58,10 +58,10 @@ interface DragAndDropDiffer : ListUpdateCallback { channel .consumeAsFlow() .map { transform(it) } - .scan(Pair(initial, null), { last: Pair, next: R -> + .scan(Pair(initial, null)) { last: Pair, next: R -> calculateDiff(last, next) - }) - .drop(1) + } + .drop(1) .flowOn(Dispatchers.Default) .onEach { applyDiff(it) } .launchIn(CoroutineScope(Dispatchers.Main + Job())) diff --git a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt index 205d65ee8..cc271a3e3 100644 --- a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt @@ -78,7 +78,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { override val isNew: Boolean get() = isNewList - override val toolbarTitle: String? + override val toolbarTitle: String get() = if (isNew) getString(R.string.new_list) else gtasksList.name!! private fun showProgressIndicator() { diff --git a/app/src/main/java/org/tasks/auth/AuthorizationService.kt b/app/src/main/java/org/tasks/auth/AuthorizationService.kt index 835c1ff0b..4bc04dd0c 100644 --- a/app/src/main/java/org/tasks/auth/AuthorizationService.kt +++ b/app/src/main/java/org/tasks/auth/AuthorizationService.kt @@ -6,12 +6,19 @@ import android.net.Uri import androidx.browser.customtabs.CustomTabsIntent import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -import net.openid.appauth.* +import net.openid.appauth.AppAuthConfiguration +import net.openid.appauth.AuthorizationException +import net.openid.appauth.AuthorizationRequest import net.openid.appauth.AuthorizationService +import net.openid.appauth.ClientAuthentication +import net.openid.appauth.RegistrationRequest +import net.openid.appauth.RegistrationResponse +import net.openid.appauth.TokenRequest +import net.openid.appauth.TokenResponse import net.openid.appauth.browser.AnyBrowserMatcher import kotlin.coroutines.suspendCoroutine -class AuthorizationService constructor( +class AuthorizationService( val iss: String, context: Context, debugConnectionBuilder: DebugConnectionBuilder diff --git a/app/src/main/java/org/tasks/auth/Configuration.kt b/app/src/main/java/org/tasks/auth/Configuration.kt index 4eed093be..421d6c9b6 100644 --- a/app/src/main/java/org/tasks/auth/Configuration.kt +++ b/app/src/main/java/org/tasks/auth/Configuration.kt @@ -34,7 +34,7 @@ import java.nio.charset.StandardCharsets * changes are detected by comparing the hash of the last known configuration to the read * configuration. When a configuration change is detected, the app state is reset. */ -class Configuration constructor( +class Configuration( private val context: Context, private val authConfig: Int, debugConnectionBuilder: DebugConnectionBuilder diff --git a/app/src/main/java/org/tasks/auth/DebugConnectionBuilder.kt b/app/src/main/java/org/tasks/auth/DebugConnectionBuilder.kt index 3ca84c9b5..3e6a2f02b 100644 --- a/app/src/main/java/org/tasks/auth/DebugConnectionBuilder.kt +++ b/app/src/main/java/org/tasks/auth/DebugConnectionBuilder.kt @@ -20,8 +20,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext import net.openid.appauth.Preconditions import net.openid.appauth.connectivity.ConnectionBuilder import okhttp3.internal.tls.OkHostnameVerifier -import org.tasks.DebugNetworkInterceptor -import org.tasks.preferences.Preferences import java.io.IOException import java.net.HttpURLConnection import java.net.URL @@ -36,11 +34,9 @@ import javax.net.ssl.SSLContext */ class DebugConnectionBuilder @Inject constructor( @ApplicationContext private val context: Context, - private val interceptor: DebugNetworkInterceptor, - private val preferences: Preferences, ) : ConnectionBuilder { - var appInForeground: Boolean = true + private var appInForeground: Boolean = true @Throws(IOException::class) override fun openConnection(uri: Uri): HttpURLConnection { diff --git a/app/src/main/java/org/tasks/caldav/TasksClient.kt b/app/src/main/java/org/tasks/caldav/TasksClient.kt index a28094bb3..65621480c 100644 --- a/app/src/main/java/org/tasks/caldav/TasksClient.kt +++ b/app/src/main/java/org/tasks/caldav/TasksClient.kt @@ -9,7 +9,7 @@ import okhttp3.OkHttpClient import okhttp3.Request import org.json.JSONObject -class TasksClient constructor( +class TasksClient( provider: CaldavClientProvider, httpClient: OkHttpClient, private val httpUrl: HttpUrl? diff --git a/app/src/main/java/org/tasks/caldav/iCalendar.kt b/app/src/main/java/org/tasks/caldav/iCalendar.kt index 424a80d8e..970420a13 100644 --- a/app/src/main/java/org/tasks/caldav/iCalendar.kt +++ b/app/src/main/java/org/tasks/caldav/iCalendar.kt @@ -220,7 +220,7 @@ class iCalendar @Inject constructor( task.applyRemote(remote, local) caldavTask.applyRemote(remote, local) - if (remote.lastAck ?: 0 > task.reminderLast) { + if ((remote.lastAck ?: 0) > task.reminderLast) { notificationManager.cancel(task.id) } diff --git a/app/src/main/java/org/tasks/compose/Chip.kt b/app/src/main/java/org/tasks/compose/Chip.kt index bb7648ab7..78b85db53 100644 --- a/app/src/main/java/org/tasks/compose/Chip.kt +++ b/app/src/main/java/org/tasks/compose/Chip.kt @@ -6,7 +6,14 @@ import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.size -import androidx.compose.material.* +import androidx.compose.material.ChipDefaults +import androidx.compose.material.ContentAlpha +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.FilterChip +import androidx.compose.material.Icon +import androidx.compose.material.LocalMinimumInteractiveComponentEnforcement +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Cancel import androidx.compose.runtime.Composable @@ -55,7 +62,7 @@ fun Chip( clear: (() -> Unit)? = null, ) { CompositionLocalProvider( - LocalMinimumTouchTargetEnforcement provides false + LocalMinimumInteractiveComponentEnforcement provides false ) { FilterChip( selected = false, diff --git a/app/src/main/java/org/tasks/compose/OutlinedSpinner.kt b/app/src/main/java/org/tasks/compose/OutlinedSpinner.kt index e06d768cb..38d6865bd 100644 --- a/app/src/main/java/org/tasks/compose/OutlinedSpinner.kt +++ b/app/src/main/java/org/tasks/compose/OutlinedSpinner.kt @@ -44,7 +44,7 @@ fun OutlinedSpinner( DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, - offset = DpOffset(-8.dp, 0.dp), + offset = DpOffset((-8).dp, 0.dp), ) { options.forEachIndexed { index, item -> DropdownMenuItem( diff --git a/app/src/main/java/org/tasks/compose/edit/PriorityRow.kt b/app/src/main/java/org/tasks/compose/edit/PriorityRow.kt index 2c612d25e..ddba896bc 100644 --- a/app/src/main/java/org/tasks/compose/edit/PriorityRow.kt +++ b/app/src/main/java/org/tasks/compose/edit/PriorityRow.kt @@ -2,8 +2,19 @@ package org.tasks.compose.edit import android.content.res.Configuration import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.foundation.layout.* -import androidx.compose.material.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.LocalMinimumInteractiveComponentEnforcement +import androidx.compose.material.MaterialTheme +import androidx.compose.material.RadioButton +import androidx.compose.material.RadioButtonDefaults +import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment @@ -88,7 +99,7 @@ fun RowScope.PriorityButton( ) ) CompositionLocalProvider( - LocalMinimumTouchTargetEnforcement provides false, + LocalMinimumInteractiveComponentEnforcement provides false, ) { RadioButton( selected = priority == selected, diff --git a/app/src/main/java/org/tasks/data/TagDataDao.kt b/app/src/main/java/org/tasks/data/TagDataDao.kt index fb4d58676..2bcfd7501 100644 --- a/app/src/main/java/org/tasks/data/TagDataDao.kt +++ b/app/src/main/java/org/tasks/data/TagDataDao.kt @@ -2,7 +2,12 @@ package org.tasks.data import androidx.core.util.Pair import androidx.lifecycle.LiveData -import androidx.room.* +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Transaction +import androidx.room.Update import com.todoroo.astrid.api.FilterListItem.NO_ORDER import com.todoroo.astrid.data.Task import com.todoroo.astrid.helper.UUIDHelper @@ -10,8 +15,6 @@ import org.tasks.db.DbUtils import org.tasks.filters.AlphanumComparator import org.tasks.filters.TagFilters import org.tasks.time.DateTimeUtils.currentTimeMillis -import java.util.* -import kotlin.collections.HashSet @Dao abstract class TagDataDao { @@ -25,7 +28,7 @@ abstract class TagDataDao { * If a tag already exists in the database that case insensitively matches the given tag, return * that. Otherwise, return the argument */ - suspend fun getTagWithCase(tag: String): String? = getTagByName(tag)?.name ?: tag + suspend fun getTagWithCase(tag: String): String = getTagByName(tag)?.name ?: tag suspend fun searchTags(query: String): List = searchTagsInternal("%$query%").sort() diff --git a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt index 844a7fc65..60e490643 100644 --- a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt @@ -107,7 +107,11 @@ class DateTimePicker : BaseDateTimePicker() { } } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { binding = DialogDateTimePickerBinding.inflate(theme.getLayoutInflater(requireContext())) setupShortcutsAndCalendar() with (binding.shortcuts) { @@ -206,7 +210,7 @@ class DateTimePicker : BaseDateTimePicker() { private fun currentDate() = returnDate(day = customDate) private fun currentTime() = returnSelectedTime(customTime) - fun pickTime() { + private fun pickTime() { val time = if (selectedTime == MULTIPLE_TIMES || !Task.hasDueTime(today.withMillisOfDay(selectedTime).millis)) { today.noon().millisOfDay diff --git a/app/src/main/java/org/tasks/dialogs/Linkify.kt b/app/src/main/java/org/tasks/dialogs/Linkify.kt index 258445ac9..3eb21c108 100644 --- a/app/src/main/java/org/tasks/dialogs/Linkify.kt +++ b/app/src/main/java/org/tasks/dialogs/Linkify.kt @@ -60,7 +60,7 @@ class Linkify @Inject constructor( } } - private inner class ClickHandlingURLSpan constructor( + private inner class ClickHandlingURLSpan( url: String?, private val linkClickHandler: ((String) -> Boolean), private val rowClickHandler: (() -> Unit), diff --git a/app/src/main/java/org/tasks/dialogs/WhatsNewDialog.kt b/app/src/main/java/org/tasks/dialogs/WhatsNewDialog.kt index b990b692b..69fca9a54 100644 --- a/app/src/main/java/org/tasks/dialogs/WhatsNewDialog.kt +++ b/app/src/main/java/org/tasks/dialogs/WhatsNewDialog.kt @@ -1,15 +1,11 @@ package org.tasks.dialogs import android.app.Dialog -import android.content.Intent import android.os.Bundle import android.text.method.LinkMovementMethod import androidx.fragment.app.DialogFragment import dagger.hilt.android.AndroidEntryPoint -import org.tasks.R -import org.tasks.billing.PurchaseActivity import org.tasks.databinding.DialogWhatsNewBinding -import org.tasks.extensions.Context.openUri import org.tasks.markdown.MarkdownProvider import java.io.BufferedReader import javax.inject.Inject @@ -38,14 +34,4 @@ class WhatsNewDialog : DialogFragment() { .setView(binding.root) .show() } - - private fun onSubscribeClick() { - dismiss() - startActivity(Intent(context, PurchaseActivity::class.java)) - } - - private fun onDonateClick() { - dismiss() - context?.openUri(R.string.url_donate) - } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/extensions/Context.kt b/app/src/main/java/org/tasks/extensions/Context.kt index 9652c3f63..837cfa0f7 100644 --- a/app/src/main/java/org/tasks/extensions/Context.kt +++ b/app/src/main/java/org/tasks/extensions/Context.kt @@ -51,7 +51,7 @@ object Context { fun Context.toast(text: String?, duration: Int = Toast.LENGTH_LONG) = text?.let { Toast.makeText(this, it, duration).show() } - fun Context.getResourceUri(@AnyRes res: Int) = + fun Context.getResourceUri(@AnyRes res: Int): Uri = Uri.Builder() .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(packageName) diff --git a/app/src/main/java/org/tasks/files/FileHelper.kt b/app/src/main/java/org/tasks/files/FileHelper.kt index 5e9257d48..d91e0e720 100644 --- a/app/src/main/java/org/tasks/files/FileHelper.kt +++ b/app/src/main/java/org/tasks/files/FileHelper.kt @@ -100,10 +100,8 @@ object FileHelper { ContentResolver.SCHEME_CONTENT -> { val cursor = context.contentResolver.query(uri, null, null, null, null) if (cursor != null && cursor.moveToFirst()) { - return try { - cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME)) - } finally { - cursor.close() + return cursor.use { + it.getString(it.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME)) } } } @@ -217,7 +215,7 @@ object FileHelper { when (uri.scheme) { ContentResolver.SCHEME_CONTENT -> { val dir = DocumentFile.fromTreeUri(context, uri) - val documentFiles = Arrays.asList(*dir!!.listFiles()) + val documentFiles = listOf(*dir!!.listFiles()) while (true) { val result = tempName + extension if (Iterables.any(documentFiles) { f: DocumentFile? -> f!!.name == result }) { diff --git a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt index d7ea4d017..b3c2cdbb0 100644 --- a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt +++ b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt @@ -259,8 +259,8 @@ class FilterCriteriaProvider @Inject constructor( // EOD today if the specified date is NOW or(Task.DUE_DATE.lte("?"), and(field("${Task.DUE_DATE} / 1000 % 60").eq(0), - field("?").eq(field("${PermaSql.VALUE_NOW}")), - Task.DUE_DATE.lte("${PermaSql.VALUE_EOD}"))))) + field("?").eq(field(PermaSql.VALUE_NOW)), + Task.DUE_DATE.lte(PermaSql.VALUE_EOD))))) .toString(), values, r.getStringArray(R.array.CFC_dueBefore_entries), diff --git a/app/src/main/java/org/tasks/fragments/CommentBarFragment.kt b/app/src/main/java/org/tasks/fragments/CommentBarFragment.kt index 9c72251c1..dffbfabb1 100644 --- a/app/src/main/java/org/tasks/fragments/CommentBarFragment.kt +++ b/app/src/main/java/org/tasks/fragments/CommentBarFragment.kt @@ -47,7 +47,10 @@ class CommentBarFragment : Fragment() { lateinit var viewModel: TaskEditViewModel override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { viewModel = ViewModelProvider(requireParentFragment())[TaskEditViewModel::class.java] val view = bind(container) createView(savedInstanceState) diff --git a/app/src/main/java/org/tasks/googleapis/BaseInvoker.kt b/app/src/main/java/org/tasks/googleapis/BaseInvoker.kt index 9f88c54be..4039e6874 100644 --- a/app/src/main/java/org/tasks/googleapis/BaseInvoker.kt +++ b/app/src/main/java/org/tasks/googleapis/BaseInvoker.kt @@ -27,8 +27,7 @@ abstract class BaseInvoker( withContext(Dispatchers.IO) { credentialsAdapter.checkToken() Timber.d("%s request: %s", caller, request) - val response: T? - response = try { + val response: T? = try { if (preferences.isFlipperEnabled) { val start = DateUtilities.now() val httpResponse = request.executeUnparsed() diff --git a/app/src/main/java/org/tasks/injection/BaseWorker.kt b/app/src/main/java/org/tasks/injection/BaseWorker.kt index 309fa1f53..1a06b7ab9 100644 --- a/app/src/main/java/org/tasks/injection/BaseWorker.kt +++ b/app/src/main/java/org/tasks/injection/BaseWorker.kt @@ -22,12 +22,8 @@ abstract class BaseWorker( } catch (e: Exception) { firebase.reportException(e) Result.failure() - } finally { - destroy() } } protected abstract suspend fun run(): Result - - protected open fun destroy() {} } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt index 82c3a0368..a056de564 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt +++ b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt @@ -47,7 +47,7 @@ import java.util.* import java.util.concurrent.TimeUnit import kotlin.math.max -class WorkManagerImpl constructor( +class WorkManagerImpl( private val context: Context, private val preferences: Preferences, private val caldavDao: CaldavDao, diff --git a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt index f976d0f97..221c8c417 100644 --- a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt +++ b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt @@ -18,7 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout.Behavior.DragCallback -import com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener import com.google.android.material.appbar.CollapsingToolbarLayout import com.todoroo.andlib.utility.AndroidUtilities import dagger.hilt.android.AndroidEntryPoint @@ -137,15 +136,14 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC } }) params.behavior = behavior - appBarLayout.addOnOffsetChangedListener( - OnOffsetChangedListener { appBarLayout: AppBarLayout, offset: Int -> - if (offset == 0 && this.offset != 0) { - closeSearch() - AndroidUtilities.hideKeyboard(this) - } - this.offset = offset - toolbar.alpha = abs(offset / appBarLayout.totalScrollRange.toFloat()) - }) + appBarLayout.addOnOffsetChangedListener { appBarLayout: AppBarLayout, offset: Int -> + if (offset == 0 && this.offset != 0) { + closeSearch() + AndroidUtilities.hideKeyboard(this) + } + this.offset = offset + toolbar.alpha = abs(offset / appBarLayout.totalScrollRange.toFloat()) + } coordinatorLayout.addOnLayoutChangeListener( object : View.OnLayoutChangeListener { override fun onLayoutChange( diff --git a/app/src/main/java/org/tasks/notifications/Throttle.kt b/app/src/main/java/org/tasks/notifications/Throttle.kt index 04f7bf01e..f53076094 100644 --- a/app/src/main/java/org/tasks/notifications/Throttle.kt +++ b/app/src/main/java/org/tasks/notifications/Throttle.kt @@ -6,7 +6,7 @@ import timber.log.Timber import java.util.concurrent.Executor import java.util.concurrent.Executors.newSingleThreadExecutor -internal class Throttle constructor( +internal class Throttle( ratePerPeriod: Int, private val periodMillis: Long = 1000, private val tag: String = "", diff --git a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt index 197c5edae..63b6dedc7 100644 --- a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt +++ b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt @@ -1,8 +1,11 @@ package org.tasks.preferences import android.content.Context -import com.todoroo.astrid.api.* +import com.todoroo.astrid.api.CaldavFilter +import com.todoroo.astrid.api.CustomFilter import com.todoroo.astrid.api.Filter +import com.todoroo.astrid.api.GtasksFilter +import com.todoroo.astrid.api.TagFilter import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer.Companion.getMyTasksFilter import com.todoroo.astrid.data.Task @@ -10,8 +13,15 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.runBlocking import org.tasks.R import org.tasks.Strings.isNullOrEmpty -import org.tasks.data.* import org.tasks.data.CaldavCalendar.Companion.ACCESS_READ_ONLY +import org.tasks.data.CaldavDao +import org.tasks.data.CaldavTask +import org.tasks.data.FilterDao +import org.tasks.data.GoogleTask +import org.tasks.data.GoogleTaskDao +import org.tasks.data.GoogleTaskListDao +import org.tasks.data.LocationDao +import org.tasks.data.TagDataDao import org.tasks.filters.PlaceFilter import timber.log.Timber import javax.inject.Inject @@ -52,7 +62,7 @@ class DefaultFilterProvider @Inject constructor( ?.takeIf { it.isWritable } ?: getAnyList() - suspend fun getLastViewedFilter() = getFilterFromPreference(R.string.p_last_viewed_list) + private suspend fun getLastViewedFilter() = getFilterFromPreference(R.string.p_last_viewed_list) suspend fun getDefaultOpenFilter() = getFilterFromPreference(R.string.p_default_open_filter) diff --git a/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt b/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt index 11bd871e3..f1daf9c10 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt @@ -15,7 +15,7 @@ import org.tasks.time.DateTime import org.tasks.ui.TimePreference import java.time.DayOfWeek import java.time.format.TextStyle -import java.util.* +import java.util.Locale import javax.inject.Inject private const val REQUEST_MORNING = 10007 @@ -126,7 +126,7 @@ class DateAndTime : InjectingPreferenceFragment(), Preference.OnPreferenceChange private fun updateStartOfWeek(value: String) { val preference = getStartOfWeekPreference() val index = preference.findIndexOfValue(value) - val summary: String? = getWeekdayEntries().get(index) + val summary: String? = getWeekdayEntries()[index] preference.summary = summary } diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskEditPreferences.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskEditPreferences.kt index deef2c054..a7faebac6 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TaskEditPreferences.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TaskEditPreferences.kt @@ -18,7 +18,7 @@ class TaskEditPreferences : InjectingPreferenceFragment() { requireContext(), R.drawable.ic_keyboard_arrow_right_24px )?.mutate() - tint = context?.getColor(R.color.icon_tint_with_alpha) + tint = context.getColor(R.color.icon_tint_with_alpha) iconVisible = true } } diff --git a/app/src/main/java/org/tasks/preferences/fragments/TasksAccount.kt b/app/src/main/java/org/tasks/preferences/fragments/TasksAccount.kt index 03f40ca8a..c337ce352 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TasksAccount.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TasksAccount.kt @@ -1,6 +1,10 @@ package org.tasks.preferences.fragments -import android.content.* +import android.content.BroadcastReceiver +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -33,7 +37,7 @@ import org.tasks.jobs.WorkManager import org.tasks.preferences.IconPreference import org.tasks.preferences.fragments.MainSettingsFragment.Companion.REQUEST_TASKS_ORG import java.time.format.FormatStyle -import java.util.* +import java.util.Locale import javax.inject.Inject @AndroidEntryPoint @@ -171,7 +175,7 @@ class TasksAccount : BaseAccountPreference() { onPreferenceClickListener = null } else { setOnPreferenceClickListener { - context?.openUri(R.string.url_sponsor) + context.openUri(R.string.url_sponsor) false } } @@ -231,7 +235,7 @@ class TasksAccount : BaseAccountPreference() { category.addPreference(IconPreference(requireContext()).apply { layoutResource = R.layout.preference_icon iconVisible = true - drawable = context?.getDrawable(R.drawable.ic_outline_delete_24px) + drawable = context.getDrawable(R.drawable.ic_outline_delete_24px) tint = ContextCompat.getColor(requireContext(), R.color.icon_tint_with_alpha) title = description iconClickListener = View.OnClickListener { _ -> diff --git a/app/src/main/java/org/tasks/reminders/AlarmToString.kt b/app/src/main/java/org/tasks/reminders/AlarmToString.kt index 0b4800087..1d9662018 100644 --- a/app/src/main/java/org/tasks/reminders/AlarmToString.kt +++ b/app/src/main/java/org/tasks/reminders/AlarmToString.kt @@ -5,11 +5,11 @@ import android.content.res.Resources import com.todoroo.andlib.utility.DateUtilities import org.tasks.R import org.tasks.data.Alarm -import java.util.* +import java.util.Locale import java.util.concurrent.TimeUnit import kotlin.math.absoluteValue -class AlarmToString constructor(context: Context, var locale: Locale) { +class AlarmToString(context: Context, var locale: Locale) { private val resources = context.resources fun toString(alarm: Alarm): String { diff --git a/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.kt b/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.kt index d3c61983d..6acfe48b3 100644 --- a/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.kt +++ b/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.kt @@ -52,7 +52,7 @@ class BasicRecurrenceDialog : DialogFragment() { val adapter = SingleCheckedArrayAdapter(requireContext(), repeatOptions) var selected = 0 if (customPicked) { - adapter.insert(repeatRuleToString!!.toString(rule), 0) + adapter.insert(repeatRuleToString.toString(rule), 0) } else if (rrule != null) { selected = when (rrule.frequency) { Recur.Frequency.DAILY -> 1 diff --git a/app/src/main/java/org/tasks/sync/Debouncer.kt b/app/src/main/java/org/tasks/sync/Debouncer.kt index e9765b3f8..5ac88bec7 100644 --- a/app/src/main/java/org/tasks/sync/Debouncer.kt +++ b/app/src/main/java/org/tasks/sync/Debouncer.kt @@ -3,7 +3,7 @@ package org.tasks.sync import kotlinx.coroutines.delay import timber.log.Timber -class Debouncer constructor(private val tag: String, private val block: suspend (Boolean) -> Unit) { +class Debouncer(private val tag: String, private val block: suspend (Boolean) -> Unit) { private var count = 0 suspend fun sync(immediate: Boolean) { diff --git a/app/src/main/java/org/tasks/tasklist/HeaderFormatter.kt b/app/src/main/java/org/tasks/tasklist/HeaderFormatter.kt index f75267f81..d02d36d21 100644 --- a/app/src/main/java/org/tasks/tasklist/HeaderFormatter.kt +++ b/app/src/main/java/org/tasks/tasklist/HeaderFormatter.kt @@ -31,7 +31,7 @@ class HeaderFormatter @Inject constructor( headerString(value, groupMode, alwaysDisplayFullDate, style, compact) } - suspend fun headerString( + private suspend fun headerString( value: Long, groupMode: Int = preferences.groupMode, alwaysDisplayFullDate: Boolean = preferences.alwaysDisplayFullDate, diff --git a/app/src/main/java/org/tasks/tasklist/SectionedDataSource.kt b/app/src/main/java/org/tasks/tasklist/SectionedDataSource.kt index 2b5c925e7..0a6c1e86b 100644 --- a/app/src/main/java/org/tasks/tasklist/SectionedDataSource.kt +++ b/app/src/main/java/org/tasks/tasklist/SectionedDataSource.kt @@ -7,7 +7,7 @@ import com.todoroo.astrid.core.SortHelper import org.tasks.data.TaskContainer import org.tasks.time.DateTimeUtils.startOfDay -class SectionedDataSource constructor( +class SectionedDataSource( tasks: List, disableHeaders: Boolean, val groupMode: Int, @@ -144,7 +144,7 @@ class SectionedDataSource constructor( sections.remove(toPosition) val newSectionedPosition = old.sectionedPosition + offset val previousSection = if (isHeader(newSectionedPosition - 1)) sections[newSectionedPosition - 1] else null - val newFirstPosition = previousSection?.firstPosition ?: old.firstPosition + offset + val newFirstPosition = previousSection?.firstPosition ?: (old.firstPosition + offset) val new = AdapterSection(newFirstPosition, old.value, newSectionedPosition, old.collapsed) sections.append(new.sectionedPosition, new) } diff --git a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt index 81261f14a..db6c4a9b2 100644 --- a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt +++ b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt @@ -40,7 +40,7 @@ class SubtaskControlSet : TaskEditControlFragment() { @Inject lateinit var colorProvider: ColorProvider @Inject lateinit var preferences: Preferences - lateinit var listViewModel: TaskListViewModel + private lateinit var listViewModel: TaskListViewModel override fun createView(savedInstanceState: Bundle?) { viewModel.task.takeIf { it.id > 0 }?.let { diff --git a/app/src/main/res/drawable/ic_davx5_icon_green_bg.xml b/app/src/main/res/drawable/ic_davx5_icon_green_bg.xml index 1331c6b75..d8d47016d 100644 --- a/app/src/main/res/drawable/ic_davx5_icon_green_bg.xml +++ b/app/src/main/res/drawable/ic_davx5_icon_green_bg.xml @@ -1,6 +1,6 @@ + xmlns:android="http://schemas.android.com/apk/res/android"> diff --git a/app/src/main/res/layout/activity_caldav_calendar_settings.xml b/app/src/main/res/layout/activity_caldav_calendar_settings.xml index 3a2710905..385216bb5 100644 --- a/app/src/main/res/layout/activity_caldav_calendar_settings.xml +++ b/app/src/main/res/layout/activity_caldav_calendar_settings.xml @@ -1,7 +1,5 @@ + android:layout_height="wrap_content"> かつ 条件を追加 締切: \? - ...に締切 + …に締切 締切日時なし 1 か月後 優先度 @@ -497,7 +497,7 @@ OK 完全な日付を表示 「マイタスク」「今日」そしてタグにおいて Astrid の手動並べ替えモードを有効にします。この並べ替えモードは将来のアップデートで「マイ設定」に置き換えられる予定です - ...に着手 + …に着手 タスクを再計画 diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index e50946100..18e159bca 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -16,7 +16,6 @@ ပြုပြင် မီနူး ကိုပြင်ဆင်မည် အစီအစဥ် - အရေးပါမှုအားဖြင့် စာရင်းဖြင့် အလုပ်ပြီးသောအချိန်ဖြင့် diff --git a/project.properties b/project.properties index 6c04a9567..99e156cb0 100644 --- a/project.properties +++ b/project.properties @@ -8,9 +8,3 @@ # project structure. # Indicates whether an apk should be generated for each density. -split.density=false -# Project target. -target=android-19 -apk-configurations= -android.library.reference.1=../api -