diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/DeckPickerTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/DeckPickerTest.kt index cf4a747314..829c94da04 100644 --- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/DeckPickerTest.kt +++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/DeckPickerTest.kt @@ -22,10 +22,16 @@ import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.Espresso.closeSoftKeyboard 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.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 com.ichi2.anki.TestUtils.activityInstance import com.ichi2.anki.TestUtils.clickChildViewWithId diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/NoteEditorTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/NoteEditorTest.kt index 30c4dd12ab..d641935eea 100644 --- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/NoteEditorTest.kt +++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/NoteEditorTest.kt @@ -23,7 +23,8 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.platform.app.InstrumentationRegistry import com.ichi2.anki.testutil.GrantStoragePermission import com.ichi2.utils.KotlinCleanup -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.not import org.junit.Assume import org.junit.Before import org.junit.Rule diff --git a/AnkiDroid/src/androidTest/java/com/ichi2/anki/compat/CompatNormalizeTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/compat/CompatNormalizeTest.kt index 8c86b15305..20d730c460 100644 --- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/compat/CompatNormalizeTest.kt +++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/compat/CompatNormalizeTest.kt @@ -20,7 +20,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.anki.tests.InstrumentedTest import com.ichi2.compat.CompatHelper import org.hamcrest.CoreMatchers.equalTo -import org.hamcrest.MatcherAssert.* +import org.hamcrest.MatcherAssert.assertThat import org.junit.Test import org.junit.runner.RunWith import java.util.Locale 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 ae667633c7..ccfe503943 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 d99182720d..479b7f9360 100644 --- a/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ContentProviderTest.kt +++ b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ContentProviderTest.kt @@ -30,24 +30,36 @@ import com.ichi2.anki.provider.pureAnswer import com.ichi2.anki.testutil.DatabaseUtils.cursorFillWindow import com.ichi2.anki.testutil.GrantStoragePermission.storagePermission import com.ichi2.anki.testutil.grantPermissions -import com.ichi2.libanki.* +import com.ichi2.libanki.Card +import com.ichi2.libanki.Consts +import com.ichi2.libanki.Decks +import com.ichi2.libanki.Note +import com.ichi2.libanki.NotetypeJson +import com.ichi2.libanki.Notetypes +import com.ichi2.libanki.StdModels +import com.ichi2.libanki.Utils import com.ichi2.libanki.exception.ConfirmModSchemaException import com.ichi2.libanki.sched.Scheduler import com.ichi2.testutils.common.assertThrows import com.ichi2.utils.KotlinCleanup import com.ichi2.utils.emptyStringArray import net.ankiweb.rsdroid.exceptions.BackendNotFoundException -import org.hamcrest.MatcherAssert.* -import org.hamcrest.Matchers.* +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.containsString +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.greaterThan +import org.hamcrest.Matchers.greaterThanOrEqualTo import org.json.JSONObject -import org.junit.* +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.Assume.assumeTrue +import org.junit.Before +import org.junit.Rule +import org.junit.Test 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 47faa0b844..a37a07d350 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 @@ -31,7 +31,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/MediaTest.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/libanki/MediaTest.kt index 764b308a96..724ccf24fd 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 @@ -22,7 +22,10 @@ import com.ichi2.anki.testutil.GrantStoragePermission import com.ichi2.libanki.Collection import com.ichi2.libanki.Media import com.ichi2.libanki.exception.EmptyMediaException -import org.junit.* +import org.junit.After +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/testutil/TestEnvironment.kt b/AnkiDroid/src/androidTest/java/com/ichi2/anki/testutil/TestEnvironment.kt index ed2d2df61b..c0d97a4e54 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/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt index 1bad753c39..cc08f367b7 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt @@ -22,21 +22,49 @@ 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.graphics.Bitmap import android.graphics.Color import android.hardware.SensorManager import android.net.Uri -import android.os.* -import android.view.* +import android.os.Build +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.os.SystemClock +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.PermissionRequest +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.FrameLayout +import android.widget.LinearLayout +import android.widget.RelativeLayout import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -55,9 +83,23 @@ import com.google.android.material.snackbar.Snackbar import com.ichi2.anim.ActivityTransitionAnimation import com.ichi2.anki.CollectionManager.TR import com.ichi2.anki.CollectionManager.withCol -import com.ichi2.anki.cardviewer.* +import com.ichi2.anki.cardviewer.AndroidCardRenderContext import com.ichi2.anki.cardviewer.AndroidCardRenderContext.Companion.createInstance +import com.ichi2.anki.cardviewer.CardMediaPlayer +import com.ichi2.anki.cardviewer.Gesture +import com.ichi2.anki.cardviewer.GestureProcessor +import com.ichi2.anki.cardviewer.JavascriptEvaluator +import com.ichi2.anki.cardviewer.MediaErrorHandler +import com.ichi2.anki.cardviewer.OnRenderProcessGoneDelegate +import com.ichi2.anki.cardviewer.RenderedCard +import com.ichi2.anki.cardviewer.SingleCardSide +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.cardviewer.ViewerRefresh +import com.ichi2.anki.cardviewer.handledGamepadKeyDown +import com.ichi2.anki.cardviewer.handledGamepadKeyUp import com.ichi2.anki.dialogs.TtsVoicesDialogFragment import com.ichi2.anki.dialogs.tags.TagsDialog import com.ichi2.anki.dialogs.tags.TagsDialogFactory @@ -70,10 +112,16 @@ import com.ichi2.anki.pages.CongratsPage import com.ichi2.anki.pages.PostRequestHandler import com.ichi2.anki.preferences.sharedPrefs 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.CardSide +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.MotionEventHandler +import com.ichi2.anki.reviewer.PreviousAnswerIndicator import com.ichi2.anki.servicelayer.LanguageHintService.applyLanguageHint import com.ichi2.anki.servicelayer.NoteService.isMarked import com.ichi2.anki.services.migrationServiceWhileStartedOrNull @@ -86,26 +134,45 @@ import com.ichi2.annotations.NeedsTest import com.ichi2.compat.CompatHelper.Companion.registerReceiverCompat import com.ichi2.compat.CompatHelper.Companion.resolveActivityCompat import com.ichi2.compat.ResolveInfoFlagsCompat -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.getAvTag +import com.ichi2.libanki.SoundOrVideoTag +import com.ichi2.libanki.TTSTag +import com.ichi2.libanki.Utils +import com.ichi2.libanki.note +import com.ichi2.libanki.renderOutput +import com.ichi2.libanki.setTagsFromStr +import com.ichi2.libanki.undoableOp import com.ichi2.themes.Themes import com.ichi2.themes.Themes.getResFromAttr import com.ichi2.ui.FixedEditText -import com.ichi2.utils.* +import com.ichi2.utils.BlocksSchemaUpgrade import com.ichi2.utils.ClipboardUtil.getText import com.ichi2.utils.HandlerUtils.executeFunctionWithDelay import com.ichi2.utils.HandlerUtils.newHandler import com.ichi2.utils.HashUtil.hashSetInit +import com.ichi2.utils.KotlinCleanup +import com.ichi2.utils.Stopwatch import com.ichi2.utils.WebViewDebugging.initializeDebugging +import com.ichi2.utils.message +import com.ichi2.utils.negativeButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title import com.squareup.seismic.ShakeDetector import kotlinx.coroutines.Job import kotlinx.coroutines.runBlocking import timber.log.Timber -import java.io.* +import java.io.File +import java.io.UnsupportedEncodingException 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 e10b2fda36..5cd87cf041 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt @@ -13,7 +13,10 @@ import android.media.AudioManager import android.net.Uri import android.os.Build import android.os.Bundle -import android.view.* +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 @@ -27,7 +30,9 @@ import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.widget.ThemeUtils import androidx.appcompat.widget.Toolbar import androidx.browser.customtabs.CustomTabColorSchemeParams -import androidx.browser.customtabs.CustomTabsIntent.* +import androidx.browser.customtabs.CustomTabsIntent.COLOR_SCHEME_DARK +import androidx.browser.customtabs.CustomTabsIntent.COLOR_SCHEME_LIGHT +import androidx.browser.customtabs.CustomTabsIntent.COLOR_SCHEME_SYSTEM import androidx.core.app.NotificationCompat import androidx.core.app.PendingIntentCompat import androidx.fragment.app.DialogFragment @@ -36,7 +41,8 @@ import androidx.fragment.app.FragmentManager import com.google.android.material.color.MaterialColors 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.NONE import com.ichi2.anki.analytics.UsageAnalytics import com.ichi2.anki.dialogs.AsyncDialogFragment import com.ichi2.anki.dialogs.DialogHandler diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/BackupManager.kt b/AnkiDroid/src/main/java/com/ichi2/anki/BackupManager.kt index 3701e633d5..8f1a119c21 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/BackupManager.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/BackupManager.kt @@ -40,7 +40,10 @@ import java.text.ParseException import java.text.SimpleDateFormat import java.time.LocalDate import java.time.temporal.ChronoUnit -import java.util.* +import java.util.Calendar +import java.util.Date +import java.util.Locale +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 39914b3ba4..4390ea6c90 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardBrowser.kt @@ -18,14 +18,32 @@ package com.ichi2.anki -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.res.Configuration import android.os.Bundle import android.os.SystemClock import android.text.TextUtils 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.SubMenu +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.AbsListView +import android.widget.AdapterView +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 @@ -47,19 +65,24 @@ import com.ichi2.anki.browser.CardBrowserColumn.Companion.COLUMN1_KEYS import com.ichi2.anki.browser.CardBrowserColumn.Companion.COLUMN2_KEYS import com.ichi2.anki.browser.CardBrowserLaunchOptions import com.ichi2.anki.browser.CardBrowserViewModel -import com.ichi2.anki.browser.CardBrowserViewModel.* +import com.ichi2.anki.browser.CardBrowserViewModel.SearchState import com.ichi2.anki.browser.PreviewerIdsFile import com.ichi2.anki.browser.SaveSearchResult import com.ichi2.anki.browser.SharedPreferencesLastDeckIdRepository import com.ichi2.anki.browser.getLabel import com.ichi2.anki.browser.toCardBrowserLaunchOptions import com.ichi2.anki.common.utils.android.isRobolectric -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 +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.SimpleMessageDialog import com.ichi2.anki.dialogs.tags.TagsDialog import com.ichi2.anki.dialogs.tags.TagsDialogFactory import com.ichi2.anki.dialogs.tags.TagsDialogListener @@ -69,7 +92,8 @@ import com.ichi2.anki.export.ExportDialogsFactory import com.ichi2.anki.export.ExportDialogsFactoryProvider import com.ichi2.anki.model.CardStateFilter import com.ichi2.anki.model.CardsOrNotes -import com.ichi2.anki.model.CardsOrNotes.* +import com.ichi2.anki.model.CardsOrNotes.CARDS +import com.ichi2.anki.model.CardsOrNotes.NOTES import com.ichi2.anki.model.SortType import com.ichi2.anki.noteeditor.EditCardDestination import com.ichi2.anki.noteeditor.toIntent @@ -91,16 +115,32 @@ import com.ichi2.anki.utils.ext.ifNotZero import com.ichi2.anki.utils.roundedTimeSpanUnformatted import com.ichi2.anki.widgets.DeckDropDownAdapter.SubtitleListener import com.ichi2.annotations.NeedsTest -import com.ichi2.async.* +import com.ichi2.async.renderBrowserQA import com.ichi2.compat.CompatHelper.Companion.registerReceiverCompat -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.DeckId +import com.ichi2.libanki.DeckNameId +import com.ichi2.libanki.NoteId +import com.ichi2.libanki.SortOrder +import com.ichi2.libanki.Sound +import com.ichi2.libanki.TemplateManager +import com.ichi2.libanki.Utils +import com.ichi2.libanki.setTagsFromStr +import com.ichi2.libanki.stripAvRefs +import com.ichi2.libanki.undoableOp import com.ichi2.libanki.utils.TimeManager import com.ichi2.ui.CardBrowserSearchView import com.ichi2.ui.FixedTextView -import com.ichi2.utils.* +import com.ichi2.utils.HandlerUtils import com.ichi2.utils.HandlerUtils.postDelayedOnNewHandler +import com.ichi2.utils.KotlinCleanup +import com.ichi2.utils.LanguageUtil import com.ichi2.utils.TagsUtil.getUpdatedTags +import com.ichi2.utils.increaseHorizontalPaddingOfOverflowMenuIcons import com.ichi2.widget.WidgetStatus.updateInBackground import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -110,7 +150,6 @@ import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import net.ankiweb.rsdroid.RustCleanup import timber.log.Timber -import java.util.* import kotlin.math.abs import kotlin.math.ceil diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt index 898db039a2..f4094e488d 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/CardTemplateEditor.kt @@ -23,7 +23,14 @@ import android.os.Build import android.os.Bundle import android.text.Editable import android.text.TextWatcher -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 @@ -58,8 +65,12 @@ import com.ichi2.anki.snackbar.showSnackbar import com.ichi2.anki.utils.ext.isImageOcclusion import com.ichi2.annotations.NeedsTest import com.ichi2.compat.CompatHelper.Companion.getSerializableCompat -import com.ichi2.libanki.* import com.ichi2.libanki.Collection +import com.ichi2.libanki.Note +import com.ichi2.libanki.NoteId +import com.ichi2.libanki.NoteTypeId +import com.ichi2.libanki.NotetypeJson +import com.ichi2.libanki.Notetypes import com.ichi2.libanki.Notetypes.Companion.NOT_FOUND_NOTE_TYPE import com.ichi2.libanki.exception.ConfirmModSchemaException import com.ichi2.ui.FixedEditText diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/CrashReportService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/CrashReportService.kt index 64d8208620..55feb6d7e7 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/CrashReportService.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/CrashReportService.kt @@ -33,10 +33,14 @@ import com.ichi2.libanki.utils.TimeManager 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.* object CrashReportService { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/DayRolloverHandler.kt b/AnkiDroid/src/main/java/com/ichi2/anki/DayRolloverHandler.kt index b18b1f275c..53b33572ee 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/DayRolloverHandler.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/DayRolloverHandler.kt @@ -26,7 +26,9 @@ package com.ichi2.anki import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import android.content.Intent.* +import android.content.Intent.ACTION_TIMEZONE_CHANGED +import android.content.Intent.ACTION_TIME_CHANGED +import android.content.Intent.ACTION_TIME_TICK import android.content.IntentFilter import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat.RECEIVER_EXPORTED diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt b/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt index 8d3ee1dac4..e8e59ee7dd 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt @@ -26,16 +26,31 @@ package com.ichi2.anki import android.app.Activity -import android.content.* +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.content.SharedPreferences 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.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.widget.* +import android.view.ViewPropertyAnimator +import android.widget.Filterable +import android.widget.ImageButton +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.RelativeLayout +import android.widget.TextView import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.ActivityResultLauncher @@ -73,25 +88,44 @@ import com.google.android.material.progressindicator.CircularProgressIndicator import com.google.android.material.progressindicator.LinearProgressIndicator import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.Snackbar -import com.ichi2.anim.ActivityTransitionAnimation.Direction.* 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.DISK_FULL +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.StudyOptionsFragment.StudyOptionsListener import com.ichi2.anki.analytics.UsageAnalytics import com.ichi2.anki.deckpicker.BITMAP_BYTES_PER_PIXEL import com.ichi2.anki.deckpicker.BackgroundImage -import com.ichi2.anki.dialogs.* +import com.ichi2.anki.dialogs.AsyncDialogFragment +import com.ichi2.anki.dialogs.BackupPromptDialog +import com.ichi2.anki.dialogs.ConfirmationDialog +import com.ichi2.anki.dialogs.CreateDeckDialog +import com.ichi2.anki.dialogs.DatabaseErrorDialog import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType +import com.ichi2.anki.dialogs.DeckPickerAnalyticsOptInDialog +import com.ichi2.anki.dialogs.DeckPickerBackupNoSpaceLeftDialog +import com.ichi2.anki.dialogs.DeckPickerContextMenu import com.ichi2.anki.dialogs.DeckPickerContextMenu.DeckPickerContextMenuOption +import com.ichi2.anki.dialogs.DeckPickerNoSpaceLeftDialog +import com.ichi2.anki.dialogs.DialogHandlerMessage +import com.ichi2.anki.dialogs.EditDeckDescriptionDialog import com.ichi2.anki.dialogs.ImportDialog.ImportDialogListener import com.ichi2.anki.dialogs.ImportFileSelectionFragment.ApkgImportResultLauncherProvider import com.ichi2.anki.dialogs.ImportFileSelectionFragment.CsvImportResultLauncherProvider +import com.ichi2.anki.dialogs.MediaCheckDialog import com.ichi2.anki.dialogs.MediaCheckDialog.MediaCheckDialogListener +import com.ichi2.anki.dialogs.MigrationProgressDialogFragment +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.addScopedStorageLearnMoreLinkAndShow import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog import com.ichi2.anki.dialogs.customstudy.CustomStudyDialog.CustomStudyListener import com.ichi2.anki.dialogs.customstudy.CustomStudyDialogFactory @@ -108,9 +142,10 @@ import com.ichi2.anki.pages.CongratsPage.Companion.onDeckCompleted import com.ichi2.anki.preferences.AdvancedSettingsFragment import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.receiver.SdCardReceiver -import com.ichi2.anki.servicelayer.* +import com.ichi2.anki.servicelayer.ScopedStorageService import com.ichi2.anki.servicelayer.ScopedStorageService.isLegacyStorage import com.ichi2.anki.servicelayer.ScopedStorageService.mediaMigrationIsInProgress +import com.ichi2.anki.servicelayer.checkMedia import com.ichi2.anki.services.MediaMigrationState import com.ichi2.anki.services.MigrationService import com.ichi2.anki.services.getMediaMigrationState @@ -125,22 +160,45 @@ import com.ichi2.anki.worker.SyncMediaWorker import com.ichi2.anki.worker.SyncWorker import com.ichi2.anki.worker.UniqueWorkNames import com.ichi2.annotations.NeedsTest -import com.ichi2.async.* +import com.ichi2.async.deleteMedia +import com.ichi2.async.sendNotificationForAsyncOperation import com.ichi2.compat.CompatHelper.Companion.getSerializableCompat import com.ichi2.compat.CompatHelper.Companion.registerReceiverCompat import com.ichi2.compat.CompatHelper.Companion.sdkVersion -import com.ichi2.libanki.* +import com.ichi2.libanki.ChangeManager +import com.ichi2.libanki.Consts +import com.ichi2.libanki.DeckId +import com.ichi2.libanki.Decks +import com.ichi2.libanki.MediaCheckResult import com.ichi2.libanki.exception.ConfirmModSchemaException import com.ichi2.libanki.sched.DeckNode +import com.ichi2.libanki.undoableOp import com.ichi2.libanki.utils.TimeManager import com.ichi2.ui.BadgeDrawableBuilder -import com.ichi2.utils.* +import com.ichi2.utils.AdaptionUtil +import com.ichi2.utils.FragmentFactoryUtils +import com.ichi2.utils.HandlerUtils +import com.ichi2.utils.KotlinCleanup +import com.ichi2.utils.NetworkUtils import com.ichi2.utils.NetworkUtils.isActiveNetworkMetered +import com.ichi2.utils.SyncStatus +import com.ichi2.utils.VersionUtils +import com.ichi2.utils.cancelable +import com.ichi2.utils.checkBoxPrompt +import com.ichi2.utils.message +import com.ichi2.utils.negativeButton +import com.ichi2.utils.neutralButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title import com.ichi2.widget.WidgetStatus -import kotlinx.coroutines.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import makeLinksClickable import net.ankiweb.rsdroid.RustCleanup import org.json.JSONException diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/DeckSpinnerSelection.kt b/AnkiDroid/src/main/java/com/ichi2/anki/DeckSpinnerSelection.kt index 5c9875af3e..9de5cb98d2 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/DeckSpinnerSelection.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/DeckSpinnerSelection.kt @@ -31,8 +31,9 @@ import com.ichi2.anki.dialogs.DeckSelectionDialog.DeckCreationListener import com.ichi2.anki.dialogs.DeckSelectionDialog.SelectableDeck import com.ichi2.anki.dialogs.DeckSelectionDialog.SelectableDeck.Companion.fromCollection import com.ichi2.anki.widgets.DeckDropDownAdapter -import com.ichi2.libanki.* import com.ichi2.libanki.Collection +import com.ichi2.libanki.DeckId +import com.ichi2.libanki.DeckNameId import com.ichi2.utils.FragmentManagerSupplier import com.ichi2.utils.KotlinCleanup 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 3b728dae00..0ed3d87b49 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditLine.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditLine.kt @@ -39,7 +39,7 @@ import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat 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("replace _name with `field`") @KotlinCleanup("remove setTypeface") diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt index 4135056f95..8a14b79ca7 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt @@ -47,7 +47,7 @@ import com.ichi2.utils.ClipboardUtil.hasImage import com.ichi2.utils.KotlinCleanup import kotlinx.parcelize.Parcelize import timber.log.Timber -import java.util.* +import java.util.Locale import kotlin.math.max import kotlin.math.min diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/FilteredDeckOptions.kt b/AnkiDroid/src/main/java/com/ichi2/anki/FilteredDeckOptions.kt index 3a6cae8598..e4e2489d53 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/FilteredDeckOptions.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/FilteredDeckOptions.kt @@ -1,4 +1,4 @@ -package com.ichi2.anki +@file:Suppress("DEPRECATION") // #3625 android.preference deprecation /**************************************************************************************** * Copyright (c) 2009 Casey Link * @@ -17,9 +17,15 @@ package com.ichi2.anki * this program. If not, see . * ****************************************************************************************/ +package com.ichi2.anki + import android.content.SharedPreferences 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.anki.analytics.UsageAnalytics import com.ichi2.annotations.NeedsTest import com.ichi2.libanki.Collection diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/IntroductionActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/IntroductionActivity.kt index b497465244..e68c79d05a 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/IntroductionActivity.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/IntroductionActivity.kt @@ -24,7 +24,7 @@ import androidx.activity.result.ActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.edit 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.preferences.sharedPrefs import com.ichi2.annotations.NeedsTest diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/LanguageUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/LanguageUtils.kt index abab4317f1..dd60651db4 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 3f7398a530..0bb437f8c8 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt @@ -26,7 +26,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/ModelFieldEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ModelFieldEditor.kt index e73e757ec0..e129344042 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/ModelFieldEditor.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ModelFieldEditor.kt @@ -53,7 +53,7 @@ import com.ichi2.widget.WidgetStatus import org.json.JSONArray import org.json.JSONException import timber.log.Timber -import java.util.* +import java.util.Locale class ModelFieldEditor : AnkiActivity(), LocaleSelectionDialogHandler { // Position of the current field selected diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt index d1f4480db8..ce89860ee4 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt @@ -32,16 +32,29 @@ import android.os.Bundle import android.os.Environment import android.text.Editable import android.text.TextWatcher -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.Button +import android.widget.EditText +import android.widget.ImageButton +import android.widget.LinearLayout +import android.widget.Spinner +import android.widget.TextView import androidx.activity.addCallback import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts -import androidx.annotation.* +import androidx.annotation.CheckResult +import androidx.annotation.DrawableRes +import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AlertDialog import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.widget.AppCompatButton @@ -75,7 +88,12 @@ import com.ichi2.anki.model.CardStateFilter import com.ichi2.anki.multimediacard.IMultimediaEditableNote import com.ichi2.anki.multimediacard.activity.MultimediaEditFieldActivity import com.ichi2.anki.multimediacard.activity.MultimediaEditFieldActivityExtra -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 @@ -100,21 +118,49 @@ import com.ichi2.anki.widgets.DeckDropDownAdapter.SubtitleListener import com.ichi2.annotations.NeedsTest import com.ichi2.compat.CompatHelper.Companion.getSerializableCompat import com.ichi2.compat.CompatHelper.Companion.registerReceiverCompat -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.Note import com.ichi2.libanki.Note.ClozeUtils +import com.ichi2.libanki.NoteTypeId +import com.ichi2.libanki.NotetypeJson +import com.ichi2.libanki.Notetypes import com.ichi2.libanki.Notetypes.Companion.NOT_FOUND_NOTE_TYPE +import com.ichi2.libanki.Utils +import com.ichi2.libanki.load +import com.ichi2.libanki.note +import com.ichi2.libanki.undoableOp import com.ichi2.libanki.utils.TimeManager -import com.ichi2.utils.* +import com.ichi2.utils.AdaptionUtil +import com.ichi2.utils.ClipboardUtil +import com.ichi2.utils.HashUtil +import com.ichi2.utils.ImageUtils +import com.ichi2.utils.ImportUtils import com.ichi2.utils.IntentUtil.resolveMimeType +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.utils.increaseHorizontalPaddingOfOverflowMenuIcons +import com.ichi2.utils.message +import com.ichi2.utils.negativeButton +import com.ichi2.utils.neutralButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.tintOverflowMenuIcons +import com.ichi2.utils.title import com.ichi2.widget.WidgetStatus import kotlinx.coroutines.launch import org.json.JSONArray import org.json.JSONObject import timber.log.Timber import java.io.File -import java.util.* +import java.util.LinkedList +import java.util.Locale import java.util.function.Consumer import kotlin.collections.ArrayList import kotlin.math.max diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/NoteFieldsCheckResult.kt b/AnkiDroid/src/main/java/com/ichi2/anki/NoteFieldsCheckResult.kt index 307a8c4c8b..b9396a46f3 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/NoteFieldsCheckResult.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/NoteFieldsCheckResult.kt @@ -21,7 +21,8 @@ import android.content.Context import anki.notes.NoteFieldsCheckResponse import com.ichi2.anki.CollectionManager.TR import com.ichi2.anki.CollectionManager.withCol -import com.ichi2.anki.NoteFieldsCheckResult.* +import com.ichi2.anki.NoteFieldsCheckResult.Failure +import com.ichi2.anki.NoteFieldsCheckResult.Success import com.ichi2.anki.utils.ext.isImageOcclusion import com.ichi2.libanki.Note import timber.log.Timber diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/OnboardingUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/OnboardingUtils.kt index f08ec18f00..54dcd86933 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/OnboardingUtils.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/OnboardingUtils.kt @@ -23,7 +23,7 @@ import androidx.core.content.edit import com.ichi2.anki.IntroductionActivity.Companion.INTRODUCTION_SLIDES_SHOWN import com.ichi2.anki.preferences.sharedPrefs import timber.log.Timber -import java.util.* +import java.util.BitSet class OnboardingUtils { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt index a63fa25239..c29787aa6a 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/Reviewer.kt @@ -30,11 +30,22 @@ 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.webkit.WebView -import android.widget.* +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.RelativeLayout +import android.widget.TextView import androidx.activity.result.contract.ActivityResultContracts -import androidx.annotation.* +import androidx.annotation.CheckResult +import androidx.annotation.DrawableRes +import androidx.annotation.IntDef +import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AlertDialog import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.widget.Toolbar @@ -55,11 +66,17 @@ import com.ichi2.anki.pages.AnkiServer.Companion.ANKIDROID_JS_PREFIX import com.ichi2.anki.pages.AnkiServer.Companion.ANKI_PREFIX import com.ichi2.anki.pages.CardInfoDestination import com.ichi2.anki.preferences.sharedPrefs -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.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.scheduling.ForgetCardsDialog import com.ichi2.anki.scheduling.SetDueDateDialog import com.ichi2.anki.servicelayer.NoteService.isMarked @@ -76,18 +93,31 @@ import com.ichi2.audio.AudioRecordingController.Companion.isRecording import com.ichi2.audio.AudioRecordingController.Companion.setEditorStatus import com.ichi2.audio.AudioRecordingController.Companion.tempAudioPath import com.ichi2.audio.AudioRecordingController.RecordingState -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.renderOutput import com.ichi2.libanki.sched.Counts import com.ichi2.libanki.sched.CurrentQueueState +import com.ichi2.libanki.undoableOp import com.ichi2.libanki.utils.TimeManager import com.ichi2.themes.Themes import com.ichi2.themes.Themes.currentTheme -import com.ichi2.utils.* import com.ichi2.utils.HandlerUtils.executeFunctionWithDelay import com.ichi2.utils.HandlerUtils.getDefaultLooper +import com.ichi2.utils.KotlinCleanup import com.ichi2.utils.Permissions.canRecordAudio import com.ichi2.utils.ViewGroupUtils.setRenderWorkaround +import com.ichi2.utils.cancelable +import com.ichi2.utils.iconAlpha +import com.ichi2.utils.increaseHorizontalPaddingOfOverflowMenuIcons +import com.ichi2.utils.message +import com.ichi2.utils.negativeButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.tintOverflowMenuIcons +import com.ichi2.utils.title import com.ichi2.widget.WidgetStatus.updateInBackground import kotlinx.coroutines.launch import timber.log.Timber diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt b/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt index 717bc022fd..61072d84df 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/SharedDecksActivity.kt @@ -18,11 +18,15 @@ 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.WebResourceResponse +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 0580f66f83..11fb3f1dfc 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.database.Cursor import android.net.Uri import android.os.Bundle diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/TtsParser.kt b/AnkiDroid/src/main/java/com/ichi2/anki/TtsParser.kt index 5644af9fcd..bf8124a70c 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/TtsParser.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/TtsParser.kt @@ -5,7 +5,7 @@ import com.ichi2.libanki.TTSTag import com.ichi2.libanki.template.TemplateFilters import org.jsoup.Jsoup import org.jsoup.nodes.Element -import java.util.* +import java.util.ArrayList /** * 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 0c6c308c28..02471b6225 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/UIUtils.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/UIUtils.kt @@ -9,7 +9,7 @@ import android.widget.Toast import androidx.annotation.StringRes import androidx.fragment.app.Fragment import com.ichi2.libanki.utils.Time -import java.util.* +import java.util.Calendar fun showThemedToast(context: Context, text: String, shortLength: Boolean) { Toast.makeText(context, text, if (shortLength) Toast.LENGTH_SHORT else Toast.LENGTH_LONG).show() diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Whiteboard.kt b/AnkiDroid/src/main/java/com/ichi2/anki/Whiteboard.kt index 6388ea2830..ed8e51fdd5 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.net.Uri import android.view.MotionEvent import android.view.View diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/browser/CardBrowserViewModel.kt b/AnkiDroid/src/main/java/com/ichi2/anki/browser/CardBrowserViewModel.kt index 7adc5da32a..47ab7092a7 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/browser/CardBrowserViewModel.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/browser/CardBrowserViewModel.kt @@ -33,11 +33,12 @@ import com.ichi2.anki.CollectionManager.withCol import com.ichi2.anki.DeckSpinnerSelection.Companion.ALL_DECKS_ID import com.ichi2.anki.Flag import com.ichi2.anki.PreviewerDestination -import com.ichi2.anki.export.ExportDialogFragment.* +import com.ichi2.anki.export.ExportDialogFragment.ExportType import com.ichi2.anki.launchCatchingIO import com.ichi2.anki.model.CardStateFilter import com.ichi2.anki.model.CardsOrNotes -import com.ichi2.anki.model.CardsOrNotes.* +import com.ichi2.anki.model.CardsOrNotes.CARDS +import com.ichi2.anki.model.CardsOrNotes.NOTES import com.ichi2.anki.model.SortType import com.ichi2.anki.pages.CardInfoDestination import com.ichi2.anki.preferences.SharedPreferencesProvider diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/OnRenderProcessGoneDelegate.kt b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/OnRenderProcessGoneDelegate.kt index cb47d407c3..21e4514f14 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/OnRenderProcessGoneDelegate.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/OnRenderProcessGoneDelegate.kt @@ -26,7 +26,11 @@ import com.ichi2.anki.AbstractFlashcardViewer import com.ichi2.anki.R import com.ichi2.anki.showThemedToast import com.ichi2.libanki.CardId -import com.ichi2.utils.* +import com.ichi2.utils.cancelable +import com.ichi2.utils.message +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title import timber.log.Timber /** 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 90a01e440a..5914cdc59a 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/ViewerCommand.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/cardviewer/ViewerCommand.kt @@ -26,10 +26,10 @@ import com.ichi2.anki.reviewer.Binding.ModifierKeys.Companion.ctrl import com.ichi2.anki.reviewer.Binding.ModifierKeys.Companion.shift import com.ichi2.anki.reviewer.CardSide import com.ichi2.anki.reviewer.MappableBinding -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 com.ichi2.anki.reviewer.MappableBinding.Screen +import java.util.Arrays import java.util.function.BiFunction import java.util.stream.Collectors diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/BackupPromptDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/BackupPromptDialog.kt index 7ed2dd8b92..192e7c2756 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/BackupPromptDialog.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/BackupPromptDialog.kt @@ -21,15 +21,28 @@ import android.os.Build import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog import androidx.core.content.edit -import com.ichi2.anki.* import com.ichi2.anki.CollectionManager.withCol +import com.ichi2.anki.CrashReportService +import com.ichi2.anki.DeckPicker +import com.ichi2.anki.R +import com.ichi2.anki.canSync +import com.ichi2.anki.isLoggedIn +import com.ichi2.anki.millisecondsSinceLastSync import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.servicelayer.ScopedStorageService.collectionWillBeMadeInaccessibleAfterUninstall import com.ichi2.anki.servicelayer.ScopedStorageService.userIsPromptedToDeleteCollectionOnUninstall import com.ichi2.compat.CompatHelper.Companion.getPackageInfoCompat import com.ichi2.compat.PackageInfoFlagsCompat import com.ichi2.libanki.utils.TimeManager -import com.ichi2.utils.* +import com.ichi2.utils.Permissions +import com.ichi2.utils.cancelable +import com.ichi2.utils.checkBoxPrompt +import com.ichi2.utils.create +import com.ichi2.utils.message +import com.ichi2.utils.negativeButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title import timber.log.Timber /** 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 4dd87e32f1..985e9de66b 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DatabaseErrorDialog.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DatabaseErrorDialog.kt @@ -30,19 +30,50 @@ import androidx.appcompat.app.AlertDialog import androidx.core.app.ActivityCompat import androidx.core.os.BundleCompat import androidx.core.os.bundleOf -import com.ichi2.anki.* -import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.* +import com.ichi2.anki.AnkiActivity +import com.ichi2.anki.BackupManager +import com.ichi2.anki.CollectionHelper +import com.ichi2.anki.CollectionManager +import com.ichi2.anki.ConflictResolution +import com.ichi2.anki.DatabaseRestorationListener +import com.ichi2.anki.DeckPicker +import com.ichi2.anki.LocalizedUnambiguousBackupTimeFormatter +import com.ichi2.anki.R +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_CONFIRM_DATABASE_CHECK +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_CONFIRM_RESTORE_BACKUP +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_DB_ERROR +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_DB_LOCKED +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_DISK_FULL +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_ERROR_HANDLING +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_LOAD_FAILED +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_NEW_COLLECTION +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_ONE_WAY_SYNC_FROM_SERVER +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_REPAIR_COLLECTION +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_RESTORE_BACKUP +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.DIALOG_STORAGE_UNAVAILABLE_AFTER_UNINSTALL +import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType.INCOMPATIBLE_DB_VERSION import com.ichi2.anki.dialogs.ImportFileSelectionFragment.ImportOptions +import com.ichi2.anki.isLoggedIn +import com.ichi2.anki.launchCatchingTask import com.ichi2.anki.servicelayer.ScopedStorageService +import com.ichi2.anki.showImportDialog import com.ichi2.libanki.Consts import com.ichi2.libanki.utils.TimeManager -import com.ichi2.utils.* import com.ichi2.utils.UiUtil.makeBold +import com.ichi2.utils.cancelable +import com.ichi2.utils.create +import com.ichi2.utils.listItems +import com.ichi2.utils.listItemsAndMessage +import com.ichi2.utils.message +import com.ichi2.utils.negativeButton +import com.ichi2.utils.neutralButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title import kotlinx.parcelize.Parcelize import timber.log.Timber import java.io.File import java.io.IOException -import java.util.* class DatabaseErrorDialog : AsyncDialogFragment() { private lateinit var repairValues: IntArray diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckPickerAnalyticsOptInDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckPickerAnalyticsOptInDialog.kt index 8e11d50e85..d9a7c8272d 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckPickerAnalyticsOptInDialog.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/DeckPickerAnalyticsOptInDialog.kt @@ -22,7 +22,13 @@ import com.ichi2.anki.DeckPicker import com.ichi2.anki.R import com.ichi2.anki.analytics.AnalyticsDialogFragment import com.ichi2.anki.analytics.UsageAnalytics -import com.ichi2.utils.* +import com.ichi2.utils.cancelable +import com.ichi2.utils.checkBoxPrompt +import com.ichi2.utils.create +import com.ichi2.utils.getCheckBoxPrompt +import com.ichi2.utils.message +import com.ichi2.utils.positiveButton +import com.ichi2.utils.title class DeckPickerAnalyticsOptInDialog : AnalyticsDialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): AlertDialog { 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 c05f1442d0..4cb99597f2 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.CollectionLoadingErrorDialog +import com.ichi2.anki.DeckPicker +import com.ichi2.anki.IntentHandler +import com.ichi2.anki.MigrateStorageOnSyncSuccess +import com.ichi2.anki.OneWaySyncDialog import com.ichi2.anki.analytics.UsageAnalytics import com.ichi2.utils.HandlerUtils.getDefaultLooper import com.ichi2.utils.ImportUtils diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ExportReadyDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ExportReadyDialog.kt index 6d765093a1..343e23f08f 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ExportReadyDialog.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ExportReadyDialog.kt @@ -23,7 +23,8 @@ import androidx.appcompat.app.AlertDialog import androidx.core.os.bundleOf import com.ichi2.anki.DeckPicker import com.ichi2.anki.R -import com.ichi2.utils.* +import com.ichi2.utils.negativeButton +import com.ichi2.utils.positiveButton class ExportReadyDialog(private val listener: ExportReadyDialogListener) : AsyncDialogFragment() { interface ExportReadyDialogListener { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/WhiteBoardWidthDialog.kt b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/WhiteBoardWidthDialog.kt index 56a9293b9f..16de353eea 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/WhiteBoardWidthDialog.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/dialogs/WhiteBoardWidthDialog.kt @@ -24,7 +24,10 @@ import android.widget.SeekBar.OnSeekBarChangeListener import androidx.appcompat.app.AlertDialog import com.ichi2.anki.R import com.ichi2.ui.FixedTextView -import com.ichi2.utils.* +import com.ichi2.utils.negativeButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title import java.util.function.Consumer class WhiteBoardWidthDialog(private val context: Context, private var wbStrokeWidth: Int) { 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 3e1de51ba7..d5df0b9bf1 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 @@ -32,12 +32,25 @@ import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AlertDialog import androidx.core.content.edit import androidx.fragment.app.DialogFragment -import com.ichi2.anki.* +import com.ichi2.anki.CrashReportService +import com.ichi2.anki.R +import com.ichi2.anki.Reviewer 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.anki.launchCatchingTask import com.ichi2.anki.model.CardStateFilter import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.showThemedToast @@ -59,7 +72,7 @@ import net.ankiweb.rsdroid.exceptions.BackendDeckIsFilteredException import org.json.JSONArray import org.json.JSONObject import timber.log.Timber -import java.util.* +import java.util.Locale class CustomStudyDialog(private val collection: Collection, private val customStudyListener: CustomStudyListener?) : AnalyticsDialogFragment(), TagsDialogListener { 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 16740c1f11..eef21cf9b6 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,13 +19,18 @@ 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.Locale 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 2a2687af02..60abbb1bdf 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 @@ -20,7 +20,8 @@ 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.ArrayList +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/introduction/SetupCollectionFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/introduction/SetupCollectionFragment.kt index 1d6d45a945..9c5db26964 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 import kotlinx.parcelize.Parcelize /** 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 fcc54bdb31..975bcbc34b 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 2045e50077..400b4ab654 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/multimediacard/MediaPlayer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/MediaPlayer.kt index 95ecfe6854..b24509f4fa 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 e63a6f567a..6809a195e5 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 @@ -37,7 +37,16 @@ import androidx.lifecycle.LifecycleOwner import com.ichi2.anki.AnkiActivity import com.ichi2.anki.R 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.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.anki.showThemedToast import com.ichi2.audio.AudioRecordingController import com.ichi2.audio.AudioRecordingController.Companion.isAudioRecordingSaved 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 fa3993e821..fb4d2b3d71 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,7 @@ import android.widget.ArrayAdapter import androidx.appcompat.app.AlertDialog import androidx.fragment.app.DialogFragment import com.ichi2.utils.KotlinCleanup -import java.util.* +import java.util.ArrayList /** * 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 29a3041b54..0dbd7ccb36 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 @@ -55,7 +55,8 @@ import androidx.core.content.ContentResolverCompat import androidx.core.content.FileProvider import androidx.core.content.getSystemService import androidx.core.os.BundleCompat -import com.canhub.cropper.* +import com.canhub.cropper.CropException +import com.canhub.cropper.CropImageView import com.ichi2.anki.AnkiDroidApp import com.ichi2.anki.CrashReportService import com.ichi2.anki.DrawingActivity @@ -63,7 +64,15 @@ import com.ichi2.anki.R import com.ichi2.anki.multimediacard.activity.MultimediaEditFieldActivity import com.ichi2.anki.showThemedToast import com.ichi2.ui.FixedEditText -import com.ichi2.utils.* +import com.ichi2.utils.BitmapUtil +import com.ichi2.utils.ExifUtil +import com.ichi2.utils.FileUtil +import com.ichi2.utils.ImageUtils +import com.ichi2.utils.KotlinCleanup +import com.ichi2.utils.message +import com.ichi2.utils.negativeButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show import timber.log.Timber import java.io.File import java.io.FileNotFoundException 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 fd13973876..63906b1362 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,7 @@ 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.* +import java.util.ArrayList /** * Implementation of the editable note. 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 01acd214d2..5339433be0 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/CustomToolbarButton.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/CustomToolbarButton.kt @@ -19,7 +19,7 @@ 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.* +import java.util.ArrayList 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 0745ff292d..061337ad86 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/FieldState.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/FieldState.kt @@ -28,7 +28,7 @@ import com.ichi2.libanki.Notetypes import com.ichi2.utils.KotlinCleanup import com.ichi2.utils.MapUtil.getKeyByValue import org.json.JSONObject -import java.util.* +import java.util.ArrayList import kotlin.math.min /** Responsible for recreating EditFieldLines after NoteEditor operations 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 bc8e5222ed..c7f571f4bb 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/noteeditor/Toolbar.kt @@ -27,7 +27,12 @@ import android.graphics.drawable.Drawable import android.util.AttributeSet import android.util.DisplayMetrics import android.util.TypedValue -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 @@ -48,7 +53,7 @@ import com.ichi2.utils.ViewGroupUtils.getAllChildrenRecursive import com.ichi2.utils.show import com.ichi2.utils.title import timber.log.Timber -import java.util.* +import java.util.Objects import kotlin.math.ceil /** 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 4b73966fae..3ea738a9e4 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AboutFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AboutFragment.kt @@ -27,7 +27,12 @@ import android.widget.TextView import androidx.appcompat.app.AlertDialog import androidx.core.text.parseAsHtml import androidx.fragment.app.Fragment -import com.ichi2.anki.* +import com.ichi2.anki.AnkiActivity +import com.ichi2.anki.AnkiDroidApp +import com.ichi2.anki.BuildConfig +import com.ichi2.anki.Info +import com.ichi2.anki.R +import com.ichi2.anki.launchCatchingTask import com.ichi2.anki.servicelayer.DebugInfoService import com.ichi2.anki.snackbar.showSnackbar import com.ichi2.utils.IntentUtil 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 da44e5418d..1303c12fe8 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AdvancedSettingsFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AdvancedSettingsFragment.kt @@ -20,8 +20,12 @@ import android.content.Context import android.content.Intent import android.content.pm.PackageManager import androidx.appcompat.app.AlertDialog -import androidx.preference.* -import com.ichi2.anki.* +import androidx.preference.EditTextPreference +import androidx.preference.Preference +import androidx.preference.SwitchPreferenceCompat +import com.ichi2.anki.AnkiActivity +import com.ichi2.anki.CollectionHelper +import com.ichi2.anki.MetaDB import com.ichi2.anki.R import com.ichi2.anki.exception.StorageAccessException import com.ichi2.anki.provider.CardContentProvider diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/CustomButtonsSettingsFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/CustomButtonsSettingsFragment.kt index c77b1bb649..d0e07c9e6c 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/CustomButtonsSettingsFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/CustomButtonsSettingsFragment.kt @@ -24,7 +24,10 @@ import androidx.preference.Preference import com.ichi2.anki.CollectionManager.TR import com.ichi2.anki.R import com.ichi2.anki.ui.internationalization.toSentenceCase -import com.ichi2.utils.* +import com.ichi2.utils.negativeButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title class CustomButtonsSettingsFragment : SettingsFragment() { override val preferenceResource: Int 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 80750f4fe1..c5c9f8f60c 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/DevOptionsFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/DevOptionsFragment.kt @@ -20,10 +20,16 @@ import android.content.Intent import androidx.appcompat.app.AlertDialog import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat -import com.ichi2.anki.* +import com.ichi2.anki.BuildConfig +import com.ichi2.anki.CollectionManager +import com.ichi2.anki.OnboardingUtils +import com.ichi2.anki.R import com.ichi2.anki.analytics.UsageAnalytics import com.ichi2.anki.instantnoteeditor.InstantNoteEditorActivity +import com.ichi2.anki.launchCatchingTask +import com.ichi2.anki.showThemedToast import com.ichi2.anki.snackbar.showSnackbar +import com.ichi2.anki.withProgress import com.ichi2.preferences.IncrementerNumberRangePreferenceCompat import com.ichi2.utils.show import kotlinx.coroutines.Dispatchers 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 e8a827587a..0bead5245c 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/GeneralSettingsFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/GeneralSettingsFragment.kt @@ -20,10 +20,13 @@ import androidx.core.os.LocaleListCompat import androidx.preference.ListPreference import androidx.preference.SwitchPreferenceCompat import anki.config.ConfigKey -import com.ichi2.anki.* +import com.ichi2.anki.CollectionManager import com.ichi2.anki.CollectionManager.withCol +import com.ichi2.anki.CrashReportService +import com.ichi2.anki.R import com.ichi2.anki.contextmenu.AnkiCardContextMenu import com.ichi2.anki.contextmenu.CardBrowserContextMenu +import com.ichi2.anki.launchCatchingTask import com.ichi2.utils.LanguageUtil import com.ichi2.utils.LanguageUtil.getStringByLocale import com.ichi2.utils.LanguageUtil.getSystemLocale 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 cb589815da..395dd3b813 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/provider/CardContentProvider.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/provider/CardContentProvider.kt @@ -18,22 +18,37 @@ ****************************************************************************************/ 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 import android.database.sqlite.SQLiteQueryBuilder import android.net.Uri import android.webkit.MimeTypeMap -import com.ichi2.anki.* +import com.ichi2.anki.AnkiDroidApp +import com.ichi2.anki.BuildConfig +import com.ichi2.anki.CollectionManager +import com.ichi2.anki.CrashReportService +import com.ichi2.anki.FlashCardsContract import com.ichi2.anki.utils.ext.description -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.Deck +import com.ichi2.libanki.DeckId +import com.ichi2.libanki.Decks +import com.ichi2.libanki.Note +import com.ichi2.libanki.NoteId +import com.ichi2.libanki.NoteTypeId +import com.ichi2.libanki.NotetypeJson import com.ichi2.libanki.Notetypes import com.ichi2.libanki.Sound.replaceWithSoundTags -import com.ichi2.libanki.TemplateManager.* -import com.ichi2.libanki.TemplateManager.TemplateRenderContext.* +import com.ichi2.libanki.TemplateManager.TemplateRenderContext.TemplateRenderOutput +import com.ichi2.libanki.Utils import com.ichi2.libanki.exception.ConfirmModSchemaException import com.ichi2.libanki.exception.EmptyMediaException import com.ichi2.libanki.sched.DeckNode @@ -49,7 +64,6 @@ import org.json.JSONObject import timber.log.Timber import java.io.File import java.io.IOException -import java.util.* /** * 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 2da3da2864..859bfbf06d 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,9 @@ import androidx.annotation.VisibleForTesting import com.ichi2.anki.CollectionManager.TR 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.GOOD +import com.ichi2.anki.reviewer.AnswerButtons.HARD import com.ichi2.anki.snackbar.showSnackbar import com.ichi2.anki.utils.ext.secondsToShowAnswer import com.ichi2.anki.utils.ext.secondsToShowQuestion 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 0efb4bebfc..c026f397ee 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/MappableBinding.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/MappableBinding.kt @@ -22,10 +22,14 @@ import androidx.annotation.CheckResult import com.ichi2.anki.R import com.ichi2.anki.cardviewer.Gesture import com.ichi2.anki.cardviewer.ViewerCommand -import com.ichi2.anki.reviewer.Binding.* +import com.ichi2.anki.reviewer.Binding.AxisButtonBinding +import com.ichi2.anki.reviewer.Binding.GestureInput +import com.ichi2.anki.reviewer.Binding.KeyBinding +import com.ichi2.anki.reviewer.Binding.KeyCode +import com.ichi2.anki.reviewer.Binding.UnicodeCharacter import com.ichi2.utils.hash import timber.log.Timber -import java.util.* +import java.util.Objects import kotlin.collections.ArrayList /** 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 abc4c8a8d9..960048cfd2 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/PeripheralKeymap.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/reviewer/PeripheralKeymap.kt @@ -23,8 +23,8 @@ import com.ichi2.anki.cardviewer.ViewerCommand import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.reviewer.Binding.Companion.possibleKeyBindings import com.ichi2.anki.reviewer.CardSide.Companion.fromAnswer -import com.ichi2.anki.reviewer.MappableBinding.* import com.ichi2.anki.reviewer.MappableBinding.Companion.fromPreference +import com.ichi2.anki.reviewer.MappableBinding.Screen /** 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/LanguageHintService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/LanguageHintService.kt index ba384cfc99..74daff22d7 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.NotetypeJson import com.ichi2.libanki.Notetypes import org.json.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 ee5fa223e9..a2c37e1a85 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.Collection diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/PreferenceUpgradeService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/PreferenceUpgradeService.kt index 37a60705d3..e27bc60a84 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/PreferenceUpgradeService.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/PreferenceUpgradeService.kt @@ -40,7 +40,7 @@ import com.ichi2.anki.reviewer.screenBuilder import com.ichi2.libanki.Consts import com.ichi2.utils.HashUtil.hashSetInit import timber.log.Timber -import java.util.* +import java.util.Locale import kotlin.collections.ArrayList private typealias VersionIdentifier = Int 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 0b41cafcb6..5ddc2f0295 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/SchedulerService.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/SchedulerService.kt @@ -21,7 +21,8 @@ import com.google.android.material.snackbar.Snackbar import com.ichi2.anki.R import com.ichi2.anki.snackbar.showSnackbar import com.ichi2.anki.withProgress -import com.ichi2.libanki.* +import com.ichi2.libanki.CardId +import com.ichi2.libanki.undoableOp suspend fun FragmentActivity.rescheduleCards(cardIds: List, newDays: Int) { withProgress { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/DeleteEmptyDirectory.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/DeleteEmptyDirectory.kt index 43b71946d1..c9e0c6ecc9 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/DeleteEmptyDirectory.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/DeleteEmptyDirectory.kt @@ -17,7 +17,9 @@ package com.ichi2.anki.servicelayer.scopedstorage import com.ichi2.anki.model.Directory -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.DirectoryNotEmptyException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.operationCompleted import com.ichi2.compat.CompatHelper import timber.log.Timber 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 afa83024ef..07d747313a 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,9 @@ import com.ichi2.anki.CollectionHelper import com.ichi2.anki.CrashReportService import com.ichi2.anki.model.Directory import com.ichi2.anki.preferences.sharedPrefs -import com.ichi2.anki.servicelayer.* import com.ichi2.anki.servicelayer.ScopedStorageService.PREF_MIGRATION_DESTINATION import com.ichi2.anki.servicelayer.ScopedStorageService.PREF_MIGRATION_SOURCE +import com.ichi2.anki.servicelayer.ValidatedMigrationSourceAndDestination import com.ichi2.anki.servicelayer.scopedstorage.MigrateEssentialFiles.Companion.PRIORITY_FILES import com.ichi2.anki.servicelayer.scopedstorage.MigrateEssentialFiles.UserActionRequiredException import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.NumberOfBytes 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 ec6fefb655..b48a56f8e1 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,7 +21,11 @@ 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.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.FileConflictException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.FileConflictResolutionFailedException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.FileDirectoryConflictException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.NumberOfBytes import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.operationCompleted import com.ichi2.compat.CompatHelper diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFile.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFile.kt index 7388e742a1..94d1b473e6 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFile.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFile.kt @@ -19,7 +19,13 @@ package com.ichi2.anki.servicelayer.scopedstorage import androidx.annotation.VisibleForTesting import com.ichi2.anki.model.Directory import com.ichi2.anki.model.DiskFile -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.DirectoryValidator +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.EquivalentFileException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.FileConflictException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.FileDirectoryConflictException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MissingDirectoryException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.operationCompleted import com.ichi2.compat.CompatHelper import com.ichi2.utils.FileUtil diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFileOrDirectory.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFileOrDirectory.kt index 8222d4d09f..e9f2313f53 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFileOrDirectory.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFileOrDirectory.kt @@ -18,7 +18,7 @@ package com.ichi2.anki.servicelayer.scopedstorage import com.ichi2.anki.model.Directory import com.ichi2.anki.model.DiskFile -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MoveDirectory import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.operationCompleted 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 0faac79a0a..a85a7094c3 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/services/BootService.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/services/BootService.kt @@ -6,7 +6,8 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import androidx.core.app.PendingIntentCompat -import com.ichi2.anki.* +import com.ichi2.anki.CollectionManager +import com.ichi2.anki.R import com.ichi2.anki.preferences.Preferences import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.showThemedToast diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/services/MigrationService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/services/MigrationService.kt index ebd632f149..8628534eea 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/services/MigrationService.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/services/MigrationService.kt @@ -31,7 +31,12 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle -import com.ichi2.anki.* +import com.ichi2.anki.AnkiDroidApp +import com.ichi2.anki.Channel +import com.ichi2.anki.CollectionManager +import com.ichi2.anki.CrashReportService +import com.ichi2.anki.IntentHandler +import com.ichi2.anki.R import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.servicelayer.ScopedStorageService import com.ichi2.anki.servicelayer.ScopedStorageService.PREF_MIGRATION_DESTINATION diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ui/preferences/screens/BackupLimitsPresenter.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ui/preferences/screens/BackupLimitsPresenter.kt index fd62b658fb..b9607a6d21 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/ui/preferences/screens/BackupLimitsPresenter.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ui/preferences/screens/BackupLimitsPresenter.kt @@ -15,7 +15,11 @@ package com.ichi2.anki.ui.preferences.screens import androidx.fragment.app.viewModels -import androidx.lifecycle.* +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ViewModel +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.viewModelScope import androidx.preference.EditTextPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat @@ -26,7 +30,9 @@ import com.ichi2.anki.R import com.ichi2.anki.launchCatchingTask import com.ichi2.anki.preferences.requirePreference import com.ichi2.anki.snackbar.showSnackbar -import com.ichi2.anki.ui.windows.managespace.* +import com.ichi2.anki.ui.windows.managespace.CollectionDirectoryProvider +import com.ichi2.anki.ui.windows.managespace.collectionDirectoryExists +import com.ichi2.anki.ui.windows.managespace.ensureCanWriteToOrCreateCollectionDirectory import com.ichi2.anki.utils.getUserFriendlyErrorText import com.ichi2.preferences.HtmlHelpPreference import com.ichi2.preferences.IncrementerNumberRangePreferenceCompat diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/managespace/FileUtils.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/managespace/FileUtils.kt index 6d44d34643..435c64b0cc 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/managespace/FileUtils.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/managespace/FileUtils.kt @@ -24,10 +24,14 @@ import androidx.annotation.RequiresApi import androidx.core.content.ContextCompat import com.ichi2.anki.R import com.ichi2.anki.utils.TranslatableException -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ensureActive +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File -import java.util.* +import java.util.UUID import kotlin.coroutines.Continuation import kotlin.coroutines.resume diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/managespace/ManageSpaceFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/managespace/ManageSpaceFragment.kt index 268f971186..c9aa68f82f 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/managespace/ManageSpaceFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/managespace/ManageSpaceFragment.kt @@ -27,8 +27,12 @@ import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.lifecycleScope import androidx.lifecycle.viewModelScope import androidx.preference.Preference -import com.ichi2.anki.* +import com.ichi2.anki.BackupManager +import com.ichi2.anki.CollectionManager import com.ichi2.anki.CollectionManager.withCol +import com.ichi2.anki.LocalizedUnambiguousBackupTimeFormatter +import com.ichi2.anki.R +import com.ichi2.anki.launchCatchingTask import com.ichi2.anki.preferences.SettingsFragment import com.ichi2.anki.preferences.requirePreference import com.ichi2.anki.snackbar.showSnackbar @@ -36,11 +40,16 @@ import com.ichi2.anki.ui.dialogs.tools.AsyncDialogBuilder.CheckedItems import com.ichi2.anki.ui.dialogs.tools.DialogResult import com.ichi2.anki.ui.dialogs.tools.awaitDialog import com.ichi2.anki.utils.getUserFriendlyErrorText +import com.ichi2.anki.withProgress import com.ichi2.async.deleteMedia import com.ichi2.preferences.TextWidgetPreference -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.io.File +import kotlin.coroutines.cancellation.CancellationException import kotlin.system.exitProcess sealed interface Size { 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 cf43d53ee7..dd560751dd 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/widgets/DeckAdapter.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/widgets/DeckAdapter.kt @@ -22,7 +22,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.CheckResult import androidx.annotation.VisibleForTesting import androidx.recyclerview.widget.RecyclerView @@ -36,7 +41,6 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import net.ankiweb.rsdroid.RustCleanup import timber.log.Timber -import java.util.* @KotlinCleanup("lots to do") @RustCleanup("Lots of bad code: should not be using suspend functions inside an adapter") diff --git a/AnkiDroid/src/main/java/com/ichi2/async/CollectionOperations.kt b/AnkiDroid/src/main/java/com/ichi2/async/CollectionOperations.kt index 58af41b7fa..5526bb1a3d 100644 --- a/AnkiDroid/src/main/java/com/ichi2/async/CollectionOperations.kt +++ b/AnkiDroid/src/main/java/com/ichi2/async/CollectionOperations.kt @@ -16,16 +16,17 @@ package com.ichi2.async -import com.ichi2.anki.* +import com.ichi2.anki.CardBrowser +import com.ichi2.anki.CardTemplateNotetype +import com.ichi2.anki.StudyOptionsFragment import com.ichi2.anki.browser.CardBrowserColumn -import com.ichi2.libanki.* import com.ichi2.libanki.Collection +import com.ichi2.libanki.NotetypeJson import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ensureActive import kotlinx.coroutines.withContext import net.ankiweb.rsdroid.exceptions.BackendNotFoundException import timber.log.Timber -import java.util.* /** * Takes a list of media file names and removes them from the [Collection] diff --git a/AnkiDroid/src/main/java/com/ichi2/compat/Compat.kt b/AnkiDroid/src/main/java/com/ichi2/compat/Compat.kt index 1b1d99bb51..c185dc4919 100644 --- a/AnkiDroid/src/main/java/com/ichi2/compat/Compat.kt +++ b/AnkiDroid/src/main/java/com/ichi2/compat/Compat.kt @@ -30,8 +30,13 @@ import android.net.Uri import android.os.Bundle import android.view.View import androidx.annotation.CheckResult -import java.io.* -import java.util.* +import java.io.File +import java.io.FileNotFoundException +import java.io.IOException +import java.io.InputStream +import java.io.OutputStream +import java.io.Serializable +import java.util.Locale /** * 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 5a52f13ddc..2d09a40675 100644 --- a/AnkiDroid/src/main/java/com/ichi2/compat/CompatHelper.kt +++ b/AnkiDroid/src/main/java/com/ichi2/compat/CompatHelper.kt @@ -27,7 +27,8 @@ import android.content.pm.ResolveInfo import android.os.Build import android.os.Bundle import android.view.KeyCharacterMap.deviceHasKey -import android.view.KeyEvent.* +import android.view.KeyEvent.KEYCODE_PAGE_DOWN +import android.view.KeyEvent.KEYCODE_PAGE_UP import androidx.core.content.ContextCompat import com.ichi2.compat.CompatHelper.Companion.compat import java.io.Serializable diff --git a/AnkiDroid/src/main/java/com/ichi2/compat/CompatV26.kt b/AnkiDroid/src/main/java/com/ichi2/compat/CompatV26.kt index b7ac642e07..b25247cbe0 100644 --- a/AnkiDroid/src/main/java/com/ichi2/compat/CompatV26.kt +++ b/AnkiDroid/src/main/java/com/ichi2/compat/CompatV26.kt @@ -23,8 +23,18 @@ import android.os.Vibrator import android.view.View import androidx.annotation.VisibleForTesting import com.ichi2.anki.NotificationChannels -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/compat/ResolveInfoCompat.kt b/AnkiDroid/src/main/java/com/ichi2/compat/ResolveInfoCompat.kt index b4af6a8b09..0177aae26b 100644 --- a/AnkiDroid/src/main/java/com/ichi2/compat/ResolveInfoCompat.kt +++ b/AnkiDroid/src/main/java/com/ichi2/compat/ResolveInfoCompat.kt @@ -31,7 +31,10 @@ */ package com.ichi2.compat -import android.content.pm.* +import android.content.pm.ApplicationInfo +import android.content.pm.ComponentInfo +import android.content.pm.PackageManager +import android.content.pm.ResolveInfo import android.os.UserManager import androidx.annotation.LongDef diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Collection.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Collection.kt index 54a63ba015..d88a4b4aae 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/Collection.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Collection.kt @@ -55,8 +55,7 @@ import net.ankiweb.rsdroid.Backend import net.ankiweb.rsdroid.RustCleanup import net.ankiweb.rsdroid.exceptions.BackendInvalidInputException import timber.log.Timber -import java.io.* -import java.util.* +import java.io.File // Anki maintains a cache of used tags so it can quickly present a list of tags // for autocomplete and in the browser. For efficiency, deletions are not diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Decks.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Decks.kt index b2f41e398b..97b3067781 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/Decks.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Decks.kt @@ -37,13 +37,16 @@ import anki.decks.SetDeckCollapsedRequest import com.google.protobuf.kotlin.toByteStringUtf8 import com.ichi2.annotations.NeedsTest import com.ichi2.libanki.backend.BackendUtils -import com.ichi2.libanki.utils.* +import com.ichi2.libanki.utils.LibAnkiAlias +import com.ichi2.libanki.utils.NotInLibAnki +import com.ichi2.libanki.utils.append +import com.ichi2.libanki.utils.len import com.ichi2.utils.jsonObjectIterable import net.ankiweb.rsdroid.RustCleanup import net.ankiweb.rsdroid.exceptions.BackendDeckIsFilteredException import net.ankiweb.rsdroid.exceptions.BackendNotFoundException import org.json.JSONArray -import java.util.* +import java.util.LinkedList typealias UpdateDeckConfigs = UpdateDeckConfigsRequest data class DeckNameId(val name: String, val id: DeckId) diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Media.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Media.kt index 99e5c9b21d..7e1bf3682f 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/Media.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Media.kt @@ -21,7 +21,7 @@ import androidx.annotation.WorkerThread import com.google.protobuf.kotlin.toByteString import com.ichi2.libanki.exception.EmptyMediaException import timber.log.Timber -import java.io.* +import java.io.File /** * Media manager - handles the addition and removal of media files from the media directory (collection.media) and diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Note.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Note.kt index 2bdb865c38..624637861c 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/Note.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Note.kt @@ -29,7 +29,7 @@ import com.ichi2.utils.KotlinCleanup import com.ichi2.utils.deepClone import com.ichi2.utils.emptyStringArray import org.json.JSONObject -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/NotetypeJson.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/NotetypeJson.kt index 525206741f..6d7df733fc 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/NotetypeJson.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/NotetypeJson.kt @@ -17,7 +17,9 @@ package com.ichi2.libanki import androidx.annotation.CheckResult -import com.ichi2.utils.* +import com.ichi2.utils.KotlinCleanup +import com.ichi2.utils.deepClonedInto +import com.ichi2.utils.toStringList import org.intellij.lang.annotations.Language import org.json.JSONArray import org.json.JSONObject diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Notetypes.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Notetypes.kt index edbd715365..b39d1491d3 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/Notetypes.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Notetypes.kt @@ -45,7 +45,13 @@ import com.ichi2.libanki.Utils.checksum import com.ichi2.libanki.backend.BackendUtils import com.ichi2.libanki.backend.BackendUtils.to_json_bytes import com.ichi2.libanki.exception.ConfirmModSchemaException -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.Assert import com.ichi2.utils.HashUtil import com.ichi2.utils.jsonObjectIterable diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Utils.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Utils.kt index ebe9e6525f..35ff05fd6f 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/Utils.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Utils.kt @@ -21,14 +21,15 @@ package com.ichi2.libanki import androidx.core.text.HtmlCompat import com.ichi2.libanki.Consts.FIELD_SEPARATOR import timber.log.Timber -import java.io.* +import java.io.UnsupportedEncodingException import java.math.BigInteger import java.security.MessageDigest import java.security.NoSuchAlgorithmException -import java.util.* +import java.util.Locale +import java.util.Random import java.util.regex.Matcher import java.util.regex.Pattern -import kotlin.math.* +import kotlin.math.pow // TODO switch to standalone functions and properties and remove Utils container object Utils { diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DeckNode.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DeckNode.kt index 936b15450f..890de5b518 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DeckNode.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DeckNode.kt @@ -19,7 +19,7 @@ import anki.decks.DeckTreeNode import com.ichi2.libanki.DeckId import com.ichi2.libanki.utils.append import java.lang.ref.WeakReference -import java.util.* +import java.util.Locale data class DeckNode( val node: DeckTreeNode, diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DummyScheduler.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DummyScheduler.kt index cd820ba835..f50ce9d6e2 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DummyScheduler.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/DummyScheduler.kt @@ -18,7 +18,7 @@ package com.ichi2.libanki.sched -import com.ichi2.libanki.* +import com.ichi2.libanki.Card import com.ichi2.libanki.Collection import java.lang.Exception diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/Scheduler.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/Scheduler.kt index 418393c914..7582b06d51 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/sched/Scheduler.kt +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sched/Scheduler.kt @@ -27,7 +27,19 @@ import anki.config.OptionalStringConfigKey import anki.config.optionalStringConfigKey import anki.frontend.SchedulingStatesWithContext import anki.i18n.FormatTimespanRequest -import anki.scheduler.* +import anki.scheduler.BuryOrSuspendCardsRequest +import anki.scheduler.CardAnswer +import anki.scheduler.CongratsInfoResponse +import anki.scheduler.CustomStudyDefaultsResponse +import anki.scheduler.CustomStudyRequest +import anki.scheduler.QueuedCards +import anki.scheduler.SchedTimingTodayResponse +import anki.scheduler.SchedulingContext +import anki.scheduler.SchedulingState +import anki.scheduler.SchedulingStates +import anki.scheduler.UnburyDeckRequest +import anki.scheduler.cardAnswer +import anki.scheduler.scheduleCardsAsNewRequest import com.google.android.material.snackbar.Snackbar import com.ichi2.anki.R import com.ichi2.anki.snackbar.showSnackbar 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 0795245c09..f9c9d1a77e 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 com.ichi2.utils.jsonObjectIterable import org.json.JSONArray import org.json.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 5607b234dd..a4b3f56047 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/preferences/ControlPreference.kt b/AnkiDroid/src/main/java/com/ichi2/preferences/ControlPreference.kt index 56125b3e28..ca1d626c6e 100644 --- a/AnkiDroid/src/main/java/com/ichi2/preferences/ControlPreference.kt +++ b/AnkiDroid/src/main/java/com/ichi2/preferences/ControlPreference.kt @@ -33,14 +33,19 @@ import com.ichi2.anki.dialogs.WarningDisplay import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.reviewer.CardSide import com.ichi2.anki.reviewer.MappableBinding -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.anki.reviewer.MappableBinding.Screen import com.ichi2.anki.reviewer.screenBuilder import com.ichi2.anki.showThemedToast import com.ichi2.ui.AxisPicker import com.ichi2.ui.KeyPicker -import com.ichi2.utils.* +import com.ichi2.utils.customView +import com.ichi2.utils.message +import com.ichi2.utils.negativeButton +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title /** * 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 dec0901df8..d69d38fa22 100644 --- a/AnkiDroid/src/main/java/com/ichi2/preferences/IncrementerNumberRangePreference.kt +++ b/AnkiDroid/src/main/java/com/ichi2/preferences/IncrementerNumberRangePreference.kt @@ -25,7 +25,6 @@ import android.widget.Button import android.widget.LinearLayout import com.ichi2.anki.R import com.ichi2.utils.KotlinCleanup -import java.lang.NumberFormatException // TODO Tracked in https://github.com/ankidroid/Anki-Android/issues/5019 : use IncrementerNumberRangePreferenceCompat @Suppress("deprecation", "OVERRIDE_DEPRECATION") diff --git a/AnkiDroid/src/main/java/com/ichi2/ui/AppCompatPreferenceActivity.kt b/AnkiDroid/src/main/java/com/ichi2/ui/AppCompatPreferenceActivity.kt index fedae9013f..935f682f30 100644 --- a/AnkiDroid/src/main/java/com/ichi2/ui/AppCompatPreferenceActivity.kt +++ b/AnkiDroid/src/main/java/com/ichi2/ui/AppCompatPreferenceActivity.kt @@ -18,11 +18,20 @@ 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.AlertDialog @@ -35,13 +44,18 @@ import com.ichi2.anki.receiver.SdCardReceiver import com.ichi2.compat.CompatHelper.Companion.registerReceiverCompat import com.ichi2.libanki.Collection import com.ichi2.libanki.Deck -import com.ichi2.utils.* +import com.ichi2.utils.HashUtil +import com.ichi2.utils.KotlinCleanup +import com.ichi2.utils.message +import com.ichi2.utils.positiveButton +import com.ichi2.utils.show +import com.ichi2.utils.title import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel import net.ankiweb.rsdroid.BackendException import timber.log.Timber -import java.util.* +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 6a3e698b2a..98b291b1c7 100644 --- a/AnkiDroid/src/main/java/com/ichi2/ui/GestureDisplay.kt +++ b/AnkiDroid/src/main/java/com/ichi2/ui/GestureDisplay.kt @@ -27,7 +27,20 @@ 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.Gesture.entries 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/DimmedPromptBackgroundDecorator.kt b/AnkiDroid/src/main/java/com/ichi2/utils/DimmedPromptBackgroundDecorator.kt index f8ba620936..757192f237 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/FileUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/FileUtil.kt index 3400b4f5f8..0b18e42c53 100644 --- a/AnkiDroid/src/main/java/com/ichi2/utils/FileUtil.kt +++ b/AnkiDroid/src/main/java/com/ichi2/utils/FileUtil.kt @@ -28,7 +28,7 @@ import java.io.FileInputStream import java.io.FileNotFoundException import java.io.IOException import java.io.InputStream -import java.util.* +import java.util.AbstractMap object FileUtil { diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/ImportUtils.kt b/AnkiDroid/src/main/java/com/ichi2/utils/ImportUtils.kt index b6623603db..df2cefa8f4 100644 --- a/AnkiDroid/src/main/java/com/ichi2/utils/ImportUtils.kt +++ b/AnkiDroid/src/main/java/com/ichi2/utils/ImportUtils.kt @@ -26,10 +26,14 @@ import android.provider.OpenableColumns import androidx.annotation.CheckResult import androidx.appcompat.app.AlertDialog import androidx.core.os.bundleOf -import com.ichi2.anki.* +import com.ichi2.anki.AnkiDroidApp +import com.ichi2.anki.CrashReportService +import com.ichi2.anki.DeckPicker +import com.ichi2.anki.R import com.ichi2.anki.dialogs.DialogHandler import com.ichi2.anki.dialogs.DialogHandlerMessage import com.ichi2.anki.dialogs.ImportDialog +import com.ichi2.anki.showImportDialog import com.ichi2.annotations.NeedsTest import com.ichi2.compat.CompatHelper import org.jetbrains.annotations.Contract @@ -40,7 +44,7 @@ import java.io.IOException import java.io.InputStream import java.net.URLDecoder import java.net.URLEncoder -import java.util.* +import java.util.Locale object ImportUtils { /* A filename should be shortened if over this threshold */ diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/NoteFieldDecorator.kt b/AnkiDroid/src/main/java/com/ichi2/utils/NoteFieldDecorator.kt index e046881136..303b67c281 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 564de90a77..f2929a8aee 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 import kotlin.math.min object StringUtil { diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/UniqueArrayList.kt b/AnkiDroid/src/main/java/com/ichi2/utils/UniqueArrayList.kt index 99466eb0f6..ed099d764a 100644 --- a/AnkiDroid/src/main/java/com/ichi2/utils/UniqueArrayList.kt +++ b/AnkiDroid/src/main/java/com/ichi2/utils/UniqueArrayList.kt @@ -17,7 +17,9 @@ 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.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/widget/AnkiDroidWidgetSmall.kt b/AnkiDroid/src/main/java/com/ichi2/widget/AnkiDroidWidgetSmall.kt index b04d0d3778..2d61effc32 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/test/java/com/ichi2/anki/AbstractFlashcardViewerCommandTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerCommandTest.kt index b4e086c7ff..f196b71ee4 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerCommandTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerCommandTest.kt @@ -17,7 +17,14 @@ package com.ichi2.anki import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.anki.cardviewer.ViewerCommand -import com.ichi2.anki.cardviewer.ViewerCommand.* +import com.ichi2.anki.cardviewer.ViewerCommand.TOGGLE_FLAG_BLUE +import com.ichi2.anki.cardviewer.ViewerCommand.TOGGLE_FLAG_GREEN +import com.ichi2.anki.cardviewer.ViewerCommand.TOGGLE_FLAG_ORANGE +import com.ichi2.anki.cardviewer.ViewerCommand.TOGGLE_FLAG_PINK +import com.ichi2.anki.cardviewer.ViewerCommand.TOGGLE_FLAG_PURPLE +import com.ichi2.anki.cardviewer.ViewerCommand.TOGGLE_FLAG_RED +import com.ichi2.anki.cardviewer.ViewerCommand.TOGGLE_FLAG_TURQUOISE +import com.ichi2.anki.cardviewer.ViewerCommand.UNSET_FLAG import com.ichi2.anki.cardviewer.ViewerRefresh import com.ichi2.libanki.Card import org.hamcrest.MatcherAssert.assertThat @@ -27,7 +34,8 @@ import org.hamcrest.Matchers.nullValue import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyInt -import org.mockito.Mockito.* +import org.mockito.Mockito.doAnswer +import org.mockito.Mockito.mock import org.mockito.invocation.InvocationOnMock import org.mockito.kotlin.whenever import org.robolectric.Robolectric diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerKeyboardInputTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerKeyboardInputTest.kt index 70831513da..27350fd728 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerKeyboardInputTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerKeyboardInputTest.kt @@ -17,7 +17,7 @@ package com.ichi2.anki import android.view.KeyEvent import androidx.test.ext.junit.runners.AndroidJUnit4 -import org.hamcrest.MatcherAssert.* +import org.hamcrest.MatcherAssert.assertThat import org.junit.Test import org.junit.runner.RunWith import timber.log.Timber diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerTest.kt index 563c2e7ef9..294f796d62 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/AbstractFlashcardViewerTest.kt @@ -37,19 +37,23 @@ import com.ichi2.testutils.AnkiAssert.assertDoesNotThrow import com.ichi2.testutils.common.Flaky import com.ichi2.testutils.common.OS import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* -import org.junit.Assert.* +import org.hamcrest.Matchers.containsString +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.not +import org.hamcrest.Matchers.notNullValue +import org.hamcrest.Matchers.nullValue +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource import org.junit.runner.RunWith -import org.mockito.Mockito.* +import org.mockito.Mockito.mock import org.robolectric.Robolectric import org.robolectric.Shadows import org.robolectric.android.controller.ActivityController import timber.log.Timber -import java.util.* +import java.util.Locale import java.util.stream.Stream import com.ichi2.anim.ActivityTransitionAnimation.Direction as Direction diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/AnalyticsTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/AnalyticsTest.kt index 61965d7f03..b1518c1572 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/AnalyticsTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/AnalyticsTest.kt @@ -17,8 +17,8 @@ package com.ichi2.anki import android.content.Context import android.content.res.Resources -import android.preference.* import androidx.core.content.edit +import androidx.preference.PreferenceManager import com.brsanthu.googleanalytics.GoogleAnalytics import com.brsanthu.googleanalytics.GoogleAnalyticsBuilder import com.brsanthu.googleanalytics.request.ExceptionHit @@ -29,7 +29,14 @@ import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.mockito.Mock -import org.mockito.Mockito.* +import org.mockito.Mockito.any +import org.mockito.Mockito.anyString +import org.mockito.Mockito.doReturn +import org.mockito.Mockito.mock +import org.mockito.Mockito.mockStatic +import org.mockito.Mockito.spy +import org.mockito.Mockito.validateMockitoUsage +import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations import org.mockito.kotlin.whenever diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/BackupManagerSimpleTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/BackupManagerSimpleTest.kt index cb41a8e0f7..8e66a64a3e 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/BackupManagerSimpleTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/BackupManagerSimpleTest.kt @@ -19,7 +19,9 @@ package com.ichi2.anki import anki.config.Preferences.BackupLimits import com.ichi2.anki.BackupManager.Companion.getLatestBackup import com.ichi2.testutils.MockTime -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.not +import org.hamcrest.CoreMatchers.nullValue import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.collection.ArrayMatching.arrayContainingInAnyOrder import org.hamcrest.io.FileMatchers.anExistingFile diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/BackupManagerTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/BackupManagerTest.kt index 56b8dba0c9..826b988e3f 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/BackupManagerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/BackupManagerTest.kt @@ -23,7 +23,13 @@ import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.MatcherAssert.assertThat import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mockito.* +import org.mockito.Mockito.anyString +import org.mockito.Mockito.doNothing +import org.mockito.Mockito.doReturn +import org.mockito.Mockito.spy +import org.mockito.Mockito.times +import org.mockito.Mockito.verify +import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.kotlin.any import org.mockito.kotlin.whenever import java.io.File diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserCardCollectionTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserCardCollectionTest.kt index b588ce4031..0b30e35cab 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserCardCollectionTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/CardBrowserCardCollectionTest.kt @@ -17,8 +17,8 @@ package com.ichi2.anki import com.ichi2.anki.CardBrowser.CardCollection import com.ichi2.anki.CardBrowser.PositionAware -import org.hamcrest.MatcherAssert.* -import org.hamcrest.Matchers.* +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.equalTo import org.junit.Test class CardBrowserCardCollectionTest { diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateNotetypeTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateNotetypeTest.kt index f64fa45205..ddbaf23f5d 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateNotetypeTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/CardTemplateNotetypeTest.kt @@ -17,7 +17,8 @@ package com.ichi2.anki import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.ichi2.anki.CardTemplateNotetype.ChangeType.* +import com.ichi2.anki.CardTemplateNotetype.ChangeType.ADD +import com.ichi2.anki.CardTemplateNotetype.ChangeType.DELETE import com.ichi2.compat.CompatHelper.Companion.getSerializableCompat import com.ichi2.libanki.NotetypeJson import org.json.JSONObject diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/DeckPickerFloatingActionMenuTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/DeckPickerFloatingActionMenuTest.kt index d645f8d6fa..08711c184a 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/DeckPickerFloatingActionMenuTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/DeckPickerFloatingActionMenuTest.kt @@ -32,7 +32,11 @@ import org.junit.runner.RunWith import org.mockito.Answers import org.mockito.InjectMocks import org.mockito.Mock -import org.mockito.kotlin.* +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.spy +import org.mockito.kotlin.times +import org.mockito.kotlin.verify import org.robolectric.Robolectric import org.robolectric.annotation.Config import kotlin.test.assertFalse diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/DeckPickerTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/DeckPickerTest.kt index 50b7627d4c..0044dbf187 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/DeckPickerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/DeckPickerTest.kt @@ -24,19 +24,30 @@ import com.ichi2.annotations.NeedsTest import com.ichi2.libanki.DeckId import com.ichi2.libanki.Storage import com.ichi2.libanki.utils.TimeManager -import com.ichi2.testutils.* +import com.ichi2.testutils.BackendEmulatingOpenConflict +import com.ichi2.testutils.BackupManagerTestUtilities +import com.ichi2.testutils.DbUtils +import com.ichi2.testutils.grantWritePermissions import com.ichi2.testutils.libanki.buryNewSiblings +import com.ichi2.testutils.revokeWritePermissions import com.ichi2.utils.KotlinCleanup import com.ichi2.utils.ResourceLoader import org.apache.commons.exec.OS import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.containsInAnyOrder +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.not +import org.hamcrest.Matchers.notNullValue +import org.hamcrest.Matchers.nullValue import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mockito.* +import org.mockito.Mockito.mock +import org.mockito.Mockito.never +import org.mockito.Mockito.times +import org.mockito.Mockito.verify import org.mockito.kotlin.whenever import org.robolectric.ParameterizedRobolectricTestRunner import org.robolectric.Robolectric diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/HandlerUtilsTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/HandlerUtilsTest.kt index caa52ab43f..157f4b11f4 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/HandlerUtilsTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/HandlerUtilsTest.kt @@ -22,7 +22,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.testutils.EmptyApplication import com.ichi2.utils.HandlerUtils import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.closeTo +import org.hamcrest.Matchers.equalTo import org.junit.Test import org.junit.runner.RunWith import org.robolectric.annotation.Config diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/InitialActivityTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/InitialActivityTest.kt index 1e47bcdceb..fe590a22ac 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/InitialActivityTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/InitialActivityTest.kt @@ -23,7 +23,8 @@ import android.os.Build import androidx.core.content.edit import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.ichi2.anki.AnkiDroidFolder.* +import com.ichi2.anki.AnkiDroidFolder.AppPrivateFolder +import com.ichi2.anki.AnkiDroidFolder.PublicFolder import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.servicelayer.PreferenceUpgradeService import com.ichi2.testutils.EmptyApplication diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/NoteEditorTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/NoteEditorTest.kt index 6feefd2480..6c7a2ab0ce 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/NoteEditorTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/NoteEditorTest.kt @@ -44,7 +44,9 @@ import com.ichi2.testutils.AnkiAssert.assertDoesNotThrow import com.ichi2.testutils.getString import kotlinx.coroutines.runBlocking import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.contains +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.not import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/ProductionCrashReportingTreeTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/ProductionCrashReportingTreeTest.kt index 5617cab079..34d29f1f83 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/ProductionCrashReportingTreeTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/ProductionCrashReportingTreeTest.kt @@ -26,7 +26,9 @@ import org.junit.Assert import org.junit.Before import org.junit.Test import org.mockito.MockedStatic -import org.mockito.Mockito.* +import org.mockito.Mockito.any +import org.mockito.Mockito.anyString +import org.mockito.Mockito.mockStatic import org.mockito.kotlin.whenever import timber.log.Timber import java.lang.Exception diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/ReadTextTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/ReadTextTest.kt index 4ee613a6a5..d959ed530a 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/ReadTextTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/ReadTextTest.kt @@ -22,13 +22,13 @@ import com.ichi2.anki.ReadText.initializeTts import com.ichi2.anki.ReadText.releaseTts import com.ichi2.anki.ReadText.textToSpeech import com.ichi2.anki.reviewer.CardSide -import org.hamcrest.MatcherAssert.* -import org.hamcrest.Matchers.* +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.equalTo import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mockito.* -import org.robolectric.Shadows.* +import org.mockito.Mockito.mock +import org.robolectric.Shadows.shadowOf @RunWith(AndroidJUnit4::class) class ReadTextTest : RobolectricTest() { diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerKeyboardInputTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerKeyboardInputTest.kt index 9b36abbed1..6dbb0a3357 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerKeyboardInputTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerKeyboardInputTest.kt @@ -16,7 +16,21 @@ package com.ichi2.anki import android.view.KeyEvent -import android.view.KeyEvent.* +import android.view.KeyEvent.ACTION_DOWN +import android.view.KeyEvent.ACTION_UP +import android.view.KeyEvent.KEYCODE_1 +import android.view.KeyEvent.KEYCODE_2 +import android.view.KeyEvent.KEYCODE_3 +import android.view.KeyEvent.KEYCODE_4 +import android.view.KeyEvent.KEYCODE_BUTTON_A +import android.view.KeyEvent.KEYCODE_BUTTON_B +import android.view.KeyEvent.KEYCODE_BUTTON_X +import android.view.KeyEvent.KEYCODE_BUTTON_Y +import android.view.KeyEvent.KEYCODE_E +import android.view.KeyEvent.KEYCODE_F5 +import android.view.KeyEvent.KEYCODE_R +import android.view.KeyEvent.KEYCODE_SPACE +import android.view.KeyEvent.KEYCODE_Z import androidx.annotation.CheckResult import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ibm.icu.impl.Assert diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerNoParamTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerNoParamTest.kt index 445a260448..600a8d81e7 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerNoParamTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerNoParamTest.kt @@ -40,7 +40,8 @@ import com.ichi2.testutils.common.OS import com.ichi2.themes.Theme import com.ichi2.themes.Themes.currentTheme import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.greaterThan import org.junit.Before import org.junit.Test import org.junit.runner.RunWith diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerTest.kt index 9fe3e4ef05..35e999beb7 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/ReviewerTest.kt @@ -52,7 +52,10 @@ import junit.framework.TestCase.assertEquals import junit.framework.TestCase.assertFalse import junit.framework.TestCase.assertTrue import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.containsString +import org.hamcrest.Matchers.empty +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.not import org.json.JSONArray import org.junit.Ignore import org.junit.Test diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/RobolectricTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/RobolectricTest.kt index ed08b2f7a3..8271f4f164 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/RobolectricTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/RobolectricTest.kt @@ -19,7 +19,6 @@ package com.ichi2.anki import android.Manifest import android.app.Application import android.content.Context -import android.content.DialogInterface.* import android.content.Intent import android.content.SharedPreferences import android.os.Looper @@ -38,25 +37,34 @@ import androidx.work.testing.WorkManagerTestInitHelper import com.ichi2.anki.dialogs.DialogHandler import com.ichi2.anki.dialogs.utils.FragmentTestActivity import com.ichi2.anki.preferences.sharedPrefs -import com.ichi2.async.* import com.ichi2.compat.customtabs.CustomTabActivityHelper -import com.ichi2.libanki.* +import com.ichi2.libanki.Card +import com.ichi2.libanki.ChangeManager import com.ichi2.libanki.Collection +import com.ichi2.libanki.NotetypeJson +import com.ichi2.libanki.Storage import com.ichi2.libanki.utils.TimeManager -import com.ichi2.testutils.* +import com.ichi2.testutils.AndroidTest +import com.ichi2.testutils.MockTime +import com.ichi2.testutils.TaskSchedulerRule import com.ichi2.testutils.common.FailOnUnhandledExceptionRule import com.ichi2.testutils.common.IgnoreFlakyTestsInCIRule +import com.ichi2.testutils.filter import com.ichi2.utils.InMemorySQLiteOpenHelperFactory import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.test.* +import kotlinx.coroutines.test.resetMain import net.ankiweb.rsdroid.BackendException import net.ankiweb.rsdroid.testing.RustBackendLoader import org.hamcrest.Matcher import org.hamcrest.MatcherAssert import org.hamcrest.Matchers import org.json.JSONException -import org.junit.* +import org.junit.After +import org.junit.Assert +import org.junit.Assume +import org.junit.Before +import org.junit.Rule import org.junit.rules.TestName import org.robolectric.Robolectric import org.robolectric.Shadows diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/analytics/AnalyticsConstantsTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/analytics/AnalyticsConstantsTest.kt index af23da35aa..e7f69253a0 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/analytics/AnalyticsConstantsTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/analytics/AnalyticsConstantsTest.kt @@ -14,14 +14,14 @@ package com.ichi2.anki.analytics import com.ichi2.utils.KotlinCleanup import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.not import org.junit.Assert import org.junit.Test import org.junit.experimental.runners.Enclosed import org.junit.runner.RunWith import org.junit.runners.Parameterized import java.lang.RuntimeException -import java.util.* import kotlin.Throws import kotlin.reflect.full.memberProperties import kotlin.reflect.jvm.javaField diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/CardMediaPlayerTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/CardMediaPlayerTest.kt index 6dd77dfbbe..3cf63b2d91 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/CardMediaPlayerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/CardMediaPlayerTest.kt @@ -19,7 +19,9 @@ package com.ichi2.anki.cardviewer import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.anki.CardUtils import com.ichi2.anki.cardviewer.SingleCardSide.BACK -import com.ichi2.anki.cardviewer.SoundErrorBehavior.* +import com.ichi2.anki.cardviewer.SoundErrorBehavior.CONTINUE_AUDIO +import com.ichi2.anki.cardviewer.SoundErrorBehavior.RETRY_AUDIO +import com.ichi2.anki.cardviewer.SoundErrorBehavior.STOP_AUDIO import com.ichi2.libanki.AvTag import com.ichi2.libanki.SoundOrVideoTag import com.ichi2.libanki.TemplateManager diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/CardTemplateTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/CardTemplateTest.kt index f75fc09a79..b1b32dc278 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/CardTemplateTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/CardTemplateTest.kt @@ -18,7 +18,7 @@ package com.ichi2.anki.cardviewer import android.annotation.SuppressLint import com.ichi2.testutils.AnkiAssert.assertDoesNotThrow import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.equalTo import org.intellij.lang.annotations.Language import org.junit.Test diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/OnRenderProcessGoneDelegateTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/OnRenderProcessGoneDelegateTest.kt index 851da7356a..24a22500fe 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/OnRenderProcessGoneDelegateTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/cardviewer/OnRenderProcessGoneDelegateTest.kt @@ -28,7 +28,13 @@ import com.ichi2.utils.StrictMock.Companion.strictMock import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.equalTo import org.junit.Test -import org.mockito.Mockito.* +import org.mockito.Mockito.doNothing +import org.mockito.Mockito.doReturn +import org.mockito.Mockito.mock +import org.mockito.Mockito.never +import org.mockito.Mockito.spy +import org.mockito.Mockito.times +import org.mockito.Mockito.verify import org.mockito.kotlin.whenever import java.util.concurrent.locks.Lock diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/DeckPickerContextMenuTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/DeckPickerContextMenuTest.kt index ed51086d1b..e4b78db5b6 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/DeckPickerContextMenuTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/DeckPickerContextMenuTest.kt @@ -23,7 +23,9 @@ import androidx.core.os.bundleOf import androidx.fragment.app.testing.FragmentScenario.Companion.launch import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.ichi2.anki.* +import com.ichi2.anki.AnkiDroidApp +import com.ichi2.anki.IntroductionActivity +import com.ichi2.anki.R import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.libanki.DeckId import com.ichi2.testutils.BackupManagerTestUtilities.setupSpaceForBackup diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/help/HelpDialogTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/help/HelpDialogTest.kt index 3f3fd06246..4db951f105 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/help/HelpDialogTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/help/HelpDialogTest.kt @@ -21,7 +21,8 @@ import androidx.test.espresso.Espresso.pressBackUnconditionally import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.RootMatchers.isDialog -import androidx.test.espresso.matcher.ViewMatchers.* +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.anki.AnkiDroidApp import com.ichi2.anki.R diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/tags/TagsListTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/tags/TagsListTest.kt index 4a58d59018..fe1a62a8a2 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/tags/TagsListTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/tags/TagsListTest.kt @@ -16,13 +16,15 @@ package com.ichi2.anki.dialogs.tags import com.ichi2.testutils.assertFalse -import org.junit.Assert.* +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Ignore import org.junit.Test import org.mockito.ArgumentMatchers import org.mockito.Mockito -import java.util.* +import java.util.Collections class TagsListTest { lateinit var tagsList: TagsList diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/utils/AlertDialogUtils.kt b/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/utils/AlertDialogUtils.kt index 894b7b5f10..151907f003 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/utils/AlertDialogUtils.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/dialogs/utils/AlertDialogUtils.kt @@ -23,7 +23,7 @@ import androidx.core.view.isVisible import androidx.test.platform.app.InstrumentationRegistry import com.ichi2.utils.HandlerUtils.executeFunctionUsingHandler import com.ichi2.utils.getInputField -import org.hamcrest.MatcherAssert.* +import org.hamcrest.MatcherAssert.assertThat import kotlin.test.assertNotNull var AlertDialog.input diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/jsaddons/AddonModelTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/jsaddons/AddonModelTest.kt index b57fa2283d..a84771084b 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/jsaddons/AddonModelTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/jsaddons/AddonModelTest.kt @@ -23,7 +23,9 @@ import com.ichi2.anki.RobolectricTest import com.ichi2.anki.jsaddons.AddonsConst.REVIEWER_ADDON import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.utils.FileOperation -import junit.framework.TestCase.* +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertFalse +import junit.framework.TestCase.assertTrue import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.core.StringEndsWith.endsWith import org.junit.Before diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/model/DirectoryTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/model/DirectoryTest.kt index c2bee4bbe8..44310c9c1b 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/model/DirectoryTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/model/DirectoryTest.kt @@ -20,7 +20,9 @@ import com.ichi2.compat.Test21And26 import com.ichi2.testutils.HamcrestUtils.containsInAnyOrder import com.ichi2.testutils.withTempFile import org.acra.util.IOUtils -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.not +import org.hamcrest.CoreMatchers.nullValue import org.hamcrest.MatcherAssert import org.junit.Test import java.io.File diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/model/DiskFileTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/model/DiskFileTest.kt index 6711edcd31..9b67ec3a31 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/model/DiskFileTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/model/DiskFileTest.kt @@ -18,7 +18,9 @@ package com.ichi2.anki.model import com.ichi2.testutils.createTransientDirectory import com.ichi2.testutils.createTransientFile -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.not +import org.hamcrest.CoreMatchers.nullValue import org.hamcrest.MatcherAssert.assertThat import org.junit.Test import java.io.File diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/model/RelativeFilePathTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/model/RelativeFilePathTest.kt index 039b764ca0..603fc8af86 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/model/RelativeFilePathTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/model/RelativeFilePathTest.kt @@ -19,7 +19,9 @@ package com.ichi2.anki.model import com.ichi2.testutils.addTempFile import com.ichi2.testutils.createTransientDirectory import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.hasSize +import org.hamcrest.Matchers.nullValue import org.junit.Test import java.io.File diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/multimediacard/AudioRecorderTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/multimediacard/AudioRecorderTest.kt index a6ea856b41..d6edfdc7d7 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/multimediacard/AudioRecorderTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/multimediacard/AudioRecorderTest.kt @@ -20,7 +20,8 @@ import org.junit.Before import org.junit.Test import org.mockito.InjectMocks import org.mockito.Mock -import org.mockito.Mockito.* +import org.mockito.Mockito.times +import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations class AudioRecorderTest { diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/multimediacard/fields/BasicImageFieldControllerTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/multimediacard/fields/BasicImageFieldControllerTest.kt index 803a61a4b7..409e5bba49 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/multimediacard/fields/BasicImageFieldControllerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/multimediacard/fields/BasicImageFieldControllerTest.kt @@ -28,7 +28,8 @@ import com.ichi2.anki.multimediacard.activity.MultimediaEditFieldActivityTestBas import com.ichi2.testutils.AnkiAssert import com.ichi2.testutils.MockContentResolver import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.instanceOf import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.mock diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/ActionButtonStatusTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/ActionButtonStatusTest.kt index d1f1b47431..4b00eae7cc 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/ActionButtonStatusTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/ActionButtonStatusTest.kt @@ -24,10 +24,10 @@ import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.containsInAnyOrder import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mockito.* +import org.mockito.Mockito.any +import org.mockito.Mockito.mock import org.mockito.invocation.InvocationOnMock import org.mockito.kotlin.whenever -import java.util.* @RunWith(AndroidJUnit4::class) class ActionButtonStatusTest : RobolectricTest() { diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AnswerButtonsTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AnswerButtonsTest.kt index 0eba418f55..60c2453e8a 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AnswerButtonsTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AnswerButtonsTest.kt @@ -17,7 +17,10 @@ package 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 org.hamcrest.CoreMatchers.equalTo import org.hamcrest.MatcherAssert.assertThat import org.junit.Test diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AnswerTimerTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AnswerTimerTest.kt index facfbf7eae..0dfe6d26c1 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AnswerTimerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AnswerTimerTest.kt @@ -32,7 +32,14 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito -import org.mockito.kotlin.* +import org.mockito.kotlin.any +import org.mockito.kotlin.atLeast +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.reset +import org.mockito.kotlin.spy +import org.mockito.kotlin.verify import org.robolectric.annotation.Config import timber.log.Timber diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AutomaticAnswerActionTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AutomaticAnswerActionTest.kt index 0df3b17a76..48238c53e7 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AutomaticAnswerActionTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/reviewer/AutomaticAnswerActionTest.kt @@ -18,8 +18,12 @@ package com.ichi2.anki.reviewer import com.ichi2.anki.Reviewer import com.ichi2.anki.cardviewer.ViewerCommand -import com.ichi2.anki.reviewer.AutomaticAnswerAction.* +import com.ichi2.anki.reviewer.AutomaticAnswerAction.ANSWER_AGAIN +import com.ichi2.anki.reviewer.AutomaticAnswerAction.ANSWER_GOOD +import com.ichi2.anki.reviewer.AutomaticAnswerAction.ANSWER_HARD +import com.ichi2.anki.reviewer.AutomaticAnswerAction.BURY_CARD import com.ichi2.anki.reviewer.AutomaticAnswerAction.Companion.fromConfigValue +import com.ichi2.anki.reviewer.AutomaticAnswerAction.SHOW_REMINDER import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.MatcherAssert.assertThat import org.junit.Test diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/scheduling/SetDueDateViewModelTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/scheduling/SetDueDateViewModelTest.kt index 0ab29aa491..736b7a2685 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/scheduling/SetDueDateViewModelTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/scheduling/SetDueDateViewModelTest.kt @@ -17,7 +17,8 @@ package com.ichi2.anki.scheduling import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.ichi2.anki.scheduling.SetDueDateViewModel.* +import com.ichi2.anki.scheduling.SetDueDateViewModel.DateRange +import com.ichi2.anki.scheduling.SetDueDateViewModel.Tab import com.ichi2.libanki.CardId import com.ichi2.libanki.sched.SetDueDateDays import com.ichi2.testutils.JvmTest diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/ExecutorTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/ExecutorTest.kt index 541a850452..f1a34eebb9 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/ExecutorTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/ExecutorTest.kt @@ -16,8 +16,8 @@ package com.ichi2.anki.servicelayer.scopedstorage -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Executor +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.testutils.common.Flaky import com.ichi2.testutils.common.OS diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MigrateEssentialFilesTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MigrateEssentialFilesTest.kt index 3972a94ba0..94c2a6a8fc 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MigrateEssentialFilesTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MigrateEssentialFilesTest.kt @@ -30,7 +30,8 @@ import com.ichi2.compat.CompatHelper import com.ichi2.testutils.CollectionDBCorruption import com.ichi2.testutils.createTransientDirectory import net.ankiweb.rsdroid.BackendException -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.containsString +import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.io.FileMatchers import org.junit.After diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MockMigrationContextTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MockMigrationContextTest.kt index 08933486ed..4954ffac5f 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MockMigrationContextTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MockMigrationContextTest.kt @@ -16,7 +16,7 @@ package com.ichi2.anki.servicelayer.scopedstorage -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.testutils.TestException import org.hamcrest.CoreMatchers.equalTo diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveConflictedFileTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveConflictedFileTest.kt index 25af0d0f40..57374fa0e4 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveConflictedFileTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveConflictedFileTest.kt @@ -20,15 +20,29 @@ package com.ichi2.anki.servicelayer.scopedstorage 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.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.FileConflictResolutionFailedException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.compat.Test21And26 -import com.ichi2.testutils.* -import org.hamcrest.CoreMatchers.* +import com.ichi2.testutils.TestException +import com.ichi2.testutils.addTempFile +import com.ichi2.testutils.createTransientDirectory +import com.ichi2.testutils.createTransientFile +import org.hamcrest.CoreMatchers.containsString +import org.hamcrest.CoreMatchers.endsWith +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.instanceOf +import org.hamcrest.CoreMatchers.not +import org.hamcrest.CoreMatchers.startsWith import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.hasSize import org.hamcrest.io.FileMatchers import org.junit.Test -import org.mockito.kotlin.* +import org.mockito.kotlin.any +import org.mockito.kotlin.doAnswer +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.spy +import org.mockito.kotlin.whenever import java.io.File import java.io.IOException import kotlin.test.assertFailsWith diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryContentTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryContentTest.kt index e1c6db9b3f..82afa5471d 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryContentTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryContentTest.kt @@ -18,12 +18,18 @@ package com.ichi2.anki.servicelayer.scopedstorage import android.annotation.SuppressLint import com.ichi2.anki.model.Directory -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.compat.Test21And26 -import com.ichi2.testutils.* +import com.ichi2.testutils.TestException +import com.ichi2.testutils.addTempFile +import com.ichi2.testutils.createTransientDirectory +import com.ichi2.testutils.createTransientFile +import com.ichi2.testutils.withTempFile import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.hasSize +import org.hamcrest.Matchers.instanceOf import org.junit.Test import org.mockito.kotlin.any import org.mockito.kotlin.doAnswer diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryTest.kt index bbd2b40a61..a2b32627d3 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveDirectoryTest.kt @@ -21,11 +21,16 @@ import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MoveDirectory import com.ichi2.compat.Test21And26 -import com.ichi2.testutils.* +import com.ichi2.testutils.TestException +import com.ichi2.testutils.addTempFile +import com.ichi2.testutils.createTransientDirectory +import com.ichi2.testutils.exists +import com.ichi2.testutils.withTempFile import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.CoreMatchers.instanceOf import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.containsString +import org.hamcrest.Matchers.hasSize import org.junit.Before import org.junit.Test import org.mockito.kotlin.any diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFileTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFileTest.kt index ff01476425..27457f6543 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFileTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/MoveFileTest.kt @@ -18,10 +18,19 @@ package com.ichi2.anki.servicelayer.scopedstorage import com.ichi2.anki.RobolectricTest import com.ichi2.anki.model.DiskFile -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.EquivalentFileException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.FileConflictException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.FileDirectoryConflictException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MissingDirectoryException import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MissingDirectoryException.MissingFile -import com.ichi2.testutils.* -import org.hamcrest.CoreMatchers.* +import com.ichi2.testutils.FileUtil +import com.ichi2.testutils.TestException +import com.ichi2.testutils.createTransientDirectory +import com.ichi2.testutils.length +import org.hamcrest.CoreMatchers.containsString +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.instanceOf +import org.hamcrest.CoreMatchers.not import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers import org.hamcrest.Matchers.hasSize diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/OperationTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/OperationTest.kt index 8e1410b2c1..5e3148c16f 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/OperationTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/OperationTest.kt @@ -17,7 +17,7 @@ package com.ichi2.anki.servicelayer.scopedstorage -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation import com.ichi2.compat.CompatHelper import com.ichi2.testutils.TestException diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/ScopedStorageMigrationIntegrationTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/ScopedStorageMigrationIntegrationTest.kt index 552eb99f0c..d4e3a0c423 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/ScopedStorageMigrationIntegrationTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/ScopedStorageMigrationIntegrationTest.kt @@ -22,12 +22,24 @@ import com.ichi2.anki.RobolectricTest import com.ichi2.anki.model.Directory import com.ichi2.anki.servicelayer.DestFolderOverride import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.DirectoryNotEmptyException +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Executor +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MigrationContext +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Operation +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.SingleRetryDecorator import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrationProgressListener import com.ichi2.anki.utils.AggregateException -import com.ichi2.testutils.* +import com.ichi2.testutils.ShadowStatFs +import com.ichi2.testutils.TestException +import com.ichi2.testutils.addTempDirectory +import com.ichi2.testutils.addTempFile +import com.ichi2.testutils.createTransientDirectory import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.anyOf +import org.hamcrest.Matchers.endsWith +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.instanceOf +import org.hamcrest.Matchers.not import org.hamcrest.io.FileMatchers.anExistingDirectory import org.junit.After import org.junit.Test diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/Utils.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/Utils.kt index 4ef23f27ef..285001c776 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/Utils.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/Utils.kt @@ -24,8 +24,8 @@ import com.ichi2.anki.model.DiskFile import com.ichi2.anki.servicelayer.ScopedStorageService import com.ichi2.libanki.Media import org.acra.util.IOUtils -import org.hamcrest.CoreMatchers.* -import org.hamcrest.MatcherAssert.* +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert.assertThat import java.io.File /** Adds a media file to collection.media which [Media] is not aware of */ diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/migrateuserdata/MigrateUserDataJvmTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/migrateuserdata/MigrateUserDataJvmTest.kt index bdee52b5d8..122281bf50 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/migrateuserdata/MigrateUserDataJvmTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicelayer/scopedstorage/migrateuserdata/MigrateUserDataJvmTest.kt @@ -20,9 +20,11 @@ import android.content.SharedPreferences import com.ichi2.anki.servicelayer.ScopedStorageService import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.Companion.createInstance import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserData.MissingDirectoryException -import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserDataJvmTest.SourceType.* +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserDataJvmTest.SourceType.MISSING_DIR +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserDataJvmTest.SourceType.NOT_SET +import com.ichi2.anki.servicelayer.scopedstorage.migrateuserdata.MigrateUserDataJvmTest.SourceType.VALID_DIR import com.ichi2.testutils.createTransientDirectory -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.MatcherAssert.assertThat import org.junit.BeforeClass import org.junit.Test diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicemodel/PreferenceUpgradeServiceTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicemodel/PreferenceUpgradeServiceTest.kt index a078875be4..14145bd875 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicemodel/PreferenceUpgradeServiceTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicemodel/PreferenceUpgradeServiceTest.kt @@ -35,7 +35,7 @@ import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import java.util.* +import java.util.Locale import kotlin.test.assertNotNull @RunWith(AndroidJUnit4::class) diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/services/NoteServiceTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/services/NoteServiceTest.kt index bd6e00d1ea..befa570fbd 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/services/NoteServiceTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/services/NoteServiceTest.kt @@ -25,10 +25,13 @@ import com.ichi2.libanki.Consts import com.ichi2.libanki.Note import com.ichi2.libanki.NotetypeJson import com.ichi2.testutils.createTransientFile -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.not import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.io.FileMatchers.* -import org.junit.Assert.* +import org.hamcrest.io.FileMatchers.aFileWithAbsolutePath +import org.hamcrest.io.FileMatchers.anExistingFile +import org.junit.Assert.assertEquals +import org.junit.Assert.assertThrows import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/services/ReminderServiceTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/services/ReminderServiceTest.kt index 454d7ee370..71dfbb3ce0 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/services/ReminderServiceTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/services/ReminderServiceTest.kt @@ -21,11 +21,13 @@ import android.content.Intent import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.anki.CollectionManager import com.ichi2.anki.RobolectricTest -import org.hamcrest.MatcherAssert.* +import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.equalTo import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mockito.* +import org.mockito.Mockito.spy +import org.mockito.Mockito.times +import org.mockito.Mockito.verify import org.mockito.kotlin.whenever import org.robolectric.Shadows import org.robolectric.shadows.ShadowNotificationManager diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/utils/OnlyOnceTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/utils/OnlyOnceTest.kt index ba03d0bc43..9db0df6240 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/utils/OnlyOnceTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/utils/OnlyOnceTest.kt @@ -18,7 +18,7 @@ package com.ichi2.anki.utils import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.anki.RobolectricTest -import com.ichi2.anki.utils.OnlyOnce.Method.* +import com.ichi2.anki.utils.OnlyOnce.Method.UNIT_TEST import com.ichi2.anki.utils.OnlyOnce.preventSimultaneousExecutions import kotlinx.coroutines.launch import kotlinx.coroutines.test.TestScope diff --git a/AnkiDroid/src/test/java/com/ichi2/compat/CompatCopyFileTest.kt b/AnkiDroid/src/test/java/com/ichi2/compat/CompatCopyFileTest.kt index ea2cdad552..d3aed4c296 100644 --- a/AnkiDroid/src/test/java/com/ichi2/compat/CompatCopyFileTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/compat/CompatCopyFileTest.kt @@ -20,7 +20,11 @@ import com.ichi2.anki.TestUtils import com.ichi2.utils.FileOperation.Companion.getFileResource import org.junit.Assert import org.junit.Test -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.net.URL class CompatCopyFileTest : Test21And26() { diff --git a/AnkiDroid/src/test/java/com/ichi2/compat/CompatDeleteFileTest.kt b/AnkiDroid/src/test/java/com/ichi2/compat/CompatDeleteFileTest.kt index d4e1caadb8..2456cd46a9 100644 --- a/AnkiDroid/src/test/java/com/ichi2/compat/CompatDeleteFileTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/compat/CompatDeleteFileTest.kt @@ -16,8 +16,10 @@ package com.ichi2.compat -import com.ichi2.testutils.* import com.ichi2.testutils.AnkiAssert.assertDoesNotThrow +import com.ichi2.testutils.createTransientDirectory +import com.ichi2.testutils.createTransientFile +import com.ichi2.testutils.withTempFile import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.MatcherAssert.assertThat import org.junit.Test diff --git a/AnkiDroid/src/test/java/com/ichi2/compat/CompatDirectoryContentTest.kt b/AnkiDroid/src/test/java/com/ichi2/compat/CompatDirectoryContentTest.kt index 40a94a7345..13cf852ba2 100644 --- a/AnkiDroid/src/test/java/com/ichi2/compat/CompatDirectoryContentTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/compat/CompatDirectoryContentTest.kt @@ -17,8 +17,12 @@ package com.ichi2.compat import android.annotation.SuppressLint -import com.ichi2.testutils.* -import org.hamcrest.CoreMatchers.* +import com.ichi2.testutils.createTransientDirectory +import com.ichi2.testutils.createTransientFile +import com.ichi2.testutils.withTempFile +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.instanceOf +import org.hamcrest.CoreMatchers.not import org.hamcrest.MatcherAssert.assertThat import org.junit.Test import java.io.FileNotFoundException diff --git a/AnkiDroid/src/test/java/com/ichi2/compat/CompatHasFilesTest.kt b/AnkiDroid/src/test/java/com/ichi2/compat/CompatHasFilesTest.kt index bf3fec3a83..4a5358371c 100644 --- a/AnkiDroid/src/test/java/com/ichi2/compat/CompatHasFilesTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/compat/CompatHasFilesTest.kt @@ -17,7 +17,9 @@ package com.ichi2.compat import android.os.Build -import com.ichi2.testutils.* +import com.ichi2.testutils.createTransientDirectory +import com.ichi2.testutils.createTransientFile +import com.ichi2.testutils.withTempFile import org.hamcrest.CoreMatchers import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.MatcherAssert.assertThat diff --git a/AnkiDroid/src/test/java/com/ichi2/compat/Test21And26.kt b/AnkiDroid/src/test/java/com/ichi2/compat/Test21And26.kt index f441229b64..057bc45c74 100644 --- a/AnkiDroid/src/test/java/com/ichi2/compat/Test21And26.kt +++ b/AnkiDroid/src/test/java/com/ichi2/compat/Test21And26.kt @@ -19,13 +19,19 @@ package com.ichi2.compat import android.annotation.SuppressLint import com.ichi2.anki.model.Directory import com.ichi2.testutils.createTransientDirectory -import io.mockk.* +import io.mockk.every +import io.mockk.mockkObject +import io.mockk.unmockkObject import org.junit.AfterClass import org.junit.Before import org.junit.BeforeClass import org.junit.runner.RunWith import org.junit.runners.Parameterized -import org.mockito.kotlin.* +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.eq +import org.mockito.kotlin.spy +import org.mockito.kotlin.whenever import java.io.File import java.io.IOException import kotlin.test.assertFailsWith diff --git a/AnkiDroid/src/test/java/com/ichi2/compat/customtabs/CustomTabActivityHelperTest.kt b/AnkiDroid/src/test/java/com/ichi2/compat/customtabs/CustomTabActivityHelperTest.kt index 39d38955f3..c9d97abb8f 100644 --- a/AnkiDroid/src/test/java/com/ichi2/compat/customtabs/CustomTabActivityHelperTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/compat/customtabs/CustomTabActivityHelperTest.kt @@ -28,7 +28,8 @@ import org.hamcrest.MatcherAssert.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.ArgumentMatchers.* +import org.mockito.ArgumentMatchers.anyLong +import org.mockito.ArgumentMatchers.anyString import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.kotlin.any diff --git a/AnkiDroid/src/test/java/com/ichi2/libanki/AbstractSchedTest.kt b/AnkiDroid/src/test/java/com/ichi2/libanki/AbstractSchedTest.kt index 17e4b42d8e..d819cbb207 100644 --- a/AnkiDroid/src/test/java/com/ichi2/libanki/AbstractSchedTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/libanki/AbstractSchedTest.kt @@ -18,8 +18,9 @@ package com.ichi2.libanki import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.libanki.sched.Counts import com.ichi2.testutils.JvmTest -import org.hamcrest.MatcherAssert.* -import org.hamcrest.Matchers.* +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.notNullValue import org.json.JSONArray import org.junit.Test import org.junit.runner.RunWith diff --git a/AnkiDroid/src/test/java/com/ichi2/libanki/CardTest.kt b/AnkiDroid/src/test/java/com/ichi2/libanki/CardTest.kt index 00eddd5233..8f35b674a5 100644 --- a/AnkiDroid/src/test/java/com/ichi2/libanki/CardTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/libanki/CardTest.kt @@ -25,7 +25,6 @@ import org.json.JSONObject import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import java.util.* import kotlin.test.assertNotNull @RunWith(AndroidJUnit4::class) diff --git a/AnkiDroid/src/test/java/com/ichi2/libanki/CollectionTest.kt b/AnkiDroid/src/test/java/com/ichi2/libanki/CollectionTest.kt index 52b395eaee..b1357760ac 100644 --- a/AnkiDroid/src/test/java/com/ichi2/libanki/CollectionTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/libanki/CollectionTest.kt @@ -24,11 +24,13 @@ import org.hamcrest.Matchers.equalTo import org.hamcrest.Matchers.hasSize import org.hamcrest.Matchers.not import org.hamcrest.Matchers.nullValue -import org.junit.Assert.* +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertTrue import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith -import java.util.* @RunWith(AndroidJUnit4::class) class CollectionTest : JvmTest() { diff --git a/AnkiDroid/src/test/java/com/ichi2/libanki/FinderTest.kt b/AnkiDroid/src/test/java/com/ichi2/libanki/FinderTest.kt index 2f5f46ddac..8fec85ca0c 100644 --- a/AnkiDroid/src/test/java/com/ichi2/libanki/FinderTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/libanki/FinderTest.kt @@ -29,12 +29,14 @@ import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.greaterThan import org.hamcrest.Matchers.hasItem import org.hamcrest.Matchers.hasSize -import org.junit.Assert.* +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith import org.robolectric.annotation.Config import timber.log.Timber -import java.util.* +import java.util.Calendar @RunWith(AndroidJUnit4::class) class FinderTest : JvmTest() { diff --git a/AnkiDroid/src/test/java/com/ichi2/libanki/MathJaxClozeTest.kt b/AnkiDroid/src/test/java/com/ichi2/libanki/MathJaxClozeTest.kt index 6e3c10a08a..ea7f9a9965 100644 --- a/AnkiDroid/src/test/java/com/ichi2/libanki/MathJaxClozeTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/libanki/MathJaxClozeTest.kt @@ -6,8 +6,11 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.libanki.template.MathJax import com.ichi2.testutils.JvmTest import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* -import org.junit.Assert.* +import org.hamcrest.Matchers.containsString +import org.hamcrest.Matchers.not +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith diff --git a/AnkiDroid/src/test/java/com/ichi2/libanki/ModelTest.kt b/AnkiDroid/src/test/java/com/ichi2/libanki/ModelTest.kt index 08e83be94b..40369fd256 100644 --- a/AnkiDroid/src/test/java/com/ichi2/libanki/ModelTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/libanki/ModelTest.kt @@ -22,12 +22,14 @@ import com.ichi2.libanki.exception.ConfirmModSchemaException import com.ichi2.testutils.JvmTest import com.ichi2.utils.KotlinCleanup import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.* +import org.hamcrest.Matchers.containsString +import org.hamcrest.Matchers.endsWith +import org.hamcrest.Matchers.not import org.json.JSONObject -import org.junit.Assert.* +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotEquals import org.junit.Test import org.junit.runner.RunWith -import java.util.* fun clozeClass(): String { return "class=\"cloze\"" diff --git a/AnkiDroid/src/test/java/com/ichi2/libanki/SchedulerTest.kt b/AnkiDroid/src/test/java/com/ichi2/libanki/SchedulerTest.kt index 8f5639f180..f70bf1f290 100644 --- a/AnkiDroid/src/test/java/com/ichi2/libanki/SchedulerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/libanki/SchedulerTest.kt @@ -52,7 +52,6 @@ import org.junit.runner.RunWith import java.lang.Exception import java.time.Instant import java.time.ZoneId -import java.util.* import kotlin.Throws import kotlin.math.roundToInt import kotlin.math.roundToLong diff --git a/AnkiDroid/src/test/java/com/ichi2/libanki/TagsTest.kt b/AnkiDroid/src/test/java/com/ichi2/libanki/TagsTest.kt index 3c585495d5..c39dc914a2 100644 --- a/AnkiDroid/src/test/java/com/ichi2/libanki/TagsTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/libanki/TagsTest.kt @@ -17,7 +17,9 @@ package com.ichi2.libanki import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.testutils.JvmTest -import junit.framework.TestCase.* +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertFalse +import junit.framework.TestCase.assertTrue import org.junit.Assert.assertNotEquals import org.junit.Test import org.junit.runner.RunWith diff --git a/AnkiDroid/src/test/java/com/ichi2/testutils/ActivityList.kt b/AnkiDroid/src/test/java/com/ichi2/testutils/ActivityList.kt index 437e5d1227..390d8f8448 100644 --- a/AnkiDroid/src/test/java/com/ichi2/testutils/ActivityList.kt +++ b/AnkiDroid/src/test/java/com/ichi2/testutils/ActivityList.kt @@ -20,9 +20,25 @@ import android.content.Context import android.content.Intent import androidx.annotation.CheckResult import com.canhub.cropper.CropImageActivity -import com.ichi2.anki.* +import com.ichi2.anki.CardBrowser +import com.ichi2.anki.CardTemplateBrowserAppearanceEditor import com.ichi2.anki.CardTemplateBrowserAppearanceEditor.Companion.INTENT_ANSWER_FORMAT import com.ichi2.anki.CardTemplateBrowserAppearanceEditor.Companion.INTENT_QUESTION_FORMAT +import com.ichi2.anki.CardTemplateEditor +import com.ichi2.anki.DeckPicker +import com.ichi2.anki.DrawingActivity +import com.ichi2.anki.FilteredDeckOptions +import com.ichi2.anki.Info +import com.ichi2.anki.IntentHandler +import com.ichi2.anki.IntroductionActivity +import com.ichi2.anki.LoginActivity +import com.ichi2.anki.ModelFieldEditor +import com.ichi2.anki.MyAccount +import com.ichi2.anki.NoteEditor +import com.ichi2.anki.Reviewer +import com.ichi2.anki.SharedDecksActivity +import com.ichi2.anki.SingleFragmentActivity +import com.ichi2.anki.StudyOptionsActivity import com.ichi2.anki.instantnoteeditor.InstantNoteEditorActivity import com.ichi2.anki.multimediacard.activity.MultimediaEditFieldActivity import com.ichi2.anki.notetype.ManageNotetypes diff --git a/AnkiDroid/src/test/java/com/ichi2/testutils/BackendEmulatingOpenConflictTest.kt b/AnkiDroid/src/test/java/com/ichi2/testutils/BackendEmulatingOpenConflictTest.kt index 1915139282..e522ae36a0 100644 --- a/AnkiDroid/src/test/java/com/ichi2/testutils/BackendEmulatingOpenConflictTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/testutils/BackendEmulatingOpenConflictTest.kt @@ -18,7 +18,7 @@ package com.ichi2.testutils import androidx.test.ext.junit.runners.AndroidJUnit4 import com.ichi2.anki.CollectionManager import com.ichi2.anki.RobolectricTest -import net.ankiweb.rsdroid.BackendException.BackendDbException.* +import net.ankiweb.rsdroid.BackendException.BackendDbException.BackendDbLockedException import org.junit.After import org.junit.Assert.assertThrows import org.junit.Before diff --git a/AnkiDroid/src/test/java/com/ichi2/testutils/FileUtil.kt b/AnkiDroid/src/test/java/com/ichi2/testutils/FileUtil.kt index 1e5202a3ca..45f5823787 100644 --- a/AnkiDroid/src/test/java/com/ichi2/testutils/FileUtil.kt +++ b/AnkiDroid/src/test/java/com/ichi2/testutils/FileUtil.kt @@ -20,7 +20,8 @@ import com.ichi2.anki.model.Directory import com.ichi2.anki.model.DiskFile import org.acra.util.IOUtils import java.io.File -import java.util.* +import java.util.NoSuchElementException +import java.util.Scanner object FileUtil { /** diff --git a/AnkiDroid/src/test/java/com/ichi2/testutils/IntentAssert.kt b/AnkiDroid/src/test/java/com/ichi2/testutils/IntentAssert.kt index e7497b69f0..a05a241ef6 100644 --- a/AnkiDroid/src/test/java/com/ichi2/testutils/IntentAssert.kt +++ b/AnkiDroid/src/test/java/com/ichi2/testutils/IntentAssert.kt @@ -16,7 +16,9 @@ package com.ichi2.testutils import android.content.Intent -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.hasItem +import org.hamcrest.CoreMatchers.not import org.hamcrest.MatcherAssert.assertThat import kotlin.test.assertNotNull diff --git a/AnkiDroid/src/test/java/com/ichi2/testutils/MockTime.kt b/AnkiDroid/src/test/java/com/ichi2/testutils/MockTime.kt index b59a12a4de..d1705e6258 100644 --- a/AnkiDroid/src/test/java/com/ichi2/testutils/MockTime.kt +++ b/AnkiDroid/src/test/java/com/ichi2/testutils/MockTime.kt @@ -17,7 +17,9 @@ package com.ichi2.testutils import android.annotation.SuppressLint import com.ichi2.libanki.utils.Time -import java.util.* +import java.util.Calendar +import java.util.GregorianCalendar +import java.util.TimeZone /** @param [step] Number of milliseconds between each call. * @param [initTime]: Time since epoch in MS. */ diff --git a/AnkiDroid/src/test/java/com/ichi2/ui/KeyPickerTest.kt b/AnkiDroid/src/test/java/com/ichi2/ui/KeyPickerTest.kt index d6d52cac20..e5fb83fc31 100644 --- a/AnkiDroid/src/test/java/com/ichi2/ui/KeyPickerTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/ui/KeyPickerTest.kt @@ -21,7 +21,10 @@ import com.ichi2.anki.RobolectricTest import com.ichi2.anki.dialogs.KeySelectionDialogUtils import com.ichi2.testutils.KeyEventUtils import com.ichi2.themes.Theme -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.not +import org.hamcrest.CoreMatchers.notNullValue +import org.hamcrest.CoreMatchers.nullValue +import org.hamcrest.CoreMatchers.sameInstance import org.hamcrest.MatcherAssert.assertThat import org.junit.Test import org.junit.runner.RunWith diff --git a/AnkiDroid/src/test/java/com/ichi2/utils/BundleUtilsTest.kt b/AnkiDroid/src/test/java/com/ichi2/utils/BundleUtilsTest.kt index b3d2e074f9..5edf93dda5 100644 --- a/AnkiDroid/src/test/java/com/ichi2/utils/BundleUtilsTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/utils/BundleUtilsTest.kt @@ -19,7 +19,11 @@ import android.os.Bundle import com.ichi2.utils.BundleUtils.getNullableLong import org.junit.Assert.assertEquals import org.junit.Test -import org.mockito.Mockito.* +import org.mockito.Mockito.anyString +import org.mockito.Mockito.eq +import org.mockito.Mockito.mock +import org.mockito.Mockito.times +import org.mockito.Mockito.verify import org.mockito.kotlin.whenever import kotlin.random.Random import kotlin.test.assertNull diff --git a/AnkiDroid/src/test/java/com/ichi2/utils/FragmentFactoryUtilsTest.kt b/AnkiDroid/src/test/java/com/ichi2/utils/FragmentFactoryUtilsTest.kt index 1f783d532f..0486939d9a 100644 --- a/AnkiDroid/src/test/java/com/ichi2/utils/FragmentFactoryUtilsTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/utils/FragmentFactoryUtilsTest.kt @@ -21,7 +21,9 @@ import androidx.fragment.app.FragmentFactory import androidx.fragment.app.FragmentManager import org.junit.Assert import org.junit.Test -import org.mockito.Mockito.* +import org.mockito.Mockito.mock +import org.mockito.Mockito.times +import org.mockito.Mockito.verify import org.mockito.kotlin.whenever class FragmentFactoryUtilsTest { diff --git a/AnkiDroid/src/test/java/com/ichi2/utils/UniqueArrayListTest.kt b/AnkiDroid/src/test/java/com/ichi2/utils/UniqueArrayListTest.kt index d001e5517a..0d2ae6ba26 100644 --- a/AnkiDroid/src/test/java/com/ichi2/utils/UniqueArrayListTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/utils/UniqueArrayListTest.kt @@ -20,13 +20,16 @@ import org.hamcrest.CoreMatchers.instanceOf import org.hamcrest.CoreMatchers.not import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.collection.IsIterableContainingInOrder -import org.junit.Assert.* +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertTrue import org.junit.Ignore import org.junit.Test import org.mockito.ArgumentMatchers.any import org.mockito.Mockito.mockStatic import org.mockito.Mockito.never -import java.util.* +import java.util.Collections class UniqueArrayListTest { private val dupData = listOf( diff --git a/api/src/main/java/com/ichi2/anki/api/AddContentApi.kt b/api/src/main/java/com/ichi2/anki/api/AddContentApi.kt index fac0a17eab..e3f7d76449 100644 --- a/api/src/main/java/com/ichi2/anki/api/AddContentApi.kt +++ b/api/src/main/java/com/ichi2/anki/api/AddContentApi.kt @@ -35,7 +35,7 @@ import com.ichi2.anki.FlashCardsContract.Deck import com.ichi2.anki.FlashCardsContract.Model import com.ichi2.anki.FlashCardsContract.Note import java.io.File -import java.util.* +import java.util.Locale /** * API which can be used to add and query notes,cards,decks, and models to AnkiDroid diff --git a/api/src/main/java/com/ichi2/anki/api/NoteInfo.kt b/api/src/main/java/com/ichi2/anki/api/NoteInfo.kt index 3828991dcf..8329674e53 100644 --- a/api/src/main/java/com/ichi2/anki/api/NoteInfo.kt +++ b/api/src/main/java/com/ichi2/anki/api/NoteInfo.kt @@ -18,7 +18,6 @@ package com.ichi2.anki.api import android.database.Cursor import com.ichi2.anki.FlashCardsContract -import java.util.* /** * Representation of the contents of a note in AnkiDroid. diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/AvoidAlertDialogUsage.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/AvoidAlertDialogUsage.kt index bc52c0e800..32d5135191 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/AvoidAlertDialogUsage.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/AvoidAlertDialogUsage.kt @@ -18,7 +18,13 @@ package com.ichi2.anki.lint.rules import com.android.tools.lint.client.api.UElementHandler -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.LintFix +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.LintUtils diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/CopyrightHeaderExists.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/CopyrightHeaderExists.kt index a02f505346..07f33cb4de 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/CopyrightHeaderExists.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/CopyrightHeaderExists.kt @@ -17,13 +17,19 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Context +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.Location +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.Beta import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import org.jetbrains.uast.UClass import org.jetbrains.uast.UElement -import java.util.* +import java.util.EnumSet import java.util.regex.Pattern /** diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectCalendarInstanceUsage.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectCalendarInstanceUsage.kt index 835796ba15..ffb73a5e04 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectCalendarInstanceUsage.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectCalendarInstanceUsage.kt @@ -17,7 +17,12 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.LintUtils diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectDateInstantiation.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectDateInstantiation.kt index 4ed7917b7b..b53996dc80 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectDateInstantiation.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectDateInstantiation.kt @@ -17,7 +17,12 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.LintUtils diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectGregorianInstantiation.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectGregorianInstantiation.kt index a646f18a72..296b5b6a12 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectGregorianInstantiation.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectGregorianInstantiation.kt @@ -17,7 +17,12 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.LintUtils diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt index 9346642d1b..c6700df7be 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt @@ -17,7 +17,12 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.LintUtils diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSystemCurrentTimeMillisUsage.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSystemCurrentTimeMillisUsage.kt index 764966079a..9f1339d04e 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSystemCurrentTimeMillisUsage.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSystemCurrentTimeMillisUsage.kt @@ -17,7 +17,12 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.LintUtils diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSystemTimeInstantiation.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSystemTimeInstantiation.kt index 214cfaf3a7..e7c60374da 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSystemTimeInstantiation.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSystemTimeInstantiation.kt @@ -17,7 +17,12 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.LintUtils.isAnAllowedClass diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectToastMakeTextUsage.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectToastMakeTextUsage.kt index 879ffab2d1..1e9f6dcdc3 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectToastMakeTextUsage.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectToastMakeTextUsage.kt @@ -17,7 +17,12 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.LintUtils diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DuplicateCrowdInStrings.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DuplicateCrowdInStrings.kt index de9d7fa300..75c15fd811 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DuplicateCrowdInStrings.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DuplicateCrowdInStrings.kt @@ -36,17 +36,27 @@ package com.ichi2.anki.lint.rules -import com.android.SdkConstants.* +import com.android.SdkConstants.ATTR_NAME +import com.android.SdkConstants.ATTR_TRANSLATABLE +import com.android.SdkConstants.TAG_STRING +import com.android.SdkConstants.VALUE_FALSE import com.android.resources.ResourceFolderType import com.android.tools.lint.checks.StringCasingDetector.StringDeclaration -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Context +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.Location +import com.android.tools.lint.detector.api.ResourceXmlDetector import com.android.tools.lint.detector.api.Scope.Companion.ALL_RESOURCES_SCOPE +import com.android.tools.lint.detector.api.XmlContext +import com.android.tools.lint.detector.api.formatList +import com.android.tools.lint.detector.api.getLocale import com.android.utils.Pair import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.StringFormatDetector import org.w3c.dom.Element import org.w3c.dom.Node -import java.util.* +import java.util.Locale class DuplicateCrowdInStrings : ResourceXmlDetector() { /* diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/FixedPreferencesTitleLength.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/FixedPreferencesTitleLength.kt index 4ac250efc2..3e255f800a 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/FixedPreferencesTitleLength.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/FixedPreferencesTitleLength.kt @@ -19,13 +19,19 @@ package com.ichi2.anki.lint.rules import com.android.resources.ResourceFolderType -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Context +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue import com.android.tools.lint.detector.api.Location.Handle +import com.android.tools.lint.detector.api.ResourceXmlDetector +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.XmlContext +import com.android.tools.lint.detector.api.XmlScanner import com.android.utils.Pair import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import org.w3c.dom.Element -import java.util.* +import java.util.Locale class FixedPreferencesTitleLength : ResourceXmlDetector(), XmlScanner { companion object { diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/HardcodedPreferenceKey.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/HardcodedPreferenceKey.kt index 7a82e00f77..29a42e4a72 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/HardcodedPreferenceKey.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/HardcodedPreferenceKey.kt @@ -18,7 +18,11 @@ package com.ichi2.anki.lint.rules import com.android.resources.ResourceFolderType -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.ResourceXmlDetector +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.XmlContext import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import org.w3c.dom.Element diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/InvalidStringFormatDetector.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/InvalidStringFormatDetector.kt index b17441e46d..e5b681a26d 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/InvalidStringFormatDetector.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/InvalidStringFormatDetector.kt @@ -18,7 +18,9 @@ package com.ichi2.anki.lint.rules -import com.android.SdkConstants.* +import com.android.SdkConstants.TAG_PLURALS +import com.android.SdkConstants.TAG_STRING +import com.android.SdkConstants.TAG_STRING_ARRAY import com.android.resources.ResourceFolderType import com.android.tools.lint.detector.api.Implementation import com.android.tools.lint.detector.api.Issue @@ -32,7 +34,7 @@ import com.ichi2.anki.lint.utils.Constants.ANKI_XML_SEVERITY import com.ichi2.anki.lint.utils.StringFormatDetector import org.w3c.dom.Element import org.w3c.dom.Node -import java.util.* +import java.util.EnumSet import java.util.regex.Pattern /** diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/JUnitNullAssertionDetector.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/JUnitNullAssertionDetector.kt index 4e3ff9d831..e39fc1d97a 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/JUnitNullAssertionDetector.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/JUnitNullAssertionDetector.kt @@ -18,8 +18,12 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext import com.android.tools.lint.detector.api.Scope.Companion.JAVA_FILE_SCOPE +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.intellij.psi.PsiMethod diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/PrintStackTraceUsage.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/PrintStackTraceUsage.kt index cafe1dda10..31c4225b1b 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/PrintStackTraceUsage.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/PrintStackTraceUsage.kt @@ -17,7 +17,13 @@ package com.ichi2.anki.lint.rules -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.LintFix +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.SourceCodeScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.intellij.psi.PsiMethod diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/TranslationTypo.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/TranslationTypo.kt index 272a01bb1d..47c8eaa0bc 100644 --- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/TranslationTypo.kt +++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/TranslationTypo.kt @@ -19,7 +19,12 @@ package com.ichi2.anki.lint.rules import com.android.resources.ResourceFolderType -import com.android.tools.lint.detector.api.* +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.ResourceXmlDetector +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.XmlContext +import com.android.tools.lint.detector.api.XmlScanner import com.google.common.annotations.VisibleForTesting import com.ichi2.anki.lint.utils.Constants import com.ichi2.anki.lint.utils.ext.isRightToLeftLanguage diff --git a/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectSystemCurrentTimeMillisUsageTest.kt b/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectSystemCurrentTimeMillisUsageTest.kt index d7d4d59976..de95c6e9ec 100644 --- a/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectSystemCurrentTimeMillisUsageTest.kt +++ b/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectSystemCurrentTimeMillisUsageTest.kt @@ -15,10 +15,10 @@ ****************************************************************************************/ package com.ichi2.anki.lint.rules -import com.android.tools.lint.checks.infrastructure.TestFile.JavaTestFile.* -import com.android.tools.lint.checks.infrastructure.TestLintTask.* +import com.android.tools.lint.checks.infrastructure.TestFile.JavaTestFile.create +import com.android.tools.lint.checks.infrastructure.TestLintTask.lint import org.intellij.lang.annotations.Language -import org.junit.Assert.* +import org.junit.Assert.assertTrue import org.junit.Test class DirectSystemCurrentTimeMillisUsageTest { diff --git a/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectSystemTimeInstantiationTest.kt b/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectSystemTimeInstantiationTest.kt index bb4ddebd04..f385faa7e8 100644 --- a/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectSystemTimeInstantiationTest.kt +++ b/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectSystemTimeInstantiationTest.kt @@ -15,10 +15,10 @@ ****************************************************************************************/ package com.ichi2.anki.lint.rules -import com.android.tools.lint.checks.infrastructure.TestFile.JavaTestFile.* -import com.android.tools.lint.checks.infrastructure.TestLintTask.* +import com.android.tools.lint.checks.infrastructure.TestFile.JavaTestFile.create +import com.android.tools.lint.checks.infrastructure.TestLintTask.lint import org.intellij.lang.annotations.Language -import org.junit.Assert.* +import org.junit.Assert.assertTrue import org.junit.Test class DirectSystemTimeInstantiationTest { diff --git a/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectToastMakeTextUsageTest.kt b/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectToastMakeTextUsageTest.kt index 28b9ee3198..4eb6704138 100644 --- a/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectToastMakeTextUsageTest.kt +++ b/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DirectToastMakeTextUsageTest.kt @@ -15,10 +15,10 @@ */ package com.ichi2.anki.lint.rules -import com.android.tools.lint.checks.infrastructure.TestFile.JavaTestFile.* -import com.android.tools.lint.checks.infrastructure.TestLintTask.* +import com.android.tools.lint.checks.infrastructure.TestFile.JavaTestFile.create +import com.android.tools.lint.checks.infrastructure.TestLintTask.lint import org.intellij.lang.annotations.Language -import org.junit.Assert.* +import org.junit.Assert.assertTrue import org.junit.Test class DirectToastMakeTextUsageTest { diff --git a/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DuplicateCrowdInStringsTest.kt b/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DuplicateCrowdInStringsTest.kt index b4a17d46ce..b32cb7c3f0 100644 --- a/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DuplicateCrowdInStringsTest.kt +++ b/lint-rules/src/test/java/com/ichi2/anki/lint/rules/DuplicateCrowdInStringsTest.kt @@ -16,7 +16,7 @@ package com.ichi2.anki.lint.rules import com.android.tools.lint.checks.infrastructure.TestFiles -import com.android.tools.lint.checks.infrastructure.TestLintTask.* +import com.android.tools.lint.checks.infrastructure.TestLintTask.lint import org.intellij.lang.annotations.Language import org.junit.Test diff --git a/testlib/src/main/java/com/ichi2/testutils/common/IgnoreFlakyTestsInCIRule.kt b/testlib/src/main/java/com/ichi2/testutils/common/IgnoreFlakyTestsInCIRule.kt index 02acef9f10..779ade92a2 100644 --- a/testlib/src/main/java/com/ichi2/testutils/common/IgnoreFlakyTestsInCIRule.kt +++ b/testlib/src/main/java/com/ichi2/testutils/common/IgnoreFlakyTestsInCIRule.kt @@ -26,7 +26,7 @@ import org.junit.Test import org.junit.rules.TestRule import org.junit.runner.Description import org.junit.runners.model.Statement -import java.util.* +import java.util.Locale /** * An annotation which marks a test as flaky so it will be skipped if run under CI