Generate SSD download access check from typed Jerboa
ober
e33c2f0905a888eed2900e1df19ac2ec5d86f7a0
--- a/templates/ssd-review.ss +++ b/templates/ssd-review.ss @@ -4772,12 +4772,14 @@ (android content SharedPreferences Editor) (android content res Resources) (android content DialogInterface) + (android content pm PackageManager) (android graphics Bitmap) (android content Intent) (android database Cursor) (android graphics drawable GradientDrawable) (android net Uri) (android os Build) + (android os Environment) (android os ParcelFileDescriptor) (android provider DocumentsContract) (android provider Settings) @@ -4925,6 +4927,7 @@ mainActivityInitialPickerUri mainActivityOpenPdf mainActivityOpenAnyPdf mainActivityChooseSsdPdfFolder mainActivityRequestDownloadAccess + mainActivityHasDirectDownloadAccess mainActivityRememberAndBrowseSsdFolder mainActivitySyncSelectedTree mainActivityHandleActivityResult @@ -5037,6 +5040,7 @@ (type Bitmap) (type Char) (type Exception) + (type Environment) (type Runnable) (type Thread) (type AlertDialog) @@ -5067,6 +5071,7 @@ (type Manifest) (type Uri) (type ParcelFileDescriptor) + (type PackageManager) (type View) (type Window) (type DisplayMetrics) @@ -5871,9 +5876,6 @@ (activity : MainActivity) (uri : Uri)) : (List SsdPdfChoice) (kotlin-member-call findSsdPdfsFromTree)) - (extern (mainActivityHasDirectDownloadAccessRaw - (activity : MainActivity)) : Bool - (kotlin-member-call hasDirectDownloadAccess)) (extern (mainActivityClientLogPayloadRaw (activity : MainActivity) (event : String) @@ -7920,6 +7922,10 @@ (kotlin-member-get flags)) (extern (mainActivityPackageNameRaw (activity : MainActivity)) : String (kotlin-member-get packageName)) + (extern (mainActivityCheckSelfPermissionRaw + (activity : MainActivity) + (permission : String)) : Int32 + (kotlin-member-call checkSelfPermission)) (extern (mainActivityGetPreferencesRaw (activity : MainActivity) (mode : Int32)) : SharedPreferences @@ -7953,6 +7959,13 @@ (kotlin-value FAST_TRUTH_GROUP_THRESHOLD)) (extern (mainActivityClientLogReadTimeoutMillisValue) : Int32 (kotlin-value CLIENT_LOG_READ_TIMEOUT_MS)) + (extern (environmentIsExternalStorageManagerRaw) : Bool + (kotlin-call Environment isExternalStorageManager)) + (extern (environmentDirectoryDownloads) : String + (kotlin-value Environment DIRECTORY_DOWNLOADS)) + (extern (environmentGetExternalStoragePublicDirectoryRaw + (kind : String)) : File + (kotlin-call Environment getExternalStoragePublicDirectory)) (extern (documentsContractBuildDocumentUriRaw (authority : String) (documentId : String)) : Uri @@ -8491,6 +8504,31 @@ (mainActivityGetPreferencesRaw activity (contextModePrivate))) key value))) + (def (mainActivityHasDirectDownloadAccess + (activity : MainActivity) + (sdkInt : Int32) + (androidRCode : Int32) + (androidMCode : Int32) + (readExternalStoragePermission : String) + (permissionGrantedCode : Int32)) : Bool + (if (>= sdkInt androidRCode) + (environmentIsExternalStorageManagerRaw) + (if (downloadAccessBeforeRuntimePermissions + (< sdkInt androidMCode)) + #t + (if (downloadAccessFromPermission + (permissionResultGranted + (mainActivityCheckSelfPermissionRaw + activity + readExternalStoragePermission) + permissionGrantedCode)) + #t + (try + (fileListFilesPresent + (environmentGetExternalStoragePublicDirectoryRaw + (environmentDirectoryDownloads))) + (catch (error : Exception) + #f)))))) (def (mainActivityRememberAndBrowseSsdFolder (activity : MainActivity) (uri : Uri) @@ -8618,6 +8656,7 @@ (androidRCode : Int32) (androidMCode : Int32) (readExternalStoragePermission : String) + (permissionGrantedCode : Int32) (manageAppAllFilesAccessAction : String) (manageAllFilesAccessAction : String)) : Unit (if (requestIsReadStorage requestCode readStorageRequestCode) @@ -8634,6 +8673,7 @@ androidRCode androidMCode readExternalStoragePermission + permissionGrantedCode manageAppAllFilesAccessAction manageAllFilesAccessAction)) (begin))) @@ -8681,6 +8721,7 @@ (androidRCode : Int32) (androidMCode : Int32) (readExternalStoragePermission : String) + (permissionGrantedCode : Int32) (manageAppAllFilesAccessAction : String) (manageAllFilesAccessAction : String)) : Unit (mainActivityOpenPdfAsync @@ -8695,6 +8736,7 @@ androidRCode androidMCode readExternalStoragePermission + permissionGrantedCode manageAppAllFilesAccessAction manageAllFilesAccessAction)) (def (mainActivityOpenAnyPdf @@ -8756,6 +8798,7 @@ (androidRCode : Int32) (androidMCode : Int32) (readExternalStoragePermission : String) + (permissionGrantedCode : Int32) (manageAppAllFilesAccessAction : String) (manageAllFilesAccessAction : String)) : Unit (begin @@ -8795,6 +8838,7 @@ androidRCode androidMCode readExternalStoragePermission + permissionGrantedCode manageAppAllFilesAccessAction manageAllFilesAccessAction))))) (def (mainActivitySetPositiveChooseSsdPdfFolder @@ -8869,6 +8913,7 @@ (androidRCode : Int32) (androidMCode : Int32) (readExternalStoragePermission : String) + (permissionGrantedCode : Int32) (manageAppAllFilesAccessAction : String) (manageAllFilesAccessAction : String)) : Builder (alertDialogBuilderSetPositiveAction @@ -8886,6 +8931,7 @@ androidRCode androidMCode readExternalStoragePermission + permissionGrantedCode manageAppAllFilesAccessAction manageAllFilesAccessAction)))) (def (mainActivitySetNegativeCancelAppend @@ -9026,6 +9072,7 @@ (androidRCode : Int32) (androidMCode : Int32) (readExternalStoragePermission : String) + (permissionGrantedCode : Int32) (manageAppAllFilesAccessAction : String) (manageAllFilesAccessAction : String)) : Unit (begin @@ -9056,6 +9103,7 @@ androidRCode androidMCode readExternalStoragePermission + permissionGrantedCode manageAppAllFilesAccessAction manageAllFilesAccessAction)) (mainActivitySetStatusRaw activity (noSsdPdfsFoundStatus)))) @@ -9408,6 +9456,7 @@ (androidRCode : Int32) (androidMCode : Int32) (readExternalStoragePermission : String) + (permissionGrantedCode : Int32) (manageAppAllFilesAccessAction : String) (manageAllFilesAccessAction : String)) : Unit (begin @@ -9446,8 +9495,13 @@ lastPdfPreferenceKey) (mainActivityShowNoSsdPdfsDialog activity - (mainActivityHasDirectDownloadAccessRaw - activity) + (mainActivityHasDirectDownloadAccess + activity + sdkInt + androidRCode + androidMCode + readExternalStoragePermission + permissionGrantedCode) requestOpenPdfCode requestOpenTreeCode requestReadStorageCode @@ -9457,6 +9511,7 @@ androidRCode androidMCode readExternalStoragePermission + permissionGrantedCode manageAppAllFilesAccessAction manageAllFilesAccessAction))))))))))) (def (alertDialogBuilderSetCancelAction @@ -11788,14 +11843,14 @@ " restoreLastPdf()" " mainActivitySeedBundledTruthAsync(this, truthStore)" " }" - "" - " override fun onResume() {" - " super.onResume()" - " if (ssdBrowserResumeReady(reopenSsdBrowserOnResume, hasDirectDownloadAccess())) {" - " mainActivitySetReopenSsdBrowserOnResume(this, false)" - " mainActivityOpenPdf(this, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, REQ_READ_STORAGE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)" - " }" - " }" + "" + " override fun onResume() {" + " super.onResume()" + " if (ssdBrowserResumeReady(reopenSsdBrowserOnResume, mainActivityHasDirectDownloadAccess(this, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED))) {" + " mainActivitySetReopenSsdBrowserOnResume(this, false)" + " mainActivityOpenPdf(this, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, REQ_READ_STORAGE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED, Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)" + " }" + " }" "" " override fun onPause() {" " super.onPause()" @@ -11823,7 +11878,7 @@ " val controls = LinearLayout(this).apply {" " orientation = LinearLayout.VERTICAL" " addView(mainActivityActionRow(this@MainActivity, LinearLayout.HORIZONTAL, Gravity.CENTER_VERTICAL," - " mainActivityButton(this@MainActivity, \"Open SSDs\", ButtonKind.PRIMARY) { mainActivityOpenPdf(this@MainActivity, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, REQ_READ_STORAGE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) }," + " mainActivityButton(this@MainActivity, \"Open SSDs\", ButtonKind.PRIMARY) { mainActivityOpenPdf(this@MainActivity, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, REQ_READ_STORAGE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED, Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) }," " mainActivityButton(this@MainActivity, \"Detect\", ButtonKind.ACCENT) { mainActivityDetectCurrentForceWithState(this@MainActivity, DPI, FAST_TRUTH_GROUP_THRESHOLD, 120, CLIENT_LOG_READ_TIMEOUT_MS) }," " mainActivityButton(this@MainActivity, \"Set SSD Area\", ButtonKind.MODE) { mainActivityStartSsdAreaMode(this@MainActivity, reviewView, currentSession, selectedGroupId, HapticFeedbackConstants.CLOCK_TICK) }," " ))" @@ -11879,7 +11934,7 @@ " grantResults: IntArray" " ) {" " super.onRequestPermissionsResult(requestCode, permissions, grantResults)" - " mainActivityHandleReadStoragePermissionResult(this, requestCode, REQ_READ_STORAGE, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)" + " mainActivityHandleReadStoragePermissionResult(this, requestCode, REQ_READ_STORAGE, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED, Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)" " }" "" " internal fun findSsdPdfsFromTree(treeUri: Uri): List<SsdPdfChoice> {" @@ -11978,22 +12033,6 @@ " }" " }" "" - " internal fun hasDirectDownloadAccess(): Boolean {" - " if (sdkAtLeast(Build.VERSION.SDK_INT, Build.VERSION_CODES.R)) {" - " if (Environment.isExternalStorageManager()) return true" - " } else if (downloadAccessBeforeRuntimePermissions(sdkBefore(Build.VERSION.SDK_INT, Build.VERSION_CODES.M))) {" - " return true" - " } else if (downloadAccessFromPermission(permissionResultGranted(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE), PackageManager.PERMISSION_GRANTED))) {" - " return true" - " }" - " val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)" - " return try {" - " fileListFilesPresent(dir)" - " } catch (_: Exception) {" - " false" - " }" - " }" - "" " internal fun loadPdf(uri: Uri, flags: Int, initialPageIndex: Int = 0, restoring: Boolean = false) {" " try {" " contentResolver.takePersistableUriPermission(uri, flags and Intent.FLAG_GRANT_READ_URI_PERMISSION)"