Generate SSD PDF state persistence from typed Jerboa
ober
3e50345f2d37b94b90e8586d4cef7af2a5dac3e0
--- a/templates/ssd-review.ss +++ b/templates/ssd-review.ss @@ -4924,6 +4924,8 @@ mainActivitySetPageIndex mainActivitySetPdfIdentity mainActivitySetLoadedPdfState mainActivityAdvanceLoadGeneration + mainActivityRestoreLastPdf mainActivityPersistCurrentPdfState + mainActivityRestoredViewportFor mainActivityInitialPickerUri mainActivityOpenPdf mainActivityOpenAnyPdf mainActivityChooseSsdPdfFolder mainActivityRequestDownloadAccess @@ -5834,15 +5836,6 @@ (activity : MainActivity) (uri : Uri)) : Int32 (kotlin-member-call pdfPageCount)) - (extern (mainActivityPersistCurrentPdfStateRaw - (activity : MainActivity) - (includeViewport : Bool)) : Unit - (kotlin-member-call persistCurrentPdfState)) - (extern (mainActivityRestoredViewportForRaw - (activity : MainActivity) - (uri : Uri) - (page : Int32)) : (Nullable ViewportState) - (kotlin-member-call restoredViewportFor)) (extern (mainActivityCurrentSessionRaw (activity : MainActivity)) : (Nullable SsdSession) (kotlin-member-get currentSession)) @@ -5903,6 +5896,13 @@ (uri : Uri) (flags : Int32)) : Unit (kotlin-member-call loadPdf)) + (extern (mainActivityLoadPdfForRestoreRaw + (activity : MainActivity) + (uri : Uri) + (flags : Int32) + (initialPageIndex : Int32) + (restoring : Bool)) : Unit + (kotlin-member-call loadPdf)) (extern (mainActivityReviewViewSet (activity : MainActivity) (view : SsdReviewView)) : Unit @@ -6915,7 +6915,7 @@ (mainActivitySetPageIndex activity (shiftPageIndex pageIndex pageCount delta)) - (mainActivityPersistCurrentPdfStateRaw activity #f) + (mainActivityPersistCurrentPdfState activity #f) (mainActivityRenderCurrentPage activity)))) (def (mainActivityShowPageDialog (activity : MainActivity) @@ -7938,6 +7938,20 @@ (key : String) (value : String)) : Editor (kotlin-member-call putString)) + (extern (sharedPreferencesEditorPutIntRaw + (editor : Editor) + (key : String) + (value : Int32)) : Editor + (kotlin-member-call putInt)) + (extern (sharedPreferencesEditorPutFloatRaw + (editor : Editor) + (key : String) + (value : Float32)) : Editor + (kotlin-member-call putFloat)) + (extern (sharedPreferencesEditorRemoveRaw + (editor : Editor) + (key : String)) : Editor + (kotlin-member-call remove)) (extern (sharedPreferencesEditorApplyRaw (editor : Editor)) : Unit (kotlin-member-call apply)) @@ -7946,6 +7960,20 @@ (key : String) (defaultValue : (Nullable String))) : (Nullable String) (kotlin-member-call getString)) + (extern (sharedPreferencesGetIntRaw + (preferences : SharedPreferences) + (key : String) + (defaultValue : Int32)) : Int32 + (kotlin-member-call getInt)) + (extern (sharedPreferencesGetFloatRaw + (preferences : SharedPreferences) + (key : String) + (defaultValue : Float32)) : Float32 + (kotlin-member-call getFloat)) + (extern (sharedPreferencesContainsRaw + (preferences : SharedPreferences) + (key : String)) : Bool + (kotlin-member-call contains)) (extern (contentResolverTakePersistableUriPermissionRaw (resolver : ContentResolver) (uri : Uri) @@ -7959,6 +7987,30 @@ (kotlin-value FAST_TRUTH_GROUP_THRESHOLD)) (extern (mainActivityClientLogReadTimeoutMillisValue) : Int32 (kotlin-value CLIENT_LOG_READ_TIMEOUT_MS)) + (extern (mainActivityPrefLastPdfUriValue) : String + (kotlin-value PREF_LAST_PDF_URI)) + (extern (mainActivityPrefLastPdfNameValue) : String + (kotlin-value PREF_LAST_PDF_NAME)) + (extern (mainActivityPrefLastPdfSha1Value) : String + (kotlin-value PREF_LAST_PDF_SHA1)) + (extern (mainActivityPrefLastPageIndexValue) : String + (kotlin-value PREF_LAST_PAGE_INDEX)) + (extern (mainActivityPrefLastPageCountValue) : String + (kotlin-value PREF_LAST_PAGE_COUNT)) + (extern (mainActivityPrefLastViewportPageIndexValue) : String + (kotlin-value PREF_LAST_VIEWPORT_PAGE_INDEX)) + (extern (mainActivityPrefLastViewportScaleValue) : String + (kotlin-value PREF_LAST_VIEWPORT_SCALE)) + (extern (mainActivityPrefLastViewportOffsetXValue) : String + (kotlin-value PREF_LAST_VIEWPORT_OFFSET_X)) + (extern (mainActivityPrefLastViewportOffsetYValue) : String + (kotlin-value PREF_LAST_VIEWPORT_OFFSET_Y)) + (extern (mainActivityPrefLastViewportRotationValue) : String + (kotlin-value PREF_LAST_VIEWPORT_ROTATION)) + (extern (mainActivityPrefLastViewportImageWidthValue) : String + (kotlin-value PREF_LAST_VIEWPORT_IMAGE_WIDTH)) + (extern (mainActivityPrefLastViewportImageHeightValue) : String + (kotlin-value PREF_LAST_VIEWPORT_IMAGE_HEIGHT)) (extern (environmentIsExternalStorageManagerRaw) : Bool (kotlin-call Environment isExternalStorageManager)) (extern (environmentDirectoryDownloads) : String @@ -8504,6 +8556,167 @@ (mainActivityGetPreferencesRaw activity (contextModePrivate))) key value))) + (def (mainActivityRestoreLastPdf + (activity : MainActivity)) : Bool + (let ((preferences + (mainActivityGetPreferencesRaw + activity + (contextModePrivate)))) + (let ((raw + (sharedPreferencesGetStringRaw + preferences + (mainActivityPrefLastPdfUriValue) + (nullable-none String)))) + (if (not (nullableTextPresent raw)) + #f + (let ((page + (sharedPreferencesGetIntRaw + preferences + (mainActivityPrefLastPageIndexValue) + (int32 0)))) + (try + (begin + (mainActivityLoadPdfForRestoreRaw + activity + (uriParse (nullableTextOrEmpty raw)) + (intentFlagGrantReadUriPermission) + page + #t) + #t) + (catch (error : Exception) + #f))))))) + (def (sharedPreferencesEditorRemoveSavedViewportRaw + (editor : Editor)) : Editor + (sharedPreferencesEditorRemoveRaw + (sharedPreferencesEditorRemoveRaw + (sharedPreferencesEditorRemoveRaw + (sharedPreferencesEditorRemoveRaw + (sharedPreferencesEditorRemoveRaw + (sharedPreferencesEditorRemoveRaw + (sharedPreferencesEditorRemoveRaw + editor + (mainActivityPrefLastViewportPageIndexValue)) + (mainActivityPrefLastViewportScaleValue)) + (mainActivityPrefLastViewportOffsetXValue)) + (mainActivityPrefLastViewportOffsetYValue)) + (mainActivityPrefLastViewportRotationValue)) + (mainActivityPrefLastViewportImageWidthValue)) + (mainActivityPrefLastViewportImageHeightValue))) + (def (sharedPreferencesEditorPutSavedViewportRaw + (editor : Editor) + (pageIndex : Int32) + (viewport : ViewportState)) : Editor + (sharedPreferencesEditorPutIntRaw + (sharedPreferencesEditorPutIntRaw + (sharedPreferencesEditorPutIntRaw + (sharedPreferencesEditorPutFloatRaw + (sharedPreferencesEditorPutFloatRaw + (sharedPreferencesEditorPutFloatRaw + (sharedPreferencesEditorPutIntRaw + editor + (mainActivityPrefLastViewportPageIndexValue) + pageIndex) + (mainActivityPrefLastViewportScaleValue) + (ViewportState-scale viewport)) + (mainActivityPrefLastViewportOffsetXValue) + (ViewportState-offsetX viewport)) + (mainActivityPrefLastViewportOffsetYValue) + (ViewportState-offsetY viewport)) + (mainActivityPrefLastViewportRotationValue) + (ViewportState-rotationDegrees viewport)) + (mainActivityPrefLastViewportImageWidthValue) + (ViewportState-imageWidth viewport)) + (mainActivityPrefLastViewportImageHeightValue) + (ViewportState-imageHeight viewport))) + (def (mainActivityPersistCurrentPdfState + (activity : MainActivity) + (includeViewport : Bool)) : Unit + (if (not (pdfUriLoaded (mainActivityPdfUriRaw activity))) + (begin) + (let ((uri (uriOrEmpty (mainActivityPdfUriRaw activity)))) + (let ((editor + (sharedPreferencesEditorPutIntRaw + (sharedPreferencesEditorPutIntRaw + (sharedPreferencesEditorPutStringRaw + (sharedPreferencesEditorPutStringRaw + (sharedPreferencesEditorPutStringRaw + (sharedPreferencesEditRaw + (mainActivityGetPreferencesRaw + activity + (contextModePrivate))) + (mainActivityPrefLastPdfUriValue) + (uriToStringRaw uri)) + (mainActivityPrefLastPdfNameValue) + (mainActivityPdfNameRaw activity)) + (mainActivityPrefLastPdfSha1Value) + (mainActivityPdfSha1Raw activity)) + (mainActivityPrefLastPageIndexValue) + (mainActivityPageIndexRaw activity)) + (mainActivityPrefLastPageCountValue) + (mainActivityPageCountValueRaw activity))) + (viewport + (viewportForSave + (mainActivityReviewViewRaw activity) + includeViewport))) + (if (viewportStatePresent viewport) + (sharedPreferencesEditorApplyRaw + (sharedPreferencesEditorPutSavedViewportRaw + editor + (mainActivityPageIndexRaw activity) + (viewportStateOrEmpty viewport))) + (sharedPreferencesEditorApplyRaw + (sharedPreferencesEditorRemoveSavedViewportRaw + editor))))))) + (def (mainActivityRestoredViewportFor + (activity : MainActivity) + (uri : Uri) + (page : Int32)) : (Nullable ViewportState) + (let ((preferences + (mainActivityGetPreferencesRaw + activity + (contextModePrivate)))) + (if (not + (savedViewportAvailable + (sharedPreferencesGetStringRaw + preferences + (mainActivityPrefLastPdfUriValue) + (nullable-none String)) + (uriToStringRaw uri) + (sharedPreferencesGetIntRaw + preferences + (mainActivityPrefLastViewportPageIndexValue) + (int32 -1)) + page + (sharedPreferencesContainsRaw + preferences + (mainActivityPrefLastViewportScaleValue)))) + (nullable-none ViewportState) + (nullable-some + (make-ViewportState + (sharedPreferencesGetFloatRaw + preferences + (mainActivityPrefLastViewportScaleValue) + (float32 1.0)) + (sharedPreferencesGetFloatRaw + preferences + (mainActivityPrefLastViewportOffsetXValue) + (float32 0.0)) + (sharedPreferencesGetFloatRaw + preferences + (mainActivityPrefLastViewportOffsetYValue) + (float32 0.0)) + (sharedPreferencesGetIntRaw + preferences + (mainActivityPrefLastViewportRotationValue) + (int32 0)) + (sharedPreferencesGetIntRaw + preferences + (mainActivityPrefLastViewportImageWidthValue) + (int32 0)) + (sharedPreferencesGetIntRaw + preferences + (mainActivityPrefLastViewportImageHeightValue) + (int32 0))))))) (def (mainActivityHasDirectDownloadAccess (activity : MainActivity) (sdkInt : Int32) @@ -9273,7 +9486,7 @@ (renderPageCount (mainActivityPageCountValueRaw activity)) (restoredViewport - (mainActivityRestoredViewportForRaw + (mainActivityRestoredViewportFor activity uri renderPageIndex))) @@ -9425,7 +9638,7 @@ count initialPageIndex) (if (shouldPersistLoadedPdfState restoring) - (mainActivityPersistCurrentPdfStateRaw + (mainActivityPersistCurrentPdfState activity #f) (begin)) @@ -11840,7 +12053,7 @@ " mainActivitySetTruthStore(this, TruthStore(this))" " setContentView(buildUi())" " setStatus(startupStatus(truthStoreStorageSummary(truthStore)))" - " restoreLastPdf()" + " mainActivityRestoreLastPdf(this)" " mainActivitySeedBundledTruthAsync(this, truthStore)" " }" "" @@ -11854,7 +12067,7 @@ "" " override fun onPause() {" " super.onPause()" - " persistCurrentPdfState(includeViewport = true)" + " mainActivityPersistCurrentPdfState(this, true)" " }" "" " private fun buildUi(): View {" @@ -12046,63 +12259,6 @@ " mainActivityLoadPdfAsync(this, uri, initialPageIndex, restoring)" " }" "" - " private fun restoreLastPdf(): Boolean {" - " val prefs = getPreferences(MODE_PRIVATE)" - " val raw = prefs.getString(PREF_LAST_PDF_URI, null)" - " if (!nullableTextPresent(raw)) return false" - " val page = prefs.getInt(PREF_LAST_PAGE_INDEX, 0)" - " return try {" - " loadPdf(Uri.parse(nullableTextOrEmpty(raw)), Intent.FLAG_GRANT_READ_URI_PERMISSION, page, restoring = true)" - " true" - " } catch (_: Exception) {" - " false" - " }" - " }" - "" - " internal fun persistCurrentPdfState(includeViewport: Boolean) {" - " if (!pdfUriLoaded(pdfUri)) return" - " val uri = uriOrEmpty(pdfUri)" - " val edit = getPreferences(MODE_PRIVATE).edit()" - " .putString(PREF_LAST_PDF_URI, uri.toString())" - " .putString(PREF_LAST_PDF_NAME, pdfName)" - " .putString(PREF_LAST_PDF_SHA1, pdfSha1)" - " .putInt(PREF_LAST_PAGE_INDEX, pageIndex)" - " .putInt(PREF_LAST_PAGE_COUNT, pageCount)" - " val viewport = viewportForSave(reviewView, includeViewport)" - " if (viewportStatePresent(viewport)) {" - " val savedViewport = viewportStateOrEmpty(viewport)" - " edit.putInt(PREF_LAST_VIEWPORT_PAGE_INDEX, pageIndex)" - " .putFloat(PREF_LAST_VIEWPORT_SCALE, savedViewport.scale)" - " .putFloat(PREF_LAST_VIEWPORT_OFFSET_X, savedViewport.offsetX)" - " .putFloat(PREF_LAST_VIEWPORT_OFFSET_Y, savedViewport.offsetY)" - " .putInt(PREF_LAST_VIEWPORT_ROTATION, savedViewport.rotationDegrees)" - " .putInt(PREF_LAST_VIEWPORT_IMAGE_WIDTH, savedViewport.imageWidth)" - " .putInt(PREF_LAST_VIEWPORT_IMAGE_HEIGHT, savedViewport.imageHeight)" - " } else {" - " edit.remove(PREF_LAST_VIEWPORT_PAGE_INDEX)" - " .remove(PREF_LAST_VIEWPORT_SCALE)" - " .remove(PREF_LAST_VIEWPORT_OFFSET_X)" - " .remove(PREF_LAST_VIEWPORT_OFFSET_Y)" - " .remove(PREF_LAST_VIEWPORT_ROTATION)" - " .remove(PREF_LAST_VIEWPORT_IMAGE_WIDTH)" - " .remove(PREF_LAST_VIEWPORT_IMAGE_HEIGHT)" - " }" - " edit.apply()" - " }" - "" - " internal fun restoredViewportFor(uri: Uri, page: Int): ViewportState? {" - " val prefs = getPreferences(MODE_PRIVATE)" - " if (!savedViewportAvailable(prefs.getString(PREF_LAST_PDF_URI, null), uri.toString(), prefs.getInt(PREF_LAST_VIEWPORT_PAGE_INDEX, -1), page, prefs.contains(PREF_LAST_VIEWPORT_SCALE))) return null" - " return ViewportState(" - " prefs.getFloat(PREF_LAST_VIEWPORT_SCALE, 1f)," - " prefs.getFloat(PREF_LAST_VIEWPORT_OFFSET_X, 0f)," - " prefs.getFloat(PREF_LAST_VIEWPORT_OFFSET_Y, 0f)," - " prefs.getInt(PREF_LAST_VIEWPORT_ROTATION, 0)," - " prefs.getInt(PREF_LAST_VIEWPORT_IMAGE_WIDTH, 0)," - " prefs.getInt(PREF_LAST_VIEWPORT_IMAGE_HEIGHT, 0)" - " )" - " }" - "" " internal fun pdfPageCount(uri: Uri): Int {" " openPdfRenderer(uri).use { renderer -> return renderer.pageCount }" " }"