diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml index 8dba557c6e84fb7c8f6532d05817ba186d8e28ad..c54dfed16eec39c3aea343eda0b4595c83164ebc 100644 --- a/app/detekt-baseline.xml +++ b/app/detekt-baseline.xml @@ -1,27 +1,102 @@ - - + - CyclomaticComplexMethod:AppInstallProcessor.kt$AppInstallProcessor$suspend fun enqueueFusedDownload( appInstall: AppInstall, isAnUpdate: Boolean = false, isSystemApp: Boolean = false ) + ArgumentListWrapping:AnonymousLoginManager.kt$AnonymousLoginManager$( tokenUrl, json.encodeToString(nativeDeviceProperty).toByteArray() ) + ArgumentListWrapping:AppInstallProcessor.kt$AppInstallProcessor$( R.string.message_last_update_triggered, numberOfUpdatedApps, date ) + ArgumentListWrapping:AppInstallProcessor.kt$AppInstallProcessor$( ResultStatus.UNKNOWN, appInstall ) + ArgumentListWrapping:AppInstallProcessor.kt$AppInstallProcessor$( Status.INSTALLATION_ISSUE, Status.PURCHASE_NEEDED ) + ArgumentListWrapping:AppInstallProcessor.kt$AppInstallProcessor$( TAG, "===> ${appInstall.name} is in wrong state ${appInstall.status}" ) + ArgumentListWrapping:AppInstallProcessor.kt$AppInstallProcessor$( appInstall.source, appInstall ) + ArgumentListWrapping:AppInstallProcessor.kt$AppInstallProcessor$( context, context.getString(R.string.update), context.getString( R.string.message_last_update_triggered, numberOfUpdatedApps, date ) ) + ArgumentListWrapping:AppManagerImpl.kt$AppManagerImpl$(R.string.additional_file_for, appInstall.name) + ArgumentListWrapping:AppManagerImpl.kt$AppManagerImpl$(if (count == 1) appInstall.name else context.getString(R.string.additional_file_for, appInstall.name)) + ArgumentListWrapping:AppManagerWrapper.kt$AppManagerWrapper$(context, appInstall.packageName, apkFilePath, appInstall.signature) + ArgumentListWrapping:ApplicationDialogFragment.kt$ApplicationDialogFragment$( object : URLSpan(urlSpan.url) { override fun updateDrawState(textPaint: TextPaint) { super.updateDrawState(textPaint) textPaint.isUnderlineText = false } }, spannable.getSpanStart(urlSpan), spannable.getSpanEnd(urlSpan), 0 ) + ArgumentListWrapping:ApplicationViewModel.kt$ApplicationViewModel$( listOf(packageName), Source.OPEN_SOURCE ) + ArgumentListWrapping:CustomUncaughtExceptionHandler.kt$CustomUncaughtExceptionHandler$( id, title, NotificationManager.IMPORTANCE_DEFAULT ) + ArgumentListWrapping:DownloadManager.kt$DownloadManager$("Download Issue: $downloadId : DownloadManager returns status: $status but the failed because: reason: $reason") + ArgumentListWrapping:DownloadManagerUtils.kt$DownloadManagerUtils$("===> updateDownloadStatus: ${appInstall.name}: $downloadId: $numberOfDownloadedItems/${appInstall.downloadIdMap.size}") + ArgumentListWrapping:HomeFragment.kt$HomeFragment$( this, mainActivityViewModel, appInfoFetchViewModel, viewLifecycleOwner ) + ArgumentListWrapping:InstallAppWorker.kt$InstallAppWorker$( atomicInteger.getAndIncrement(), notification) + ArgumentListWrapping:MainActivity.kt$MainActivity$( ActivityResultContracts.StartActivityForResult()) + ArgumentListWrapping:MainActivity.kt$MainActivity$(R.string.message_app_available_later) + ArgumentListWrapping:MainActivity.kt$MainActivity$(getString(R.string.message_app_available_later)) + ArgumentListWrapping:PwaManager.kt$PwaManager$( Uri.parse(PWA_PLAYER), null, null, null, null ) + ArgumentListWrapping:ResultSupreme.kt$ResultSupreme.Companion$( status, newData, message ?: result.message, exception ?: result.exception ) + ArgumentListWrapping:SearchFragment.kt$SearchFragment$( searchViewModel.searchText, false ) + ArgumentListWrapping:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$(exception.message, "Android API isn't in supported range to update some system apps") + ArgumentListWrapping:TOSFragment.kt$TOSFragment$( "file:///android_asset/", sb.toString(), "text/html", "utf-8", null ) + ArgumentListWrapping:UpdatesFragment.kt$UpdatesFragment$( R.string.dialog_paidapp_message, application.name, application.price ) + ArgumentListWrapping:UpdatesNotifier.kt$UpdatesNotifier$(R.string.automatically_install_updates_notification_text) + ArgumentListWrapping:UpdatesNotifier.kt$UpdatesNotifier$(context.getString(R.string.automatically_install_updates_notification_text)) + ArgumentListWrapping:UpdatesWorkManager.kt$UpdatesWorkManager$( UPDATES_WORK_NAME, existingPeriodicWorkPolicy, buildPeriodicWorkRequest(interval) ) + ArgumentListWrapping:ValidateAppAgeLimitUseCase.kt$ValidateAppAgeLimitUseCase$( "${app.packageName} - Content rating: ${app.contentRating.id} \n" + "Selected age group: $ageGroup \nAllowed content rating: $allowedContentRating") + BlockCommentInitialStarAlignment:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$/* TODO manually add new supported android version when they will be supported. * VANILLA_ICE_CREAM (A15) => https://gitlab.e.foundation/e/os/backlog/-/issues/2772 * BAKLAVA (A16) => https://gitlab.e.foundation/e/os/backlog/-/issues/2773 */ + ChainWrapping:DownloadManagerUtils.kt$DownloadManagerUtils$|| + ChainWrapping:HomeViewModel.kt$HomeViewModel$|| + ChainWrapping:NetworkHandler.kt$&& + ChainWrapping:PlayStoreRepository.kt$PlayStoreRepository$&& + ChainWrapping:ValidateAppAgeLimitUseCase.kt$ValidateAppAgeLimitUseCase$&& + CommentSpacing:ParentalControlAuthenticator.kt$ParentalControlAuthenticator$//Parental Control Key + CommentSpacing:ParentalControlAuthenticator.kt$ParentalControlAuthenticator$//Parental Control intent + CyclomaticComplexMethod:AppInstallProcessor.kt$AppInstallProcessor$suspend fun enqueueFusedDownload( appInstall: AppInstall, isAnUpdate: Boolean = false, isSystemApp: Boolean = false ) EmptyCatchBlock:NativeDeviceInfoProviderModule.kt$NativeDeviceInfoProviderModule${ } EmptyFunctionBlock:CleanApkAuthenticator.kt$CleanApkAuthenticator${} + FinalNewline:ContentRatingValidity.kt$foundation.e.apps.domain.model.ContentRatingValidity.kt + FinalNewline:SystemAppsUpdatesRepository.kt$foundation.e.apps.data.gitlab.SystemAppsUpdatesRepository.kt + FunctionReturnTypeSpacing:AppPrivacyInfoRepositoryImpl.kt$AppPrivacyInfoRepositoryImpl$private suspend fun fetchReports(packageName: String) : List<Report> + FunctionReturnTypeSpacing:CategoryApiImpl.kt$CategoryApiImpl$override suspend fun getCategoriesList(type: CategoryType) : List<CategoriesResponse> + FunctionStartOfBodySpacing:RetrofitApiModule.kt$RetrofitApiModule$@Singleton @Provides fun provideCleanApkApi( okHttpClient: OkHttpClient, @Named("gsonCustomAdapter") gson: Gson ): CleanApkRetrofit + ImportOrdering:AppDatabase.kt$import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase import foundation.e.apps.data.database.install.AppInstallConverter import foundation.e.apps.data.exodus.Tracker import foundation.e.apps.data.exodus.TrackerDao import foundation.e.apps.data.faultyApps.FaultyApp import foundation.e.apps.data.faultyApps.FaultyAppDao import foundation.e.apps.data.fdroid.FdroidDao import foundation.e.apps.data.fdroid.models.FdroidEntity import foundation.e.apps.data.parentalcontrol.ContentRatingEntity import foundation.e.apps.data.parentalcontrol.ContentRatingDao import foundation.e.apps.data.parentalcontrol.FDroidNsfwApp import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingGroup + ImportOrdering:AppInfoFetchViewModel.kt$import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.liveData import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.faultyApps.FaultyAppRepository import foundation.e.apps.data.fdroid.FDroidRepository import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.playstore.PlayStoreRepository import javax.inject.Inject + ImportOrdering:AppInstallProcessor.kt$import android.content.Context import com.aurora.gplayapi.exceptions.InternalException import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.Type import foundation.e.apps.data.application.ApplicationRepository import foundation.e.apps.data.application.UpdatesDao import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.User import foundation.e.apps.data.install.models.AppInstall import foundation.e.apps.data.login.AuthObject import foundation.e.apps.data.playstore.utils.GplayHttpRequestException import foundation.e.apps.data.preference.AppLoungeDataStore import foundation.e.apps.domain.ValidateAppAgeLimitUseCase import foundation.e.apps.domain.model.ContentRatingValidity import foundation.e.apps.install.AppInstallComponents import foundation.e.apps.install.download.DownloadManagerUtils import foundation.e.apps.install.notification.StorageNotificationManager import foundation.e.apps.install.updates.UpdatesNotifier import foundation.e.apps.utils.ParentalControlAuthenticator import foundation.e.apps.utils.StorageComputer import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import foundation.e.apps.utils.getFormattedString import foundation.e.apps.utils.isNetworkAvailable import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.flow.transformWhile import timber.log.Timber import java.text.NumberFormat import java.util.Date import javax.inject.Inject + ImportOrdering:AppLoungePackageManager.kt$import android.app.PendingIntent import android.content.Context import android.content.Intent import android.content.IntentFilter import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import android.content.pm.PackageInstaller.Session import android.content.pm.PackageInstaller.SessionParams import android.content.pm.PackageManager import android.content.pm.PackageManager.NameNotFoundException import android.os.Build import androidx.core.content.pm.PackageInfoCompat import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.OpenForTesting import foundation.e.apps.data.application.search.SearchRepository import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.Type import foundation.e.apps.data.install.models.AppInstall import java.io.File import javax.inject.Inject import javax.inject.Singleton import kotlinx.coroutines.DelicateCoroutinesApi import timber.log.Timber + ImportOrdering:AppManagerImpl.kt$import android.app.DownloadManager import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.net.Uri import android.os.Build import android.os.Environment import androidx.annotation.RequiresApi import androidx.lifecycle.LiveData import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.R import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.Type import foundation.e.apps.data.install.models.AppInstall import foundation.e.apps.data.parentalcontrol.ContentRatingDao import foundation.e.apps.data.parentalcontrol.ContentRatingEntity import foundation.e.apps.install.download.data.DownloadProgressLD import foundation.e.apps.install.pkg.PwaManager import foundation.e.apps.install.pkg.AppLoungePackageManager import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber import java.io.File import javax.inject.Inject import javax.inject.Named import javax.inject.Singleton import com.aurora.gplayapi.data.models.PlayFile as AuroraFile + ImportOrdering:AppManagerWrapper.kt$import android.content.Context import android.os.Build import androidx.annotation.RequiresApi import androidx.lifecycle.LiveData import foundation.e.apps.OpenForTesting import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fdroid.FDroidRepository import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.install.models.AppInstall import foundation.e.apps.install.download.data.DownloadProgress import foundation.e.apps.install.workmanager.InstallWorkManager import javax.inject.Inject import javax.inject.Singleton + ImportOrdering:AppPrivacyInfoRepositoryImpl.kt$import com.google.gson.Gson import com.google.gson.GsonBuilder import com.google.gson.reflect.TypeToken import foundation.e.apps.data.exodus.Report import foundation.e.apps.data.exodus.models.AppPrivacyInfo import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.exodus.ApiResponse import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody import java.lang.reflect.Modifier import javax.inject.Inject import javax.inject.Singleton import foundation.e.apps.data.Result import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext + ImportOrdering:ApplicationListFragment.kt$import android.os.Bundle import android.view.View import androidx.appcompat.app.AlertDialog import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.Status import foundation.e.apps.data.application.ApplicationInstaller import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.login.AuthObject import foundation.e.apps.data.login.exceptions.GPlayLoginException import foundation.e.apps.databinding.FragmentApplicationListBinding import foundation.e.apps.install.download.data.DownloadProgress import foundation.e.apps.install.pkg.PwaManager import foundation.e.apps.install.pkg.AppLoungePackageManager import foundation.e.apps.ui.AppInfoFetchViewModel import foundation.e.apps.ui.AppProgressViewModel import foundation.e.apps.ui.MainActivityViewModel import foundation.e.apps.ui.PrivacyInfoViewModel import foundation.e.apps.ui.application.subFrags.ApplicationDialogFragment import foundation.e.apps.ui.parentFragment.TimeoutFragment import kotlinx.coroutines.launch import java.util.Locale import javax.inject.Inject + ImportOrdering:ApplicationListRVAdapter.kt$import android.content.Context import android.content.pm.PackageManager import android.graphics.drawable.Drawable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat import androidx.core.view.children import androidx.core.view.isVisible import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.navigation.findNavController import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import coil.load import com.facebook.shimmer.Shimmer import com.facebook.shimmer.Shimmer.Direction.LEFT_TO_RIGHT import com.facebook.shimmer.ShimmerDrawable import com.google.android.material.button.MaterialButton import com.google.android.material.snackbar.Snackbar import foundation.e.apps.R import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.User import foundation.e.apps.data.application.ApplicationInstaller import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.databinding.ApplicationListItemBinding import foundation.e.apps.install.pkg.InstallerService import foundation.e.apps.ui.AppInfoFetchViewModel import foundation.e.apps.ui.MainActivityViewModel import foundation.e.apps.ui.PrivacyInfoViewModel import foundation.e.apps.ui.search.SearchFragmentDirections import foundation.e.apps.ui.updates.UpdatesFragmentDirections import foundation.e.apps.utils.disableInstallButton import foundation.e.apps.utils.enableInstallButton import timber.log.Timber import javax.inject.Singleton + ImportOrdering:ApplicationListViewModel.kt$import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.Source import foundation.e.apps.data.application.ApplicationRepository import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.login.exceptions.CleanApkException import foundation.e.apps.data.login.exceptions.GPlayException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import javax.inject.Inject + ImportOrdering:CategoriesViewModel.kt$import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.application.ApplicationRepository import foundation.e.apps.data.application.data.Category import foundation.e.apps.data.application.utils.CategoryType import foundation.e.apps.data.enums.Source import foundation.e.apps.data.login.exceptions.CleanApkException import foundation.e.apps.data.login.exceptions.GPlayException import kotlinx.coroutines.launch import javax.inject.Inject + ImportOrdering:DownloadInfoApiImpl.kt$import foundation.e.apps.data.AppSourcesContainer import foundation.e.apps.data.cleanapk.CleanApkDownloadInfoFetcher import foundation.e.apps.data.enums.Source import foundation.e.apps.data.install.models.AppInstall import foundation.e.apps.data.handleNetworkResult import javax.inject.Inject + ImportOrdering:DownloadManagerUtils.kt$import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.R import foundation.e.apps.data.DownloadManager import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.Status import foundation.e.apps.data.install.AppManagerWrapper import foundation.e.apps.data.install.models.AppInstall import foundation.e.apps.install.notification.StorageNotificationManager import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import android.app.DownloadManager as PlatformDownloadManager import timber.log.Timber import javax.inject.Inject import javax.inject.Named import javax.inject.Singleton + ImportOrdering:FDroidRepository.kt$import android.content.Context import foundation.e.apps.data.cleanapk.ApkSignatureManager import foundation.e.apps.data.fdroid.models.BuildInfo import foundation.e.apps.data.fdroid.models.FdroidEntity import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import javax.inject.Inject import javax.inject.Singleton + ImportOrdering:GoogleSignInFragment.kt$import android.annotation.SuppressLint import android.os.Build import android.os.Bundle import android.view.View import android.webkit.CookieManager import android.webkit.WebSettings import android.webkit.WebView import android.webkit.WebViewClient import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R import foundation.e.apps.data.playstore.utils.AC2DMUtil import foundation.e.apps.ui.LoginViewModel import foundation.e.apps.databinding.FragmentGoogleSigninBinding import foundation.e.apps.di.CommonUtilsModule.safeNavigate + ImportOrdering:GplayApiExtensions.kt$import android.content.Context import android.text.format.Formatter import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.Artwork import com.aurora.gplayapi.data.models.Category import foundation.e.apps.data.application.data.Category as AppLoungeCategory import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.application.data.Ratings + ImportOrdering:HomeChildRVAdapter.kt$import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat import androidx.lifecycle.LifecycleOwner import androidx.navigation.findNavController import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import coil.load import com.facebook.shimmer.Shimmer import com.facebook.shimmer.ShimmerDrawable import com.google.android.material.button.MaterialButton import com.google.android.material.snackbar.Snackbar import foundation.e.apps.R import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.User import foundation.e.apps.data.application.ApplicationInstaller import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.databinding.HomeChildListItemBinding import foundation.e.apps.ui.AppInfoFetchViewModel import foundation.e.apps.ui.MainActivityViewModel import foundation.e.apps.ui.applicationlist.ApplicationDiffUtil import foundation.e.apps.ui.home.HomeFragmentDirections import foundation.e.apps.utils.disableInstallButton import foundation.e.apps.utils.enableInstallButton + ImportOrdering:IAppPrivacyInfoRepository.kt$import foundation.e.apps.data.Result import foundation.e.apps.data.exodus.models.AppPrivacyInfo import foundation.e.apps.data.application.data.Application + ImportOrdering:IFdroidRepository.kt$import android.content.Context import foundation.e.apps.data.fdroid.models.FdroidEntity import foundation.e.apps.data.application.data.Application + ImportOrdering:InstallerService.kt$import android.app.Service import android.content.Intent import android.content.pm.PackageInstaller import android.os.IBinder import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.data.faultyApps.FaultyAppRepository import foundation.e.apps.data.application.UpdatesDao import foundation.e.apps.data.install.AppManagerWrapper import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject + ImportOrdering:ParentalControlRepository.kt$import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import javax.inject.Singleton import androidx.core.net.toUri + ImportOrdering:PlayStoreLoginWrapper.kt$import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.PlayResponse import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.User import foundation.e.apps.data.playstore.utils.AC2DMUtil import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.login.exceptions.GPlayLoginException import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import java.util.Locale + ImportOrdering:PrivacyInfoViewModel.kt$import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.data.Result import foundation.e.apps.data.exodus.models.AppPrivacyInfo import foundation.e.apps.data.exodus.repositories.IAppPrivacyInfoRepository import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepository import foundation.e.apps.data.application.data.Application import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject + ImportOrdering:PwaManager.kt$import android.content.ContentUris import android.content.ContentValues import android.content.Context import android.content.Intent import android.database.Cursor import android.graphics.Bitmap import android.graphics.BitmapFactory import android.net.Uri import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.OpenForTesting import foundation.e.apps.data.enums.Status import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.install.AppInstallRepository import foundation.e.apps.data.install.models.AppInstall import kotlinx.coroutines.delay import timber.log.Timber import java.io.ByteArrayOutputStream import java.io.IOException import java.net.URL import javax.inject.Inject import javax.inject.Singleton + ImportOrdering:RepositoryModule.kt$import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import foundation.e.apps.data.exodus.repositories.AppPrivacyInfoRepositoryImpl import foundation.e.apps.data.exodus.repositories.IAppPrivacyInfoRepository import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepository import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepositoryImpl import foundation.e.apps.data.fdroid.FDroidRepository import foundation.e.apps.data.fdroid.IFdroidRepository import foundation.e.apps.data.install.AppManagerImpl import foundation.e.apps.data.install.AppManager import javax.inject.Singleton + ImportOrdering:RetrofitApiModule.kt$import com.google.gson.Gson import com.squareup.moshi.Moshi import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.ecloud.EcloudApiInterface import foundation.e.apps.data.fdroid.FdroidApiInterface import foundation.e.apps.data.gitlab.ReleaseInfoApi import foundation.e.apps.data.gitlab.UpdatableSystemAppsApi import foundation.e.apps.data.gitlab.SystemAppDefinitionApi import foundation.e.apps.data.parentalcontrol.fdroid.FDroidMonitorApi import foundation.e.apps.data.parentalcontrol.googleplay.AgeGroupApi import foundation.e.apps.di.network.NetworkModule.getYamlFactory import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.jackson.JacksonConverterFactory import retrofit2.converter.moshi.MoshiConverterFactory import javax.inject.Named import javax.inject.Singleton + ImportOrdering:SignInFragment.kt$import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R import foundation.e.apps.ui.LoginViewModel import foundation.e.apps.databinding.FragmentSignInBinding import foundation.e.apps.di.CommonUtilsModule.safeNavigate import foundation.e.apps.utils.showGoogleSignInAlertDialog + ImportOrdering:SystemAppsUpdatesRepository.kt$import android.content.Context import android.os.Build import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.application.ApplicationDataManager import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.Status import foundation.e.apps.data.gitlab.UpdatableSystemAppsApi.* import foundation.e.apps.data.gitlab.models.OsReleaseType import foundation.e.apps.data.gitlab.models.SystemAppInfo import foundation.e.apps.data.gitlab.models.SystemAppProject import foundation.e.apps.data.gitlab.models.toApplication import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.install.pkg.AppLoungePackageManager import foundation.e.apps.utils.SystemInfoProvider import javax.inject.Inject import javax.inject.Singleton import timber.log.Timber + ImportOrdering:UpdatesFragment.kt$import android.os.Bundle import android.view.View import androidx.appcompat.app.AlertDialog import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.work.WorkInfo import androidx.work.WorkManager import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.Status import foundation.e.apps.data.application.ApplicationInstaller import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.install.models.AppInstall import foundation.e.apps.data.login.AuthObject import foundation.e.apps.data.login.exceptions.GPlayException import foundation.e.apps.data.login.exceptions.GPlayLoginException import foundation.e.apps.databinding.FragmentUpdatesBinding import foundation.e.apps.di.CommonUtilsModule.safeNavigate import foundation.e.apps.install.download.data.DownloadProgress import foundation.e.apps.install.pkg.PwaManager import foundation.e.apps.install.updates.UpdatesWorkManager import foundation.e.apps.install.workmanager.InstallWorkManager.INSTALL_WORK_NAME import foundation.e.apps.ui.AppInfoFetchViewModel import foundation.e.apps.ui.AppProgressViewModel import foundation.e.apps.ui.MainActivityViewModel import foundation.e.apps.ui.PrivacyInfoViewModel import foundation.e.apps.ui.application.subFrags.ApplicationDialogFragment import foundation.e.apps.ui.applicationlist.ApplicationListRVAdapter import foundation.e.apps.ui.parentFragment.TimeoutFragment import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import foundation.e.apps.utils.toast import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch import timber.log.Timber import java.util.Locale import javax.inject.Inject + ImportOrdering:UpdatesManagerImpl.kt$import android.content.Context import android.content.pm.ApplicationInfo import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.cleanapk.ApkSignatureManager import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.isUnFiltered import foundation.e.apps.data.faultyApps.FaultyAppRepository import foundation.e.apps.data.fdroid.FDroidRepository import foundation.e.apps.data.application.ApplicationRepository import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.data.gitlab.SystemAppsUpdatesRepository import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.preference.AppLoungePreference import foundation.e.apps.install.pkg.AppLoungePackageManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.withContext import timber.log.Timber import javax.inject.Inject + ImportOrdering:UpdatesManagerRepository.kt$import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.application.UpdatesDao import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import javax.inject.Inject + ImportOrdering:UpdatesNotifier.kt$import android.Manifest import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.os.Build import androidx.core.app.ActivityCompat import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import foundation.e.apps.ui.MainActivity import foundation.e.apps.R + ImportOrdering:UpdatesViewModel.kt$import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.work.WorkInfo import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.data.StoreRepository import foundation.e.apps.data.Stores import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.Status import foundation.e.apps.data.application.ApplicationRepository import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.data.login.exceptions.CleanApkException import foundation.e.apps.data.login.exceptions.GPlayException import foundation.e.apps.data.updates.UpdatesManagerRepository import kotlinx.coroutines.launch import javax.inject.Inject + ImportOrdering:UpdatesWorker.kt$import android.Manifest import android.content.Context import android.content.pm.PackageManager import android.net.ConnectivityManager import android.net.NetworkCapabilities import androidx.hilt.work.HiltWorker import androidx.preference.PreferenceManager import androidx.work.CoroutineWorker import androidx.work.WorkInfo.State import androidx.work.WorkManager import androidx.work.WorkerParameters import com.aurora.gplayapi.data.models.AuthData import dagger.assisted.Assisted import dagger.assisted.AssistedInject import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.User import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.gitlab.SystemAppsUpdatesRepository import foundation.e.apps.data.login.AuthenticatorRepository import foundation.e.apps.data.preference.AppLoungeDataStore import foundation.e.apps.data.updates.UpdatesManagerRepository import foundation.e.apps.install.workmanager.AppInstallProcessor import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import timber.log.Timber + Indentation:AppInstallProcessor.kt$AppInstallProcessor$ + Indentation:AuthDataProvider.kt$AuthDataProvider$ + Indentation:ContentRatingValidity.kt$ContentRatingValidity$ + Indentation:DownloadManagerUtils.kt$DownloadManagerUtils$ + Indentation:DumpAppInstallStatusReceiver.kt$DumpAppInstallStatusReceiver$ + Indentation:InstallAppWorker.kt$InstallAppWorker$ + Indentation:MainActivity.kt$MainActivity$ + Indentation:NetworkHandler.kt$ + Indentation:PlayStoreRepository.kt$PlayStoreRepository$ + Indentation:PwaManager.kt$PwaManager$ + Indentation:RetrofitApiModule.kt$RetrofitApiModule$ + Indentation:Source.kt$Source$ + Indentation:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$ + Indentation:UpdatesManagerImpl.kt$UpdatesManagerImpl$ + Indentation:ValidateAppAgeLimitUseCase.kt$ValidateAppAgeLimitUseCase$ InstanceOfCheckForException:GPlayHttpClient.kt$GPlayHttpClient$e is SocketTimeoutException InvalidPackageDeclaration:Trackers.kt$package foundation.e.apps.data.exodus LargeClass:ApplicationFragment.kt$ApplicationFragment : TimeoutFragment @@ -74,7 +149,6 @@ MagicNumber:StorageComputer.kt$StorageComputer$999950 MagicNumber:TOSFragment.kt$TOSFragment$20 MaxLineLength:AppManagerImpl.kt$AppManagerImpl$. - MaxLineLength:AppManagerImpl.kt$AppManagerImpl$return MaxLineLength:AppManagerWrapper.kt$AppManagerWrapper$return fDroidRepository.isFDroidApplicationSigned(context, appInstall.packageName, apkFilePath, appInstall.signature) MaxLineLength:AppManagerWrapper.kt$AppManagerWrapper$suspend MaxLineLength:ApplicationFragment.kt$ApplicationFragment.Companion$"https://gitlab.e.foundation/e/os/apps/-/blob/main/app/src/main/java/foundation/e/apps/data/exodus/repositories/PrivacyScoreRepositoryImpl.kt" @@ -92,15 +166,154 @@ MaxLineLength:PrivacyScoreRepositoryImpl.kt$PrivacyScoreRepositoryImpl$return if (numberOfTrackers > THRESHOLD_OF_NON_ZERO_TRACKER_SCORE) MIN_TRACKER_SCORE else MAX_TRACKER_SCORE - numberOfTrackers MaxLineLength:SettingsFragment.kt$SettingsFragment$showAllApplications?.isChecked == true || showFOSSApplications?.isChecked == true || showPWAApplications?.isChecked == true MaxLineLength:UpdatesNotifier.kt$UpdatesNotifier$notificationBuilder.setContentText(context.getString(R.string.automatically_install_updates_notification_text)) - MaxLineLength:UpdatesViewModel.kt$UpdatesViewModel$return updatesList.value?.first?.any { it.status == Status.UPDATABLE || it.status == Status.INSTALLATION_ISSUE } == true MaxLineLength:UpdatesWorker.kt$UpdatesWorker$applicationContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED + MaximumLineLength:AppManagerImpl.kt$AppManagerImpl$ + MaximumLineLength:AppManagerWrapper.kt$AppManagerWrapper$ + MaximumLineLength:ApplicationFragment.kt$ApplicationFragment.Companion$ + MaximumLineLength:DownloadManager.kt$DownloadManager$ + MaximumLineLength:DownloadManagerUtils.kt$DownloadManagerUtils$ + MaximumLineLength:FDroidRepository.kt$FDroidRepository$ + MaximumLineLength:GoogleLoginManager.kt$GoogleLoginManager$ + MaximumLineLength:MainActivity.kt$MainActivity$ + MaximumLineLength:MainActivityViewModel.kt$MainActivityViewModel$ + MaximumLineLength:PrivacyScoreRepositoryImpl.kt$PrivacyScoreRepositoryImpl$ + MaximumLineLength:SettingsFragment.kt$SettingsFragment$ + MaximumLineLength:UpdatesNotifier.kt$UpdatesNotifier$ + MaximumLineLength:UpdatesWorker.kt$UpdatesWorker$ MayBeConst:EcloudApiInterface.kt$EcloudApiInterface.Companion$val BASE_URL = "https://eu.gtoken.ecloud.global/" - MemberNameEqualsClassName:Stores.kt$Stores$private val stores = defaultStores.toMutableMap() + MultiLineIfElse:AC2DMTask.kt$AC2DMTask$return PlayResponse() + MultiLineIfElse:AnonymousLoginManager.kt$AnonymousLoginManager$"" + MultiLineIfElse:AnonymousLoginManager.kt$AnonymousLoginManager$"\nError message: $this" + MultiLineIfElse:AppLoungeDataStore.kt$AppLoungeDataStore$User.UNAVAILABLE + MultiLineIfElse:AppLoungeDataStore.kt$AppLoungeDataStore$User.valueOf(this) + MultiLineIfElse:AppLoungeDataStore.kt$AppLoungeDataStore$it.remove(AUTHDATA) + MultiLineIfElse:AppLoungeDataStore.kt$AppLoungeDataStore$it.remove(USERTYPE) + MultiLineIfElse:AppLoungeDataStore.kt$AppLoungeDataStore$it[AUTHDATA] = json.encodeToString(authData) + MultiLineIfElse:AppLoungeDataStore.kt$AppLoungeDataStore$it[USERTYPE] = user.name + MultiLineIfElse:AppLoungePackageManager.kt$AppLoungePackageManager$PendingIntent.FLAG_UPDATE_CURRENT + MultiLineIfElse:AppLoungePackageManager.kt$AppLoungePackageManager$PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE + MultiLineIfElse:AppTag.kt$AppTag$"Open Source" + MultiLineIfElse:AppTag.kt$AppTag$this::class.java.simpleName + MultiLineIfElse:ApplicationFragment.kt$ApplicationFragment$getString(R.string.not_available) + MultiLineIfElse:ApplicationFragment.kt$ApplicationFragment$getString(R.string.update) + MultiLineIfElse:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$View.INVISIBLE + MultiLineIfElse:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$View.VISIBLE + MultiLineIfElse:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$context.getString(R.string.not_available) + MultiLineIfElse:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$context.getString(R.string.update) + MultiLineIfElse:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$view.context.getString(R.string.retry) + MultiLineIfElse:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$view.context.getText(R.string.update) + MultiLineIfElse:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$width = maxAllowedWidth + MultiLineIfElse:ApplicationListViewModel.kt$ApplicationListViewModel$CleanApkException( result.isTimeout(), result.message.ifBlank { "Data load error" } ) + MultiLineIfElse:ApplicationListViewModel.kt$ApplicationListViewModel$GPlayException( result.isTimeout(), result.message.ifBlank { "Data load error" } ) + MultiLineIfElse:CategoriesViewModel.kt$CategoriesViewModel$CleanApkException( data.status == ResultStatus.TIMEOUT, data.status.message.ifBlank { "Data load error" } ) + MultiLineIfElse:CategoriesViewModel.kt$CategoriesViewModel$GPlayException( data.status == ResultStatus.TIMEOUT, data.status.message.ifBlank { "Data load error" } ) + MultiLineIfElse:CategoryUtils.kt$CategoryUtils$category.id + MultiLineIfElse:CategoryUtils.kt$CategoryUtils$category.title + MultiLineIfElse:GplayApiExtensions.kt$-1.0 + MultiLineIfElse:HomeChildRVAdapter.kt$HomeChildRVAdapter$context.getString(R.string.not_available) + MultiLineIfElse:HomeChildRVAdapter.kt$HomeChildRVAdapter$context.getString(R.string.update) + MultiLineIfElse:MaterialButtonUtils.kt$ContextCompat.getColorStateList(this.context, android.R.color.transparent) + MultiLineIfElse:NativeDeviceInfoProviderModule.kt$NativeDeviceInfoProviderModule$"unknown" + MultiLineIfElse:NativeDeviceInfoProviderModule.kt$NativeDeviceInfoProviderModule$Build.getRadioVersion() + MultiLineIfElse:NativeGsfVersionProvider.kt$NativeGsfVersionProvider$GOOGLE_SERVICES_VERSION_CODE + MultiLineIfElse:NativeGsfVersionProvider.kt$NativeGsfVersionProvider$gsfVersionCode + MultiLineIfElse:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$ResultSupreme.Success(formatAuthData(this.data!!)) + MultiLineIfElse:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$it.data!! + MultiLineIfElse:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$null + MultiLineIfElse:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$return AuthObject.GPlayAuth(it, user) + MultiLineIfElse:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$this + MultiLineIfElse:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$try { json.decodeFromString<AuthData>(authJson) } catch (e: Exception) { e.printStackTrace() null } + MultiLineIfElse:PlayStoreRepository.kt$PlayStoreRepository$Category.Type.APPLICATION + MultiLineIfElse:PlayStoreRepository.kt$PlayStoreRepository$Category.Type.GAME + MultiLineIfElse:PrivacyInfoViewModel.kt$PrivacyInfoViewModel$appPrivacyPrivacyInfoResult + MultiLineIfElse:PrivacyScoreRepositoryImpl.kt$PrivacyScoreRepositoryImpl$MIN_PERMISSION_SCORE + MultiLineIfElse:PrivacyScoreRepositoryImpl.kt$PrivacyScoreRepositoryImpl$round( FACTOR_OF_PERMISSION_SCORE * ceil((MAX_PERMISSION_SCORE - numberOfPermission) / DIVIDER_OF_PERMISSION_SCORE) ).toInt() + MultiLineIfElse:SearchRepositoryImpl.kt$SearchRepositoryImpl$ResultSupreme.Error( message = "", exception = GPlayIOException("Unable to reach Google Play API") ) + MultiLineIfElse:SearchViewModel.kt$SearchViewModel$emptyList() + MultiLineIfElse:SearchViewModel.kt$SearchViewModel$searchRepository.getSearchSuggestions(it) + MultiLineIfElse:SettingsFragment.kt$SettingsFragment$true + MultiLineIfElse:ValidateAppAgeLimitUseCase.kt$ValidateAppAgeLimitUseCase$fetchedContentRating NestedBlockDepth:AppInstallProcessor.kt$AppInstallProcessor$suspend fun enqueueFusedDownload( appInstall: AppInstall, isAnUpdate: Boolean = false, isSystemApp: Boolean = false ) - NewLineAtEndOfFile:ContentRatingValidity.kt$foundation.e.apps.domain.model.ContentRatingValidity.kt - NewLineAtEndOfFile:HomeConverter.kt$foundation.e.apps.data.cleanapk.repositories.HomeConverter.kt - NewLineAtEndOfFile:Stores.kt$foundation.e.apps.data.Stores.kt + NewLineAtEndOfFile:ContentRatingValidity.kt$foundation.e.apps.domain.model.ContentRatingValidity.kt NewLineAtEndOfFile:SystemAppsUpdatesRepository.kt$foundation.e.apps.data.gitlab.SystemAppsUpdatesRepository.kt + NoBlankLineBeforeRbrace:AgeGroupApi.kt$AgeGroupApi$ + NoBlankLineBeforeRbrace:AgeRatingProvider.kt$AgeRatingProvider$ + NoBlankLineBeforeRbrace:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$ + NoBlankLineBeforeRbrace:ContentRatingDao.kt$ContentRatingDao$ + NoBlankLineBeforeRbrace:FDroidAntiFeatureRepository.kt$FDroidAntiFeatureRepository$ + NoBlankLineBeforeRbrace:FDroidMonitorApi.kt$FDroidMonitorApi$ + NoBlankLineBeforeRbrace:NetworkHandler.kt$ + NoBlankLineBeforeRbrace:RetrofitApiModule.kt$RetrofitApiModule$ + NoBlankLineBeforeRbrace:SearchViewModel.kt$SearchViewModel$ + NoBlankLineBeforeRbrace:SystemAppDefinitionApi.kt$SystemAppDefinitionApi$ + NoBlankLineBeforeRbrace:UpdatableSystemAppsApi.kt$UpdatableSystemAppsApi$ + NoBlankLineBeforeRbrace:UpdatesManagerRepository.kt$UpdatesManagerRepository$ + NoBlankLineBeforeRbrace:ValidateAppAgeLimitUseCase.kt$ValidateAppAgeLimitUseCase$ + NoConsecutiveBlankLines:ApplicationFragment.kt$ + NoConsecutiveBlankLines:ApplicationRepository.kt$ApplicationRepository$ + NoConsecutiveBlankLines:AuthDataProvider.kt$ + NoConsecutiveBlankLines:CategoriesViewModel.kt$CategoriesViewModel$ + NoConsecutiveBlankLines:CleanApkSearchHelper.kt$ + NoConsecutiveBlankLines:CommonUtilsModule.kt$CommonUtilsModule$ + NoConsecutiveBlankLines:DumpAppInstallStatusReceiver.kt$ + NoConsecutiveBlankLines:GPlayHttpClient.kt$GPlayHttpClient$ + NoConsecutiveBlankLines:NetworkHandler.kt$ + NoConsecutiveBlankLines:PlayStoreSearchHelper.kt$ + NoConsecutiveBlankLines:Report.kt$ + NoEmptyFirstLineInMethodBlock:AgeRatingProvider.kt$AgeRatingProvider$ + NoEmptyFirstLineInMethodBlock:AppInstallProcessor.kt$AppInstallProcessor$ + NoEmptyFirstLineInMethodBlock:AppLoungePackageManager.kt$AppLoungePackageManager$ + NoEmptyFirstLineInMethodBlock:ApplicationListFragment.kt$ApplicationListFragment$ + NoEmptyFirstLineInMethodBlock:ApplicationListViewModel.kt$ApplicationListViewModel$ + NoEmptyFirstLineInMethodBlock:ApplicationViewModel.kt$ApplicationViewModel$ + NoEmptyFirstLineInMethodBlock:AppsApiImpl.kt$AppsApiImpl$ + NoEmptyFirstLineInMethodBlock:AuthDataProvider.kt$AuthDataProvider$ + NoEmptyFirstLineInMethodBlock:AuthenticatorRepository.kt$AuthenticatorRepository$ + NoEmptyFirstLineInMethodBlock:CategoryApiImpl.kt$CategoryApiImpl$ + NoEmptyFirstLineInMethodBlock:CleanApkAppsRepository.kt$CleanApkAppsRepository$ + NoEmptyFirstLineInMethodBlock:DownloadManagerUtils.kt$DownloadManagerUtils$ + NoEmptyFirstLineInMethodBlock:FileManager.kt$FileManager$ + NoEmptyFirstLineInMethodBlock:HomeApiImpl.kt$HomeApiImpl$ + NoEmptyFirstLineInMethodBlock:LoadingViewModel.kt$LoadingViewModel$ + NoEmptyFirstLineInMethodBlock:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$ + NoEmptyFirstLineInMethodBlock:SearchFragment.kt$SearchFragment$ + NoEmptyFirstLineInMethodBlock:SettingsFragment.kt$SettingsFragment$ + NoEmptyFirstLineInMethodBlock:StorageNotificationManager.kt$StorageNotificationManager$ + NoEmptyFirstLineInMethodBlock:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$ + NoEmptyFirstLineInMethodBlock:TOSFragment.kt$TOSFragment$ + NoEmptyFirstLineInMethodBlock:TimeoutFragment.kt$TimeoutFragment$ + NoEmptyFirstLineInMethodBlock:UpdatesManagerImpl.kt$UpdatesManagerImpl$ + NoEmptyFirstLineInMethodBlock:ValidateAppAgeLimitUseCase.kt$ValidateAppAgeLimitUseCase$ + NoMultipleSpaces:AppLoungeDataStore.kt$AppLoungeDataStore$ + NoMultipleSpaces:AppLoungePreference.kt$AppLoungePreference$ + NoMultipleSpaces:CleanApkPwaRepository.kt$CleanApkPwaRepository$ + NoMultipleSpaces:ExodusUriGenerator.kt$ExodusUriGenerator$ + NoMultipleSpaces:PrivacyInfoViewModel.kt$PrivacyInfoViewModel$ + NoMultipleSpaces:SearchViewModel.kt$SearchViewModel$ + NoSemicolons:AgeRatingProvider.kt$AgeRatingProvider.UriCode.AgeRating$; + NoSemicolons:AuthDataProvider.kt$AuthDataProvider$; + NoTrailingSpaces:DownloadInfoApiImpl.kt$DownloadInfoApiImpl$ + NoUnusedImports:AppInstallProcessor.kt$foundation.e.apps.install.workmanager.AppInstallProcessor.kt + NoUnusedImports:AppLoungePackageManager.kt$foundation.e.apps.install.pkg.AppLoungePackageManager.kt + NoUnusedImports:AppManagerImpl.kt$foundation.e.apps.data.install.AppManagerImpl.kt + NoUnusedImports:AppManagerWrapper.kt$foundation.e.apps.data.install.AppManagerWrapper.kt + NoUnusedImports:AppPurchaseFragment.kt$foundation.e.apps.ui.purchase.AppPurchaseFragment.kt + NoUnusedImports:ApplicationDiffUtil.kt$foundation.e.apps.ui.applicationlist.ApplicationDiffUtil.kt + NoUnusedImports:CleanApkAppsRepository.kt$foundation.e.apps.data.cleanapk.repositories.CleanApkAppsRepository.kt + NoUnusedImports:CustomUncaughtExceptionHandler.kt$foundation.e.apps.utils.CustomUncaughtExceptionHandler.kt + NoUnusedImports:DownloadManager.kt$foundation.e.apps.data.DownloadManager.kt + NoUnusedImports:GoogleSignInFragment.kt$foundation.e.apps.ui.setup.signin.google.GoogleSignInFragment.kt + NoUnusedImports:HomeApi.kt$foundation.e.apps.data.application.home.HomeApi.kt + NoUnusedImports:HomeApiImpl.kt$foundation.e.apps.data.application.home.HomeApiImpl.kt + NoUnusedImports:MainActivityViewModel.kt$foundation.e.apps.ui.MainActivityViewModel.kt + NoUnusedImports:NotificationManagerModule.kt$foundation.e.apps.di.NotificationManagerModule.kt + NoUnusedImports:PrivacyScoreRepositoryImpl.kt$foundation.e.apps.data.exodus.repositories.PrivacyScoreRepositoryImpl.kt + NoUnusedImports:UpdatesFragment.kt$foundation.e.apps.ui.updates.UpdatesFragment.kt + NoUnusedImports:UpdatesNotifier.kt$foundation.e.apps.install.updates.UpdatesNotifier.kt + NoWildcardImports:SystemAppsUpdatesRepository.kt$import foundation.e.apps.data.gitlab.UpdatableSystemAppsApi.* + ParameterListWrapping:AuthDataProvider.kt$AuthDataProvider$(uri: Uri, projection: Array<String>?, selection: String?, selectionArgs: Array<String>?, sortOrder: String?) + ParameterListWrapping:AuthDataProvider.kt$AuthDataProvider$(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<String>?) + ParameterListWrapping:ContentRatingValidity.kt$ContentRatingValidity$(val isValid: Boolean, val contentRating: ContentRating? = null, val requestPin: Boolean = false) PrintStackTrace:AppPrivacyInfoRepositoryImpl.kt$AppPrivacyInfoRepositoryImpl$e PrintStackTrace:CommonUtilsModule.kt$CommonUtilsModule$e PrintStackTrace:EcloudRepository.kt$EcloudRepository$e @@ -128,12 +341,29 @@ ReturnCount:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$private suspend fun getApplication( packageName: String, releaseType: OsReleaseType, sdkLevel: Int, device: String, ): Application? ReturnCount:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$private suspend fun getReleaseDetailsUrl( systemAppProject: SystemAppProject, releaseType: OsReleaseType, ): String? ReturnCount:UpdatesManagerImpl.kt$UpdatesManagerImpl$private suspend fun calculateSignatureVersion(latestCleanapkApp: Application): String + SpacingAroundColon:AppEvent.kt$AppEvent.SuccessfulLogin$: + SpacingAroundColon:AppPrivacyInfoRepositoryImpl.kt$AppPrivacyInfoRepositoryImpl$: + SpacingAroundColon:CategoryApiImpl.kt$CategoryApiImpl$: + SpacingAroundColon:GPlayException.kt$GPlayIOException$: + SpacingAroundComma:HomeFragment.kt$HomeFragment$, + SpacingAroundComma:StorageComputer.kt$StorageComputer$, + SpacingAroundCurly:AppInstallProcessor.kt$AppInstallProcessor${ + SpacingAroundCurly:ApplicationListRVAdapter.kt$ApplicationListRVAdapter${ + SpacingAroundCurly:RetrofitApiModule.kt$RetrofitApiModule${ + SpacingAroundKeyword:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$catch + SpacingAroundParens:NetworkStatusManager.kt$NetworkStatusManager$( + SpacingBetweenDeclarationsWithAnnotations:ApplicationDialogFragment.kt$ApplicationDialogFragment$@DrawableRes private var drawableResId: Int = -1 + SpacingBetweenDeclarationsWithAnnotations:LocaleChangedBroadcastReceiver.kt$LocaleChangedBroadcastReceiver$@Inject lateinit var cache: Cache + SpacingBetweenDeclarationsWithAnnotations:LocaleChangedBroadcastReceiver.kt$LocaleChangedBroadcastReceiver$@Inject lateinit var json: Json SpreadOperator:DownloadProgressLD.kt$DownloadProgressLD$(*downloadingIds.toLongArray()) SpreadOperator:EglExtensionProvider.kt$EglExtensionProvider$(*`as`) SpreadOperator:NativeDeviceInfoProviderModule.kt$NativeDeviceInfoProviderModule$(*context.assets.locales) SpreadOperator:NativeDeviceInfoProviderModule.kt$NativeDeviceInfoProviderModule$(*systemSharedLibraryNames) + StringTemplate:AgeRatingProvider.kt$AgeRatingProvider$${AUTHORITY} + StringTemplate:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$${device} + StringTemplate:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$${releaseType} + StringTemplate:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$${sdkLevel} SwallowedException:AppInfoFetchViewModel.kt$AppInfoFetchViewModel$e: Exception - SwallowedException:AppInstallProcessor.kt$AppInstallProcessor$e: IllegalStateException SwallowedException:AppInstallProcessor.kt$AppInstallProcessor$e: InternalException.AppNotPurchased SwallowedException:AppLoungePackageManager.kt$AppLoungePackageManager$e: PackageManager.NameNotFoundException SwallowedException:ApplicationViewModel.kt$ApplicationViewModel$e: Exception @@ -157,7 +387,6 @@ TooGenericExceptionCaught:CommonUtilsModule.kt$CommonUtilsModule$e: Exception TooGenericExceptionCaught:DownloadManager.kt$DownloadManager$e: Exception TooGenericExceptionCaught:DownloadManager.kt$DownloadManager$e: RuntimeException - TooGenericExceptionCaught:DownloadManager.kt$DownloadManager$exception: Exception TooGenericExceptionCaught:DownloadProgressLD.kt$DownloadProgressLD$e: Exception TooGenericExceptionCaught:EcloudRepository.kt$EcloudRepository$e: Exception TooGenericExceptionCaught:FileManager.kt$FileManager$e: Exception @@ -183,7 +412,6 @@ TooManyFunctions:AppManagerWrapper.kt$AppManagerWrapper TooManyFunctions:ApplicationListFragment.kt$ApplicationListFragment : TimeoutFragmentApplicationInstaller TooManyFunctions:ApplicationRepository.kt$ApplicationRepository - TooManyFunctions:HomeFragment.kt$HomeFragment : TimeoutFragmentApplicationInstaller TooManyFunctions:MainActivityViewModel.kt$MainActivityViewModel : ViewModel TooManyFunctions:TimeoutFragment.kt$TimeoutFragment : Fragment TooManyFunctions:UpdatesFragment.kt$UpdatesFragment : TimeoutFragmentApplicationInstaller @@ -194,7 +422,17 @@ UseCheckOrError:HomeApiImpl.kt$HomeApiImpl$throw IllegalStateException("Could not find store for $source") UseCheckOrError:PlayStoreRepository.kt$PlayStoreRepository$throw IllegalStateException("App version code cannot be 0") UseCheckOrError:PlayStoreRepository.kt$PlayStoreRepository$throw IllegalStateException("Could not get download details for $idOrPackageName") - UseCheckOrError:Stores.kt$Stores$throw IllegalStateException("store not found") WildcardImport:SystemAppsUpdatesRepository.kt$import foundation.e.apps.data.gitlab.UpdatableSystemAppsApi.* + Wrapping:AppInstallProcessor.kt$AppInstallProcessor$( + Wrapping:ApplicationDeserializer.kt$ApplicationDeserializer$( + Wrapping:AuthDataProvider.kt$AuthDataProvider$( + Wrapping:ContentRatingValidity.kt$ContentRatingValidity$( + Wrapping:InstallAppWorker.kt$InstallAppWorker$( + Wrapping:MainActivity.kt$MainActivity$( + Wrapping:MainActivity.kt$MainActivity$(this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { if (isInitialScreen()) { resetIgnoreStatusForSessionRefresh() finish() } else { // Let the system handle the back press isEnabled = false onBackPressedDispatcher.onBackPressed() } } }) + Wrapping:PlayStoreRepository.kt$PlayStoreRepository$( + Wrapping:SearchFragment.kt$SearchFragment$Fragment(R.layout.fragment_search), ApplicationInstaller, SearchViewHandler.SearchViewListener + Wrapping:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$( + Wrapping:ValidateAppAgeLimitUseCase.kt$ValidateAppAgeLimitUseCase$( diff --git a/build.gradle b/build.gradle index d88478af2c3968d68208e41ab44de29ce7604ad9..0c06063ba8507faa4cad7a502290159b409e1f4a 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,10 @@ detekt { basePath = projectDir } +dependencies { + detektPlugins libs.detekt.formatting +} + tasks.register('clean', Delete) { delete rootProject.buildDir } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f5c3b7ded95025325a96d14b0b81c65a8ba8927e..128d18a1ed1c59cc550b7e8c8098f1012b36db0e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,6 +9,7 @@ core = "1.6.1" coreKtx = "1.15.0" coreTesting = "2.2.0" datastorePreferences = "1.1.2" +detektFormatting = "1.23.8" elib = "0.0.1-alpha11" espressoCore = "3.6.1" hiltCompiler = "1.2.0" @@ -35,7 +36,7 @@ mockitoInline = "5.0.0" mockitoKotlin = "5.4.0" mockk = "1.12.3" moshiKotlin = "1.15.1" -detekt = "1.23.7" +detekt = "1.23.8" ktlint = "10.2.0" navigation = "2.8.5" okhttp = "4.12.0" @@ -64,6 +65,7 @@ core = { module = "androidx.test:core", version.ref = "core" } core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } core-testing = { module = "androidx.arch.core:core-testing", version.ref = "coreTesting" } datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "datastorePreferences" } +detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detektFormatting" } elib = { module = "foundation.e:elib", version.ref = "elib" } ext-junit = { module = "androidx.test.ext:junit", version.ref = "junitVersion" } espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espressoCore" }