diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt index 9d7353d4f..47ee8588b 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt @@ -146,7 +146,7 @@ class LoginActivity : AccountAuthenticatorActivity() { loginTwoFactor.removeTextChangedListener(textWatcher) } delegate.onDestroy() - loginClient?.cancel() + loginClient.cancel() binding = null super.onDestroy() } diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java index 8b66a104a..ca7dd3f3b 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java @@ -2,7 +2,6 @@ package fr.free.nrw.commons.bookmarks; import android.content.Context; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -26,6 +25,7 @@ import fr.free.nrw.commons.media.MediaDetailPagerFragment; import fr.free.nrw.commons.navtab.NavTab; import java.util.ArrayList; import java.util.Iterator; +import timber.log.Timber; public class BookmarkListRootFragment extends CommonsDaggerSupportFragment implements FragmentManager.OnBackStackChangedListener, @@ -136,7 +136,7 @@ public class BookmarkListRootFragment extends CommonsDaggerSupportFragment imple @Override public void onMediaClicked(int position) { - Log.d("deneme8", "on media clicked"); + Timber.d("on media clicked"); /*container.setVisibility(View.VISIBLE); ((BookmarkFragment)getParentFragment()).tabLayout.setVisibility(View.GONE); mediaDetails = new MediaDetailPagerFragment(false, true, position); @@ -244,7 +244,7 @@ public class BookmarkListRootFragment extends CommonsDaggerSupportFragment imple @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - Log.d("deneme8", "on media clicked"); + Timber.d("on media clicked"); binding.exploreContainer.setVisibility(View.VISIBLE); ((BookmarkFragment) getParentFragment()).binding.tabLayout.setVisibility(View.GONE); mediaDetails = MediaDetailPagerFragment.newInstance(false, true); diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/SetWallpaperWorker.java b/app/src/main/java/fr/free/nrw/commons/contributions/SetWallpaperWorker.java index c9b55a83c..0f18c300b 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/SetWallpaperWorker.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/SetWallpaperWorker.java @@ -5,14 +5,11 @@ import android.app.NotificationManager; import android.app.WallpaperManager; import android.content.Context; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; -import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; -import androidx.work.Data; import androidx.work.Worker; import androidx.work.WorkerParameters; import com.facebook.common.executors.CallerThreadExecutor; @@ -25,7 +22,6 @@ import com.facebook.imagepipeline.image.CloseableImage; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import fr.free.nrw.commons.R; -import java.io.IOException; import timber.log.Timber; public class SetWallpaperWorker extends Worker { diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt index 6c6d7e53f..d6be68ff1 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt @@ -250,7 +250,7 @@ class CustomSelectorActivity : val selectedImages: ArrayList = result.data!! .getParcelableArrayListExtra(CustomSelectorConstants.NEW_SELECTED_IMAGES)!! - viewModel?.selectedImages?.value = selectedImages + viewModel.selectedImages?.value = selectedImages } } diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt index 32c1e5829..3c6ad8653 100644 --- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt @@ -240,7 +240,7 @@ class DescriptionEditActivity : applicationContext, media, updatedWikiText, - )?.subscribeOn(Schedulers.io()) + ).subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(Consumer { s: Boolean? -> Timber.d("Descriptions are added.") }) ?.let { diff --git a/app/src/main/java/fr/free/nrw/commons/logging/FileLoggingTree.kt b/app/src/main/java/fr/free/nrw/commons/logging/FileLoggingTree.kt index 5c6c55f1a..3cfb92350 100644 --- a/app/src/main/java/fr/free/nrw/commons/logging/FileLoggingTree.kt +++ b/app/src/main/java/fr/free/nrw/commons/logging/FileLoggingTree.kt @@ -5,7 +5,6 @@ import android.util.Log import org.slf4j.Logger import org.slf4j.LoggerFactory -import java.util.Locale import java.util.concurrent.Executor import ch.qos.logback.classic.LoggerContext diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.kt b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.kt index 43d9cfe54..ba69592c6 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.kt @@ -175,7 +175,7 @@ class OkHttpJsonApiClient @Inject constructor( .build() val response: Response = okHttpClient.newCall(request).execute() if (response.body != null && response.isSuccessful) { - val json: String = response.body!!.string() ?: return@fromCallable null + val json: String = response.body!!.string() try { return@fromCallable gson.fromJson( json, diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt index a4ea3cd5b..cf5595ffc 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt @@ -5,10 +5,12 @@ import android.view.View import android.view.View.GONE import android.view.View.INVISIBLE import android.view.View.VISIBLE +import android.widget.RelativeLayout import androidx.activity.result.ActivityResultLauncher import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.transition.TransitionManager +import com.google.android.material.bottomsheet.BottomSheetBehavior import com.hannesdorfmann.adapterdelegates4.dsl.AdapterDelegateViewBindingViewHolder import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding import fr.free.nrw.commons.R @@ -42,7 +44,10 @@ fun placeAdapterDelegate( root.setOnFocusChangeListener { view1: View?, hasFocus: Boolean -> if (!hasFocus && nearbyButtonLayout.buttonLayout.isShown) { nearbyButtonLayout.buttonLayout.visibility = GONE - } else if (hasFocus && !nearbyButtonLayout.buttonLayout.isShown) { + } else if (hasFocus && !nearbyButtonLayout.buttonLayout.isShown && + BottomSheetBehavior.from(root.parent.parent.parent as RelativeLayout).state != + BottomSheetBehavior.STATE_HIDDEN + ) { showOrHideAndScrollToIfLast() onItemClick?.invoke(item) } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.kt b/app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.kt index d51ab1796..6bdcbdda7 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.kt @@ -86,7 +86,7 @@ class FileProcessor */ fun getExifTagsToRedact(): Set { val prefManageEXIFTags = - defaultKvStore.getStringSet(Prefs.MANAGED_EXIF_TAGS) ?: emptySet() + defaultKvStore.getStringSet(Prefs.MANAGED_EXIF_TAGS) val redactTags: Set = context.resources.getStringArray(R.array.pref_exifTag_values).toSet() return redactTags - prefManageEXIFTags diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadResult.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadResult.kt index dfd8cc2ea..46a0e9dce 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadResult.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadResult.kt @@ -14,7 +14,7 @@ data class UploadResult( constructor(parcel: Parcel) : this( parcel.readString() ?: "", parcel.readString() ?: "", - parcel.readInt() ?: 0, + parcel.readInt(), parcel.readString() ?: "", ) { } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt index ae2c461f8..6787f284e 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt @@ -121,6 +121,7 @@ class UploadWorker( private var notificationFinishingTitle: String?, var contribution: Contribution?, ) { + @SuppressLint("MissingPermission") fun onProgress( transferred: Long, total: Long, @@ -175,6 +176,7 @@ class UploadWorker( .setProgress(100, 0, true) .setOngoing(true) + @SuppressLint("MissingPermission") override suspend fun doWork(): Result { try { var totalUploadsStarted = 0 @@ -298,7 +300,7 @@ class UploadWorker( * Upload the contribution * @param contribution */ - @SuppressLint("StringFormatInvalid", "CheckResult") + @SuppressLint("StringFormatInvalid", "CheckResult", "MissingPermission") private suspend fun uploadContribution(contribution: Contribution) { if (contribution.localUri == null || contribution.localUri.path == null) { Timber.e("""upload: ${contribution.media.filename} failed, file path is null""") @@ -439,7 +441,7 @@ class UploadWorker( username, ) CommonsApplication - .instance!! + .instance .clearApplicationData(appContext, logoutListener) } } @@ -581,7 +583,7 @@ class UploadWorker( * Notify that the current upload has succeeded * @param contribution */ - @SuppressLint("StringFormatInvalid") + @SuppressLint("StringFormatInvalid", "MissingPermission") private fun showSuccessNotification(contribution: Contribution) { val displayTitle = contribution.media.displayTitle contribution.state = Contribution.STATE_COMPLETED @@ -606,7 +608,7 @@ class UploadWorker( * Notify that the current upload has failed * @param contribution */ - @SuppressLint("StringFormatInvalid") + @SuppressLint("StringFormatInvalid", "MissingPermission") private fun showFailedNotification(contribution: Contribution) { val displayTitle = contribution.media.displayTitle currentNotification.setContentIntent(getPendingIntent(UploadProgressActivity::class.java)) @@ -626,7 +628,7 @@ class UploadWorker( ) } - @SuppressLint("StringFormatInvalid") + @SuppressLint("StringFormatInvalid", "MissingPermission") private fun showInvalidLoginNotification(contribution: Contribution) { val displayTitle = contribution.media.displayTitle currentNotification @@ -648,7 +650,7 @@ class UploadWorker( /** * Shows a notification for a failed contribution upload. */ - @SuppressLint("StringFormatInvalid") + @SuppressLint("StringFormatInvalid", "MissingPermission") private fun showErrorNotification(contribution: Contribution) { val displayTitle = contribution.media.displayTitle currentNotification @@ -671,6 +673,7 @@ class UploadWorker( * Notify that the current upload is paused * @param contribution */ + @SuppressLint("MissingPermission") private fun showPausedNotification(contribution: Contribution) { val displayTitle = contribution.media.displayTitle @@ -695,6 +698,7 @@ class UploadWorker( * Notify that the current upload is cancelled * @param contribution */ + @SuppressLint("MissingPermission") private fun showCancelledNotification(contribution: Contribution) { val displayTitle = contribution.media.displayTitle currentNotification.setContentIntent(getPendingIntent(UploadProgressActivity::class.java)) diff --git a/app/src/main/java/fr/free/nrw/commons/utils/CustomSelectorUtils.kt b/app/src/main/java/fr/free/nrw/commons/utils/CustomSelectorUtils.kt index 62bd3f1a9..79cf87e53 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/CustomSelectorUtils.kt +++ b/app/src/main/java/fr/free/nrw/commons/utils/CustomSelectorUtils.kt @@ -55,7 +55,7 @@ class CustomSelectorUtils { val uploadableFile = PickedFiles.pickedExistingPicture(context, image.uri) val exifInterface: ExifInterface? = try { - ExifInterface(uploadableFile.file!!) + ExifInterface(uploadableFile.file) } catch (e: IOException) { Timber.e(e) null diff --git a/app/src/main/java/fr/free/nrw/commons/utils/DownloadUtils.kt b/app/src/main/java/fr/free/nrw/commons/utils/DownloadUtils.kt index 08c030e33..db5df817e 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/DownloadUtils.kt +++ b/app/src/main/java/fr/free/nrw/commons/utils/DownloadUtils.kt @@ -62,6 +62,6 @@ object DownloadUtils { ) { val systemService = activity.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager - systemService?.enqueue(req) + systemService.enqueue(req) } } diff --git a/app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.kt b/app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.kt index 396f92824..0b49c03e9 100644 --- a/app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.kt +++ b/app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.kt @@ -2,6 +2,8 @@ package fr.free.nrw.commons.wikidata import android.annotation.SuppressLint import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi import com.google.gson.Gson import fr.free.nrw.commons.R import fr.free.nrw.commons.contributions.Contribution @@ -111,12 +113,14 @@ class WikidataEditService @Inject constructor( .blockingFirst() } + @SuppressLint("StringFormatInvalid") private fun showSuccessToast(wikiItemName: String) { val successStringTemplate = context.getString(R.string.successful_wikidata_edit) val successMessage = String.format(Locale.getDefault(), successStringTemplate, wikiItemName) showLongToast(context, successMessage) } + @RequiresApi(Build.VERSION_CODES.N) @SuppressLint("CheckResult") private fun addCaption( fileEntityId: Long, languageCode: String, @@ -176,7 +180,7 @@ class WikidataEditService @Inject constructor( SnakPartial( "value", MEDIA_LEGENDS.propertyName, MonoLingualText( - WikiBaseMonolingualTextValue(value!!, key!!) + WikiBaseMonolingualTextValue(value, key) ) ) ) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationControllerTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationControllerTest.kt index d0db8e037..3fd21c25f 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationControllerTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationControllerTest.kt @@ -68,7 +68,7 @@ class BookmarkLocationControllerTest { @Test fun loadBookmarkedLocations() { val bookmarkedLocations = - bookmarkLocationsController!!.loadFavoritesLocations() + bookmarkLocationsController.loadFavoritesLocations() Assert.assertEquals(2, bookmarkedLocations.size.toLong()) } } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/kvstore/JsonKvStoreTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/kvstore/JsonKvStoreTest.kt index 0a0bdfc47..a49905c56 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/kvstore/JsonKvStoreTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/kvstore/JsonKvStoreTest.kt @@ -50,7 +50,7 @@ class JsonKvStoreTest { fun getJson() { whenever(prefs.getString("key", null)).thenReturn(expected) - val result = store.getJson("key", Person::class.java) + val result = store.getJson("key") Assert.assertEquals(testData, result) } @@ -70,7 +70,7 @@ class JsonKvStoreTest { fun getJsonHandlesMalformedJson() { whenever(prefs.getString("key", null)).thenReturn("junk") - val result = store.getJson("key", Person::class.java) + val result = store.getJson("key") Assert.assertNull(result) } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/nearby/NearbyParentFragmentPresenterTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/nearby/NearbyParentFragmentPresenterTest.kt index fd9fdfd55..cfd2a818d 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/nearby/NearbyParentFragmentPresenterTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/nearby/NearbyParentFragmentPresenterTest.kt @@ -305,7 +305,7 @@ class NearbyParentFragmentPresenterTest { whenever(nearbyParentFragmentView.mapFocus).thenReturn(LatLng(2.0, 1.0, 0.0F)) // 111.19 km real distance, return false if 148306.444306 > currentLocationSearchRadius NearbyController.currentLocationSearchRadius = 148306.0 - val isClose = nearbyPresenter?.searchCloseToCurrentLocation() + val isClose = nearbyPresenter.searchCloseToCurrentLocation() assertFalse(isClose!!.equals(false)) } @@ -317,7 +317,7 @@ class NearbyParentFragmentPresenterTest { whenever(nearbyParentFragmentView.getCameraTarget()).thenReturn(LatLng(2.0, 1.0, 0.0F)) // 111.19 km real distance, return false if 148253.333 > currentLocationSearchRadius NearbyController.currentLocationSearchRadius = 148307.0 - val isClose = nearbyPresenter?.searchCloseToCurrentLocation() + val isClose = nearbyPresenter.searchCloseToCurrentLocation() assertTrue(isClose!!) }