Merge pull request #121 from esensar/ci

Add reusable workflows for PRs and testing builds
This commit is contained in:
Naveen Singh
2024-09-28 16:31:03 +05:30
committed by GitHub
7 changed files with 1364 additions and 1 deletions

9
.github/workflows/pr.yml vendored Normal file
View File

@@ -0,0 +1,9 @@
name: PR
on:
pull_request:
branches: [ master ]
jobs:
call-pr-workflow:
uses: FossifyOrg/.github/.github/workflows/pr.yml@main

10
.github/workflows/testing-build.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
name: Testing build (on PR)
on:
pull_request:
branches: [ master ]
types: [ labeled, opened, synchronize, reopened ]
jobs:
call-testing-build-workflow:
uses: FossifyOrg/.github/.github/workflows/testing-build.yml@main

View File

@@ -6,6 +6,7 @@ import java.io.FileInputStream
plugins {
alias(libs.plugins.android)
alias(libs.plugins.kotlinAndroid)
alias(libs.plugins.detekt)
}
val keystorePropertiesFile: File = rootProject.file("keystore.properties")
@@ -89,10 +90,16 @@ android {
lint {
checkReleaseBuilds = false
abortOnError = false
abortOnError = true
warningsAsErrors = true
baseline = file("lint-baseline.xml")
}
}
detekt {
baseline = file("detekt-baseline.xml")
}
dependencies {
implementation(libs.fossify.commons)
implementation(libs.androidx.documentfile)

222
app/detekt-baseline.xml Normal file
View File

@@ -0,0 +1,222 @@
<?xml version="1.0" ?>
<SmellBaseline>
<ManuallySuppressedIssues></ManuallySuppressedIssues>
<CurrentIssues>
<ID>ComplexCondition:Activity.kt$(hide &amp;&amp; filename.startsWith('.')) || (!hide &amp;&amp; !filename.startsWith('.'))</ID>
<ID>ComplexCondition:ItemsAdapter.kt$ItemsAdapter$activity.getDoesFilePathExist(source) &amp;&amp; activity.getIsPathDirectory(source) &amp;&amp; sourceFile.list()?.isEmpty() == true &amp;&amp; sourceFile.getProperSize(true) == 0L &amp;&amp; sourceFile.getFileCount(true) == 0</ID>
<ID>ComplexCondition:ItemsAdapter.kt$ItemsAdapter$hasOTGConnected &amp;&amp; itemToLoad is String &amp;&amp; activity.isPathOnOTG(itemToLoad) &amp;&amp; baseConfig.OTGTreeUri.isNotEmpty() &amp;&amp; baseConfig.OTGPartition.isNotEmpty()</ID>
<ID>ComplexCondition:MainActivity.kt$MainActivity$!config.wasOTGHandled &amp;&amp; hasPermission(PERMISSION_WRITE_STORAGE) &amp;&amp; hasOTGConnected() &amp;&amp; config.OTGPath.isEmpty()</ID>
<ID>ComplexCondition:MimeTypesActivity.kt$MimeTypesActivity$mimetype != "image" &amp;&amp; mimetype != "video" &amp;&amp; mimetype != "audio" &amp;&amp; mimetype != "text" &amp;&amp; !extraAudioMimeTypes.contains(fullMimetype) &amp;&amp; !extraDocumentMimeTypes.contains(fullMimetype) &amp;&amp; !archiveMimeTypes.contains(fullMimetype)</ID>
<ID>ComplexCondition:ReadTextActivity.kt$ReadTextActivity$requestCode == SELECT_SAVE_FILE_INTENT &amp;&amp; resultCode == Activity.RESULT_OK &amp;&amp; resultData != null &amp;&amp; resultData.data != null</ID>
<ID>CyclomaticComplexMethod:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
<ID>CyclomaticComplexMethod:DecompressActivity.kt$DecompressActivity$private fun fillAllListItems(uri: Uri, callback: () -&gt; Unit)</ID>
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null): Boolean</ID>
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$override fun actionItemPressed(id: Int)</ID>
<ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun setupOptionsMenu()</ID>
<ID>CyclomaticComplexMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList&lt;FileDirItem&gt;) -&gt; Unit)</ID>
<ID>CyclomaticComplexMethod:StorageFragment.kt$StorageFragment$private fun getSizesByMimeType(volumeName: String): HashMap&lt;String, Long&gt;</ID>
<ID>EmptyCatchBlock:MimeTypesActivity.kt$MimeTypesActivity${ }</ID>
<ID>EmptyCatchBlock:StorageFragment.kt$StorageFragment${ }</ID>
<ID>EmptyFunctionBlock:DecompressItemsAdapter.kt$DecompressItemsAdapter${}</ID>
<ID>EmptyFunctionBlock:MainActivity.kt$MainActivity.&lt;no name provided&gt;${}</ID>
<ID>EmptyFunctionBlock:ManageFavoritesAdapter.kt$ManageFavoritesAdapter${}</ID>
<ID>EmptyFunctionBlock:MimeTypesActivity.kt$MimeTypesActivity${}</ID>
<ID>EmptyFunctionBlock:StorageFragment.kt$StorageFragment${}</ID>
<ID>LargeClass:ItemsAdapter.kt$ItemsAdapter : MyRecyclerViewAdapterOnPopupTextUpdate</ID>
<ID>LargeClass:MainActivity.kt$MainActivity : SimpleActivity</ID>
<ID>LongMethod:DecompressActivity.kt$DecompressActivity$private fun fillAllListItems(uri: Uri, callback: () -&gt; Unit)</ID>
<ID>LongMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null): Boolean</ID>
<ID>LongMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList&lt;FileDirItem&gt;) -&gt; Unit)</ID>
<ID>LongParameterList:ItemsAdapter.kt$ItemsAdapter$( activity: SimpleActivity, var listItems: MutableList&lt;ListItem&gt;, private val listener: ItemOperationsListener?, recyclerView: MyRecyclerView, private val isPickMultipleIntent: Boolean, private val swipeRefreshLayout: SwipeRefreshLayout?, canHaveIndividualViewType: Boolean = true, itemClick: (Any) -&gt; Unit, )</ID>
<ID>LoopWithTooManyJumpStatements:DecompressActivity.kt$DecompressActivity$while</ID>
<ID>LoopWithTooManyJumpStatements:StorageFragment.kt$StorageFragment$do</ID>
<ID>MagicNumber:Config.kt$Config$1.2f</ID>
<ID>MagicNumber:Config.kt$Config$4</ID>
<ID>MagicNumber:Config.kt$Config$8</ID>
<ID>MagicNumber:DecompressActivity.kt$DecompressActivity$1024</ID>
<ID>MagicNumber:DecompressItemsAdapter.kt$DecompressItemsAdapter$0.8f</ID>
<ID>MagicNumber:DecompressItemsAdapter.kt$DecompressItemsAdapter$180</ID>
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$0.8f</ID>
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$10</ID>
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$180</ID>
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$4</ID>
<ID>MagicNumber:ItemsFragment.kt$ItemsFragment$3</ID>
<ID>MagicNumber:Long.kt$1000.0</ID>
<ID>MagicNumber:MimeTypesActivity.kt$MimeTypesActivity$1000</ID>
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$250</ID>
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$50</ID>
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$1000</ID>
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$3</ID>
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$50</ID>
<ID>MagicNumber:RootHelpers.kt$RootHelpers.&lt;no name provided&gt;$5</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$1000</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$100000</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$2000</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$3</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$4096L</ID>
<ID>MaxLineLength:Activity.kt$fun</ID>
<ID>MaxLineLength:ChangeViewTypeDialog.kt$ChangeViewTypeDialog$class</ID>
<ID>MaxLineLength:ChangeViewTypeDialog.kt$ChangeViewTypeDialog$val</ID>
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$FilePickerDialog</ID>
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$class</ID>
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$val indexOfDot = if (filename.contains('.') &amp;&amp; !activity.getIsPathDirectory(path)) filename.lastIndexOf(".") else filename.length</ID>
<ID>MaxLineLength:Config.kt$Config$set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()</ID>
<ID>MaxLineLength:Context.kt$fun Context.isPathOnRoot(path: String)</ID>
<ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$binding.decompressToolbar.title = realPath?.getFilenameFromPath() ?: Uri.decode(uri.toString().getFilenameFromPath())</ID>
<ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID>
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID>
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID>
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$"${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")}"</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$(drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(appIconColor)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$File(path).listFiles()?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$activity.getDocumentFile(path)?.listFiles()?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$if</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$intent.flags = intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$itemName?.text = if (textToHighlight.isEmpty()) fileName else fileName.highlightTextPart(textToHighlight, properPrimaryColor)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$itemSection?.text = if (textToHighlight.isEmpty()) listItem.mName else listItem.mName.highlightTextPart(textToHighlight, properPrimaryColor)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$name = if (base == currentPath) currentPath.getFilenameFromPath() else mainFilePath.relativizeWith(base)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$override fun getIsItemSelectable(position: Int)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$override fun onChange(position: Int)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$private</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$private fun getSelectedFileDirItems()</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$sourceFile.list()?.isEmpty() == true</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val currPath = if (entry.isDirectory) path else "${path.getParentPath().trimEnd('/')}/${entry.fileName}"</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val fileDirItem = FileDirItem(currPath, entry.fileName, entry.isDirectory, 0, entry.uncompressedSize)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val fileIcon = fileDrawables.getOrElse(path.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val paths = getSelectedFileDirItems().asSequence().filter { !it.isDirectory }.map { it.path }.toMutableList() as ArrayList&lt;String&gt;</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$}</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemDirGrid$override</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemEmpty$override</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileDirList$override</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileDirList$return ItemFileDirListBindingAdapter(ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot))</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileGrid$override</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemSection$override</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$context</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$if</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$private</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$val sectionTitle = ListItem(it.path, context!!.humanizePath(it.path), true, 0, 0, 0, true, false)</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$val sectionTitle = ListItem(parent, context!!.humanizePath(parent), false, 0, 0, 0, true, false)</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment.&lt;no name provided&gt;$return</ID>
<ID>MaxLineLength:ListItem.kt$ListItem$val mPath: String</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$// used at apps that have no file access at all, but need to work with files. For example Simple Calendar uses this at exporting events into a file</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.add_favorite).isVisible = currentFragment is ItemsFragment &amp;&amp; !favorites.contains(currentFragment.currentPath)</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.column_count).isVisible = currentViewType == VIEW_TYPE_GRID &amp;&amp; currentFragment !is StorageFragment</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.go_home).isVisible = currentFragment is ItemsFragment &amp;&amp; currentFragment.currentPath != config.homeFolder</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.remove_favorite).isVisible = currentFragment is ItemsFragment &amp;&amp; favorites.contains(currentFragment.currentPath)</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.set_as_home).isVisible = currentFragment is ItemsFragment &amp;&amp; currentFragment.currentPath != config.homeFolder</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden &amp;&amp; currentFragment !is StorageFragment</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden() &amp;&amp; currentFragment !is StorageFragment</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.toggle_filename).isVisible = currentViewType == VIEW_TYPE_GRID &amp;&amp; currentFragment !is StorageFragment</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$getStorageDirectories().firstOrNull { it.trimEnd('/') != internalStoragePath &amp;&amp; it.trimEnd('/') != sdCardPath }</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$if</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int)</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER || action == Intent.ACTION_GET_CONTENT || action == Intent.ACTION_PICK</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID>
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor</ID>
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$abstract</ID>
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$val fabIcon = context.resources.getColoredDrawableWithColor(iconId, context.getProperPrimaryColor().getContrastColor())</ID>
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$if</ID>
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$private</ID>
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$ItemsAdapter</ID>
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$binding.recentsSwipeRefresh.isEnabled = lastSearchedText.isEmpty() &amp;&amp; activity?.config?.enablePullToRefresh != false</ID>
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$class</ID>
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$if</ID>
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$val filtered = filesIgnoringSearch.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList&lt;ListItem&gt;</ID>
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$fun</ID>
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$private</ID>
<ID>MaxLineLength:SaveAsActivity.kt$SaveAsActivity$FilePickerDialog</ID>
<ID>MaxLineLength:SaveAsDialog.kt$SaveAsDialog$val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename)</ID>
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") &amp;&amp; !isTiramisuPlus())</ID>
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$class</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar.progress = ((totalStorageSpace - freeStorageSpace) / SIZE_DIVIDER).toInt()</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$totalSpace.text = String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSizeThousand())</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList&lt;ListItem&gt;</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val mimeType = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault())</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager</ID>
<ID>MaxLineLength:ViewPagerAdapter.kt$ViewPagerAdapter$val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT || activity.intent.action == Intent.ACTION_PICK</ID>
<ID>NestedBlockDepth:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null): Boolean</ID>
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun decompressPaths(paths: List&lt;String&gt;, conflictResolutions: LinkedHashMap&lt;String, Int&gt;, callback: (success: Boolean) -&gt; Unit)</ID>
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun setupView(binding: ItemViewBinding, listItem: ListItem)</ID>
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun tryDecompressingPaths(sourcePaths: List&lt;String&gt;, callback: (success: Boolean) -&gt; Unit)</ID>
<ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun getRegularItemsOf(path: String, callback: (originalPath: String, items: ArrayList&lt;ListItem&gt;) -&gt; Unit)</ID>
<ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun searchFiles(text: String, path: String): ArrayList&lt;ListItem&gt;</ID>
<ID>NestedBlockDepth:RecentsFragment.kt$RecentsFragment$private fun getRecents(callback: (recents: ArrayList&lt;ListItem&gt;) -&gt; Unit)</ID>
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$override fun setupFragment(activity: SimpleActivity)</ID>
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList&lt;FileDirItem&gt;</ID>
<ID>ReturnCount:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null): Boolean</ID>
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
<ID>TooGenericExceptionCaught:DecompressActivity.kt$DecompressActivity$e: Exception</ID>
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$exception: Exception</ID>
<ID>TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception</ID>
<ID>TooGenericExceptionCaught:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
<ID>TooGenericExceptionCaught:ReadTextActivity.kt$ReadTextActivity$e: Exception</ID>
<ID>TooGenericExceptionCaught:RecentsFragment.kt$RecentsFragment$e: Exception</ID>
<ID>TooGenericExceptionCaught:RootHelpers.kt$RootHelpers$e: Exception</ID>
<ID>TooGenericExceptionCaught:RootHelpers.kt$RootHelpers$exception: Exception</ID>
<ID>TooGenericExceptionCaught:SaveAsActivity.kt$SaveAsActivity$e: Exception</ID>
<ID>TooGenericExceptionCaught:StorageFragment.kt$StorageFragment$e: Exception</ID>
<ID>TooManyFunctions:DecompressActivity.kt$DecompressActivity : SimpleActivity</ID>
<ID>TooManyFunctions:DecompressItemsAdapter.kt$DecompressItemsAdapter : MyRecyclerViewAdapter</ID>
<ID>TooManyFunctions:ItemsAdapter.kt$ItemsAdapter : MyRecyclerViewAdapterOnPopupTextUpdate</ID>
<ID>TooManyFunctions:ItemsFragment.kt$ItemsFragment : MyViewPagerFragmentItemOperationsListenerBreadcrumbsListener</ID>
<ID>TooManyFunctions:MainActivity.kt$MainActivity : SimpleActivity</ID>
<ID>TooManyFunctions:ManageFavoritesAdapter.kt$ManageFavoritesAdapter : MyRecyclerViewAdapter</ID>
<ID>TooManyFunctions:MimeTypesActivity.kt$MimeTypesActivity : SimpleActivityItemOperationsListener</ID>
<ID>TooManyFunctions:ReadTextActivity.kt$ReadTextActivity : SimpleActivity</ID>
<ID>TooManyFunctions:RecentsFragment.kt$RecentsFragment : MyViewPagerFragmentItemOperationsListener</ID>
<ID>TooManyFunctions:RootHelpers.kt$RootHelpers</ID>
<ID>TooManyFunctions:SettingsActivity.kt$SettingsActivity : SimpleActivity</ID>
<ID>TooManyFunctions:StorageFragment.kt$StorageFragment : MyViewPagerFragmentItemOperationsListener</ID>
<ID>VariableNaming:ItemsAdapter.kt$ItemsAdapter$val SAFPath = getFirstSelectedItemPath()</ID>
<ID>VariableNaming:RecentsFragment.kt$RecentsFragment$private val RECENTS_LIMIT = 50</ID>
<ID>VariableNaming:StorageFragment.kt$StorageFragment$private val SIZE_DIVIDER = 100000</ID>
<ID>WildcardImport:Activity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:Activity.kt$import org.fossify.filemanager.helpers.*</ID>
<ID>WildcardImport:ChangeSortingDialog.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:CompressAsDialog.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:CreateNewItemDialog.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:DecompressActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:InsertFilenameDialog.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.dialogs.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.databinding.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.extensions.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.helpers.*</ID>
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:ManageFavoritesAdapter.kt$import android.view.*</ID>
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.filemanager.helpers.*</ID>
<ID>WildcardImport:MyViewPagerFragment.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:ReadTextActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:RecentsFragment.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:SaveAsActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:SaveAsDialog.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:StorageFragment.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:StorageFragment.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:StorageFragment.kt$import org.fossify.filemanager.helpers.*</ID>
</CurrentIssues>
</SmellBaseline>

1111
app/lint-baseline.xml Normal file
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,5 @@
plugins {
alias(libs.plugins.android).apply(false)
alias(libs.plugins.kotlinAndroid).apply(false)
alias(libs.plugins.detekt).apply(false)
}

View File

@@ -1,6 +1,8 @@
[versions]
#jetbrains
kotlin = "1.9.10"
#Detekt
detekt = "1.23.3"
#AndroidX
androidx-swiperefreshlayout = "1.1.0"
androidx-documentfile = "1.0.1"
@@ -39,3 +41,4 @@ zip4j = { module = "net.lingala.zip4j:zip4j", version.ref = "zip4j" }
[plugins]
android = { id = "com.android.application", version.ref = "gradlePlugins-agp" }
kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }