diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 9330b5a1958d..7583e07961bb 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -51,6 +51,12 @@
+
+
+
+
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/DeckPickerTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/DeckPickerTest.kt
index 51c0cc2f63f7..5224c54b35f7 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/DeckPickerTest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/DeckPickerTest.kt
@@ -22,10 +22,17 @@ import android.annotation.SuppressLint
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.Espresso.pressBack
-import androidx.test.espresso.action.ViewActions.*
+import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
+import androidx.test.espresso.action.ViewActions.typeText
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.contrib.RecyclerViewActions
-import androidx.test.espresso.matcher.ViewMatchers.*
+import androidx.test.espresso.matcher.ViewMatchers.assertThat
+import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.rule.GrantPermissionRule
import com.ichi2.anki.TestUtils.activityInstance
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/NoteEditorTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/NoteEditorTest.kt
index e2959ece0354..59f0e76074a3 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/NoteEditorTest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/NoteEditorTest.kt
@@ -28,7 +28,6 @@ import org.hamcrest.Matchers
import org.junit.Assume
import org.junit.Before
import org.junit.Rule
-import java.util.ArrayList
@KotlinCleanup("fix ide lint issues")
abstract class NoteEditorTest protected constructor() {
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/reviewer/PeripheralKeymapTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/reviewer/PeripheralKeymapTest.kt
index 2e0a09b1626b..8ae417bff82f 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/reviewer/PeripheralKeymapTest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/reviewer/PeripheralKeymapTest.kt
@@ -25,6 +25,7 @@ import org.hamcrest.Matchers.equalTo
import org.hamcrest.Matchers.hasSize
import org.junit.Test
import org.junit.runner.RunWith
+
@RunWith(AndroidJUnit4::class)
class PeripheralKeymapTest {
@Test
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ACRATest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ACRATest.kt
index aec0cbaf0dfd..567b2060e666 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ACRATest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ACRATest.kt
@@ -38,7 +38,10 @@ import org.acra.config.ToastConfiguration
import org.acra.data.CrashReportDataFactory
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.equalTo
-import org.junit.Assert.*
+import org.junit.Assert.assertArrayEquals
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ContentProviderTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ContentProviderTest.kt
index af8f98498c9b..4ae8df5baf42 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ContentProviderTest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ContentProviderTest.kt
@@ -31,24 +31,35 @@ import com.ichi2.anki.FlashCardsContract
import com.ichi2.anki.exception.ConfirmModSchemaException
import com.ichi2.anki.testutil.DatabaseUtils.cursorFillWindow
import com.ichi2.async.TaskManager.Companion.waitToFinish
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Model
+import com.ichi2.libanki.Note
+import com.ichi2.libanki.StdModels
+import com.ichi2.libanki.Utils
import com.ichi2.utils.BlocksSchemaUpgrade
import com.ichi2.utils.JSONObject
import com.ichi2.utils.KotlinCleanup
import net.ankiweb.rsdroid.BackendFactory.defaultLegacySchema
-import org.hamcrest.MatcherAssert.*
-import org.hamcrest.Matchers.*
-import org.junit.*
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.greaterThan
+import org.hamcrest.Matchers.greaterThanOrEqualTo
+import org.hamcrest.Matchers.`is`
+import org.junit.After
import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertTrue
import org.junit.Assert.fail
-import org.junit.Assume.*
+import org.junit.Assume.assumeThat
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import timber.log.Timber
-import java.util.*
import kotlin.test.assertNotNull
import kotlin.test.junit.JUnitAsserter.assertNotNull
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/DBTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/DBTest.kt
index dde5939168da..77213266bbc7 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/DBTest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/DBTest.kt
@@ -32,7 +32,7 @@ import org.junit.Test
import org.junit.runner.RunWith
import java.io.File
import java.io.FileOutputStream
-import java.util.*
+import java.util.Random
@RunWith(AndroidJUnit4::class)
class DBTest : InstrumentedTest() {
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/ImportTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/ImportTest.kt
index e2b5748bc426..e5d7d0f3f1de 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/ImportTest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/ImportTest.kt
@@ -22,19 +22,25 @@ import com.ichi2.anki.exception.ImportExportException
import com.ichi2.anki.tests.InstrumentedTest
import com.ichi2.anki.tests.Shared
import com.ichi2.libanki.Collection
-import com.ichi2.libanki.importer.*
+import com.ichi2.libanki.importer.Anki2Importer
+import com.ichi2.libanki.importer.AnkiPackageImporter
+import com.ichi2.libanki.importer.Importer
import com.ichi2.utils.JSONException
import com.ichi2.utils.KotlinCleanup
import net.ankiweb.rsdroid.BackendFactory.defaultLegacySchema
-import org.hamcrest.Matchers.*
-import org.junit.*
-import org.junit.Assert.*
-import org.junit.Assume.*
+import org.hamcrest.Matchers.`is`
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assume.assumeThat
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
import org.junit.runner.RunWith
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
-import java.util.*
+import java.util.Arrays
@KotlinCleanup("is -> equalTo")
@KotlinCleanup("IDE Lint")
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/MediaTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/MediaTest.kt
index 30c5f6bedfa1..977ae18d903a 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/MediaTest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/MediaTest.kt
@@ -26,8 +26,15 @@ import com.ichi2.libanki.exception.EmptyMediaException
import net.ankiweb.rsdroid.BackendFactory.defaultLegacySchema
import org.hamcrest.MatcherAssert
import org.hamcrest.Matchers
-import org.junit.*
-import org.junit.Assert.*
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Assume
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
import org.junit.runner.RunWith
import java.io.File
import java.io.FileOutputStream
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/RetryRule.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/RetryRule.kt
index aecaece27bc7..dc4cdcee8021 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/RetryRule.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/RetryRule.kt
@@ -19,7 +19,6 @@ package com.ichi2.anki.tests.libanki
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
-import kotlin.Throws
/**
* Retry a test maxTries times, only failing if zero successes.
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/testutil/TestEnvironment.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/testutil/TestEnvironment.kt
index ed2d2df61ba4..c0d97a4e540b 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/testutil/TestEnvironment.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/testutil/TestEnvironment.kt
@@ -15,7 +15,7 @@
*/
package com.ichi2.anki.testutil
-import java.util.*
+import java.util.Locale
object TestEnvironment {
fun isDisplayingDefaultEnglishStrings(): Boolean {
diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/libanki/DBTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/libanki/DBTest.kt
index dff36cd89104..262eed75b3b2 100644
--- a/AnkiDroid/src/androidTest/java/com/ichi2/libanki/DBTest.kt
+++ b/AnkiDroid/src/androidTest/java/com/ichi2/libanki/DBTest.kt
@@ -19,11 +19,12 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.ichi2.anki.tests.InstrumentedTest
import net.ankiweb.rsdroid.BackendFactory
import org.hamcrest.MatcherAssert.assertThat
-import org.hamcrest.Matchers.*
+import org.hamcrest.Matchers.equalTo
+import org.hamcrest.Matchers.not
import org.junit.Assume.assumeThat
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.*
+import java.util.Locale
@RunWith(AndroidJUnit4::class)
class DBTest : InstrumentedTest() {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anim/ViewAnimation.kt b/AnkiDroid/src/main/java/com/ichi2/anim/ViewAnimation.kt
index e3b3ed2c2514..49bb62e36f70 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anim/ViewAnimation.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anim/ViewAnimation.kt
@@ -7,7 +7,12 @@ import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.DecelerateInterpolator
import android.view.animation.TranslateAnimation
-import com.ichi2.anim.ViewAnimation.Slide.*
+import com.ichi2.anim.ViewAnimation.Slide.SLIDE_IN_FROM_BOTTOM
+import com.ichi2.anim.ViewAnimation.Slide.SLIDE_IN_FROM_LEFT
+import com.ichi2.anim.ViewAnimation.Slide.SLIDE_IN_FROM_RIGHT
+import com.ichi2.anim.ViewAnimation.Slide.SLIDE_IN_FROM_TOP
+import com.ichi2.anim.ViewAnimation.Slide.SLIDE_OUT_TO_LEFT
+import com.ichi2.anim.ViewAnimation.Slide.SLIDE_OUT_TO_RIGHT
object ViewAnimation {
enum class Slide {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt
index a13e4e352fa6..abfc4f7b871d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt
@@ -22,22 +22,50 @@ package com.ichi2.anki
import android.annotation.SuppressLint
import android.annotation.TargetApi
-import android.content.*
+import android.content.ActivityNotFoundException
+import android.content.BroadcastReceiver
+import android.content.ClipboardManager
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.content.SharedPreferences
import android.content.res.Configuration
import android.content.res.Resources
import android.graphics.Color
import android.media.MediaPlayer
import android.net.Uri
-import android.os.*
+import android.os.Build
+import android.os.Bundle
+import android.os.Parcelable
+import android.os.SystemClock
import android.text.TextUtils
-import android.view.*
+import android.view.GestureDetector
import android.view.GestureDetector.SimpleOnGestureListener
+import android.view.KeyEvent
+import android.view.LayoutInflater
+import android.view.MotionEvent
+import android.view.View
import android.view.View.OnTouchListener
+import android.view.ViewGroup
+import android.view.ViewParent
+import android.view.WindowManager
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
-import android.webkit.*
+import android.webkit.CookieManager
+import android.webkit.JsResult
+import android.webkit.RenderProcessGoneDetail
+import android.webkit.WebChromeClient
+import android.webkit.WebResourceError
+import android.webkit.WebResourceRequest
+import android.webkit.WebResourceResponse
+import android.webkit.WebView
import android.webkit.WebView.HitTestResult
-import android.widget.*
+import android.webkit.WebViewClient
+import android.widget.Button
+import android.widget.FrameLayout
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
import androidx.annotation.CheckResult
import androidx.annotation.IdRes
import androidx.annotation.StringRes
@@ -52,25 +80,45 @@ import com.ichi2.anim.ActivityTransitionAnimation
import com.ichi2.anim.ActivityTransitionAnimation.getInverseTransition
import com.ichi2.anki.CollectionManager.withCol
import com.ichi2.anki.UIUtils.showThemedToast
-import com.ichi2.anki.cardviewer.*
+import com.ichi2.anki.cardviewer.CardHtml
import com.ichi2.anki.cardviewer.CardHtml.Companion.legacyGetTtsTags
+import com.ichi2.anki.cardviewer.Gesture
+import com.ichi2.anki.cardviewer.GestureProcessor
+import com.ichi2.anki.cardviewer.HtmlGenerator
import com.ichi2.anki.cardviewer.HtmlGenerator.Companion.createInstance
+import com.ichi2.anki.cardviewer.MissingImageHandler
+import com.ichi2.anki.cardviewer.OnRenderProcessGoneDelegate
+import com.ichi2.anki.cardviewer.Side
import com.ichi2.anki.cardviewer.SoundPlayer.CardSoundConfig
import com.ichi2.anki.cardviewer.SoundPlayer.CardSoundConfig.Companion.create
+import com.ichi2.anki.cardviewer.TTS
+import com.ichi2.anki.cardviewer.TypeAnswer
import com.ichi2.anki.cardviewer.TypeAnswer.Companion.createInstance
+import com.ichi2.anki.cardviewer.ViewerCommand
import com.ichi2.anki.dialogs.tags.TagsDialog
import com.ichi2.anki.dialogs.tags.TagsDialogFactory
import com.ichi2.anki.dialogs.tags.TagsDialogListener
import com.ichi2.anki.receiver.SdCardReceiver
-import com.ichi2.anki.reviewer.*
+import com.ichi2.anki.reviewer.AutomaticAnswer
import com.ichi2.anki.reviewer.AutomaticAnswer.AutomaticallyAnswered
+import com.ichi2.anki.reviewer.AutomaticAnswerAction
+import com.ichi2.anki.reviewer.EaseButton
+import com.ichi2.anki.reviewer.FullScreenMode
import com.ichi2.anki.reviewer.FullScreenMode.Companion.DEFAULT
import com.ichi2.anki.reviewer.FullScreenMode.Companion.fromPreference
+import com.ichi2.anki.reviewer.PreviousAnswerIndicator
+import com.ichi2.anki.reviewer.ReviewerUi
import com.ichi2.anki.reviewer.ReviewerUi.ControlBlock
import com.ichi2.anki.servicelayer.AnkiMethod
import com.ichi2.anki.servicelayer.LanguageHintService.applyLanguageHint
import com.ichi2.anki.servicelayer.NoteService.isMarked
-import com.ichi2.anki.servicelayer.SchedulerService.*
+import com.ichi2.anki.servicelayer.SchedulerService.BuryCard
+import com.ichi2.anki.servicelayer.SchedulerService.BuryNote
+import com.ichi2.anki.servicelayer.SchedulerService.DeleteNote
+import com.ichi2.anki.servicelayer.SchedulerService.GetCard
+import com.ichi2.anki.servicelayer.SchedulerService.NextCard
+import com.ichi2.anki.servicelayer.SchedulerService.SuspendCard
+import com.ichi2.anki.servicelayer.SchedulerService.SuspendNote
import com.ichi2.anki.servicelayer.TaskListenerBuilder
import com.ichi2.anki.servicelayer.UndoService.Undo
import com.ichi2.anki.snackbar.SnackbarBuilder
@@ -79,10 +127,20 @@ import com.ichi2.annotations.NeedsTest
import com.ichi2.async.TaskListener
import com.ichi2.async.updateCard
import com.ichi2.compat.CompatHelper.Companion.compat
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
+import com.ichi2.libanki.CardId
+import com.ichi2.libanki.ChangeManager
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
import com.ichi2.libanki.Consts.BUTTON_TYPE
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Sound
import com.ichi2.libanki.Sound.SoundSide
+import com.ichi2.libanki.SoundOrVideoTag
+import com.ichi2.libanki.TTSTag
+import com.ichi2.libanki.Utils
+import com.ichi2.libanki.getAvTag
import com.ichi2.libanki.sched.AbstractSched
import com.ichi2.libanki.sched.SchedV2
import com.ichi2.themes.Themes
@@ -104,10 +162,14 @@ import kotlinx.coroutines.Job
import net.ankiweb.rsdroid.BackendFactory
import net.ankiweb.rsdroid.RustCleanup
import timber.log.Timber
-import java.io.*
+import java.io.ByteArrayInputStream
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.UnsupportedEncodingException
import java.lang.ref.WeakReference
import java.net.URLDecoder
-import java.util.*
import java.util.concurrent.locks.Lock
import java.util.concurrent.locks.ReadWriteLock
import java.util.concurrent.locks.ReentrantReadWriteLock
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt
index 1fe1bec3deac..77a64e5aff6b 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt
@@ -16,7 +16,11 @@ import android.media.AudioManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
-import android.view.*
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
+import android.view.WindowManager
import android.view.animation.Animation
import android.widget.ProgressBar
import androidx.activity.result.ActivityResultLauncher
@@ -37,7 +41,10 @@ import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import com.ichi2.anim.ActivityTransitionAnimation
import com.ichi2.anim.ActivityTransitionAnimation.Direction
-import com.ichi2.anim.ActivityTransitionAnimation.Direction.*
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.DEFAULT
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.FADE
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.NONE
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.START
import com.ichi2.anki.CollectionManager.withCol
import com.ichi2.anki.UIUtils.showThemedToast
import com.ichi2.anki.analytics.UsageAnalytics
@@ -49,7 +56,7 @@ import com.ichi2.anki.preferences.Preferences
import com.ichi2.anki.preferences.Preferences.Companion.MINIMUM_CARDS_DUE_FOR_NOTIFICATION
import com.ichi2.anki.snackbar.showSnackbar
import com.ichi2.anki.workarounds.AppLoadedFromBackupWorkaround.showedActivityFailedScreen
-import com.ichi2.async.*
+import com.ichi2.async.CollectionLoader
import com.ichi2.compat.CompatHelper.Companion.compat
import com.ichi2.compat.customtabs.CustomTabActivityHelper
import com.ichi2.compat.customtabs.CustomTabsFallback
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.kt
index c62322e67791..3ca49630820e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.kt
@@ -44,12 +44,16 @@ import com.ichi2.anki.services.BootService
import com.ichi2.anki.services.NotificationService
import com.ichi2.compat.CompatHelper
import com.ichi2.themes.Themes
-import com.ichi2.utils.*
+import com.ichi2.utils.AdaptionUtil
+import com.ichi2.utils.ExceptionUtil
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.LanguageUtil
+import com.ichi2.utils.Permissions
import net.ankiweb.rsdroid.BackendFactory
import timber.log.Timber
import timber.log.Timber.DebugTree
import java.io.InputStream
-import java.util.*
+import java.util.Locale
import java.util.regex.Pattern
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiFont.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiFont.kt
index ad2ccdb0c830..022e1b23baba 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiFont.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiFont.kt
@@ -6,9 +6,6 @@ import android.graphics.Typeface
import com.ichi2.libanki.Utils
import timber.log.Timber
import java.io.File
-import java.lang.RuntimeException
-import java.lang.StringBuilder
-import java.util.*
class AnkiFont private constructor(val name: String, private val family: String, private val attributes: List, val path: String) {
private var mIsDefault = false
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/BackendBackups.kt b/AnkiDroid/src/main/java/com/ichi2/anki/BackendBackups.kt
index 08df32ebf38f..cf7d72b3da33 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/BackendBackups.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/BackendBackups.kt
@@ -21,7 +21,7 @@ package com.ichi2.anki
import com.ichi2.anki.CollectionManager.withCol
import com.ichi2.libanki.awaitBackupCompletion
import com.ichi2.libanki.createBackup
-import kotlinx.coroutines.*
+import kotlinx.coroutines.delay
fun DeckPicker.performBackupInBackground() {
launchCatchingTask {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/BackupManager.kt b/AnkiDroid/src/main/java/com/ichi2/anki/BackupManager.kt
index 4b9c85c715f3..0c0c8ee5eecd 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/BackupManager.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/BackupManager.kt
@@ -32,7 +32,9 @@ import java.io.FileOutputStream
import java.io.IOException
import java.text.ParseException
import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Calendar
+import java.util.Date
+import java.util.UnknownFormatConversionException
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt
index 520f89175a35..9682ae6b9b86 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt
@@ -18,16 +18,32 @@
package com.ichi2.anki
-import android.content.*
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
import android.graphics.Typeface
import android.os.Bundle
import android.os.SystemClock
import android.text.TextUtils
import android.util.Pair
import android.util.TypedValue
-import android.view.*
-import android.widget.*
+import android.view.KeyEvent
+import android.view.LayoutInflater
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
+import android.view.WindowManager
+import android.widget.AbsListView
+import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
+import android.widget.ArrayAdapter
+import android.widget.BaseAdapter
+import android.widget.CheckBox
+import android.widget.ListView
+import android.widget.Spinner
+import android.widget.TextView
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.annotation.CheckResult
@@ -44,15 +60,21 @@ import com.ichi2.anki.CardUtils.getAllCards
import com.ichi2.anki.CardUtils.getNotes
import com.ichi2.anki.CollectionManager.withCol
import com.ichi2.anki.UIUtils.showThemedToast
-import com.ichi2.anki.dialogs.*
+import com.ichi2.anki.dialogs.BrowserOptionsDialog
+import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog
import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog.Companion.newInstance
import com.ichi2.anki.dialogs.CardBrowserMySearchesDialog.MySearchesDialogListener
import com.ichi2.anki.dialogs.CardBrowserOrderDialog.Companion.newInstance
+import com.ichi2.anki.dialogs.ConfirmationDialog
+import com.ichi2.anki.dialogs.DeckSelectionDialog
import com.ichi2.anki.dialogs.DeckSelectionDialog.Companion.newInstance
import com.ichi2.anki.dialogs.DeckSelectionDialog.DeckSelectionListener
import com.ichi2.anki.dialogs.DeckSelectionDialog.SelectableDeck
+import com.ichi2.anki.dialogs.IntegerDialog
+import com.ichi2.anki.dialogs.RescheduleDialog
import com.ichi2.anki.dialogs.RescheduleDialog.rescheduleMultipleCards
import com.ichi2.anki.dialogs.RescheduleDialog.rescheduleSingleCard
+import com.ichi2.anki.dialogs.SimpleMessageDialog
import com.ichi2.anki.dialogs.tags.TagsDialog
import com.ichi2.anki.dialogs.tags.TagsDialogFactory
import com.ichi2.anki.dialogs.tags.TagsDialogListener
@@ -68,36 +90,50 @@ import com.ichi2.anki.servicelayer.totalLapsesOfNote
import com.ichi2.anki.servicelayer.totalReviewsForNote
import com.ichi2.anki.snackbar.showSnackbar
import com.ichi2.anki.widgets.DeckDropDownAdapter.SubtitleListener
-import com.ichi2.async.*
+import com.ichi2.async.CollectionTask
import com.ichi2.async.CollectionTask.ChangeDeckMulti
import com.ichi2.async.CollectionTask.CheckCardSelection
import com.ichi2.async.CollectionTask.DeleteNoteMulti
import com.ichi2.async.CollectionTask.MarkNoteMulti
import com.ichi2.async.CollectionTask.RenderBrowserQA
import com.ichi2.async.CollectionTask.SuspendCardMulti
+import com.ichi2.async.TaskListenerWithContext
+import com.ichi2.async.TaskManager
+import com.ichi2.async.updateCard
+import com.ichi2.async.updateMultipleNotes
import com.ichi2.compat.Compat
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
+import com.ichi2.libanki.CardId
+import com.ichi2.libanki.ChangeManager
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Note
+import com.ichi2.libanki.SortOrder
import com.ichi2.libanki.SortOrder.NoOrdering
import com.ichi2.libanki.SortOrder.UseCollectionOrdering
+import com.ichi2.libanki.Utils
+import com.ichi2.libanki.bool
import com.ichi2.libanki.stats.Stats
import com.ichi2.themes.Themes.getColorFromAttr
import com.ichi2.ui.CardBrowserSearchView
import com.ichi2.ui.FixedTextView
import com.ichi2.upgrade.Upgrade.upgradeJSONIfNecessary
-import com.ichi2.utils.*
+import com.ichi2.utils.Computation
import com.ichi2.utils.HandlerUtils.postDelayedOnNewHandler
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.LanguageUtil
import com.ichi2.utils.Permissions.hasStorageAccessPermission
import com.ichi2.utils.TagsUtil.getUpdatedTags
import com.ichi2.widget.WidgetStatus.update
import net.ankiweb.rsdroid.BackendFactory
import net.ankiweb.rsdroid.RustCleanup
import timber.log.Timber
-import java.lang.Exception
-import java.lang.IllegalStateException
-import java.lang.StringBuilder
-import java.util.*
+import java.util.Collections
+import java.util.Locale
import java.util.function.Consumer
-import kotlin.collections.ArrayList
import kotlin.math.abs
import kotlin.math.ceil
import kotlin.math.max
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardInfo.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardInfo.kt
index a4d25d7f2576..7adf2037e5fe 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CardInfo.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardInfo.kt
@@ -32,8 +32,13 @@ import androidx.core.content.ContextCompat
import com.ichi2.anim.ActivityTransitionAnimation
import com.ichi2.anki.UIUtils.showThemedToast
import com.ichi2.compat.CompatHelper.Companion.getParcelableExtraCompat
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
+import com.ichi2.libanki.CardId
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.Model
+import com.ichi2.libanki.NoteId
+import com.ichi2.libanki.Utils
import com.ichi2.libanki.stats.Stats
import com.ichi2.ui.FixedTextView
import com.ichi2.utils.LanguageUtil
@@ -41,7 +46,8 @@ import com.ichi2.utils.UiUtil.makeColored
import net.ankiweb.rsdroid.RustCleanup
import timber.log.Timber
import java.text.DateFormat
-import java.util.*
+import java.util.Date
+import java.util.Locale
import java.util.function.Function
@RustCleanup("Remove this whole activity and use the new Anki page once the new backend is the default")
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt
index ac43fbd2d790..92406612c134 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt
@@ -24,7 +24,14 @@ import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.util.Pair
-import android.view.*
+import android.view.ActionMode
+import android.view.KeyEvent
+import android.view.LayoutInflater
+import android.view.Menu
+import android.view.MenuInflater
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.CheckResult
@@ -42,21 +49,33 @@ import com.afollestad.materialdialogs.MaterialDialog
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
-import com.ichi2.anim.ActivityTransitionAnimation.Direction.*
-import com.ichi2.anki.dialogs.*
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.END
+import com.ichi2.anki.dialogs.ConfirmationDialog
+import com.ichi2.anki.dialogs.DeckSelectionDialog
import com.ichi2.anki.dialogs.DeckSelectionDialog.DeckSelectionListener
import com.ichi2.anki.dialogs.DeckSelectionDialog.SelectableDeck
+import com.ichi2.anki.dialogs.DiscardChangesDialog
+import com.ichi2.anki.dialogs.InsertFieldDialog
import com.ichi2.anki.dialogs.InsertFieldDialog.Companion.REQUEST_FIELD_INSERT
import com.ichi2.anki.exception.ConfirmModSchemaException
import com.ichi2.annotations.NeedsTest
import com.ichi2.async.TaskListenerWithContext
-import com.ichi2.libanki.*
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Model
+import com.ichi2.libanki.Models
import com.ichi2.libanki.Models.Companion.NOT_FOUND_NOTE_TYPE
+import com.ichi2.libanki.NoteId
+import com.ichi2.libanki.NoteTypeId
import com.ichi2.themes.StyledProgressDialog
import com.ichi2.ui.FixedEditText
import com.ichi2.ui.FixedTextView
-import com.ichi2.utils.*
+import com.ichi2.utils.FunctionalInterfaces
+import com.ichi2.utils.JSONArray
+import com.ichi2.utils.JSONException
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
import java.util.regex.Pattern
import kotlin.math.max
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplatePreviewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplatePreviewer.kt
index efff0d54988f..6e15ae24ba6d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplatePreviewer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplatePreviewer.kt
@@ -23,15 +23,19 @@ import com.ichi2.anki.UIUtils.showThemedToast
import com.ichi2.anki.cardviewer.PreviewLayout
import com.ichi2.anki.cardviewer.PreviewLayout.Companion.createAndDisplay
import com.ichi2.annotations.NeedsTest
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Model
+import com.ichi2.libanki.Note
+import com.ichi2.libanki.TemplateManager
import com.ichi2.libanki.TemplateManager.TemplateRenderContext.TemplateRenderOutput
import com.ichi2.libanki.utils.NoteUtils
import com.ichi2.utils.JSONObject
import net.ankiweb.rsdroid.BackendFactory
import timber.log.Timber
import java.io.IOException
-import java.util.*
+import java.util.ArrayList
+import java.util.Arrays
/**
* The card template previewer intent must supply one or more cards to show and the index in the list from where
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardUtils.kt
index 68411f856e01..7875fc8b1e8a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CardUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardUtils.kt
@@ -5,7 +5,6 @@ import com.ichi2.anki.servicelayer.NoteService.isMarked
import com.ichi2.libanki.Card
import com.ichi2.libanki.Note
import com.ichi2.utils.HashUtil.HashSetInit
-import java.util.*
/**
* Utilities for working on multiple cards
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CollectionHelper.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CollectionHelper.kt
index 1517fbabfe78..e9a935449e6f 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CollectionHelper.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CollectionHelper.kt
@@ -34,8 +34,6 @@ import net.ankiweb.rsdroid.BackendFactory
import timber.log.Timber
import java.io.File
import java.io.IOException
-import java.lang.Exception
-import kotlin.Throws
/**
* Singleton which opens, stores, and closes the reference to the Collection.
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CollectionManager.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CollectionManager.kt
index 27e9bd41af1d..c6dfbe108528 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CollectionManager.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CollectionManager.kt
@@ -25,7 +25,10 @@ import com.ichi2.libanki.CollectionV16
import com.ichi2.libanki.Storage.collection
import com.ichi2.libanki.importCollectionPackage
import com.ichi2.utils.Threads
-import kotlinx.coroutines.*
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.withContext
import net.ankiweb.rsdroid.Backend
import net.ankiweb.rsdroid.BackendException
import net.ankiweb.rsdroid.BackendFactory
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CoroutineHelpers.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CoroutineHelpers.kt
index 0232d099b053..3eb36aac8805 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CoroutineHelpers.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CoroutineHelpers.kt
@@ -25,7 +25,15 @@ import androidx.lifecycle.coroutineScope
import anki.collection.Progress
import com.ichi2.anki.snackbar.showSnackbar
import com.ichi2.libanki.Collection
-import kotlinx.coroutines.*
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.withContext
import net.ankiweb.rsdroid.Backend
import net.ankiweb.rsdroid.BackendException
import net.ankiweb.rsdroid.exceptions.BackendInterruptedException
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CrashReportService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CrashReportService.kt
index 676f1320e9f4..45fee78cba87 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/CrashReportService.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/CrashReportService.kt
@@ -32,11 +32,15 @@ import com.ichi2.utils.KotlinCleanup
import com.ichi2.utils.WebViewDebugging.setDataDirectorySuffix
import org.acra.ACRA
import org.acra.ReportField
-import org.acra.config.*
+import org.acra.config.CoreConfigurationBuilder
+import org.acra.config.DialogConfigurationBuilder
+import org.acra.config.HttpSenderConfigurationBuilder
+import org.acra.config.LimiterConfigurationBuilder
+import org.acra.config.LimiterData
+import org.acra.config.ToastConfigurationBuilder
import org.acra.sender.HttpSender
import timber.log.Timber
-import java.util.*
-import kotlin.collections.HashMap
+import java.util.Calendar
object CrashReportService {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/DeckOptions.kt b/AnkiDroid/src/main/java/com/ichi2/anki/DeckOptions.kt
index bb6a44f409c5..c2cb0d2d4ed0 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/DeckOptions.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/DeckOptions.kt
@@ -19,7 +19,9 @@
package com.ichi2.anki
import android.app.AlarmManager
-import android.content.*
+import android.content.Context
+import android.content.Intent
+import android.content.SharedPreferences
import android.content.res.Configuration
import android.os.Bundle
import android.preference.CheckBoxPreference
@@ -49,9 +51,16 @@ import com.ichi2.themes.Themes
import com.ichi2.themes.Themes.themeFollowsSystem
import com.ichi2.themes.Themes.updateCurrentTheme
import com.ichi2.ui.AppCompatPreferenceActivity
-import com.ichi2.utils.*
+import com.ichi2.utils.JSONArray
+import com.ichi2.utils.JSONException
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.NamedJSONComparator
import timber.log.Timber
-import java.util.*
+import java.util.Calendar
+import java.util.Collections
+import java.util.LinkedList
+import java.util.Locale
@NeedsTest("onCreate - to be done after preference migration (5019)")
@KotlinCleanup("lateinit wherever possible")
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt b/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt
index 96a60811aa54..4b8b664c7812 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt
@@ -25,21 +25,35 @@
package com.ichi2.anki
import android.Manifest
-import android.content.*
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.DialogInterface
+import android.content.Intent
+import android.content.IntentFilter
+import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.database.SQLException
import android.graphics.PixelFormat
import android.graphics.drawable.Drawable
import android.net.Uri
-import android.os.*
+import android.os.Build
+import android.os.Bundle
+import android.os.Message
import android.provider.Settings
import android.text.TextUtils
import android.util.Pair
import android.util.TypedValue
-import android.view.*
+import android.view.KeyEvent
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
import android.view.View.OnLongClickListener
+import android.view.ViewPropertyAnimator
import android.view.WindowManager.BadTokenException
-import android.widget.*
+import android.widget.Filterable
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
import androidx.annotation.StringRes
import androidx.annotation.VisibleForTesting
import androidx.appcompat.app.AlertDialog
@@ -59,21 +73,44 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import anki.collection.OpChanges
import com.afollestad.materialdialogs.MaterialDialog
import com.google.android.material.snackbar.Snackbar
-import com.ichi2.anim.ActivityTransitionAnimation.Direction.*
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.DEFAULT
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.FADE
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.START
import com.ichi2.anki.CollectionHelper.CollectionIntegrityStorageCheck
import com.ichi2.anki.CollectionManager.TR
import com.ichi2.anki.CollectionManager.withCol
import com.ichi2.anki.CollectionManager.withOpenColOrNull
import com.ichi2.anki.InitialActivity.StartupFailure
-import com.ichi2.anki.InitialActivity.StartupFailure.*
+import com.ichi2.anki.InitialActivity.StartupFailure.DATABASE_LOCKED
+import com.ichi2.anki.InitialActivity.StartupFailure.DB_ERROR
+import com.ichi2.anki.InitialActivity.StartupFailure.DIRECTORY_NOT_ACCESSIBLE
+import com.ichi2.anki.InitialActivity.StartupFailure.FUTURE_ANKIDROID_VERSION
+import com.ichi2.anki.InitialActivity.StartupFailure.SD_CARD_NOT_MOUNTED
+import com.ichi2.anki.InitialActivity.StartupFailure.WEBVIEW_FAILED
+import com.ichi2.anki.R.string
import com.ichi2.anki.StudyOptionsFragment.DeckStudyData
import com.ichi2.anki.StudyOptionsFragment.StudyOptionsListener
import com.ichi2.anki.UIUtils.showThemedToast
import com.ichi2.anki.analytics.UsageAnalytics
-import com.ichi2.anki.dialogs.*
+import com.ichi2.anki.dialogs.AsyncDialogFragment
+import com.ichi2.anki.dialogs.ConfirmationDialog
+import com.ichi2.anki.dialogs.CreateDeckDialog
+import com.ichi2.anki.dialogs.CreateDeckDialog.DeckDialogType.FILTERED_DECK
+import com.ichi2.anki.dialogs.DatabaseErrorDialog
+import com.ichi2.anki.dialogs.DeckPickerAnalyticsOptInDialog
+import com.ichi2.anki.dialogs.DeckPickerBackupNoSpaceLeftDialog
+import com.ichi2.anki.dialogs.DeckPickerConfirmDeleteDeckDialog
+import com.ichi2.anki.dialogs.DeckPickerContextMenu
+import com.ichi2.anki.dialogs.DeckPickerNoSpaceLeftDialog
+import com.ichi2.anki.dialogs.DeckPickerNoSpaceToDowngradeDialog
import com.ichi2.anki.dialogs.DeckPickerNoSpaceToDowngradeDialog.FileSizeFormatter
+import com.ichi2.anki.dialogs.DialogHandler
+import com.ichi2.anki.dialogs.ImportDialog
import com.ichi2.anki.dialogs.ImportDialog.ImportDialogListener
+import com.ichi2.anki.dialogs.ImportFileSelectionFragment
+import com.ichi2.anki.dialogs.MediaCheckDialog
import com.ichi2.anki.dialogs.MediaCheckDialog.MediaCheckDialogListener
+import com.ichi2.anki.dialogs.SyncErrorDialog
import com.ichi2.anki.dialogs.SyncErrorDialog.Companion.newInstance
import com.ichi2.anki.dialogs.SyncErrorDialog.SyncErrorDialogListener
import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog
@@ -93,14 +130,30 @@ import com.ichi2.anki.web.CustomSyncServer
import com.ichi2.anki.web.HostNumFactory
import com.ichi2.anki.widgets.DeckAdapter
import com.ichi2.annotations.NeedsTest
-import com.ichi2.async.*
-import com.ichi2.async.CollectionTask.*
+import com.ichi2.async.Cancellable
+import com.ichi2.async.CollectionTask.CheckDatabase
+import com.ichi2.async.CollectionTask.EmptyCram
+import com.ichi2.async.CollectionTask.FindEmptyCards
+import com.ichi2.async.CollectionTask.ImportAdd
+import com.ichi2.async.CollectionTask.ImportReplace
+import com.ichi2.async.CollectionTask.LoadDeckCounts
+import com.ichi2.async.CollectionTask.RebuildCram
+import com.ichi2.async.CollectionTask.RepairCollection
+import com.ichi2.async.Connection
import com.ichi2.async.Connection.CancellableTaskListener
import com.ichi2.async.Connection.ConflictResolution
+import com.ichi2.async.TaskListener
+import com.ichi2.async.TaskListenerWithContext
+import com.ichi2.async.TaskManager
+import com.ichi2.async.deleteMedia
import com.ichi2.compat.CompatHelper.Companion.sdkVersion
-import com.ichi2.libanki.*
+import com.ichi2.libanki.ChangeManager
import com.ichi2.libanki.Collection
import com.ichi2.libanki.Collection.CheckDatabaseResult
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Utils
import com.ichi2.libanki.importer.AnkiPackageImporter
import com.ichi2.libanki.sched.AbstractDeckTreeNode
import com.ichi2.libanki.sched.DeckDueTreeNode
@@ -108,12 +161,22 @@ import com.ichi2.libanki.sched.TreeNode
import com.ichi2.libanki.sched.findInDeckTree
import com.ichi2.libanki.sync.CustomSyncServerUrlException
import com.ichi2.libanki.sync.Syncer.ConnectionResultType
+import com.ichi2.libanki.undoableOp
import com.ichi2.libanki.utils.TimeManager
import com.ichi2.themes.StyledProgressDialog
import com.ichi2.ui.BadgeDrawableBuilder
-import com.ichi2.utils.*
+import com.ichi2.utils.AdaptionUtil
+import com.ichi2.utils.Computation
+import com.ichi2.utils.HandlerUtils
+import com.ichi2.utils.ImportUtils
+import com.ichi2.utils.JSONException
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.NetworkUtils
import com.ichi2.utils.NetworkUtils.isActiveNetworkMetered
import com.ichi2.utils.Permissions.hasStorageAccessPermission
+import com.ichi2.utils.SyncStatus
+import com.ichi2.utils.Triple
+import com.ichi2.utils.VersionUtils
import com.ichi2.widget.WidgetStatus
import kotlinx.coroutines.Job
import net.ankiweb.rsdroid.BackendFactory
@@ -779,7 +842,7 @@ open class DeckPicker :
return true
}
R.id.action_new_filtered_deck -> {
- val createFilteredDeckDialog = CreateDeckDialog(this@DeckPicker, R.string.new_deck, CreateDeckDialog.DeckDialogType.FILTERED_DECK, null)
+ val createFilteredDeckDialog = CreateDeckDialog(this@DeckPicker, string.new_deck, FILTERED_DECK, null)
createFilteredDeckDialog.setOnNewDeckCreated {
// a filtered deck was created
openStudyOptions(true)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/DeckSpinnerSelection.kt b/AnkiDroid/src/main/java/com/ichi2/anki/DeckSpinnerSelection.kt
index 39e0ecfd38e4..e83bb556de9f 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/DeckSpinnerSelection.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/DeckSpinnerSelection.kt
@@ -19,7 +19,6 @@ import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
-import android.widget.Filter
import android.widget.Spinner
import android.widget.TextView
import androidx.appcompat.app.ActionBar
@@ -29,8 +28,12 @@ import com.ichi2.anki.dialogs.DeckSelectionDialog.SelectableDeck
import com.ichi2.anki.dialogs.DeckSelectionDialog.SelectableDeck.Companion.fromCollection
import com.ichi2.anki.servicelayer.DeckService.shouldShowDefaultDeck
import com.ichi2.anki.widgets.DeckDropDownAdapter
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.Decks
import com.ichi2.utils.FragmentManagerSupplier
import com.ichi2.utils.FunctionalInterfaces
import com.ichi2.utils.asFragmentManagerSupplier
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditLine.kt b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditLine.kt
index 48e3d3c2ec27..ed8324dbb607 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditLine.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditLine.kt
@@ -40,7 +40,7 @@ import com.ichi2.anki.UIUtils.getDensityAdjustedValue
import com.ichi2.ui.AnimationUtil.collapseView
import com.ichi2.ui.AnimationUtil.expandView
import com.ichi2.utils.KotlinCleanup
-import java.util.*
+import java.util.Locale
@KotlinCleanup("check which properties could be made not nullable")
class FieldEditLine : FrameLayout {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt
index 6412abc8333a..901a3b7e7f36 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt
@@ -46,7 +46,8 @@ import com.ichi2.utils.ClipboardUtil.getPlainText
import com.ichi2.utils.ClipboardUtil.hasImage
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.util.*
+import java.util.Locale
+import java.util.Objects
import kotlin.math.max
import kotlin.math.min
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/FilterSheetBottomFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/FilterSheetBottomFragment.kt
index fd56e810756b..20c43d00abd5 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/FilterSheetBottomFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/FilterSheetBottomFragment.kt
@@ -22,7 +22,10 @@ import android.os.SystemClock
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.*
+import android.widget.Button
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.core.view.isVisible
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/FilteredDeckOptions.kt b/AnkiDroid/src/main/java/com/ichi2/anki/FilteredDeckOptions.kt
index 53af56b583e4..ea830dc10a8e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/FilteredDeckOptions.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/FilteredDeckOptions.kt
@@ -1,3 +1,5 @@
+@file:Suppress("DEPRECATION") // conversion to fragments tracked in github as #5019
+
package com.ichi2.anki
/****************************************************************************************
@@ -20,7 +22,11 @@ package com.ichi2.anki
import android.content.SharedPreferences
import android.content.res.Configuration
import android.os.Bundle
-import android.preference.*
+import android.preference.CheckBoxPreference
+import android.preference.EditTextPreference
+import android.preference.ListPreference
+import android.preference.Preference
+import android.preference.PreferenceCategory
import com.ichi2.anim.ActivityTransitionAnimation
import com.ichi2.anim.ActivityTransitionAnimation.slide
import com.ichi2.anki.analytics.UsageAnalytics
@@ -284,7 +290,6 @@ class FilteredDeckOptions :
slide(this, ActivityTransitionAnimation.Direction.FADE)
}
- @Suppress("deprecation") // conversion to fragments tracked in github as #5019
override fun updateSummaries() {
mAllowCommit = false
// for all text preferences, set summary as current database value
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/IntroductionActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/IntroductionActivity.kt
index 75e64efcb388..3a4ef0f3d91e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/IntroductionActivity.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/IntroductionActivity.kt
@@ -28,7 +28,7 @@ import com.github.appintro.AppIntro
import com.github.appintro.AppIntroPageTransformerType
import com.ichi2.anki.InitialActivity.StartupFailure
import com.ichi2.anki.introduction.SetupCollectionFragment
-import com.ichi2.anki.introduction.SetupCollectionFragment.*
+import com.ichi2.anki.introduction.SetupCollectionFragment.CollectionSetupOption
import com.ichi2.anki.introduction.SetupCollectionFragment.Companion.handleCollectionSetupOption
import com.ichi2.anki.workarounds.AppLoadedFromBackupWorkaround.showedActivityFailedScreen
import com.ichi2.themes.Themes
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/LanguageUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/LanguageUtils.kt
index abab4317f178..dd60651db4e7 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/LanguageUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/LanguageUtils.kt
@@ -16,7 +16,7 @@
package com.ichi2.anki
-import java.util.*
+import java.util.Locale
object LanguageUtils {
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt b/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt
index 711deff40d1b..cea989350527 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt
@@ -27,7 +27,11 @@ import com.ichi2.libanki.exception.EmptyMediaException
import com.ichi2.utils.ContentResolverUtil.getFileName
import com.ichi2.utils.FileUtil.getFileNameAndExtension
import timber.log.Timber
-import java.io.*
+import java.io.File
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.InputStream
/**
* RegisterMediaForWebView is used for registering media in temp path,
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/MetaDB.kt b/AnkiDroid/src/main/java/com/ichi2/anki/MetaDB.kt
index baccf9fccc81..11a1af2a9e90 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/MetaDB.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/MetaDB.kt
@@ -12,8 +12,6 @@ import com.ichi2.libanki.DeckId
import com.ichi2.libanki.Sound.SoundSide
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.lang.Exception
-import java.lang.IllegalStateException
import java.util.regex.Pattern
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ModelBrowser.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ModelBrowser.kt
index 4b03a8727e42..e66a7debab11 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/ModelBrowser.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/ModelBrowser.kt
@@ -20,9 +20,18 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Pair
-import android.view.*
-import android.widget.*
+import android.view.LayoutInflater
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
+import android.widget.AdapterView
import android.widget.AdapterView.OnItemLongClickListener
+import android.widget.ArrayAdapter
+import android.widget.EditText
+import android.widget.ListView
+import android.widget.Spinner
+import android.widget.TextView
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.ActionBar
@@ -49,7 +58,6 @@ import com.ichi2.utils.KotlinCleanup
import com.ichi2.utils.displayKeyboard
import com.ichi2.widget.WidgetStatus.update
import timber.log.Timber
-import java.util.ArrayList
@KotlinCleanup("Try converting variables to be non-null wherever possible + Standard in-IDE cleanup")
@NeedsTest("add tests to ensure changes(renames & deletions) to the list of note types are visible in the UI")
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ModelFieldEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ModelFieldEditor.kt
index 3072e54fcdd3..2707993b487d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/ModelFieldEditor.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/ModelFieldEditor.kt
@@ -51,13 +51,13 @@ import com.ichi2.libanki.Collection
import com.ichi2.libanki.Model
import com.ichi2.themes.StyledProgressDialog.Companion.show
import com.ichi2.ui.FixedEditText
-import com.ichi2.utils.*
+import com.ichi2.utils.JSONArray
+import com.ichi2.utils.JSONException
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.displayKeyboard
import com.ichi2.widget.WidgetStatus
import timber.log.Timber
-import java.lang.NumberFormatException
-import java.lang.RuntimeException
-import java.util.*
-import kotlin.Throws
+import java.util.Locale
class ModelFieldEditor : AnkiActivity(), LocaleSelectionDialogHandler {
// Position of the current field selected
@@ -420,7 +420,7 @@ class ModelFieldEditor : AnkiActivity(), LocaleSelectionDialogHandler {
private suspend fun changeSortField(model: Model, idx: Int) {
withProgress(resources.getString(R.string.model_field_editor_changing)) {
- CollectionManager.withCol {
+ withCol {
Timber.d("doInBackgroundChangeSortField")
models.setSortIdx(model, idx)
save()
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/MyAccount.kt b/AnkiDroid/src/main/java/com/ichi2/anki/MyAccount.kt
index 8dfdb7561dae..5f2242b7b85a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/MyAccount.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/MyAccount.kt
@@ -39,7 +39,6 @@ import com.ichi2.utils.AdaptionUtil.isUserATestClient
import com.ichi2.utils.KotlinCleanup
import net.ankiweb.rsdroid.BackendFactory
import timber.log.Timber
-import java.lang.Exception
import java.net.UnknownHostException
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/NavigationDrawerActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/NavigationDrawerActivity.kt
index 2d83778f04e4..e720866158da 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/NavigationDrawerActivity.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/NavigationDrawerActivity.kt
@@ -40,7 +40,9 @@ import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.ClosableDrawerLayout
import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.navigation.NavigationView
-import com.ichi2.anim.ActivityTransitionAnimation.Direction.*
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.END
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.FADE
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.START
import com.ichi2.anki.dialogs.HelpDialog
import com.ichi2.anki.preferences.Preferences
import com.ichi2.anki.workarounds.FullDraggableContainerFix
@@ -50,7 +52,7 @@ import com.ichi2.utils.HandlerUtils
import com.ichi2.utils.KotlinCleanup
import net.ankiweb.rsdroid.BackendFactory
import timber.log.Timber
-import java.util.*
+import java.util.Arrays
@KotlinCleanup("lateinit if possible")
@KotlinCleanup("IDE-lint")
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt
index 2e406eded45b..d36f9c65ce4e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt
@@ -33,11 +33,21 @@ import android.text.Editable
import android.text.TextUtils
import android.text.TextWatcher
import android.util.Pair
-import android.view.*
+import android.view.ActionMode
+import android.view.KeyEvent
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
import android.view.View.OnFocusChangeListener
import android.view.ViewGroup.MarginLayoutParams
-import android.widget.*
+import android.view.WindowManager
+import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
+import android.widget.EditText
+import android.widget.ImageButton
+import android.widget.LinearLayout
+import android.widget.Spinner
+import android.widget.TextView
import androidx.annotation.CheckResult
import androidx.annotation.RequiresApi
import androidx.annotation.StringRes
@@ -49,7 +59,9 @@ import androidx.core.text.HtmlCompat
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import com.ichi2.anim.ActivityTransitionAnimation
-import com.ichi2.anim.ActivityTransitionAnimation.Direction.*
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.END
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.NONE
+import com.ichi2.anim.ActivityTransitionAnimation.Direction.START
import com.ichi2.anki.dialogs.ConfirmationDialog
import com.ichi2.anki.dialogs.DeckSelectionDialog.DeckSelectionListener
import com.ichi2.anki.dialogs.DeckSelectionDialog.SelectableDeck
@@ -61,7 +73,12 @@ import com.ichi2.anki.dialogs.tags.TagsDialogListener
import com.ichi2.anki.exception.ConfirmModSchemaException
import com.ichi2.anki.multimediacard.IMultimediaEditableNote
import com.ichi2.anki.multimediacard.activity.MultimediaEditFieldActivity
-import com.ichi2.anki.multimediacard.fields.*
+import com.ichi2.anki.multimediacard.fields.AudioRecordingField
+import com.ichi2.anki.multimediacard.fields.EFieldType
+import com.ichi2.anki.multimediacard.fields.IField
+import com.ichi2.anki.multimediacard.fields.ImageField
+import com.ichi2.anki.multimediacard.fields.MediaClipField
+import com.ichi2.anki.multimediacard.fields.TextField
import com.ichi2.anki.multimediacard.impl.MultimediaEditableNote
import com.ichi2.anki.noteeditor.CustomToolbarButton
import com.ichi2.anki.noteeditor.FieldState
@@ -80,18 +97,34 @@ import com.ichi2.annotations.NeedsTest
import com.ichi2.compat.Compat
import com.ichi2.compat.CompatHelper
import com.ichi2.compat.CompatHelper.Companion.getParcelableExtraCompat
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.DeckId
import com.ichi2.libanki.Decks.Companion.CURRENT_DECK
+import com.ichi2.libanki.Model
+import com.ichi2.libanki.Models
import com.ichi2.libanki.Models.Companion.NOT_FOUND_NOTE_TYPE
+import com.ichi2.libanki.Note
import com.ichi2.libanki.Note.ClozeUtils
import com.ichi2.libanki.Note.DupeOrEmpty
+import com.ichi2.libanki.NoteTypeId
+import com.ichi2.libanki.Utils
import com.ichi2.themes.Themes
-import com.ichi2.utils.*
+import com.ichi2.utils.AdaptionUtil
+import com.ichi2.utils.HashUtil
+import com.ichi2.utils.JSONArray
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KeyUtils
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.MapUtil
+import com.ichi2.utils.NoteFieldDecorator
+import com.ichi2.utils.TextViewUtil
import com.ichi2.widget.WidgetStatus
import net.ankiweb.rsdroid.BackendFactory
import timber.log.Timber
-import java.util.*
+import java.util.LinkedList
+import java.util.Locale
import java.util.function.Consumer
import kotlin.math.max
import kotlin.math.min
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/OnboardingUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/OnboardingUtils.kt
index cfc59ba1dfe8..4160960d6c85 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/OnboardingUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/OnboardingUtils.kt
@@ -22,8 +22,7 @@ import androidx.annotation.VisibleForTesting
import androidx.core.content.edit
import com.ichi2.anki.IntroductionActivity.Companion.INTRODUCTION_SLIDES_SHOWN
import timber.log.Timber
-import java.util.*
-import kotlin.collections.HashSet
+import java.util.BitSet
class OnboardingUtils {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ReadText.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ReadText.kt
index f8622a7e9ce1..d7a19acc1a87 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/ReadText.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/ReadText.kt
@@ -35,7 +35,7 @@ import com.ichi2.utils.HandlerUtils.postDelayedOnNewHandler
import com.ichi2.utils.iconAttr
import timber.log.Timber
import java.lang.ref.WeakReference
-import java.util.*
+import java.util.Locale
object ReadText {
@get:VisibleForTesting(otherwise = VisibleForTesting.NONE)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt
index 031e4915f67f..e78ee85eb1ea 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt
@@ -33,11 +33,27 @@ import android.os.Message
import android.os.Parcelable
import android.text.SpannableString
import android.text.style.UnderlineSpan
-import android.view.*
+import android.view.KeyEvent
+import android.view.Menu
+import android.view.MenuItem
+import android.view.MotionEvent
+import android.view.SubMenu
+import android.view.View
+import android.view.ViewGroup
import android.webkit.JavascriptInterface
import android.webkit.WebView
-import android.widget.*
-import androidx.annotation.*
+import android.widget.FrameLayout
+import android.widget.ImageButton
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.PopupMenu
+import android.widget.TextView
+import androidx.annotation.CheckResult
+import androidx.annotation.DrawableRes
+import androidx.annotation.IdRes
+import androidx.annotation.MenuRes
+import androidx.annotation.PluralsRes
+import androidx.annotation.VisibleForTesting
import androidx.appcompat.view.menu.MenuBuilder
import androidx.appcompat.widget.Toolbar
import androidx.appcompat.widget.TooltipCompat
@@ -64,20 +80,33 @@ import com.ichi2.anki.dialogs.RescheduleDialog.rescheduleSingleCard
import com.ichi2.anki.multimediacard.AudioView
import com.ichi2.anki.multimediacard.AudioView.Companion.createRecorderInstance
import com.ichi2.anki.multimediacard.AudioView.Companion.generateTempAudioFile
-import com.ichi2.anki.reviewer.*
+import com.ichi2.anki.reviewer.ActionButtons
import com.ichi2.anki.reviewer.AnswerButtons.Companion.getBackgroundColors
import com.ichi2.anki.reviewer.AnswerButtons.Companion.getTextColors
+import com.ichi2.anki.reviewer.AnswerTimer
+import com.ichi2.anki.reviewer.AutomaticAnswerAction
+import com.ichi2.anki.reviewer.CardMarker
import com.ichi2.anki.reviewer.CardMarker.FlagDef
+import com.ichi2.anki.reviewer.FullScreenMode
import com.ichi2.anki.reviewer.FullScreenMode.Companion.fromPreference
import com.ichi2.anki.reviewer.FullScreenMode.Companion.isFullScreenReview
+import com.ichi2.anki.reviewer.PeripheralKeymap
+import com.ichi2.anki.reviewer.ReviewerUi
import com.ichi2.anki.servicelayer.NoteService.isMarked
import com.ichi2.anki.servicelayer.NoteService.toggleMark
-import com.ichi2.anki.servicelayer.SchedulerService.*
+import com.ichi2.anki.servicelayer.SchedulerService.GetCard
+import com.ichi2.anki.servicelayer.SchedulerService.NextCard
+import com.ichi2.anki.servicelayer.SchedulerService.RescheduleCards
+import com.ichi2.anki.servicelayer.SchedulerService.ResetCards
import com.ichi2.anki.servicelayer.TaskListenerBuilder
import com.ichi2.anki.workarounds.FirefoxSnackbarWorkaround.handledLaunchFromWebBrowser
import com.ichi2.annotations.NeedsTest
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
+import com.ichi2.libanki.CardId
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Utils
import com.ichi2.libanki.sched.Counts
import com.ichi2.libanki.utils.TimeManager
import com.ichi2.themes.Themes
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt
index 1fdfed3b86f1..f8139a151a7d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt
@@ -18,11 +18,14 @@
package com.ichi2.anki
import android.app.DownloadManager
-import android.content.*
+import android.content.Context
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
-import android.webkit.*
+import android.webkit.WebResourceError
+import android.webkit.WebResourceRequest
+import android.webkit.WebView
+import android.webkit.WebViewClient
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksDownloadFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksDownloadFragment.kt
index e9dabf4c06e1..40ca7ac03fd0 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksDownloadFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksDownloadFragment.kt
@@ -18,7 +18,11 @@
package com.ichi2.anki
import android.app.DownloadManager
-import android.content.*
+import android.content.ActivityNotFoundException
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
import android.net.Uri
import android.os.Bundle
import android.os.Environment
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/StudyOptionsFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/StudyOptionsFragment.kt
index 259ffde2cf3f..d42eca51aaef 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/StudyOptionsFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/StudyOptionsFragment.kt
@@ -39,7 +39,9 @@ import com.ichi2.anki.servicelayer.ComputeResult
import com.ichi2.anki.servicelayer.UndoService.Undo
import com.ichi2.anki.snackbar.showSnackbar
import com.ichi2.annotations.NeedsTest
-import com.ichi2.async.CollectionTask.*
+import com.ichi2.async.CollectionTask.EmptyCram
+import com.ichi2.async.CollectionTask.RebuildCram
+import com.ichi2.async.CollectionTask.UpdateValuesFromDeck
import com.ichi2.async.TaskListener
import com.ichi2.async.TaskManager
import com.ichi2.libanki.Collection
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Sync.kt b/AnkiDroid/src/main/java/com/ichi2/anki/Sync.kt
index 4d7d899f6195..0144bde09e57 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/Sync.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/Sync.kt
@@ -37,7 +37,11 @@ import com.ichi2.anki.dialogs.SyncErrorDialog
import com.ichi2.anki.web.HostNumFactory
import com.ichi2.async.Connection
import com.ichi2.libanki.createBackup
-import com.ichi2.libanki.sync.*
+import com.ichi2.libanki.sync.fullDownload
+import com.ichi2.libanki.sync.fullUpload
+import com.ichi2.libanki.sync.syncCollection
+import com.ichi2.libanki.sync.syncLogin
+import com.ichi2.libanki.sync.syncMedia
import net.ankiweb.rsdroid.Backend
import net.ankiweb.rsdroid.exceptions.BackendSyncException
import timber.log.Timber
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/TtsParser.kt b/AnkiDroid/src/main/java/com/ichi2/anki/TtsParser.kt
index 4aa2db581a2b..2603febf590c 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/TtsParser.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/TtsParser.kt
@@ -5,7 +5,6 @@ import com.ichi2.libanki.TTSTag
import com.ichi2.libanki.template.TemplateFilters
import org.jsoup.Jsoup
import org.jsoup.nodes.Element
-import java.util.*
/**
* Parse card sides, extracting text snippets that should be read using a text-to-speech engine.
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/UIUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/UIUtils.kt
index a676bb5c8ac7..ac0b1f1b7c68 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/UIUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/UIUtils.kt
@@ -7,7 +7,7 @@ import android.util.DisplayMetrics
import android.widget.Toast
import androidx.annotation.StringRes
import com.ichi2.libanki.utils.Time
-import java.util.*
+import java.util.Calendar
object UIUtils {
fun showThemedToast(context: Context?, text: String?, shortLength: Boolean) {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Whiteboard.kt b/AnkiDroid/src/main/java/com/ichi2/anki/Whiteboard.kt
index 80a7e9ff588b..f7d0dc8ef8ca 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/Whiteboard.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/Whiteboard.kt
@@ -19,7 +19,16 @@
package com.ichi2.anki
import android.annotation.SuppressLint
-import android.graphics.*
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.graphics.Color
+import android.graphics.Paint
+import android.graphics.Path
+import android.graphics.PathMeasure
+import android.graphics.Point
+import android.graphics.Rect
+import android.graphics.RectF
+import android.graphics.Region
import android.graphics.drawable.VectorDrawable
import android.net.Uri
import android.view.MotionEvent
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/analytics/UsageAnalytics.kt b/AnkiDroid/src/main/java/com/ichi2/anki/analytics/UsageAnalytics.kt
index 4b1eeb6ec330..caea5f4417dd 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/analytics/UsageAnalytics.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/analytics/UsageAnalytics.kt
@@ -34,7 +34,6 @@ import com.ichi2.utils.WebViewDebugging.hasSetDataDirectory
import org.acra.ACRA
import org.acra.util.Installation
import timber.log.Timber
-import java.lang.RuntimeException
@KotlinCleanup("see if we can make variables lazy, or properties without the `s` prefix")
object UsageAnalytics {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/CardHtml.kt b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/CardHtml.kt
index eac50c3892bf..ab220b8079a2 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/CardHtml.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/CardHtml.kt
@@ -20,7 +20,11 @@ import android.content.Context
import com.ichi2.anki.R
import com.ichi2.anki.TtsParser
import com.ichi2.anki.cardviewer.CardAppearance.Companion.hasUserDefinedNightMode
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
+import com.ichi2.libanki.Media
+import com.ichi2.libanki.Sound
+import com.ichi2.libanki.SoundOrVideoTag
+import com.ichi2.libanki.TTSTag
import com.ichi2.libanki.template.MathJax
import com.ichi2.themes.HtmlColors
import com.ichi2.themes.Themes.currentTheme
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/CardTemplate.kt b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/CardTemplate.kt
index 497cf4accbaa..a24c5d60b098 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/CardTemplate.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/CardTemplate.kt
@@ -16,7 +16,6 @@
package com.ichi2.anki.cardviewer
import androidx.annotation.CheckResult
-import java.lang.IllegalStateException
class CardTemplate(template: String) {
private var mPreStyle: String? = null
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/ViewerCommand.kt b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/ViewerCommand.kt
index 2469f882219f..7a73db4a9a34 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/ViewerCommand.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/ViewerCommand.kt
@@ -28,7 +28,7 @@ import com.ichi2.anki.reviewer.CardSide
import com.ichi2.anki.reviewer.MappableBinding
import com.ichi2.anki.reviewer.MappableBinding.Companion.fromPreference
import com.ichi2.anki.reviewer.MappableBinding.Companion.toPreferenceString
-import java.util.*
+import java.util.Arrays
import java.util.function.BiFunction
import java.util.stream.Collectors
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/SystemContextMenu.kt b/AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/SystemContextMenu.kt
index ebae2b7915bd..f6a189861c2b 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/SystemContextMenu.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/contextmenu/SystemContextMenu.kt
@@ -20,7 +20,6 @@ import android.content.Context
import android.content.pm.PackageManager
import androidx.annotation.CheckResult
import timber.log.Timber
-import java.lang.Exception
abstract class SystemContextMenu(private val context: Context) {
/** We use an activity alias as the name so we can disable the context menu without disabling the activity */
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DatabaseErrorDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DatabaseErrorDialog.kt
index 97c3cac7bb47..3161a38c8e61 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DatabaseErrorDialog.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DatabaseErrorDialog.kt
@@ -27,7 +27,11 @@ import com.afollestad.materialdialogs.WhichButton
import com.afollestad.materialdialogs.actions.setActionButtonEnabled
import com.afollestad.materialdialogs.list.listItems
import com.afollestad.materialdialogs.list.listItemsSingleChoice
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.BackupManager
+import com.ichi2.anki.CollectionHelper
+import com.ichi2.anki.DeckPicker
+import com.ichi2.anki.R
import com.ichi2.async.Connection
import com.ichi2.libanki.Consts
import com.ichi2.libanki.utils.TimeManager
@@ -40,7 +44,7 @@ import timber.log.Timber
import java.io.File
import java.io.IOException
import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Locale
class DatabaseErrorDialog : AsyncDialogFragment() {
private lateinit var mRepairValues: IntArray
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckPickerContextMenu.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckPickerContextMenu.kt
index 7dbb3256376c..1fa9645f4278 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckPickerContextMenu.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckPickerContextMenu.kt
@@ -23,7 +23,11 @@ import androidx.fragment.app.Fragment
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItems
import com.ichi2.anim.ActivityTransitionAnimation
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.CardBrowser
+import com.ichi2.anki.DeckPicker
+import com.ichi2.anki.NavigationDrawerActivity
+import com.ichi2.anki.R
import com.ichi2.anki.StudyOptionsFragment.StudyOptionsListener
import com.ichi2.anki.analytics.AnalyticsDialogFragment
import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckSelectionDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckSelectionDialog.kt
index 4fdb43c5eb99..e12b45d50eca 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckSelectionDialog.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckSelectionDialog.kt
@@ -39,8 +39,11 @@ import com.ichi2.anki.analytics.AnalyticsDialogFragment
import com.ichi2.anki.dialogs.DeckSelectionDialog.DecksArrayAdapter.DecksFilter
import com.ichi2.anki.dialogs.DeckSelectionDialog.SelectableDeck
import com.ichi2.annotations.NeedsTest
-import com.ichi2.libanki.*
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.CollectionGetter
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.DeckManager
import com.ichi2.libanki.backend.exception.DeckRenameException
import com.ichi2.libanki.stats.Stats
import com.ichi2.utils.DeckNameComparator
@@ -50,7 +53,7 @@ import com.ichi2.utils.TypedFilter
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize
import timber.log.Timber
-import java.util.*
+import java.util.Locale
import java.util.Objects.requireNonNull
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DialogHandler.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DialogHandler.kt
index 3eb3deeaaca9..3173c4ac0900 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DialogHandler.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DialogHandler.kt
@@ -19,7 +19,12 @@ package com.ichi2.anki.dialogs
import android.os.Handler
import android.os.Message
import androidx.annotation.VisibleForTesting
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.CollectionHelper
+import com.ichi2.anki.DeckPicker
+import com.ichi2.anki.NotificationChannels
+import com.ichi2.anki.R
import com.ichi2.anki.analytics.UsageAnalytics
import com.ichi2.libanki.utils.TimeManager
import com.ichi2.utils.HandlerUtils.getDefaultLooper
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/HelpDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/HelpDialog.kt
index 033bdce9d431..8745a2d058fe 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/HelpDialog.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/HelpDialog.kt
@@ -36,7 +36,6 @@ import com.ichi2.utils.IntentUtil.canOpenIntent
import com.ichi2.utils.IntentUtil.tryOpenIntent
import com.ichi2.utils.KotlinCleanup
import java.io.Serializable
-import java.util.*
object HelpDialog {
private fun openManual(ankiActivity: AnkiActivity) {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/InsertFieldDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/InsertFieldDialog.kt
index 055041275c6c..e7818b473af2 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/InsertFieldDialog.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/InsertFieldDialog.kt
@@ -26,7 +26,6 @@ import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.customListAdapter
import com.ichi2.anki.CardTemplateEditor
import com.ichi2.anki.R
-import java.util.*
/**
* Dialog fragment used to show the fields that the user can insert in the card editor. This
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/LocaleSelectionDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/LocaleSelectionDialog.kt
index 1302c47ecf07..8f4ab4489b65 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/LocaleSelectionDialog.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/LocaleSelectionDialog.kt
@@ -38,7 +38,7 @@ import com.ichi2.anki.dialogs.LocaleSelectionDialog.LocaleListAdapter.TextViewHo
import com.ichi2.ui.RecyclerSingleTouchAdapter
import com.ichi2.utils.DisplayUtils.resizeWhenSoftInputShown
import com.ichi2.utils.TypedFilter
-import java.util.*
+import java.util.Locale
/** Locale selection dialog. Note: this must be dismissed onDestroy if not called from an activity implementing LocaleSelectionDialogHandler */
class LocaleSelectionDialog : AnalyticsDialogFragment() {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/MediaCheckDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/MediaCheckDialog.kt
index 90eca9b79758..5bb9bea21b4d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/MediaCheckDialog.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/MediaCheckDialog.kt
@@ -13,7 +13,6 @@ import android.widget.TextView
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import com.ichi2.anki.R
-import java.util.*
class MediaCheckDialog : AsyncDialogFragment() {
interface MediaCheckDialogListener {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/RecursivePictureMenu.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/RecursivePictureMenu.kt
index 064931d1325d..8d6075e78a8f 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/RecursivePictureMenu.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/RecursivePictureMenu.kt
@@ -33,7 +33,6 @@ import com.afollestad.materialdialogs.list.getRecyclerView
import com.ichi2.anki.AnkiActivity
import com.ichi2.anki.R
import com.ichi2.anki.analytics.UsageAnalytics
-import java.util.*
/** A Dialog displaying The various options for "Help" in a nested structure */
class RecursivePictureMenu : DialogFragment() {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ScopedStorageMigrationDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ScopedStorageMigrationDialog.kt
index d210021e8b71..e59b03a3c180 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ScopedStorageMigrationDialog.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ScopedStorageMigrationDialog.kt
@@ -27,7 +27,10 @@ import android.widget.CheckBox
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.utils.MDUtil
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.R
+import com.ichi2.anki.UIUtils
import com.ichi2.anki.preferences.Preferences
import com.ichi2.themes.Themes
import com.ichi2.ui.FixedTextView
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyDialog.kt
index e96d1a36fbdc..ce7a8fecfda4 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyDialog.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/customstudy/CustomStudyDialog.kt
@@ -36,11 +36,26 @@ import com.afollestad.materialdialogs.WhichButton
import com.afollestad.materialdialogs.actions.getActionButton
import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.list.listItems
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.CrashReportService
+import com.ichi2.anki.DeckOptions
+import com.ichi2.anki.R
+import com.ichi2.anki.Reviewer
import com.ichi2.anki.UIUtils.showThemedToast
import com.ichi2.anki.analytics.AnalyticsDialogFragment
-import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuConfiguration.*
-import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.*
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuConfiguration.EMPTY_SCHEDULE
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuConfiguration.LIMITS
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuConfiguration.STANDARD
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.DECK_OPTIONS
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.MORE_OPTIONS
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.STUDY_AHEAD
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.STUDY_FORGOT
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.STUDY_NEW
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.STUDY_PREVIEW
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.STUDY_RANDOM
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.STUDY_REV
+import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.ContextMenuOption.STUDY_TAGS
import com.ichi2.anki.dialogs.tags.TagsDialog
import com.ichi2.anki.dialogs.tags.TagsDialogListener
import com.ichi2.async.CollectionTask.RebuildCram
@@ -56,7 +71,7 @@ import com.ichi2.utils.JSONArray
import com.ichi2.utils.JSONObject
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.util.*
+import java.util.Locale
class CustomStudyDialog(private val collection: Collection, private val customStudyListener: CustomStudyListener?) : AnalyticsDialogFragment(), TagsDialogListener {
interface CustomStudyListener : CreateCustomStudySessionListener.Callback {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsArrayAdapter.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsArrayAdapter.kt
index 028d11ba8f87..dae0411f86e8 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsArrayAdapter.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsArrayAdapter.kt
@@ -19,16 +19,23 @@ import android.content.res.Resources
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.*
+import android.widget.Filterable
+import android.widget.ImageButton
+import android.widget.LinearLayout
+import android.widget.TextView
import androidx.annotation.VisibleForTesting
import androidx.recyclerview.widget.RecyclerView
import com.ichi2.anki.R
import com.ichi2.annotations.NeedsTest
import com.ichi2.ui.CheckBoxTriStates
-import com.ichi2.ui.CheckBoxTriStates.State.*
+import com.ichi2.ui.CheckBoxTriStates.State.CHECKED
+import com.ichi2.ui.CheckBoxTriStates.State.INDETERMINATE
+import com.ichi2.ui.CheckBoxTriStates.State.UNCHECKED
import com.ichi2.utils.TagsUtil
import com.ichi2.utils.TypedFilter
-import java.util.*
+import java.util.Locale
+import java.util.Stack
+import java.util.TreeSet
/**
* @param tags A reference to the {@link TagsList} passed.
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsDialogListener.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsDialogListener.kt
index 82aecb80a5b8..b7010f964932 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsDialogListener.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsDialogListener.kt
@@ -20,7 +20,6 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentResultListener
import com.ichi2.utils.KotlinCleanup
-import java.util.ArrayList
@KotlinCleanup("make selectedTags and indeterminateTags non-null")
interface TagsDialogListener {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsList.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsList.kt
index f83f569f5ef2..b1eecf5bd11a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsList.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/tags/TagsList.kt
@@ -21,7 +21,7 @@ import com.ichi2.utils.TagsUtil.getTagAncestors
import com.ichi2.utils.TagsUtil.getTagRoot
import com.ichi2.utils.UniqueArrayList
import com.ichi2.utils.UniqueArrayList.Companion.from
-import java.util.*
+import java.util.TreeSet
/**
* A container class that keeps track of tags and their status, handling of tags are done in a case insensitive matter
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/exception/ConfirmModSchemaException.kt b/AnkiDroid/src/main/java/com/ichi2/anki/exception/ConfirmModSchemaException.kt
index 296750f99286..7f20b2901088 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/exception/ConfirmModSchemaException.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/exception/ConfirmModSchemaException.kt
@@ -17,7 +17,6 @@
package com.ichi2.anki.exception
import timber.log.Timber
-import java.lang.Exception
class ConfirmModSchemaException : Exception() {
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/exception/ImportExportException.kt b/AnkiDroid/src/main/java/com/ichi2/anki/exception/ImportExportException.kt
index 082f1f691774..6d54e16fde13 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/exception/ImportExportException.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/exception/ImportExportException.kt
@@ -1,6 +1,4 @@
//noinspection MissingCopyrightHeader #8659
package com.ichi2.anki.exception
-import java.lang.Exception
-
class ImportExportException(msg: String?) : Exception(msg)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/exception/ManuallyReportedException.kt b/AnkiDroid/src/main/java/com/ichi2/anki/exception/ManuallyReportedException.kt
index 27b4c67d2edf..e78a86856430 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/exception/ManuallyReportedException.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/exception/ManuallyReportedException.kt
@@ -16,7 +16,5 @@
package com.ichi2.anki.exception
-import java.lang.RuntimeException
-
/** An exception for manual reporting to ACRA */
class ManuallyReportedException(message: String?) : RuntimeException(message)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/exception/MediaSyncException.kt b/AnkiDroid/src/main/java/com/ichi2/anki/exception/MediaSyncException.kt
index cf515562f472..dcbf7977aea3 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/exception/MediaSyncException.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/exception/MediaSyncException.kt
@@ -1,6 +1,4 @@
//noinspection MissingCopyrightHeader #8659
package com.ichi2.anki.exception
-import java.lang.Exception
-
class MediaSyncException(msg: String?) : Exception(msg)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/exception/UnknownHttpResponseException.kt b/AnkiDroid/src/main/java/com/ichi2/anki/exception/UnknownHttpResponseException.kt
index 4797513fb5b0..282518343d69 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/exception/UnknownHttpResponseException.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/exception/UnknownHttpResponseException.kt
@@ -16,6 +16,4 @@
package com.ichi2.anki.exception
-import java.lang.Exception
-
class UnknownHttpResponseException(message: String?, val responseCode: Int) : Exception(message)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/exception/UserSubmittedException.kt b/AnkiDroid/src/main/java/com/ichi2/anki/exception/UserSubmittedException.kt
index eeab3e0d8997..d23f6aa9192f 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/exception/UserSubmittedException.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/exception/UserSubmittedException.kt
@@ -1,7 +1,5 @@
//noinspection MissingCopyrightHeader #8659
package com.ichi2.anki.exception
-import java.lang.RuntimeException
-
/** An exception sent by user for sending report manually */
class UserSubmittedException(message: String?) : RuntimeException(message)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/export/ActivityExportingDelegate.kt b/AnkiDroid/src/main/java/com/ichi2/anki/export/ActivityExportingDelegate.kt
index 086aed249c7c..0717d6722d3e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/export/ActivityExportingDelegate.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/export/ActivityExportingDelegate.kt
@@ -27,10 +27,15 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.app.ShareCompat.IntentBuilder
import androidx.core.content.FileProvider
import com.google.android.material.snackbar.Snackbar
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.BuildConfig
+import com.ichi2.anki.R
import com.ichi2.anki.UIUtils.showThemedToast
import com.ichi2.anki.dialogs.ExportCompleteDialog.ExportCompleteDialogListener
import com.ichi2.anki.dialogs.ExportDialog.ExportDialogListener
+import com.ichi2.anki.exportApkg
+import com.ichi2.anki.exportColpkg
+import com.ichi2.anki.launchCatchingTask
import com.ichi2.anki.snackbar.showSnackbar
import com.ichi2.async.CollectionTask.ExportApkg
import com.ichi2.async.TaskManager
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/introduction/SetupCollectionFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/introduction/SetupCollectionFragment.kt
index 4242ed6de028..a0f5a492b8ed 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/introduction/SetupCollectionFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/introduction/SetupCollectionFragment.kt
@@ -43,7 +43,8 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.setFragmentResult
import com.ichi2.anki.R
-import com.ichi2.anki.introduction.SetupCollectionFragment.CollectionSetupOption.*
+import com.ichi2.anki.introduction.SetupCollectionFragment.CollectionSetupOption.DeckPickerWithNewCollection
+import com.ichi2.anki.introduction.SetupCollectionFragment.CollectionSetupOption.SyncFromExistingAccount
/**
* Allows a user multiple choices for setting up the collection:
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/AddonData.kt b/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/AddonData.kt
index 8c5d2316a9e5..350b8e5a8e6d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/AddonData.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/AddonData.kt
@@ -28,7 +28,6 @@ import timber.log.Timber
import java.io.File
import java.io.IOException
import java.net.URL
-import kotlin.jvm.Throws
/**
* When package.json fetched from https://registry.npmjs.org/some-addon/latest,
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/NpmUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/NpmUtils.kt
index 2e91797191fb..263cbeaf80e9 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/NpmUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/NpmUtils.kt
@@ -18,7 +18,7 @@ package com.ichi2.anki.jsaddons
import timber.log.Timber
import java.net.URLEncoder
-import java.util.*
+import java.util.Locale
import java.util.regex.Pattern
object NpmUtils {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/TgzPackageExtract.kt b/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/TgzPackageExtract.kt
index 2a447e0b40fc..e8c1d865fbfc 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/TgzPackageExtract.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/jsaddons/TgzPackageExtract.kt
@@ -45,7 +45,12 @@ import org.apache.commons.compress.archivers.ArchiveStreamFactory
import org.apache.commons.compress.archivers.tar.TarArchiveEntry
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream
import timber.log.Timber
-import java.io.*
+import java.io.BufferedOutputStream
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
import java.util.zip.GZIPInputStream
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/model/Directory.kt b/AnkiDroid/src/main/java/com/ichi2/anki/model/Directory.kt
index 5359c38873d2..ecb8a1c6bd3e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/model/Directory.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/model/Directory.kt
@@ -20,7 +20,6 @@ import com.ichi2.compat.CompatHelper
import java.io.File
import java.io.IOException
import java.nio.file.NotDirectoryException
-import kotlin.jvm.Throws
/**
* A directory which is assumed to exist (existed when class was instantiated)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/AudioPlayer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/AudioPlayer.kt
index 166487935796..b489100b88b6 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/AudioPlayer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/AudioPlayer.kt
@@ -19,7 +19,8 @@
*/
package com.ichi2.anki.multimediacard
-import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.*
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.INITIALIZED
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.STOPPED
import timber.log.Timber
import java.io.IOException
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/MediaPlayer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/MediaPlayer.kt
index 97251266bebd..1854f722da82 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/MediaPlayer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/MediaPlayer.kt
@@ -22,7 +22,16 @@ import android.media.MediaDataSource
import android.media.MediaPlayer
import android.media.MediaPlayer.OnPreparedListener
import android.net.Uri
-import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.*
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.END
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.ERROR
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.IDLE
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.INITIALIZED
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.PAUSED
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.PLAYBACK_COMPLETE
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.PREPARED
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.PREPARING
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.STARTED
+import com.ichi2.anki.multimediacard.MediaPlayer.MediaPlayerState.STOPPED
import java.io.FileDescriptor
import java.net.HttpCookie
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/activity/MultimediaEditFieldActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/activity/MultimediaEditFieldActivity.kt
index eeeb2f4d827e..8cad5b6f97d3 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/activity/MultimediaEditFieldActivity.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/activity/MultimediaEditFieldActivity.kt
@@ -33,7 +33,17 @@ import com.ichi2.anki.AnkiActivity
import com.ichi2.anki.R
import com.ichi2.anki.UIUtils
import com.ichi2.anki.multimediacard.IMultimediaEditableNote
-import com.ichi2.anki.multimediacard.fields.*
+import com.ichi2.anki.multimediacard.fields.AudioRecordingField
+import com.ichi2.anki.multimediacard.fields.BasicAudioRecordingFieldController
+import com.ichi2.anki.multimediacard.fields.BasicImageFieldController
+import com.ichi2.anki.multimediacard.fields.BasicMediaClipFieldController
+import com.ichi2.anki.multimediacard.fields.BasicTextFieldController
+import com.ichi2.anki.multimediacard.fields.EFieldType
+import com.ichi2.anki.multimediacard.fields.IField
+import com.ichi2.anki.multimediacard.fields.IFieldController
+import com.ichi2.anki.multimediacard.fields.ImageField
+import com.ichi2.anki.multimediacard.fields.MediaClipField
+import com.ichi2.anki.multimediacard.fields.TextField
import com.ichi2.compat.CompatHelper.Companion.getSerializableExtraCompat
import com.ichi2.utils.CheckCameraPermission
import com.ichi2.utils.KotlinCleanup
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/activity/PickStringDialogFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/activity/PickStringDialogFragment.kt
index 84b0fbdb47bf..1a6e15379b03 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/activity/PickStringDialogFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/activity/PickStringDialogFragment.kt
@@ -27,7 +27,6 @@ import android.os.Bundle
import android.widget.ArrayAdapter
import androidx.fragment.app.DialogFragment
import com.ichi2.utils.KotlinCleanup
-import java.util.*
/**
* This dialog fragment support a choice from a list of strings.
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/fields/BasicImageFieldController.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/fields/BasicImageFieldController.kt
index bdb88ed0837d..75015ecb81fc 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/fields/BasicImageFieldController.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/fields/BasicImageFieldController.kt
@@ -52,7 +52,10 @@ import androidx.core.content.ContentResolverCompat
import androidx.core.content.FileProvider
import androidx.core.content.getSystemService
import com.afollestad.materialdialogs.MaterialDialog
-import com.canhub.cropper.*
+import com.canhub.cropper.CropImageContract
+import com.canhub.cropper.CropImageContractOptions
+import com.canhub.cropper.CropImageOptions
+import com.canhub.cropper.CropImageView
import com.ichi2.anki.AnkiDroidApp
import com.ichi2.anki.CrashReportService
import com.ichi2.anki.DrawingActivity
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/impl/MultimediaEditableNote.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/impl/MultimediaEditableNote.kt
index 0e8d5fc290dc..8a307ab274b7 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/impl/MultimediaEditableNote.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/impl/MultimediaEditableNote.kt
@@ -23,7 +23,6 @@ import com.ichi2.anki.multimediacard.IMultimediaEditableNote
import com.ichi2.anki.multimediacard.fields.IField
import com.ichi2.libanki.NoteTypeId
import org.acra.util.IOUtils
-import java.util.*
/**
* Implementation of the editable note.
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/language/LanguageListerBase.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/language/LanguageListerBase.kt
index 1c955456e77a..106c66202c05 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/language/LanguageListerBase.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/language/LanguageListerBase.kt
@@ -19,7 +19,7 @@
package com.ichi2.anki.multimediacard.language
-import java.util.*
+import java.util.Collections
/**
* This is some sort of tool, which translates from languages in a user readable form to a code, used to invoke some
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/language/LanguageListerBeolingus.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/language/LanguageListerBeolingus.kt
index b5189dcddbe2..dfc0692379ed 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/language/LanguageListerBeolingus.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/language/LanguageListerBeolingus.kt
@@ -18,7 +18,7 @@
****************************************************************************************/
package com.ichi2.anki.multimediacard.language
-import java.util.*
+import java.util.Locale
/**
* This one lister services in beolingus. It is used to load pronunciation.
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/CustomToolbarButton.kt b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/CustomToolbarButton.kt
index dc302b97ada0..990f6967128f 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/CustomToolbarButton.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/CustomToolbarButton.kt
@@ -20,7 +20,6 @@ import com.ichi2.anki.noteeditor.Toolbar.TextWrapper
import com.ichi2.libanki.Consts
import com.ichi2.utils.HashUtil.HashSetInit
import timber.log.Timber
-import java.util.*
typealias ButtonText = String
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/FieldState.kt b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/FieldState.kt
index 319baa412c33..0ee6a0882acf 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/FieldState.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/FieldState.kt
@@ -29,7 +29,6 @@ import com.ichi2.libanki.Models
import com.ichi2.utils.JSONObject
import com.ichi2.utils.KotlinCleanup
import com.ichi2.utils.MapUtil.getKeyByValue
-import java.util.*
/** Responsible for recreating EditFieldLines after NoteEditor operations
* This primarily exists so we can use saved instance state to repopulate the dynamically created FieldEditLine
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt
index 68d2b38ecca2..2e63327db903 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt
@@ -26,7 +26,12 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.util.DisplayMetrics
-import android.view.*
+import android.view.ContextThemeWrapper
+import android.view.Gravity
+import android.view.KeyEvent
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.LinearLayout
import androidx.annotation.ColorInt
@@ -44,7 +49,6 @@ import com.ichi2.libanki.Utils
import com.ichi2.utils.ViewGroupUtils
import com.ichi2.utils.ViewGroupUtils.getAllChildrenRecursive
import timber.log.Timber
-import java.util.*
import kotlin.math.ceil
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/pages/AnkiServer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/pages/AnkiServer.kt
index 1e55b2ea0f36..0d197a3f913a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/pages/AnkiServer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/pages/AnkiServer.kt
@@ -20,9 +20,14 @@ package com.ichi2.anki.pages
import com.ichi2.anki.CollectionManager.withCol
import com.ichi2.anki.importCsvRaw
import com.ichi2.anki.runBlockingCatching
-import com.ichi2.libanki.*
+import com.ichi2.libanki.getDeckNamesRaw
+import com.ichi2.libanki.getFieldNamesRaw
+import com.ichi2.libanki.getNotetypeNamesRaw
import com.ichi2.libanki.importer.getCsvMetadataRaw
-import com.ichi2.libanki.stats.*
+import com.ichi2.libanki.stats.cardStatsRaw
+import com.ichi2.libanki.stats.getGraphPreferencesRaw
+import com.ichi2.libanki.stats.graphsRaw
+import com.ichi2.libanki.stats.setGraphPreferencesRaw
import fi.iki.elonen.NanoHTTPD
import timber.log.Timber
import java.io.ByteArrayInputStream
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/pages/PagesActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/pages/PagesActivity.kt
index 04d93fdc3806..addbf74b86de 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/pages/PagesActivity.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/pages/PagesActivity.kt
@@ -20,7 +20,9 @@ import android.content.Intent
import android.os.Bundle
import android.webkit.WebView
import androidx.fragment.app.commit
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.BuildConfig
+import com.ichi2.anki.R
import com.ichi2.utils.getInstanceFromClassName
import timber.log.Timber
import java.net.ServerSocket
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AboutFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AboutFragment.kt
index f008383117b1..444f4c16d11d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AboutFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AboutFragment.kt
@@ -31,7 +31,11 @@ import android.widget.TextView
import androidx.core.text.parseAsHtml
import androidx.fragment.app.Fragment
import com.afollestad.materialdialogs.MaterialDialog
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.Info
+import com.ichi2.anki.R
+import com.ichi2.anki.UIUtils
import com.ichi2.anki.servicelayer.DebugInfoService
import com.ichi2.utils.IntentUtil
import com.ichi2.utils.VersionUtils.appName
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AdvancedSettingsFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AdvancedSettingsFragment.kt
index f1dffd21029b..6ceb55b973f8 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AdvancedSettingsFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AdvancedSettingsFragment.kt
@@ -24,9 +24,15 @@ import androidx.preference.EditTextPreference
import androidx.preference.Preference
import androidx.preference.SwitchPreference
import com.afollestad.materialdialogs.MaterialDialog
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.BuildConfig
+import com.ichi2.anki.CollectionHelper
import com.ichi2.anki.CollectionManager.withCol
+import com.ichi2.anki.MetaDB
+import com.ichi2.anki.R
import com.ichi2.anki.exception.StorageAccessException
+import com.ichi2.anki.launchCatchingTask
import com.ichi2.anki.provider.CardContentProvider
import com.ichi2.anki.snackbar.showSnackbar
import com.ichi2.compat.CompatHelper
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/DevOptionsFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/DevOptionsFragment.kt
index cfc092705bf3..4fe8c5671095 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/DevOptionsFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/DevOptionsFragment.kt
@@ -19,7 +19,11 @@ import android.content.Context
import androidx.preference.Preference
import androidx.preference.SwitchPreference
import com.afollestad.materialdialogs.MaterialDialog
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.BuildConfig
+import com.ichi2.anki.CollectionHelper
+import com.ichi2.anki.OnboardingUtils
+import com.ichi2.anki.R
import com.ichi2.anki.analytics.UsageAnalytics
import com.ichi2.anki.snackbar.showSnackbar
import timber.log.Timber
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/GeneralSettingsFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/GeneralSettingsFragment.kt
index a94a7305c54b..f35aeb92311c 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/GeneralSettingsFragment.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/GeneralSettingsFragment.kt
@@ -26,7 +26,7 @@ import com.ichi2.annotations.NeedsTest
import com.ichi2.utils.LanguageUtil
import com.ichi2.utils.LanguageUtil.getSystemLocale
import kotlinx.coroutines.runBlocking
-import java.util.*
+import java.util.TreeMap
class GeneralSettingsFragment : SettingsFragment() {
override val preferenceResource: Int
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/Preferences.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/Preferences.kt
index af0eb0451a23..cff654de4f39 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/Preferences.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/Preferences.kt
@@ -37,8 +37,14 @@ import com.bytehamster.lib.preferencesearch.SearchConfiguration
import com.bytehamster.lib.preferencesearch.SearchPreferenceFragment
import com.bytehamster.lib.preferencesearch.SearchPreferenceResult
import com.bytehamster.lib.preferencesearch.SearchPreferenceResultListener
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiActivity
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.BuildConfig
+import com.ichi2.anki.CollectionManager
+import com.ichi2.anki.DeckPicker
+import com.ichi2.anki.R
import com.ichi2.anki.cardviewer.ViewerCommand
+import com.ichi2.anki.launchCatchingTask
import com.ichi2.anki.services.BootService.Companion.scheduleNotification
import com.ichi2.compat.CompatHelper
import com.ichi2.libanki.Collection
@@ -47,7 +53,7 @@ import com.ichi2.themes.Themes.setThemeLegacy
import com.ichi2.utils.AdaptionUtil
import com.ichi2.utils.getInstanceFromClassName
import timber.log.Timber
-import java.util.*
+import java.util.Calendar
/**
* Preferences dialog.
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/provider/CardContentProvider.kt b/AnkiDroid/src/main/java/com/ichi2/anki/provider/CardContentProvider.kt
index 9dfb550d0ad6..e3c40d1383bb 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/provider/CardContentProvider.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/provider/CardContentProvider.kt
@@ -18,7 +18,10 @@
****************************************************************************************/
package com.ichi2.anki.provider
-import android.content.*
+import android.content.ContentProvider
+import android.content.ContentUris
+import android.content.ContentValues
+import android.content.UriMatcher
import android.content.pm.PackageManager
import android.database.Cursor
import android.database.MatrixCursor
@@ -26,13 +29,29 @@ import android.database.sqlite.SQLiteQueryBuilder
import android.net.Uri
import android.text.TextUtils
import android.webkit.MimeTypeMap
-import com.ichi2.anki.*
+import com.ichi2.anki.BuildConfig
+import com.ichi2.anki.CollectionHelper
+import com.ichi2.anki.CrashReportService
+import com.ichi2.anki.FlashCardsContract
+import com.ichi2.anki.R
import com.ichi2.anki.exception.ConfirmModSchemaException
import com.ichi2.compat.CompatHelper.Companion.isMarshmallow
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
import com.ichi2.libanki.Consts.BUTTON_TYPE
+import com.ichi2.libanki.DB
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Model
+import com.ichi2.libanki.ModelManager
+import com.ichi2.libanki.Models
import com.ichi2.libanki.Models.AllowEmpty
+import com.ichi2.libanki.Note
+import com.ichi2.libanki.NoteId
+import com.ichi2.libanki.NoteTypeId
+import com.ichi2.libanki.Utils
import com.ichi2.libanki.backend.exception.DeckRenameException
import com.ichi2.libanki.exception.EmptyMediaException
import com.ichi2.libanki.sched.AbstractSched
@@ -48,8 +67,7 @@ import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
import java.io.File
import java.io.IOException
-import java.util.*
-import kotlin.collections.ArrayList
+import java.util.Locale
/**
* Supported URIs:
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/AutomaticAnswer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/AutomaticAnswer.kt
index efb32f1e42af..60c5e0c31268 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/AutomaticAnswer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/AutomaticAnswer.kt
@@ -22,7 +22,10 @@ import androidx.annotation.VisibleForTesting
import com.ichi2.anki.R
import com.ichi2.anki.Reviewer
import com.ichi2.anki.cardviewer.ViewerCommand
-import com.ichi2.anki.reviewer.AnswerButtons.*
+import com.ichi2.anki.reviewer.AnswerButtons.AGAIN
+import com.ichi2.anki.reviewer.AnswerButtons.EASY
+import com.ichi2.anki.reviewer.AnswerButtons.GOOD
+import com.ichi2.anki.reviewer.AnswerButtons.HARD
import com.ichi2.libanki.Collection
import com.ichi2.libanki.DeckId
import com.ichi2.utils.HandlerUtils
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/Binding.kt b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/Binding.kt
index af7c784f7a47..e8042b11c684 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/Binding.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/Binding.kt
@@ -24,7 +24,7 @@ import com.ichi2.anki.cardviewer.Gesture
import com.ichi2.compat.CompatHelper
import com.ichi2.utils.StringUtil
import timber.log.Timber
-import java.util.*
+import java.util.Objects
class Binding private constructor(val modifierKeys: ModifierKeys?, val keycode: Int?, val unicodeCharacter: Char?, val gesture: Gesture?) {
constructor(gesture: Gesture?) : this(null, null, null, gesture)
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/MappableBinding.kt b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/MappableBinding.kt
index a73e2c2b79c7..3b3082159ed6 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/MappableBinding.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/MappableBinding.kt
@@ -23,8 +23,7 @@ import com.ichi2.anki.R
import com.ichi2.anki.cardviewer.Gesture
import com.ichi2.anki.cardviewer.ViewerCommand
import timber.log.Timber
-import java.util.*
-import kotlin.collections.ArrayList
+import java.util.Objects
/**
* Binding + additional contextual information
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/PeripheralKeymap.kt b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/PeripheralKeymap.kt
index 1ed8593b439c..ab9f6377cfa5 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/PeripheralKeymap.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/PeripheralKeymap.kt
@@ -23,7 +23,6 @@ import com.ichi2.anki.cardviewer.ViewerCommand
import com.ichi2.anki.reviewer.Binding.Companion.key
import com.ichi2.anki.reviewer.CardSide.Companion.fromAnswer
import com.ichi2.anki.reviewer.MappableBinding.Companion.fromPreference
-import java.util.HashMap
/** Accepts peripheral input, mapping via various keybinding strategies,
* and converting them to commands for the Reviewer. */
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/DeckService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/DeckService.kt
index 69faffddd9db..5ded282209d0 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/DeckService.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/DeckService.kt
@@ -20,7 +20,7 @@ import com.ichi2.libanki.Collection
import com.ichi2.libanki.Consts
import com.ichi2.libanki.DeckId
import com.ichi2.libanki.Utils
-import java.util.*
+import java.util.TreeMap
object DeckService {
fun shouldShowDefaultDeck(col: Collection): Boolean =
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/LanguageHintService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/LanguageHintService.kt
index 93ff6d8f6ccc..bb946ad1b3f2 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/LanguageHintService.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/LanguageHintService.kt
@@ -24,7 +24,7 @@ import com.ichi2.libanki.Model
import com.ichi2.libanki.ModelManager
import com.ichi2.utils.JSONObject
import timber.log.Timber
-import java.util.*
+import java.util.Locale
/**
* The language that a keyboard should open with when an [EditText] is selected
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/NoteService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/NoteService.kt
index 33343b0b7dda..aa03ffbf8307 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/NoteService.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/NoteService.kt
@@ -26,7 +26,12 @@ import com.ichi2.anki.CollectionManager.withCol
import com.ichi2.anki.CrashReportService
import com.ichi2.anki.FieldEditText
import com.ichi2.anki.multimediacard.IMultimediaEditableNote
-import com.ichi2.anki.multimediacard.fields.*
+import com.ichi2.anki.multimediacard.fields.AudioRecordingField
+import com.ichi2.anki.multimediacard.fields.EFieldType
+import com.ichi2.anki.multimediacard.fields.IField
+import com.ichi2.anki.multimediacard.fields.ImageField
+import com.ichi2.anki.multimediacard.fields.MediaClipField
+import com.ichi2.anki.multimediacard.fields.TextField
import com.ichi2.anki.multimediacard.impl.MultimediaEditableNote
import com.ichi2.libanki.Card
import com.ichi2.libanki.Consts
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/SchedulerService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/SchedulerService.kt
index 555f62e7e22e..58a75004fc88 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/SchedulerService.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/SchedulerService.kt
@@ -20,14 +20,17 @@ import androidx.annotation.StringRes
import com.ichi2.anki.CrashReportService
import com.ichi2.anki.R
import com.ichi2.anki.servicelayer.SchedulerService.NextCard
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.Note
+import com.ichi2.libanki.UndoAction
import com.ichi2.libanki.UndoAction.Companion.revertCardToProvidedState
import com.ichi2.libanki.UndoAction.UndoNameId
+import com.ichi2.libanki.Utils
import com.ichi2.utils.Computation
import timber.log.Timber
-import java.util.*
+import java.util.Optional
import java.util.concurrent.CancellationException
-import kotlin.collections.ArrayList
import com.ichi2.libanki.Collection as AnkiCollection
typealias NextCardAnd = Computation>
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MigrateEssentialFiles.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MigrateEssentialFiles.kt
index 9b644cfd6e50..48831d2612d4 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MigrateEssentialFiles.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MigrateEssentialFiles.kt
@@ -24,9 +24,17 @@ import com.ichi2.anki.CollectionHelper
import com.ichi2.anki.CollectionManager
import com.ichi2.anki.exception.RetryableException
import com.ichi2.anki.model.Directory
-import com.ichi2.anki.servicelayer.*
+import com.ichi2.anki.servicelayer.AnkiDroidDirectory
+import com.ichi2.anki.servicelayer.CollectionFilePath
+import com.ichi2.anki.servicelayer.ScopedAnkiDroidDirectory
+import com.ichi2.anki.servicelayer.ScopedStorageService
import com.ichi2.anki.servicelayer.ScopedStorageService.PREF_MIGRATION_DESTINATION
import com.ichi2.anki.servicelayer.ScopedStorageService.PREF_MIGRATION_SOURCE
+import com.ichi2.anki.servicelayer.execute
+import com.ichi2.anki.servicelayer.getCollectionAnki2Path
+import com.ichi2.anki.servicelayer.scopedstorage.MigrateEssentialFiles.Companion.PRIORITY_FILES
+import com.ichi2.anki.servicelayer.scopedstorage.MigrateEssentialFiles.Companion.SAFETY_MARGIN_BYTES
+import com.ichi2.anki.servicelayer.scopedstorage.MigrateEssentialFiles.Companion.migrateEssentialFiles
import com.ichi2.anki.servicelayer.scopedstorage.MigrateEssentialFiles.UserActionRequiredException
import com.ichi2.annotations.NeedsTest
import com.ichi2.compat.CompatHelper
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveConflictedFile.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveConflictedFile.kt
index e5b337c20068..2a5623ea81b7 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveConflictedFile.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveConflictedFile.kt
@@ -21,10 +21,13 @@ import androidx.annotation.VisibleForTesting
import com.ichi2.anki.model.Directory
import com.ichi2.anki.model.DiskFile
import com.ichi2.anki.model.RelativeFilePath
-import com.ichi2.anki.servicelayer.scopedstorage.MigrateUserData.*
+import com.ichi2.anki.servicelayer.scopedstorage.MigrateUserData.FileConflictException
+import com.ichi2.anki.servicelayer.scopedstorage.MigrateUserData.FileConflictResolutionFailedException
+import com.ichi2.anki.servicelayer.scopedstorage.MigrateUserData.FileDirectoryConflictException
+import com.ichi2.anki.servicelayer.scopedstorage.MigrateUserData.MigrationContext
+import com.ichi2.anki.servicelayer.scopedstorage.MigrateUserData.Operation
import com.ichi2.compat.CompatHelper
import java.io.File
-import java.lang.IllegalStateException
/**
* Moves a file from [sourceFile] to [proposedDestinationFile].
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryContent.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryContent.kt
index de4b24d5c132..1defdd593a07 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryContent.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryContent.kt
@@ -18,6 +18,7 @@ package com.ichi2.anki.servicelayer.scopedstorage
import androidx.annotation.VisibleForTesting
import com.ichi2.anki.model.Directory
+import com.ichi2.anki.servicelayer.scopedstorage.MoveDirectoryContent.Companion.createInstance
import com.ichi2.compat.CompatHelper
import com.ichi2.compat.FileStream
import java.io.File
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/services/BootService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/services/BootService.kt
index 1dde03fc1519..4a3fb12f43fa 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/services/BootService.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/services/BootService.kt
@@ -5,7 +5,10 @@ import android.app.AlarmManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.CollectionHelper
+import com.ichi2.anki.DeckOptions
+import com.ichi2.anki.R
import com.ichi2.anki.UIUtils.showThemedToast
import com.ichi2.anki.preferences.Preferences
import com.ichi2.compat.CompatHelper
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/stats/ChartBuilder.kt b/AnkiDroid/src/main/java/com/ichi2/anki/stats/ChartBuilder.kt
index 4da61bad6551..aa435ab130c7 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/stats/ChartBuilder.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/stats/ChartBuilder.kt
@@ -23,11 +23,23 @@ import com.ichi2.libanki.stats.Stats
import com.ichi2.libanki.stats.Stats.AxisType
import com.ichi2.libanki.stats.Stats.ChartType
import com.ichi2.themes.Themes.getColorFromAttr
-import com.wildplot.android.rendering.*
+import com.wildplot.android.rendering.BarGraph
+import com.wildplot.android.rendering.LegendDrawable
+import com.wildplot.android.rendering.Lines
+import com.wildplot.android.rendering.PieChart
+import com.wildplot.android.rendering.PlotSheet
+import com.wildplot.android.rendering.XAxis
+import com.wildplot.android.rendering.XGrid
+import com.wildplot.android.rendering.YAxis
+import com.wildplot.android.rendering.YGrid
import com.wildplot.android.rendering.graphics.wrapper.ColorWrap
import com.wildplot.android.rendering.graphics.wrapper.RectangleWrap
import timber.log.Timber
-import kotlin.math.*
+import kotlin.math.floor
+import kotlin.math.ln
+import kotlin.math.log10
+import kotlin.math.pow
+import kotlin.math.roundToInt
class ChartBuilder(private val chartView: ChartView, private val collectionData: Collection, private val deckId: DeckId, private val chartType: ChartType) {
private var mMaxCards = 0
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/stats/OverviewStatsBuilder.kt b/AnkiDroid/src/main/java/com/ichi2/anki/stats/OverviewStatsBuilder.kt
index 48ff6da44445..c3558be6e0c1 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/stats/OverviewStatsBuilder.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/stats/OverviewStatsBuilder.kt
@@ -17,7 +17,41 @@ package com.ichi2.anki.stats
import android.R
import android.webkit.WebView
-import com.ichi2.anki.R.string.*
+import com.ichi2.anki.R.string.stats_added
+import com.ichi2.anki.R.string.stats_answer_buttons
+import com.ichi2.anki.R.string.stats_forecast
+import com.ichi2.anki.R.string.stats_overview_answer_buttons_learn
+import com.ichi2.anki.R.string.stats_overview_answer_buttons_mature
+import com.ichi2.anki.R.string.stats_overview_answer_buttons_young
+import com.ichi2.anki.R.string.stats_overview_average_answer_time
+import com.ichi2.anki.R.string.stats_overview_average_interval
+import com.ichi2.anki.R.string.stats_overview_card_types_average_ease
+import com.ichi2.anki.R.string.stats_overview_card_types_highest_ease
+import com.ichi2.anki.R.string.stats_overview_card_types_lowest_ease
+import com.ichi2.anki.R.string.stats_overview_card_types_total_cards
+import com.ichi2.anki.R.string.stats_overview_card_types_total_notes
+import com.ichi2.anki.R.string.stats_overview_days_studied
+import com.ichi2.anki.R.string.stats_overview_forecast_average
+import com.ichi2.anki.R.string.stats_overview_forecast_due_tomorrow
+import com.ichi2.anki.R.string.stats_overview_forecast_total
+import com.ichi2.anki.R.string.stats_overview_longest_interval
+import com.ichi2.anki.R.string.stats_overview_new_cards_per_day
+import com.ichi2.anki.R.string.stats_overview_reviews_per_day_all
+import com.ichi2.anki.R.string.stats_overview_reviews_per_day_studydays
+import com.ichi2.anki.R.string.stats_overview_time_per_day_all
+import com.ichi2.anki.R.string.stats_overview_time_per_day_studydays
+import com.ichi2.anki.R.string.stats_overview_total_new_cards
+import com.ichi2.anki.R.string.stats_overview_total_time_in_period
+import com.ichi2.anki.R.string.stats_review_count
+import com.ichi2.anki.R.string.stats_review_intervals
+import com.ichi2.anki.R.string.stats_review_time
+import com.ichi2.anki.R.string.stats_today
+import com.ichi2.anki.R.string.stats_today_again_count
+import com.ichi2.anki.R.string.stats_today_correct_count
+import com.ichi2.anki.R.string.stats_today_mature_cards
+import com.ichi2.anki.R.string.stats_today_no_mature_cards
+import com.ichi2.anki.R.string.stats_today_type_breakdown
+import com.ichi2.anki.R.string.title_activity_template_editor
import com.ichi2.libanki.Collection
import com.ichi2.libanki.Consts
import com.ichi2.libanki.DeckId
@@ -25,7 +59,7 @@ import com.ichi2.libanki.Utils
import com.ichi2.libanki.stats.Stats
import com.ichi2.libanki.stats.Stats.AxisType
import com.ichi2.themes.Themes.getColorFromAttr
-import java.util.*
+import java.util.Locale
import kotlin.math.roundToInt
import kotlin.math.roundToLong
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ui/NoteTypeSpinnerUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ui/NoteTypeSpinnerUtils.kt
index 69a5f3039beb..259d2e2301ea 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/ui/NoteTypeSpinnerUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/ui/NoteTypeSpinnerUtils.kt
@@ -27,7 +27,7 @@ import com.ichi2.anki.R
import com.ichi2.libanki.Model
import com.ichi2.themes.Themes.getColorFromAttr
import com.ichi2.utils.NamedJSONComparator
-import java.util.*
+import java.util.Collections
/** Setup for a spinner which displays all note types */
object NoteTypeSpinnerUtils {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/web/HttpFetcher.kt b/AnkiDroid/src/main/java/com/ichi2/anki/web/HttpFetcher.kt
index e2ec26066ba6..f442628adc3b 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/web/HttpFetcher.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/web/HttpFetcher.kt
@@ -19,6 +19,7 @@
****************************************************************************************/
package com.ichi2.anki.web
+
import android.content.Context
import com.ichi2.async.Connection
import com.ichi2.compat.CompatHelper
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/widgets/DeckAdapter.kt b/AnkiDroid/src/main/java/com/ichi2/anki/widgets/DeckAdapter.kt
index 001f730fe125..fa51ce9f6220 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/widgets/DeckAdapter.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/widgets/DeckAdapter.kt
@@ -24,7 +24,12 @@ import android.view.LayoutInflater
import android.view.View
import android.view.View.OnLongClickListener
import android.view.ViewGroup
-import android.widget.*
+import android.widget.Filter
+import android.widget.Filterable
+import android.widget.ImageButton
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
import androidx.annotation.VisibleForTesting
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
@@ -38,7 +43,7 @@ import com.ichi2.libanki.sched.TreeNode
import com.ichi2.utils.KotlinCleanup
import com.ichi2.utils.TypedFilter
import net.ankiweb.rsdroid.BackendFactory
-import java.util.*
+import java.util.Locale
@KotlinCleanup("lots to do")
class DeckAdapter(private val layoutInflater: LayoutInflater, context: Context) : RecyclerView.Adapter(), Filterable {
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/widgets/PopupMenuWithIcons.kt b/AnkiDroid/src/main/java/com/ichi2/anki/widgets/PopupMenuWithIcons.kt
index 2e308cdc859c..e91787a179a4 100644
--- a/AnkiDroid/src/main/java/com/ichi2/anki/widgets/PopupMenuWithIcons.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/widgets/PopupMenuWithIcons.kt
@@ -20,7 +20,6 @@ import android.content.Context
import android.view.View
import androidx.appcompat.widget.PopupMenu
import timber.log.Timber
-import java.lang.Exception
/**
* A simple little hack to force the icons to display in the PopupMenu
diff --git a/AnkiDroid/src/main/java/com/ichi2/async/CollectionOperations.kt b/AnkiDroid/src/main/java/com/ichi2/async/CollectionOperations.kt
index b1a12300b663..1eefa6dd6fe5 100644
--- a/AnkiDroid/src/main/java/com/ichi2/async/CollectionOperations.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/async/CollectionOperations.kt
@@ -15,6 +15,7 @@
****************************************************************************************/
package com.ichi2.async
+
import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
import com.ichi2.libanki.Note
diff --git a/AnkiDroid/src/main/java/com/ichi2/async/CollectionTask.kt b/AnkiDroid/src/main/java/com/ichi2/async/CollectionTask.kt
index 07ee7bc74316..b5504ed7fae0 100644
--- a/AnkiDroid/src/main/java/com/ichi2/async/CollectionTask.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/async/CollectionTask.kt
@@ -22,29 +22,56 @@ import android.content.Context
import android.util.Pair
import androidx.annotation.VisibleForTesting
import com.fasterxml.jackson.core.JsonToken
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiDroidApp
import com.ichi2.anki.AnkiSerialization.factory
+import com.ichi2.anki.BackupManager
import com.ichi2.anki.CardBrowser.CardCache
import com.ichi2.anki.CardBrowser.CardCollection
+import com.ichi2.anki.CardUtils
+import com.ichi2.anki.CollectionHelper
+import com.ichi2.anki.CrashReportService
+import com.ichi2.anki.R
import com.ichi2.anki.StudyOptionsFragment.DeckStudyData
+import com.ichi2.anki.TemporaryModel
import com.ichi2.anki.exception.ConfirmModSchemaException
import com.ichi2.anki.exception.ImportExportException
import com.ichi2.anki.servicelayer.NoteService
import com.ichi2.anki.servicelayer.SearchService.SearchCardsResult
-import com.ichi2.libanki.*
+import com.ichi2.libanki.AnkiPackageExporter
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
import com.ichi2.libanki.Collection.CheckDatabaseResult
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.DB
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.DeckConfig
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Media
+import com.ichi2.libanki.Model
+import com.ichi2.libanki.Note
+import com.ichi2.libanki.SortOrder
+import com.ichi2.libanki.Storage
+import com.ichi2.libanki.UndoAction
+import com.ichi2.libanki.Utils
+import com.ichi2.libanki.WrongId
import com.ichi2.libanki.importer.AnkiPackageImporter
import com.ichi2.libanki.sched.DeckDueTreeNode
import com.ichi2.libanki.sched.TreeNode
-import com.ichi2.utils.*
+import com.ichi2.utils.Computation
+import com.ichi2.utils.JSONException
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.Triple
import net.ankiweb.rsdroid.BackendFactory
import org.apache.commons.compress.archivers.zip.ZipFile
import timber.log.Timber
import java.io.File
import java.io.FileNotFoundException
import java.io.IOException
-import java.util.*
+import java.util.Arrays
+import java.util.Collections
+import java.util.Objects
import java.util.concurrent.CancellationException
import java.util.concurrent.ExecutionException
diff --git a/AnkiDroid/src/main/java/com/ichi2/async/Connection.kt b/AnkiDroid/src/main/java/com/ichi2/async/Connection.kt
index b9af69f0667e..321130d657b8 100644
--- a/AnkiDroid/src/main/java/com/ichi2/async/Connection.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/async/Connection.kt
@@ -29,7 +29,8 @@ import com.ichi2.anki.CrashReportService
import com.ichi2.anki.R
import com.ichi2.anki.exception.MediaSyncException
import com.ichi2.anki.exception.UnknownHttpResponseException
-import com.ichi2.async.Connection.ConflictResolution.*
+import com.ichi2.async.Connection.ConflictResolution.FULL_DOWNLOAD
+import com.ichi2.async.Connection.ConflictResolution.FULL_UPLOAD
import com.ichi2.libanki.Collection
import com.ichi2.libanki.sync.CustomSyncServerUrlException
import com.ichi2.libanki.sync.FullSyncer
@@ -39,7 +40,20 @@ import com.ichi2.libanki.sync.MediaSyncer
import com.ichi2.libanki.sync.RemoteMediaServer
import com.ichi2.libanki.sync.RemoteServer
import com.ichi2.libanki.sync.Syncer
-import com.ichi2.libanki.sync.Syncer.ConnectionResultType.*
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.ARBITRARY_STRING
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.CONNECTION_ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.CORRUPT
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.CUSTOM_SYNC_SERVER_URL
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.GENERIC_ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.IO_EXCEPTION
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.MEDIA_SANITY_FAILED
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.MEDIA_SYNC_SERVER_ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.NO_CHANGES
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.OUT_OF_MEMORY_ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.SANITY_CHECK_ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.SUCCESS
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.USER_ABORTED_SYNC
import com.ichi2.utils.JSONException
import com.ichi2.utils.JSONObject
import com.ichi2.utils.KotlinCleanup
diff --git a/AnkiDroid/src/main/java/com/ichi2/async/SingleTaskManager.kt b/AnkiDroid/src/main/java/com/ichi2/async/SingleTaskManager.kt
index e69ba0d75ebf..faeb5c7f61fc 100644
--- a/AnkiDroid/src/main/java/com/ichi2/async/SingleTaskManager.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/async/SingleTaskManager.kt
@@ -18,7 +18,8 @@ package com.ichi2.async
import com.ichi2.utils.KotlinCleanup
import com.ichi2.utils.ThreadUtil.sleep
import timber.log.Timber
-import java.util.*
+import java.util.Collections
+import java.util.LinkedList
import java.util.concurrent.TimeUnit
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/compat/Compat.kt b/AnkiDroid/src/main/java/com/ichi2/compat/Compat.kt
index 59a79fd272a5..f771524c2cd1 100644
--- a/AnkiDroid/src/main/java/com/ichi2/compat/Compat.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/compat/Compat.kt
@@ -30,7 +30,12 @@ import android.net.Uri
import android.os.Parcelable
import android.widget.TimePicker
import androidx.annotation.IntDef
-import java.io.*
+import java.io.File
+import java.io.FileNotFoundException
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
+import java.io.Serializable
/**
* This interface defines a set of functions that are not available on all platforms.
diff --git a/AnkiDroid/src/main/java/com/ichi2/compat/CompatHelper.kt b/AnkiDroid/src/main/java/com/ichi2/compat/CompatHelper.kt
index 46a38b765cf4..1429a5b5009a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/compat/CompatHelper.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/compat/CompatHelper.kt
@@ -19,7 +19,10 @@ import android.content.Intent
import android.os.Build
import android.os.Parcelable
import android.view.KeyCharacterMap.deviceHasKey
-import android.view.KeyEvent.*
+import android.view.KeyEvent.KEYCODE_PAGE_DOWN
+import android.view.KeyEvent.KEYCODE_PAGE_UP
+import android.view.KeyEvent.KEYCODE_PICTSYMBOLS
+import android.view.KeyEvent.KEYCODE_SWITCH_CHARSET
import com.ichi2.compat.CompatHelper.Companion.compat
import java.io.Serializable
diff --git a/AnkiDroid/src/main/java/com/ichi2/compat/CompatV21.kt b/AnkiDroid/src/main/java/com/ichi2/compat/CompatV21.kt
index ffd0af001a97..ee207d254157 100644
--- a/AnkiDroid/src/main/java/com/ichi2/compat/CompatV21.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/compat/CompatV21.kt
@@ -35,7 +35,14 @@ import android.provider.MediaStore
import android.widget.TimePicker
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.io.*
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
+import java.io.Serializable
/** Baseline implementation of [Compat]. Check [Compat]'s for more detail. */
@KotlinCleanup("add extension method logging file.delete() failure" + "Fix Deprecation")
diff --git a/AnkiDroid/src/main/java/com/ichi2/compat/CompatV26.kt b/AnkiDroid/src/main/java/com/ichi2/compat/CompatV26.kt
index b4ed20093db9..931c53a594b9 100644
--- a/AnkiDroid/src/main/java/com/ichi2/compat/CompatV26.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/compat/CompatV26.kt
@@ -29,8 +29,18 @@ import androidx.annotation.VisibleForTesting
import androidx.core.app.NotificationCompat
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.io.*
-import java.nio.file.*
+import java.io.File
+import java.io.FileNotFoundException
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
+import java.nio.file.DirectoryIteratorException
+import java.nio.file.DirectoryStream
+import java.nio.file.Files
+import java.nio.file.NoSuchFileException
+import java.nio.file.Path
+import java.nio.file.Paths
+import java.nio.file.StandardCopyOption
/** Implementation of [Compat] for SDK level 26 and higher. Check [Compat]'s for more detail. */
@TargetApi(26)
diff --git a/AnkiDroid/src/main/java/com/ichi2/exceptions/AggregateException.kt b/AnkiDroid/src/main/java/com/ichi2/exceptions/AggregateException.kt
index f2c8e08ee651..4a789da38ab6 100644
--- a/AnkiDroid/src/main/java/com/ichi2/exceptions/AggregateException.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/exceptions/AggregateException.kt
@@ -16,9 +16,6 @@
package com.ichi2.exceptions
-import java.lang.Exception
-import java.lang.RuntimeException
-
/**
* An exception which describes separate failures.
* For example: if an operation should continue after some errors, but those errors would stop
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/AnkiPackageExporter.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/AnkiPackageExporter.kt
index d9c93300cf3c..1eb2838e9bd6 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/AnkiPackageExporter.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/AnkiPackageExporter.kt
@@ -29,7 +29,14 @@ import com.ichi2.utils.KotlinCleanup
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream
import timber.log.Timber
-import java.io.*
+import java.io.BufferedInputStream
+import java.io.BufferedOutputStream
+import java.io.ByteArrayInputStream
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.InputStream
@KotlinCleanup("lots in this file")
open class Exporter(protected val col: Collection, protected val did: DeckId?) {
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Card.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Card.kt
index c8b7616e9a9a..72ec200b81d7 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Card.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Card.kt
@@ -36,7 +36,7 @@ import com.ichi2.utils.JSONObject
import com.ichi2.utils.LanguageUtil
import net.ankiweb.rsdroid.RustCleanup
import timber.log.Timber
-import java.util.*
+import java.util.Arrays
import java.util.concurrent.CancellationException
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Collection.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Collection.kt
index e4c2133124ed..e1667ec8f13e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Collection.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Collection.kt
@@ -56,13 +56,26 @@ import com.ichi2.libanki.template.TemplateError
import com.ichi2.libanki.utils.Time
import com.ichi2.libanki.utils.TimeManager
import com.ichi2.upgrade.Upgrade
-import com.ichi2.utils.*
+import com.ichi2.utils.BlocksSchemaUpgrade
+import com.ichi2.utils.FunctionalInterfaces
+import com.ichi2.utils.HashUtil
+import com.ichi2.utils.JSONArray
+import com.ichi2.utils.JSONException
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.VersionUtils
import net.ankiweb.rsdroid.Backend
import net.ankiweb.rsdroid.RustCleanup
import org.jetbrains.annotations.Contract
import timber.log.Timber
-import java.io.*
-import java.util.*
+import java.io.BufferedWriter
+import java.io.File
+import java.io.FileWriter
+import java.io.IOException
+import java.io.PrintWriter
+import java.util.Arrays
+import java.util.GregorianCalendar
+import java.util.Locale
import java.util.concurrent.LinkedBlockingDeque
import java.util.function.Consumer
import java.util.regex.Pattern
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/CollectionV16.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/CollectionV16.kt
index 3eb847ed71b7..5918591bbd71 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/CollectionV16.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/CollectionV16.kt
@@ -18,7 +18,7 @@ package com.ichi2.libanki
import android.content.Context
import android.content.res.Resources
import anki.config.ConfigKey
-import com.ichi2.libanki.backend.*
+import com.ichi2.libanki.backend.RustConfigBackend
import com.ichi2.libanki.backend.model.toBackendNote
import com.ichi2.libanki.backend.model.toProtoBuf
import com.ichi2.libanki.exception.InvalidSearchException
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Consts.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Consts.kt
index e3efefdfd1d1..78e69ee29ff9 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Consts.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Consts.kt
@@ -16,7 +16,6 @@
package com.ichi2.libanki
import androidx.annotation.IntDef
-import kotlin.annotation.Retention
object Consts {
// whether new cards should be mixed with reviews, or shown first or last
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/DB.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/DB.kt
index 53675d06abab..b15a34eb1d1d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/DB.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/DB.kt
@@ -35,10 +35,6 @@ import net.ankiweb.rsdroid.Backend
import net.ankiweb.rsdroid.database.AnkiSupportSQLiteDatabase
import org.intellij.lang.annotations.Language
import timber.log.Timber
-import java.lang.Exception
-import java.lang.RuntimeException
-import java.util.ArrayList
-import kotlin.Throws
/**
* Database layer for AnkiDroid. Wraps an SupportSQLiteDatabase (provided by either the Rust backend
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/DeckManager.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/DeckManager.kt
index 6acf659914c0..e67bd1829256 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/DeckManager.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/DeckManager.kt
@@ -25,7 +25,9 @@ import com.ichi2.utils.DeckNameComparator
import com.ichi2.utils.KotlinCleanup
import net.ankiweb.rsdroid.RustCleanup
import org.intellij.lang.annotations.Language
-import java.util.*
+import java.util.Collections
+import java.util.LinkedList
+import java.util.TreeMap
abstract class DeckManager {
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Decks.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Decks.kt
index 1147277fa152..7ed85d167821 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Decks.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Decks.kt
@@ -30,14 +30,21 @@ import com.ichi2.anki.exception.ConfirmModSchemaException
import com.ichi2.libanki.Consts.DECK_STD
import com.ichi2.libanki.backend.exception.DeckRenameException
import com.ichi2.libanki.utils.TimeManager.time
-import com.ichi2.utils.*
import com.ichi2.utils.CollectionUtils.addAll
+import com.ichi2.utils.DeckComparator
import com.ichi2.utils.HashUtil.HashMapInit
+import com.ichi2.utils.JSONArray
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.SyncStatus
import net.ankiweb.rsdroid.RustCleanup
import org.intellij.lang.annotations.Language
import timber.log.Timber
import java.text.Normalizer
-import java.util.*
+import java.util.Arrays
+import java.util.Collections
+import java.util.LinkedList
+import java.util.TreeMap
import java.util.regex.Pattern
// fixmes:
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/DecksV16.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/DecksV16.kt
index 4823ae4a623a..7577c0c32517 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/DecksV16.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/DecksV16.kt
@@ -42,8 +42,16 @@ import com.ichi2.libanki.Decks.Companion.ACTIVE_DECKS
import com.ichi2.libanki.Utils.ids2str
import com.ichi2.libanki.backend.BackendUtils
import com.ichi2.libanki.backend.exception.DeckRenameException
-import com.ichi2.libanki.utils.*
import com.ichi2.libanki.utils.TimeManager.time
+import com.ichi2.libanki.utils.append
+import com.ichi2.libanki.utils.extend
+import com.ichi2.libanki.utils.isNotNullOrEmpty
+import com.ichi2.libanki.utils.isNullOrEmpty
+import com.ichi2.libanki.utils.items
+import com.ichi2.libanki.utils.join
+import com.ichi2.libanki.utils.len
+import com.ichi2.libanki.utils.pop
+import com.ichi2.libanki.utils.toJsonArray
import com.ichi2.utils.CollectionUtils
import com.ichi2.utils.JSONArray
import com.ichi2.utils.JSONObject
@@ -52,7 +60,11 @@ import net.ankiweb.rsdroid.RustCleanup
import net.ankiweb.rsdroid.exceptions.BackendDeckIsFilteredException
import net.ankiweb.rsdroid.exceptions.BackendNotFoundException
import timber.log.Timber
-import java.util.*
+import java.util.LinkedList
+import java.util.TreeMap
+import kotlin.collections.component1
+import kotlin.collections.component2
+import kotlin.collections.set
data class DeckNameId(val name: String, val id: DeckId)
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Finder.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Finder.kt
index 9bed9e74b04b..79503b6c364a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Finder.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Finder.kt
@@ -22,7 +22,9 @@ import android.database.SQLException
import android.text.TextUtils
import android.util.Pair
import androidx.annotation.CheckResult
-import com.ichi2.libanki.SortOrder.*
+import com.ichi2.libanki.SortOrder.AfterSqlOrderBy
+import com.ichi2.libanki.SortOrder.NoOrdering
+import com.ichi2.libanki.SortOrder.UseCollectionOrdering
import com.ichi2.libanki.stats.Stats
import com.ichi2.libanki.utils.TimeManager.time
import com.ichi2.utils.HashUtil.HashMapInit
@@ -31,7 +33,9 @@ import com.ichi2.utils.KotlinCleanup
import net.ankiweb.rsdroid.RustCleanup
import timber.log.Timber
import java.text.Normalizer
-import java.util.*
+import java.util.Arrays
+import java.util.Collections
+import java.util.LinkedList
import java.util.regex.Pattern
@RustCleanup("remove this once Java backend is gone")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Media.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Media.kt
index 6c380f1b0ac5..1a12e5482641 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Media.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Media.kt
@@ -24,11 +24,26 @@ import android.util.Pair
import com.ichi2.anki.CrashReportService
import com.ichi2.libanki.exception.EmptyMediaException
import com.ichi2.libanki.template.TemplateFilters
-import com.ichi2.utils.*
+import com.ichi2.utils.Assert
+import com.ichi2.utils.ExceptionUtil
import com.ichi2.utils.HashUtil.HashMapInit
+import com.ichi2.utils.JSONArray
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.io.*
-import java.util.*
+import java.io.BufferedInputStream
+import java.io.BufferedOutputStream
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.PrintWriter
+import java.io.StringWriter
+import java.util.Arrays
+import java.util.Collections
+import java.util.Locale
+import java.util.TreeSet
import java.util.regex.Matcher
import java.util.regex.Pattern
import java.util.zip.ZipEntry
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Models.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Models.kt
index 7809e47f0ea4..08c068e4d664 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Models.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Models.kt
@@ -30,7 +30,8 @@ import com.ichi2.utils.JSONArray
import com.ichi2.utils.JSONObject
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.util.*
+import java.util.Arrays
+import java.util.WeakHashMap
import java.util.regex.Pattern
@KotlinCleanup("IDE Lint")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/ModelsV16.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/ModelsV16.kt
index f4e94b3f3acd..1ce61047399a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/ModelsV16.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/ModelsV16.kt
@@ -29,9 +29,15 @@ import anki.notetypes.StockNotetype
import com.ichi2.anki.R
import com.ichi2.libanki.Consts.MODEL_CLOZE
import com.ichi2.libanki.Utils.checksum
-import com.ichi2.libanki.backend.*
+import com.ichi2.libanki.backend.BackendUtils
import com.ichi2.libanki.backend.BackendUtils.to_json_bytes
-import com.ichi2.libanki.utils.*
+import com.ichi2.libanki.utils.TimeManager
+import com.ichi2.libanki.utils.append
+import com.ichi2.libanki.utils.index
+import com.ichi2.libanki.utils.insert
+import com.ichi2.libanki.utils.len
+import com.ichi2.libanki.utils.remove
+import com.ichi2.libanki.utils.set
import com.ichi2.utils.JSONArray
import com.ichi2.utils.JSONObject
import net.ankiweb.rsdroid.RustCleanup
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Note.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Note.kt
index 7ad21381286e..e34df6e6a7f2 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Note.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Note.kt
@@ -25,7 +25,7 @@ import com.ichi2.utils.JSONObject
import com.ichi2.utils.KotlinCleanup
import net.ankiweb.rsdroid.BackendFactory.defaultLegacySchema
import timber.log.Timber
-import java.util.*
+import java.util.AbstractSet
import java.util.regex.Pattern
@KotlinCleanup("lots to do")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/PythonTypes.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/PythonTypes.kt
index d21d39a77715..2787865c1646 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/PythonTypes.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/PythonTypes.kt
@@ -16,8 +16,6 @@
package com.ichi2.libanki
-import java.util.*
-
/*
* We can't use private typealiases until
* https://youtrack.jetbrains.com/issue/KT-24700 is fixed
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Sound.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Sound.kt
index 2946b295878c..6eaaf5e80549 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Sound.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Sound.kt
@@ -19,8 +19,12 @@ package com.ichi2.libanki
import android.app.Activity
import android.content.Context
-import android.media.*
+import android.media.AudioAttributes
+import android.media.AudioFocusRequest
+import android.media.AudioManager
import android.media.AudioManager.OnAudioFocusChangeListener
+import android.media.MediaMetadataRetriever
+import android.media.MediaPlayer
import android.media.MediaPlayer.OnCompletionListener
import android.net.Uri
import android.os.Build
@@ -32,13 +36,15 @@ import com.ichi2.anki.AbstractFlashcardViewer
import com.ichi2.anki.AnkiDroidApp
import com.ichi2.anki.ReadText
import com.ichi2.compat.CompatHelper
+import com.ichi2.libanki.Sound.OnErrorListener
import com.ichi2.utils.DisplayUtils
import com.ichi2.utils.KotlinCleanup
import com.ichi2.utils.StringUtil.trimRight
import net.ankiweb.rsdroid.BackendFactory.defaultLegacySchema
import timber.log.Timber
import java.lang.ref.WeakReference
-import java.util.*
+import java.util.Arrays
+import java.util.Locale
import java.util.regex.Pattern
@KotlinCleanup("IDE Lint")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Storage.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Storage.kt
index b088bd07dd09..d78f1f9318d3 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Storage.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Storage.kt
@@ -31,8 +31,6 @@ import net.ankiweb.rsdroid.BackendFactory
import timber.log.Timber
import java.io.File
import java.io.FileNotFoundException
-import java.lang.Exception
-import kotlin.Throws
object Storage {
var isInMemory = false
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Tags.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Tags.kt
index 81b15ae7fb14..e5a9cfcf55a3 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Tags.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Tags.kt
@@ -22,7 +22,9 @@ import android.text.TextUtils
import com.ichi2.libanki.backend.model.TagUsnTuple
import com.ichi2.libanki.utils.TimeManager
import com.ichi2.utils.JSONObject
-import java.util.*
+import java.util.Locale
+import java.util.TreeMap
+import java.util.TreeSet
import java.util.regex.Pattern
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/TemplateManager.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/TemplateManager.kt
index 28276b906863..632f3363fd30 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/TemplateManager.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/TemplateManager.kt
@@ -31,7 +31,7 @@ import com.ichi2.utils.JSONObject
import net.ankiweb.rsdroid.RustCleanup
import net.ankiweb.rsdroid.exceptions.BackendTemplateException
import timber.log.Timber
-import java.util.*
+import java.util.HashMap
private typealias Union = Pair
private typealias TemplateReplacementList = MutableList>
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/TextCardExporter.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/TextCardExporter.kt
index ab11e3cbb59c..59fe964f06be 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/TextCardExporter.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/TextCardExporter.kt
@@ -17,7 +17,7 @@ import java.io.FileOutputStream
import java.io.IOException
import java.io.OutputStreamWriter
import java.nio.charset.StandardCharsets
-import java.util.*
+import java.util.Arrays
class TextCardExporter(col: Collection, did: DeckId?, includeHTML: Boolean) : Exporter(col, did) {
init {
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/UndoAction.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/UndoAction.kt
index c9a7c64fc92a..31b6b11c117d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/UndoAction.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/UndoAction.kt
@@ -22,7 +22,7 @@ import androidx.annotation.StringRes
import com.ichi2.anki.R
import com.ichi2.utils.LanguageUtil.getLocaleCompat
import timber.log.Timber
-import java.util.*
+import java.util.Locale
abstract class UndoAction
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Utils.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Utils.kt
index 317114978b5e..01b4f3b2b827 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Utils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Utils.kt
@@ -44,12 +44,21 @@ import com.ichi2.utils.JSONObject
import com.ichi2.utils.KotlinCleanup
import org.apache.commons.compress.archivers.zip.ZipFile
import timber.log.Timber
-import java.io.*
+import java.io.BufferedReader
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileNotFoundException
+import java.io.IOException
+import java.io.InputStream
+import java.io.InputStreamReader
+import java.io.UnsupportedEncodingException
import java.math.BigInteger
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.text.Normalizer
-import java.util.*
+import java.util.Arrays
+import java.util.Locale
+import java.util.Random
import java.util.regex.Matcher
import java.util.regex.Pattern
import kotlin.collections.Collection
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/WrongId.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/WrongId.kt
index c4752a57e62e..2728fc0d3ced 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/WrongId.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/WrongId.kt
@@ -15,6 +15,4 @@
****************************************************************************************/
package com.ichi2.libanki
-import java.lang.RuntimeException
-
class WrongId(id: Long, kind: String) : RuntimeException(" No $kind with id $id")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/hooks/ChessFilter.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/hooks/ChessFilter.kt
index fe356a53a7c2..ec4ac4362136 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/hooks/ChessFilter.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/hooks/ChessFilter.kt
@@ -19,7 +19,7 @@ package com.ichi2.libanki.hooks
import android.content.Context
import com.ichi2.anki.AnkiDroidApp
import timber.log.Timber
-import java.util.*
+import java.util.Locale
import java.util.regex.Pattern
object ChessFilter {
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/importer/Anki2Importer.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/importer/Anki2Importer.kt
index 6572d7fd6bc8..c88d672abdd7 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/importer/Anki2Importer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/importer/Anki2Importer.kt
@@ -22,7 +22,6 @@ import android.util.Pair
import com.ichi2.anki.R
import com.ichi2.anki.exception.ConfirmModSchemaException
import com.ichi2.anki.exception.ImportExportException
-import com.ichi2.libanki.*
import com.ichi2.libanki.Collection
import com.ichi2.libanki.Consts.CARD_QUEUE
import com.ichi2.libanki.Consts.CARD_TYPE
@@ -32,7 +31,14 @@ import com.ichi2.libanki.Consts.CARD_TYPE_REV
import com.ichi2.libanki.Consts.QUEUE_TYPE_DAY_LEARN_RELEARN
import com.ichi2.libanki.Consts.QUEUE_TYPE_NEW
import com.ichi2.libanki.Consts.QUEUE_TYPE_REV
+import com.ichi2.libanki.DB
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.Media
+import com.ichi2.libanki.NoteId
+import com.ichi2.libanki.NoteTypeId
import com.ichi2.libanki.Storage.collection
+import com.ichi2.libanki.Utils
import com.ichi2.libanki.utils.TimeManager
import com.ichi2.utils.HashUtil
import com.ichi2.utils.KotlinCleanup
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/importer/AnkiPackageImporter.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/importer/AnkiPackageImporter.kt
index 257879a702a2..c34db15d80bb 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/importer/AnkiPackageImporter.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/importer/AnkiPackageImporter.kt
@@ -35,7 +35,6 @@ import java.io.BufferedInputStream
import java.io.File
import java.io.FileNotFoundException
import java.io.IOException
-import java.util.*
class AnkiPackageImporter(col: Collection?, file: String?) : Anki2Importer(col!!, file!!) {
@KotlinCleanup("lateinit")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/AbstractDeckTreeNode.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/AbstractDeckTreeNode.kt
index 7325aa35405e..f1165f7813a0 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/AbstractDeckTreeNode.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/AbstractDeckTreeNode.kt
@@ -18,8 +18,7 @@ package com.ichi2.libanki.sched
import com.ichi2.libanki.Collection
import com.ichi2.libanki.DeckId
import com.ichi2.libanki.Decks
-import java.lang.UnsupportedOperationException
-import java.util.*
+import java.util.Locale
/**
* Holds the data for a single node (row) in the deck due tree (the user-visible list
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/AbstractSched.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/AbstractSched.kt
index 3557806d295f..ec5d72d617f0 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/AbstractSched.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/AbstractSched.kt
@@ -20,9 +20,10 @@ import androidx.annotation.VisibleForTesting
import com.ichi2.anki.R
import com.ichi2.anki.UIUtils.showThemedToast
import com.ichi2.async.CancelListener
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
import com.ichi2.libanki.Consts.BUTTON_TYPE
+import com.ichi2.libanki.DeckId
import timber.log.Timber
import java.lang.ref.WeakReference
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/BaseSched.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/BaseSched.kt
index f80b92bf0483..8b8214b33372 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/BaseSched.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/BaseSched.kt
@@ -25,14 +25,23 @@ import android.text.style.StyleSpan
import androidx.annotation.VisibleForTesting
import anki.ankidroid.schedTimingTodayLegacyRequest
import anki.decks.DeckTreeNode
-import anki.scheduler.*
+import anki.scheduler.BuryOrSuspendCardsRequest
+import anki.scheduler.SchedTimingTodayResponse
+import anki.scheduler.UnburyDeckRequest
+import anki.scheduler.scheduleCardsAsNewRequest
+import anki.scheduler.setDueDateRequest
import com.ichi2.anki.R
import com.ichi2.async.CancelListener
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
import com.ichi2.libanki.Consts.BUTTON_TYPE
import com.ichi2.libanki.Consts.CARD_TYPE_RELEARNING
import com.ichi2.libanki.Consts.QUEUE_TYPE_DAY_LEARN_RELEARN
+import com.ichi2.libanki.DeckConfig
+import com.ichi2.libanki.DeckId
+import com.ichi2.libanki.NoteId
+import com.ichi2.libanki.Utils
import com.ichi2.libanki.stats.Stats
import com.ichi2.libanki.utils.TimeManager
import com.ichi2.libanki.utils.TimeManager.time
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/CardQueue.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/CardQueue.kt
index 1df01e95b82c..f0d3df26e966 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/CardQueue.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/CardQueue.kt
@@ -20,7 +20,9 @@ import com.ichi2.libanki.Card
import com.ichi2.libanki.CardId
import com.ichi2.libanki.Collection
import com.ichi2.utils.KotlinCleanup
-import java.util.*
+import java.util.Collections
+import java.util.LinkedList
+import java.util.Random
abstract class CardQueue( // We need to store mSched and not queue, because during initialization of sched, when CardQueues are initialized
// sched.getCol is null.
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DeckDueTreeNode.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DeckDueTreeNode.kt
index 0b302dbe031d..257ff9e0e513 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DeckDueTreeNode.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DeckDueTreeNode.kt
@@ -20,7 +20,7 @@ import com.ichi2.libanki.DeckId
import com.ichi2.libanki.Decks
import com.ichi2.utils.KotlinCleanup
import net.ankiweb.rsdroid.RustCleanup
-import java.util.*
+import java.util.Locale
import kotlin.math.max
import kotlin.math.min
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/Sched.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/Sched.kt
index b7dcd170acf7..f35214182bb4 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/Sched.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/Sched.kt
@@ -23,20 +23,33 @@ import android.text.TextUtils
import androidx.annotation.VisibleForTesting
import com.ichi2.async.CancelListener
import com.ichi2.async.CancelListener.Companion.isCancelled
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
import com.ichi2.libanki.Consts.BUTTON_TYPE
import com.ichi2.libanki.Consts.CARD_QUEUE
import com.ichi2.libanki.Consts.DECK_STD
import com.ichi2.libanki.Consts.REVLOG_TYPE
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.Decks
+import com.ichi2.libanki.SortOrder
import com.ichi2.libanki.SortOrder.AfterSqlOrderBy
+import com.ichi2.libanki.Utils
import com.ichi2.libanki.sched.Counts.Queue
-import com.ichi2.libanki.sched.Counts.Queue.*
+import com.ichi2.libanki.sched.Counts.Queue.LRN
+import com.ichi2.libanki.sched.Counts.Queue.NEW
+import com.ichi2.libanki.sched.Counts.Queue.REV
import com.ichi2.libanki.stats.Stats.Companion.SECONDS_PER_DAY
-import com.ichi2.utils.*
+import com.ichi2.utils.Assert
+import com.ichi2.utils.HashUtil
+import com.ichi2.utils.JSONException
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
import com.ichi2.utils.SyncStatus.Companion.ignoreDatabaseModification
import timber.log.Timber
-import java.util.*
+import java.util.LinkedList
+import java.util.Locale
+import java.util.Random
@KotlinCleanup("IDE Lint")
@KotlinCleanup("cleanup: use formatted string for all queries")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/SchedV2.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/SchedV2.kt
index 0e50ea2feb4a..da5b621006be 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/SchedV2.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/SchedV2.kt
@@ -30,24 +30,41 @@ import com.ichi2.async.CancelListener
import com.ichi2.async.CancelListener.Companion.isCancelled
import com.ichi2.async.CollectionTask.Reset
import com.ichi2.async.TaskManager
-import com.ichi2.libanki.*
+import com.ichi2.libanki.Card
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
import com.ichi2.libanki.Consts.BUTTON_TYPE
import com.ichi2.libanki.Consts.CARD_QUEUE
import com.ichi2.libanki.Consts.DYN_PRIORITY
import com.ichi2.libanki.Consts.NEW_CARD_ORDER
import com.ichi2.libanki.Consts.REVLOG_TYPE
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.Decks
import com.ichi2.libanki.SortOrder.AfterSqlOrderBy
-import com.ichi2.libanki.sched.Counts.Queue.*
+import com.ichi2.libanki.Utils
+import com.ichi2.libanki.sched.Counts.Queue.LRN
+import com.ichi2.libanki.sched.Counts.Queue.NEW
+import com.ichi2.libanki.sched.Counts.Queue.REV
+import com.ichi2.libanki.sched.SchedV2.CountMethod
+import com.ichi2.libanki.sched.SchedV2.LimitMethod
import com.ichi2.libanki.stats.Stats
import com.ichi2.libanki.utils.Time
import com.ichi2.libanki.utils.TimeManager
-import com.ichi2.utils.*
+import com.ichi2.utils.Assert
+import com.ichi2.utils.HashUtil
+import com.ichi2.utils.JSONArray
+import com.ichi2.utils.JSONException
+import com.ichi2.utils.JSONObject
+import com.ichi2.utils.KotlinCleanup
+import com.ichi2.utils.SyncStatus
import net.ankiweb.rsdroid.BackendFactory
import net.ankiweb.rsdroid.RustCleanup
import timber.log.Timber
import java.lang.ref.WeakReference
-import java.util.*
+import java.util.Collections
+import java.util.LinkedList
+import java.util.Locale
+import java.util.Random
@KotlinCleanup("IDE Lint")
@KotlinCleanup("much to do - keep in line with libAnki")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/SchedV3.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/SchedV3.kt
index 10bfea9dc4f1..7ebdaa6430a8 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/SchedV3.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/SchedV3.kt
@@ -17,7 +17,11 @@
package com.ichi2.libanki.sched
import android.app.Activity
-import anki.scheduler.*
+import anki.scheduler.CardAnswer
+import anki.scheduler.NextCardStates
+import anki.scheduler.QueuedCards
+import anki.scheduler.SchedulingState
+import anki.scheduler.cardAnswer
import com.ichi2.async.CancelListener
import com.ichi2.libanki.Card
import com.ichi2.libanki.CollectionV16
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/stats/AdvancedStatistics.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/stats/AdvancedStatistics.kt
index 9de017cdbc09..5bdd35e9a9ac 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/stats/AdvancedStatistics.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/stats/AdvancedStatistics.kt
@@ -31,7 +31,9 @@ import com.ichi2.libanki.utils.Time
import com.ichi2.libanki.utils.TimeManager.time
import com.ichi2.utils.HashUtil.HashMapInit
import timber.log.Timber
-import java.util.*
+import java.util.Arrays
+import java.util.Random
+import java.util.Stack
/**
* Display forecast statistics based on a simulation of future reviews.
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/stats/Stats.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/stats/Stats.kt
index eb268982d3e9..c2b758fcf31e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/stats/Stats.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/stats/Stats.kt
@@ -30,7 +30,9 @@ import com.ichi2.libanki.Utils
import com.ichi2.libanki.utils.Time.Companion.gregorianCalendar
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.util.*
+import java.util.Calendar
+import java.util.Collections
+import java.util.Vector
class Stats(private val col: com.ichi2.libanki.Collection, did: Long) {
enum class AxisType(val days: Int, val descriptionId: Int) {
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/MediaSyncer.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/MediaSyncer.kt
index 8ac903b7b16a..f7b5309eb9a9 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/MediaSyncer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/MediaSyncer.kt
@@ -29,7 +29,7 @@ import com.ichi2.libanki.Consts
import com.ichi2.libanki.sync.Syncer.ConnectionResultType
import timber.log.Timber
import java.io.IOException
-import java.util.*
+import java.util.Locale
/**
* About conflicts:
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteMediaServer.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteMediaServer.kt
index a0695a168838..5bd4c9a2e60f 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteMediaServer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteMediaServer.kt
@@ -32,7 +32,7 @@ import timber.log.Timber
import java.io.File
import java.io.FileInputStream
import java.io.IOException
-import java.util.*
+import java.util.Locale
import java.util.zip.ZipFile
class RemoteMediaServer(
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteServer.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteServer.kt
index c9f85076ab80..db5eb8046ea3 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteServer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteServer.kt
@@ -28,7 +28,7 @@ import com.ichi2.utils.VersionUtils.pkgVersionName
import okhttp3.Response
import timber.log.Timber
import java.io.IOException
-import java.util.*
+import java.util.Locale
class RemoteServer(
con: Connection,
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/Syncer.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/Syncer.kt
index ecbb3dd8e9a0..e870a726d119 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/Syncer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/Syncer.kt
@@ -27,10 +27,25 @@ import com.ichi2.anki.analytics.UsageAnalytics.sendAnalyticsEvent
import com.ichi2.anki.exception.UnknownHttpResponseException
import com.ichi2.async.Connection
import com.ichi2.async.Connection.Companion.isCancelled
-import com.ichi2.libanki.*
import com.ichi2.libanki.Collection
+import com.ichi2.libanki.Consts
+import com.ichi2.libanki.DB
+import com.ichi2.libanki.Deck
+import com.ichi2.libanki.DeckConfig
+import com.ichi2.libanki.Model
+import com.ichi2.libanki.Utils
import com.ichi2.libanki.sched.AbstractDeckTreeNode
-import com.ichi2.libanki.sync.Syncer.ConnectionResultType.*
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.BAD_AUTH
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.BASIC_CHECK_FAILED
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.CLOCK_OFF
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.FINISH_ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.FULL_SYNC
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.IO_EXCEPTION
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.NO_CHANGES
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.OUT_OF_MEMORY_ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.SANITY_CHECK_ERROR
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.SERVER_ABORT
+import com.ichi2.libanki.sync.Syncer.ConnectionResultType.SUCCESS
import com.ichi2.libanki.utils.TimeManager.time
import com.ichi2.utils.HashUtil.HashMapInit
import com.ichi2.utils.JSONArray
@@ -39,7 +54,8 @@ import com.ichi2.utils.JSONObject
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
import java.io.IOException
-import java.util.*
+import java.util.Arrays
+import java.util.LinkedList
@KotlinCleanup("IDE-lint")
class Syncer(
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/UnifiedTrustManager.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/UnifiedTrustManager.kt
index 7da012f4faec..09bc9ff12504 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/UnifiedTrustManager.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/UnifiedTrustManager.kt
@@ -21,7 +21,7 @@ import java.security.KeyStoreException
import java.security.NoSuchAlgorithmException
import java.security.cert.CertificateException
import java.security.cert.X509Certificate
-import java.util.*
+import java.util.Arrays
import javax.net.ssl.TrustManagerFactory
import javax.net.ssl.X509TrustManager
@@ -73,7 +73,8 @@ internal class UnifiedTrustManager(localKeyStore: KeyStore?) : X509TrustManager
mLocalTrustManager = createTrustManager(localKeyStore)
val first = mDefaultTrustManager.acceptedIssuers
val second = mLocalTrustManager.acceptedIssuers
- mAcceptedIssuers = Arrays.copyOf(first, first.size + second.size)
+ mAcceptedIssuers =
+ Arrays.copyOf(first, first.size + second.size)
System.arraycopy(second, 0, mAcceptedIssuers, first.size, second.size)
}
}
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/template/ParsedNode.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/template/ParsedNode.kt
index fad166a19288..062e50d239fe 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/template/ParsedNode.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/template/ParsedNode.kt
@@ -20,10 +20,13 @@ import android.util.Pair
import androidx.annotation.VisibleForTesting
import com.ichi2.anki.R
import com.ichi2.libanki.Utils
-import com.ichi2.libanki.template.TemplateError.*
+import com.ichi2.libanki.template.TemplateError.ConditionalNotClosed
+import com.ichi2.libanki.template.TemplateError.ConditionalNotOpen
+import com.ichi2.libanki.template.TemplateError.WrongConditionalClosed
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.util.*
+import java.util.Arrays
+import java.util.WeakHashMap
/**
* Represents a template, allow to check in linear time which card is empty/render card.
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/template/ParsedNodes.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/template/ParsedNodes.kt
index c314db087112..f1afb45453f1 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/template/ParsedNodes.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/template/ParsedNodes.kt
@@ -17,7 +17,7 @@ package com.ichi2.libanki.template
import androidx.annotation.VisibleForTesting
import com.ichi2.utils.KotlinCleanup
-import java.util.*
+import java.util.Arrays
@KotlinCleanup("fix hashCode issue suppression")
@Suppress("EqualsOrHashCode")
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/template/Replacement.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/template/Replacement.kt
index 152429c700f5..47808109c997 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/template/Replacement.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/template/Replacement.kt
@@ -22,9 +22,7 @@ import com.ichi2.anki.R
import com.ichi2.libanki.template.TemplateError.FieldNotFound
import com.ichi2.libanki.template.TemplateFilters.apply_filter
import com.ichi2.utils.KotlinCleanup
-import java.lang.StringBuilder
-import java.util.*
-import kotlin.Throws
+import java.util.Arrays
@KotlinCleanup("IDE Lint")
class Replacement(
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/template/TemplateFilters.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/template/TemplateFilters.kt
index 327016555596..2e210d6be2f1 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/template/TemplateFilters.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/template/TemplateFilters.kt
@@ -25,8 +25,7 @@ import com.ichi2.libanki.template.FuriganaFilters.kanaFilter
import com.ichi2.libanki.template.FuriganaFilters.kanjiFilter
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.lang.Exception
-import java.util.*
+import java.util.Locale
import java.util.regex.Matcher
import java.util.regex.Pattern
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/template/Text.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/template/Text.kt
index f4ee3deb8f7e..92bc150c59a1 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/template/Text.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/template/Text.kt
@@ -16,8 +16,6 @@
package com.ichi2.libanki.template
-import java.lang.StringBuilder
-
class Text(private val text: String) : ParsedNode() {
override fun template_is_empty(nonempty_fields: Set): Boolean {
return true
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/template/Tokenizer.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/template/Tokenizer.kt
index 616102d7e3b5..a760c7cc16ea 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/template/Tokenizer.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/template/Tokenizer.kt
@@ -17,8 +17,6 @@ package com.ichi2.libanki.template
import androidx.annotation.VisibleForTesting
import com.ichi2.libanki.template.TemplateError.NoClosingBrackets
-import java.util.NoSuchElementException
-import kotlin.Throws
/**
* This class encodes template.rs's file creating template.
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/utils/PythonExtensions.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/utils/PythonExtensions.kt
index 3b2c03d4f8e6..7c184e8f96e9 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/utils/PythonExtensions.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/utils/PythonExtensions.kt
@@ -19,7 +19,7 @@ package com.ichi2.libanki.utils
import android.text.TextUtils
import com.ichi2.utils.JSONArray
import com.ichi2.utils.JSONObject
-import java.util.*
+import java.util.Optional
fun MutableList.append(value: T) {
this.add(value)
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/utils/TimeManager.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/utils/TimeManager.kt
index f07ea1a1fcc6..9c709d713aff 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/utils/TimeManager.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/utils/TimeManager.kt
@@ -18,7 +18,7 @@ package com.ichi2.libanki.utils
import android.annotation.SuppressLint
import androidx.annotation.VisibleForTesting
-import java.util.*
+import java.util.Stack
/** Singleton providing an instance of [Time].
* Used for tests to mock the time provider
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/utils/TimeUtils.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/utils/TimeUtils.kt
index 3e1a168c0e7a..9fe697fe5701 100644
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/utils/TimeUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/utils/TimeUtils.kt
@@ -16,7 +16,7 @@
package com.ichi2.libanki.utils
import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Locale
object TimeUtils {
fun getTimestamp(time: Time): String {
diff --git a/AnkiDroid/src/main/java/com/ichi2/preferences/ControlPreference.kt b/AnkiDroid/src/main/java/com/ichi2/preferences/ControlPreference.kt
index 1799f5f0f6bd..47f60f3ee01e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/preferences/ControlPreference.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/preferences/ControlPreference.kt
@@ -36,7 +36,6 @@ import com.ichi2.anki.reviewer.MappableBinding
import com.ichi2.anki.reviewer.MappableBinding.Companion.fromGesture
import com.ichi2.anki.reviewer.MappableBinding.Companion.toPreferenceString
import com.ichi2.ui.KeyPicker
-import java.util.*
/**
* A preference which allows mapping of inputs to actions (example: keys -> commands)
diff --git a/AnkiDroid/src/main/java/com/ichi2/preferences/IncrementerNumberRangePreference.kt b/AnkiDroid/src/main/java/com/ichi2/preferences/IncrementerNumberRangePreference.kt
index f74df91c725c..8a314a37b341 100644
--- a/AnkiDroid/src/main/java/com/ichi2/preferences/IncrementerNumberRangePreference.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/preferences/IncrementerNumberRangePreference.kt
@@ -24,7 +24,6 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.LinearLayout
import com.ichi2.anki.R
-import java.lang.NumberFormatException
// TODO Tracked in https://github.com/ankidroid/Anki-Android/issues/5019 : use IncrementerNumberRangePreferenceCompat
@Suppress("deprecation")
diff --git a/AnkiDroid/src/main/java/com/ichi2/themes/HtmlColors.kt b/AnkiDroid/src/main/java/com/ichi2/themes/HtmlColors.kt
index 89a728532814..354a2ea8b4ad 100644
--- a/AnkiDroid/src/main/java/com/ichi2/themes/HtmlColors.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/themes/HtmlColors.kt
@@ -19,7 +19,7 @@ package com.ichi2.themes
import com.ichi2.utils.HashUtil.HashMapInit
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.util.*
+import java.util.Locale
import java.util.regex.Matcher
import java.util.regex.Pattern
diff --git a/AnkiDroid/src/main/java/com/ichi2/ui/AppCompatPreferenceActivity.kt b/AnkiDroid/src/main/java/com/ichi2/ui/AppCompatPreferenceActivity.kt
index dbd3550dd56b..bc05a7177358 100644
--- a/AnkiDroid/src/main/java/com/ichi2/ui/AppCompatPreferenceActivity.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/ui/AppCompatPreferenceActivity.kt
@@ -18,24 +18,33 @@
package com.ichi2.ui
-import android.content.*
+import android.content.BroadcastReceiver
+import android.content.ContentValues
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.content.SharedPreferences
import android.content.res.Configuration
import android.os.Bundle
import android.preference.PreferenceActivity
-import android.view.*
+import android.view.KeyEvent
+import android.view.MenuInflater
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
import androidx.annotation.LayoutRes
import androidx.appcompat.app.ActionBar
import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.widget.Toolbar
-import com.ichi2.anki.*
+import com.ichi2.anki.AnkiDroidApp
+import com.ichi2.anki.CollectionHelper
import com.ichi2.anki.receiver.SdCardReceiver
import com.ichi2.libanki.Collection
import com.ichi2.libanki.Deck
import com.ichi2.utils.HashUtil
import com.ichi2.utils.KotlinCleanup
import timber.log.Timber
-import java.util.*
-import kotlin.collections.HashMap
+import java.util.LinkedList
/**
* A [android.preference.PreferenceActivity] which implements and proxies the necessary calls
diff --git a/AnkiDroid/src/main/java/com/ichi2/ui/GestureDisplay.kt b/AnkiDroid/src/main/java/com/ichi2/ui/GestureDisplay.kt
index 6318fa6eb117..ea08db09cde1 100644
--- a/AnkiDroid/src/main/java/com/ichi2/ui/GestureDisplay.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/ui/GestureDisplay.kt
@@ -27,7 +27,19 @@ import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
import com.ichi2.anki.R
import com.ichi2.anki.cardviewer.Gesture
-import com.ichi2.anki.cardviewer.Gesture.*
+import com.ichi2.anki.cardviewer.Gesture.SWIPE_DOWN
+import com.ichi2.anki.cardviewer.Gesture.SWIPE_LEFT
+import com.ichi2.anki.cardviewer.Gesture.SWIPE_RIGHT
+import com.ichi2.anki.cardviewer.Gesture.SWIPE_UP
+import com.ichi2.anki.cardviewer.Gesture.TAP_BOTTOM
+import com.ichi2.anki.cardviewer.Gesture.TAP_BOTTOM_LEFT
+import com.ichi2.anki.cardviewer.Gesture.TAP_BOTTOM_RIGHT
+import com.ichi2.anki.cardviewer.Gesture.TAP_CENTER
+import com.ichi2.anki.cardviewer.Gesture.TAP_LEFT
+import com.ichi2.anki.cardviewer.Gesture.TAP_RIGHT
+import com.ichi2.anki.cardviewer.Gesture.TAP_TOP
+import com.ichi2.anki.cardviewer.Gesture.TAP_TOP_LEFT
+import com.ichi2.anki.cardviewer.Gesture.TAP_TOP_RIGHT
import com.ichi2.anki.cardviewer.GestureListener
import com.ichi2.anki.cardviewer.TapGestureMode
import timber.log.Timber
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/AdaptionUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/AdaptionUtil.kt
index 12ef1566fea5..72d1e6be982d 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/AdaptionUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/AdaptionUtil.kt
@@ -28,7 +28,7 @@ import android.os.Build
import android.provider.Settings
import com.ichi2.anki.AnkiDroidApp
import timber.log.Timber
-import java.util.*
+import java.util.Locale
object AdaptionUtil {
private var sHasRunWebBrowserCheck = false
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/Assert.kt b/AnkiDroid/src/main/java/com/ichi2/utils/Assert.kt
index b0899e51082b..9711b75ff79c 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/Assert.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/Assert.kt
@@ -18,7 +18,6 @@
package com.ichi2.utils
import org.jetbrains.annotations.Contract
-import java.lang.AssertionError
object Assert {
fun that(condition: Boolean) {
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/BitmapUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/BitmapUtil.kt
index 5dd1eb8ea171..fca572b7e614 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/BitmapUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/BitmapUtil.kt
@@ -27,7 +27,6 @@ import com.ichi2.anki.CrashReportService
import timber.log.Timber
import java.io.File
import java.io.FileInputStream
-import java.lang.Exception
object BitmapUtil {
fun decodeFile(theFile: File, IMAGE_MAX_SIZE: Int): Bitmap? {
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/CheckCameraPermission.kt b/AnkiDroid/src/main/java/com/ichi2/utils/CheckCameraPermission.kt
index 1edbb4c87152..b745ab70a38c 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/CheckCameraPermission.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/CheckCameraPermission.kt
@@ -19,8 +19,7 @@ package com.ichi2.utils
import android.content.Context
import android.content.pm.PackageManager
import timber.log.Timber
-import java.lang.Exception
-import java.util.*
+import java.util.Arrays
object CheckCameraPermission {
@Suppress("deprecation") // getPackageInfo
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/ContentResolverUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/ContentResolverUtil.kt
index 93dbc4e3aef1..b890b1dbc169 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/ContentResolverUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/ContentResolverUtil.kt
@@ -23,9 +23,7 @@ import android.webkit.MimeTypeMap
import androidx.annotation.CheckResult
import timber.log.Timber
import java.io.File
-import java.lang.Exception
-import java.lang.IllegalStateException
-import java.util.*
+import java.util.Locale
object ContentResolverUtil {
/** Obtains the filename from the url. Throws if all methods return exception */
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/DatabaseChangeDecorator.kt b/AnkiDroid/src/main/java/com/ichi2/utils/DatabaseChangeDecorator.kt
index 5dfa78d0fda2..faa77aa64e4a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/DatabaseChangeDecorator.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/DatabaseChangeDecorator.kt
@@ -20,7 +20,7 @@ import android.database.SQLException
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteStatement
import net.ankiweb.rsdroid.RustCleanup
-import java.util.*
+import java.util.Locale
/** Detects any database modifications and notifies the sync status of the application */
@RustCleanup("After migrating to new backend, can use backend call instead of this class.")
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/DeckComparator.kt b/AnkiDroid/src/main/java/com/ichi2/utils/DeckComparator.kt
index 9743e1b318c1..828c87320767 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/DeckComparator.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/DeckComparator.kt
@@ -15,8 +15,6 @@
****************************************************************************************/
package com.ichi2.utils
-import java.util.Comparator
-
class DeckComparator : Comparator {
override fun compare(lhs: JSONObject, rhs: JSONObject): Int {
return DeckNameComparator.INSTANCE.compare(lhs.getString("name"), rhs.getString("name"))
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/DeckNameComparator.kt b/AnkiDroid/src/main/java/com/ichi2/utils/DeckNameComparator.kt
index 696db52a5cef..94649ebc4851 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/DeckNameComparator.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/DeckNameComparator.kt
@@ -17,7 +17,6 @@
package com.ichi2.utils
import com.ichi2.libanki.Decks
-import java.util.Comparator
class DeckNameComparator : Comparator {
override fun compare(lhs: String, rhs: String): Int {
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/DimmedPromptBackgroundDecorator.kt b/AnkiDroid/src/main/java/com/ichi2/utils/DimmedPromptBackgroundDecorator.kt
index c36ca5117084..fda2ecb27ae8 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/DimmedPromptBackgroundDecorator.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/DimmedPromptBackgroundDecorator.kt
@@ -38,7 +38,11 @@
package com.ichi2.utils
import android.content.res.Resources
-import android.graphics.*
+import android.graphics.Canvas
+import android.graphics.Color
+import android.graphics.Paint
+import android.graphics.Rect
+import android.graphics.RectF
import com.ichi2.anki.PromptBackgroundInterface
import com.ichi2.anki.PromptBackgroundInterfaceAdapter.Companion.toInterface
import uk.co.samuelwall.materialtaptargetprompt.extras.PromptBackground
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/ExifUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/ExifUtil.kt
index a849e2918418..4f09224fdcce 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/ExifUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/ExifUtil.kt
@@ -24,7 +24,6 @@ import android.graphics.Matrix
import androidx.exifinterface.media.ExifInterface
import timber.log.Timber
import java.io.File
-import java.lang.Exception
object ExifUtil {
fun rotateFromCamera(theFile: File, _bmp: Bitmap): Bitmap {
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/FileUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/FileUtil.kt
index f4b9fa92e5b5..bd1c8dd5d23e 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/FileUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/FileUtil.kt
@@ -24,7 +24,7 @@ import timber.log.Timber
import java.io.File
import java.io.IOException
import java.io.InputStream
-import java.util.*
+import java.util.AbstractMap.SimpleEntry
object FileUtil {
/** Gets the free disk space given a file */
@@ -74,7 +74,7 @@ object FileUtil {
val index = fileName.lastIndexOf(".")
return if (index < 1) {
null
- } else AbstractMap.SimpleEntry(fileName.substring(0, index), fileName.substring(index))
+ } else SimpleEntry(fileName.substring(0, index), fileName.substring(index))
}
/**
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/FunctionalInterfaces.kt b/AnkiDroid/src/main/java/com/ichi2/utils/FunctionalInterfaces.kt
index d42d22945bc2..9b4a232710a3 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/FunctionalInterfaces.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/FunctionalInterfaces.kt
@@ -15,7 +15,7 @@
*/
package com.ichi2.utils
-import kotlin.jvm.Throws
+import com.ichi2.utils.FunctionalInterfaces.Filter
/** TODO: Move this to standard library in API 24 */
@KotlinCleanup("try to improve the generic code with in/out declarations for generic type parameters")
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/HashUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/HashUtil.kt
index 7bacc9475529..679721910160 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/HashUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/HashUtil.kt
@@ -15,9 +15,6 @@
****************************************************************************************/
package com.ichi2.utils
-import java.util.HashMap
-import java.util.HashSet
-
object HashUtil {
/**
* @param size Number of elements expected in the hash structure
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/ImportUtils.kt b/AnkiDroid/src/main/java/com/ichi2/utils/ImportUtils.kt
index 9d8bc9c3ff45..8dc9a34f775b 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/ImportUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/ImportUtils.kt
@@ -43,10 +43,9 @@ import java.io.IOException
import java.io.InputStream
import java.net.URLDecoder
import java.net.URLEncoder
-import java.util.*
+import java.util.Locale
import java.util.zip.ZipException
import java.util.zip.ZipInputStream
-import kotlin.collections.ArrayList
object ImportUtils {
/* A filename should be shortened if over this threshold */
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/IntentUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/IntentUtil.kt
index 5669f2b3db4c..4c348d01f035 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/IntentUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/IntentUtil.kt
@@ -21,7 +21,6 @@ import com.ichi2.anki.AnkiActivity
import com.ichi2.anki.R
import com.ichi2.anki.UIUtils.showThemedToast
import timber.log.Timber
-import java.lang.Exception
object IntentUtil {
@JvmStatic // (fixable) required due to structure of unit tests
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/JSON.kt b/AnkiDroid/src/main/java/com/ichi2/utils/JSON.kt
index b05360c8375c..e6dbc0b5bc8f 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/JSON.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/JSON.kt
@@ -17,8 +17,6 @@
package com.ichi2.utils
-import kotlin.Throws
-
object JSON {
/**
* Returns the input if it is a JSON-permissible value; throws otherwise.
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/JSONException.kt b/AnkiDroid/src/main/java/com/ichi2/utils/JSONException.kt
index 69f89ca0695d..119c0feb8e8a 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/JSONException.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/JSONException.kt
@@ -42,9 +42,6 @@
package com.ichi2.utils
-import java.lang.RuntimeException
-import kotlin.Throws
-
/**
* Similar to JSONException in meaning, but unchecked */
class JSONException : RuntimeException {
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/JSONTokener.kt b/AnkiDroid/src/main/java/com/ichi2/utils/JSONTokener.kt
index ff33938a691f..ef8786d38cfe 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/JSONTokener.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/JSONTokener.kt
@@ -43,7 +43,6 @@ package com.ichi2.utils
import org.json.JSONException
import org.json.JSONTokener
-import kotlin.Throws
class JSONTokener(s: String) : JSONTokener(s) {
@Throws(JSONException::class)
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/LanguageUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/LanguageUtil.kt
index 5baebe405ff7..809c23162c70 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/LanguageUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/LanguageUtil.kt
@@ -24,7 +24,8 @@ import com.ichi2.anki.preferences.Preferences
import net.ankiweb.rsdroid.BackendFactory
import timber.log.Timber
import java.text.DateFormat
-import java.util.*
+import java.util.Date
+import java.util.Locale
/**
* Utility call for proving language related functionality.
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/NamedJSONComparator.kt b/AnkiDroid/src/main/java/com/ichi2/utils/NamedJSONComparator.kt
index 89cfff4e29d5..4614a8c3b62f 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/NamedJSONComparator.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/NamedJSONComparator.kt
@@ -16,8 +16,6 @@
package com.ichi2.utils
-import java.util.Comparator
-
class NamedJSONComparator : Comparator {
override fun compare(lhs: JSONObject, rhs: JSONObject): Int {
val o1 = lhs.getString("name")
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/NoteFieldDecorator.kt b/AnkiDroid/src/main/java/com/ichi2/utils/NoteFieldDecorator.kt
index d0ce82b0bab8..21af7ecea261 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/NoteFieldDecorator.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/NoteFieldDecorator.kt
@@ -18,7 +18,7 @@
package com.ichi2.utils
-import java.util.*
+import java.util.Random
object NoteFieldDecorator {
private val random = Random()
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/StringUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/StringUtil.kt
index 0c807fa8c74f..49bd428955b9 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/StringUtil.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/StringUtil.kt
@@ -18,7 +18,7 @@
package com.ichi2.utils
import org.jetbrains.annotations.Contract
-import java.util.*
+import java.util.Locale
object StringUtil {
/** Trims from the right hand side of a string */
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/Threads.kt b/AnkiDroid/src/main/java/com/ichi2/utils/Threads.kt
index 859efb69464f..140b34edc908 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/Threads.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/Threads.kt
@@ -20,7 +20,6 @@ import android.os.Looper
import androidx.annotation.UiThread
import androidx.annotation.WorkerThread
import timber.log.Timber
-import java.lang.RuntimeException
/**
* Helper class for checking for programming errors while using threads.
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/UniqueArrayList.kt b/AnkiDroid/src/main/java/com/ichi2/utils/UniqueArrayList.kt
index 99466eb0f68d..f0e41596d2ff 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/UniqueArrayList.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/UniqueArrayList.kt
@@ -17,7 +17,10 @@ package com.ichi2.utils
import androidx.annotation.RequiresApi
import org.apache.commons.collections4.list.SetUniqueList
-import java.util.*
+import java.util.Arrays
+import java.util.Collections
+import java.util.Spliterator
+import java.util.TreeSet
/**
* A collection of items that doesn't allow duplicate items, and allows fast random access, lookup, maintaining order, and sorting.
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/VersionUtils.kt b/AnkiDroid/src/main/java/com/ichi2/utils/VersionUtils.kt
index e4b965ad4e9d..e1c32edc5561 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/VersionUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/VersionUtils.kt
@@ -22,7 +22,6 @@ import androidx.core.content.pm.PackageInfoCompat
import com.ichi2.anki.AnkiDroidApp
import com.ichi2.anki.CrashReportService
import timber.log.Timber
-import java.lang.NullPointerException
/**
* Created by Tim on 11/04/2015.
diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/ViewGroupUtils.kt b/AnkiDroid/src/main/java/com/ichi2/utils/ViewGroupUtils.kt
index b11f08173468..8d542c790689 100644
--- a/AnkiDroid/src/main/java/com/ichi2/utils/ViewGroupUtils.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/utils/ViewGroupUtils.kt
@@ -22,7 +22,6 @@ import android.view.View
import android.view.ViewGroup
import com.ichi2.anki.AnkiDroidApp
import timber.log.Timber
-import java.util.ArrayList
object ViewGroupUtils {
fun getAllChildren(viewGroup: ViewGroup): List {
diff --git a/AnkiDroid/src/main/java/com/ichi2/widget/AnkiDroidWidgetSmall.kt b/AnkiDroid/src/main/java/com/ichi2/widget/AnkiDroidWidgetSmall.kt
index e9706d8ba061..78ebe2e590c0 100644
--- a/AnkiDroid/src/main/java/com/ichi2/widget/AnkiDroidWidgetSmall.kt
+++ b/AnkiDroid/src/main/java/com/ichi2/widget/AnkiDroidWidgetSmall.kt
@@ -18,7 +18,11 @@ import android.app.PendingIntent
import android.app.Service
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
-import android.content.*
+import android.content.BroadcastReceiver
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
import android.content.res.Configuration
import android.os.IBinder
import android.util.TypedValue
diff --git a/AnkiDroid/src/main/java/com/wildplot/android/parsing/Atom.kt b/AnkiDroid/src/main/java/com/wildplot/android/parsing/Atom.kt
index 433e69b21c55..2355b8dd40b9 100644
--- a/AnkiDroid/src/main/java/com/wildplot/android/parsing/Atom.kt
+++ b/AnkiDroid/src/main/java/com/wildplot/android/parsing/Atom.kt
@@ -16,8 +16,20 @@
package com.wildplot.android.parsing
-import com.wildplot.android.parsing.Atom.AtomType.*
-import com.wildplot.android.parsing.AtomTypes.*
+import com.wildplot.android.parsing.Atom.AtomType.EXP_IN_BRACKETS
+import com.wildplot.android.parsing.Atom.AtomType.FUNCTION_MATH
+import com.wildplot.android.parsing.Atom.AtomType.FUNCTION_X
+import com.wildplot.android.parsing.Atom.AtomType.FUNCTION_X_Y
+import com.wildplot.android.parsing.Atom.AtomType.INVALID
+import com.wildplot.android.parsing.Atom.AtomType.NUMBER
+import com.wildplot.android.parsing.Atom.AtomType.VARIABLE
+import com.wildplot.android.parsing.AtomTypes.FunctionXAtom
+import com.wildplot.android.parsing.AtomTypes.FunctionXYAtom
+import com.wildplot.android.parsing.AtomTypes.MathFunctionAtom
+import com.wildplot.android.parsing.AtomTypes.NumberAtom
+import com.wildplot.android.parsing.AtomTypes.VariableAtom
+import com.wildplot.android.parsing.AtomTypes.XVariableAtom
+import com.wildplot.android.parsing.AtomTypes.YVariableAtom
class Atom(private val parser: TopLevelParser) : TreeElement {
var atomType: AtomType = INVALID
diff --git a/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/FunctionXYAtom.kt b/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/FunctionXYAtom.kt
index 6bbbed2cab18..2f0ea2674956 100644
--- a/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/FunctionXYAtom.kt
+++ b/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/FunctionXYAtom.kt
@@ -21,7 +21,6 @@ import com.wildplot.android.parsing.ExpressionFormatException
import com.wildplot.android.parsing.TopLevelParser
import com.wildplot.android.parsing.TreeElement
import java.util.regex.Pattern
-import kotlin.Throws
/**
* @author Michael Goldbach
diff --git a/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/MathFunctionAtom.kt b/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/MathFunctionAtom.kt
index 900f64c9f2c2..980dcb410492 100644
--- a/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/MathFunctionAtom.kt
+++ b/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/MathFunctionAtom.kt
@@ -17,12 +17,10 @@
package com.wildplot.android.parsing.AtomTypes
import com.ichi2.utils.KotlinCleanup
-import com.wildplot.android.parsing.AtomTypes.MathFunctionAtom.MathType
import com.wildplot.android.parsing.Expression
import com.wildplot.android.parsing.ExpressionFormatException
import com.wildplot.android.parsing.TopLevelParser
import com.wildplot.android.parsing.TreeElement
-import kotlin.Throws
@KotlinCleanup("IDE Lint")
class MathFunctionAtom(funcString: String, private val parser: TopLevelParser) : TreeElement {
diff --git a/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/NumberAtom.kt b/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/NumberAtom.kt
index c146002615ed..f506c08254ac 100644
--- a/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/NumberAtom.kt
+++ b/AnkiDroid/src/main/java/com/wildplot/android/parsing/AtomTypes/NumberAtom.kt
@@ -20,8 +20,6 @@ import com.wildplot.android.parsing.Atom.AtomType
import com.wildplot.android.parsing.ExpressionFormatException
import com.wildplot.android.parsing.TreeElement
import timber.log.Timber
-import java.lang.NumberFormatException
-import kotlin.Throws
class NumberAtom(factorString: String) : TreeElement {
diff --git a/AnkiDroid/src/main/java/com/wildplot/android/parsing/ExpressionFormatException.kt b/AnkiDroid/src/main/java/com/wildplot/android/parsing/ExpressionFormatException.kt
index 90259d54fe38..e473d6ad9716 100644
--- a/AnkiDroid/src/main/java/com/wildplot/android/parsing/ExpressionFormatException.kt
+++ b/AnkiDroid/src/main/java/com/wildplot/android/parsing/ExpressionFormatException.kt
@@ -15,8 +15,6 @@
****************************************************************************************/
package com.wildplot.android.parsing
-import java.lang.IllegalArgumentException
-
class ExpressionFormatException : IllegalArgumentException {
constructor() : super()
constructor(detailMessage: String?) : super(detailMessage)
diff --git a/AnkiDroid/src/main/java/com/wildplot/android/rendering/DrawableContainer.kt b/AnkiDroid/src/main/java/com/wildplot/android/rendering/DrawableContainer.kt
index 21d0fd1e66f1..f2eee5188eb5 100644
--- a/AnkiDroid/src/main/java/com/wildplot/android/rendering/DrawableContainer.kt
+++ b/AnkiDroid/src/main/java/com/wildplot/android/rendering/DrawableContainer.kt
@@ -17,7 +17,7 @@ package com.wildplot.android.rendering
import com.wildplot.android.rendering.graphics.wrapper.GraphicsWrap
import com.wildplot.android.rendering.interfaces.Drawable
-import java.util.*
+import java.util.Vector
class DrawableContainer(private val isOnFrame: Boolean, private val isCritical: Boolean) : Drawable {
private val drawableVector = Vector()
diff --git a/AnkiDroid/src/main/java/com/wildplot/android/rendering/MultiScreenPart.kt b/AnkiDroid/src/main/java/com/wildplot/android/rendering/MultiScreenPart.kt
index cb21e975d7f2..9de11185e816 100644
--- a/AnkiDroid/src/main/java/com/wildplot/android/rendering/MultiScreenPart.kt
+++ b/AnkiDroid/src/main/java/com/wildplot/android/rendering/MultiScreenPart.kt
@@ -17,7 +17,7 @@
package com.wildplot.android.rendering
import com.wildplot.android.rendering.interfaces.Drawable
-import java.util.*
+import java.util.Vector
/**
* This class is used to store information for a certain plot in a multi-plot sheet.
diff --git a/AnkiDroid/src/main/java/com/wildplot/android/rendering/PlotSheet.kt b/AnkiDroid/src/main/java/com/wildplot/android/rendering/PlotSheet.kt
index e0d738907717..1de8877effca 100644
--- a/AnkiDroid/src/main/java/com/wildplot/android/rendering/PlotSheet.kt
+++ b/AnkiDroid/src/main/java/com/wildplot/android/rendering/PlotSheet.kt
@@ -22,7 +22,8 @@ import com.wildplot.android.rendering.graphics.wrapper.RectangleWrap
import com.wildplot.android.rendering.interfaces.Drawable
import com.wildplot.android.rendering.interfaces.Legendable
import timber.log.Timber
-import java.util.*
+import java.util.Collections
+import java.util.Vector
/**
* This is a sheet that is used to plot mathematical functions including coordinate systems and optional extras like
diff --git a/AnkiDroid/src/main/res/layout/activity_drawing.xml b/AnkiDroid/src/main/res/layout/activity_drawing.xml
index 72fb77f36f45..901cf6151ad9 100644
--- a/AnkiDroid/src/main/res/layout/activity_drawing.xml
+++ b/AnkiDroid/src/main/res/layout/activity_drawing.xml
@@ -1,6 +1,5 @@
-
+ android:fitsSystemWindows="true">
.
-->
-
\ No newline at end of file
+ android:padding="@dimen/content_vertical_padding" />
\ No newline at end of file
diff --git a/AnkiDroid/src/main/res/layout/my_account.xml b/AnkiDroid/src/main/res/layout/my_account.xml
index 3e9afc4c2bc1..03aee5fb6f93 100644
--- a/AnkiDroid/src/main/res/layout/my_account.xml
+++ b/AnkiDroid/src/main/res/layout/my_account.xml
@@ -1,8 +1,6 @@
-
+ android:id="@+id/drawer_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true">
\ No newline at end of file
diff --git a/AnkiDroid/src/main/res/layout/reviewer_fullscreen_noanswers.xml b/AnkiDroid/src/main/res/layout/reviewer_fullscreen_noanswers.xml
index 4bf9a7bf2d1b..cfbfeaf3c206 100644
--- a/AnkiDroid/src/main/res/layout/reviewer_fullscreen_noanswers.xml
+++ b/AnkiDroid/src/main/res/layout/reviewer_fullscreen_noanswers.xml
@@ -1,5 +1,4 @@
-
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="@dimen/side_margin"
+ android:paddingRight="@dimen/side_margin"
+ android:paddingTop="2dp"
+ android:paddingBottom="3dp"
+ android:gravity="center_vertical"
+ android:background="?attr/topBarColor">
+