FEATURES
========
Batch Delete Toast Aggregation:
- New deleteMultipleNotesFromServer() method
- Shows single aggregated toast instead of multiple ("3 notes deleted from server")
- Partial success handling ("3 of 5 notes deleted from server")
- Added string resources: snackbar_notes_deleted_from_server, snackbar_notes_deleted_from_server_partial
Text Editor Cursor Fix:
- Fixed cursor jumping to end after every keystroke when editing notes
- Added initialCursorSet flag to only set cursor position on first load
- Cursor now stays at user's position while editing
- Changed LaunchedEffect(content) to LaunchedEffect(Unit) to prevent repeated resets
DOCUMENTATION REFACTOR
======================
Breaking Change: English is now the default language
- README.md: Now English (was German)
- QUICKSTART.md: Now English (was German)
- CHANGELOG.md: Now English (was mixed EN/DE)
- docs/*.md: All English (was German)
- German versions: Use .de.md suffix (README.de.md, QUICKSTART.de.md, etc.)
Updated for v1.5.0:
- CHANGELOG.md: Fully translated to English with v1.5.0 release notes
- CHANGELOG.de.md: Created German version
- FEATURES.md: Added i18n section, Selection Mode, Jetpack Compose updates
- FEATURES.de.md: Updated with v1.5.0 features
- UPCOMING.md: v1.5.0 marked as released, v1.6.0/v1.7.0 roadmap
- UPCOMING.de.md: Updated German version
All language headers updated:
- English: [Deutsch](*.de.md) · **English**
- German: **Deutsch** · [English](*.md)
F-DROID METADATA
================
Changelogs (F-Droid):
- fastlane/metadata/android/en-US/changelogs/13.txt: Created
- fastlane/metadata/android/de-DE/changelogs/13.txt: Created
Descriptions:
- full_description.txt (EN/DE): Updated with v1.5.0 changes
- Selection Mode instead of Swipe-to-Delete
- i18n support highlighted
- Jetpack Compose UI mentioned
- Silent-Sync Mode added
OTHER FIXES
===========
Code Quality:
- Unused imports removed from multiple files
- maxLineLength fixes
- Detekt config optimized (increased thresholds for v1.5.0)
- AboutScreen: Uses app foreground icon directly
- EmptyState: Shows app icon instead of emoji
- themes.xml: Splash screen uses app foreground icon
138 lines
3.2 KiB
YAML
138 lines
3.2 KiB
YAML
# ⚡ v1.3.1: detekt Configuration
|
|
# Pragmatic rules for simple-notes-sync
|
|
|
|
build:
|
|
maxIssues: 100 # Allow existing issues for v1.3.1 release, fix in v1.4.0
|
|
excludeCorrectable: false
|
|
|
|
config:
|
|
validation: true
|
|
warningsAsErrors: false
|
|
|
|
comments:
|
|
CommentOverPrivateProperty:
|
|
active: false
|
|
UndocumentedPublicClass:
|
|
active: false
|
|
UndocumentedPublicFunction:
|
|
active: false
|
|
|
|
complexity:
|
|
ComplexCondition:
|
|
active: true
|
|
threshold: 5
|
|
CyclomaticComplexMethod:
|
|
active: true
|
|
threshold: 65 # v1.5.0: Increased for sync methods (TODO: refactor in v1.6.0)
|
|
ignoreSingleWhenExpression: true
|
|
LargeClass:
|
|
active: true
|
|
threshold: 600 # Increased for WebDavSyncService
|
|
LongMethod:
|
|
active: true
|
|
threshold: 200 # v1.5.0: Increased for sync methods (TODO: refactor in v1.6.0)
|
|
LongParameterList:
|
|
active: true
|
|
functionThreshold: 10 # v1.5.0: Compose functions often have many params
|
|
constructorThreshold: 7
|
|
NestedBlockDepth:
|
|
active: true
|
|
threshold: 5
|
|
TooManyFunctions:
|
|
active: true
|
|
thresholdInFiles: 35 # v1.5.0: Increased for large classes
|
|
thresholdInClasses: 35
|
|
thresholdInInterfaces: 20
|
|
thresholdInObjects: 20
|
|
thresholdInEnums: 10
|
|
|
|
empty-blocks:
|
|
EmptyCatchBlock:
|
|
active: true
|
|
allowedExceptionNameRegex: "_|(ignore|expected).*"
|
|
EmptyFunctionBlock:
|
|
active: true
|
|
ignoreOverridden: true
|
|
|
|
exceptions:
|
|
SwallowedException:
|
|
active: true
|
|
ignoredExceptionTypes:
|
|
- "InterruptedException"
|
|
- "MalformedURLException"
|
|
- "NumberFormatException"
|
|
- "ParseException"
|
|
TooGenericExceptionCaught:
|
|
active: true
|
|
exceptionNames:
|
|
- "Error"
|
|
- "Throwable"
|
|
allowedExceptionNameRegex: "_|(ignore|expected).*"
|
|
|
|
naming:
|
|
FunctionNaming:
|
|
active: true
|
|
functionPattern: "[a-zA-Z][a-zA-Z0-9]*"
|
|
VariableNaming:
|
|
active: true
|
|
variablePattern: "[a-z][A-Za-z0-9]*"
|
|
PackageNaming:
|
|
active: true
|
|
packagePattern: "[a-z]+(\\.[a-z][A-Za-z0-9]*)*"
|
|
|
|
performance:
|
|
SpreadOperator:
|
|
active: false # Spread operator is fine in most cases
|
|
|
|
potential-bugs:
|
|
CastToNullableType:
|
|
active: true
|
|
EqualsWithHashCodeExist:
|
|
active: true
|
|
UnconditionalJumpStatementInLoop:
|
|
active: true
|
|
|
|
style:
|
|
ForbiddenComment:
|
|
active: true
|
|
comments:
|
|
- "FIXME:"
|
|
- "STOPSHIP:"
|
|
allowedPatterns: ""
|
|
MagicNumber:
|
|
active: true
|
|
ignoreNumbers:
|
|
- "-1"
|
|
- "0"
|
|
- "1"
|
|
- "2"
|
|
- "100"
|
|
- "1000"
|
|
ignoreHashCodeFunction: true
|
|
ignorePropertyDeclaration: true
|
|
ignoreLocalVariableDeclaration: true
|
|
ignoreAnnotation: true
|
|
ignoreEnums: true
|
|
ignoreRanges: true
|
|
ignoreExtensionFunctions: true
|
|
MaxLineLength:
|
|
active: true
|
|
maxLineLength: 140 # v1.5.0: Increased for Compose code readability
|
|
excludePackageStatements: true
|
|
excludeImportStatements: true
|
|
excludeCommentStatements: true
|
|
ReturnCount:
|
|
active: true
|
|
max: 4
|
|
excludedFunctions: []
|
|
excludeLabeled: true
|
|
excludeReturnFromLambda: true
|
|
excludeGuardClauses: true
|
|
UnusedImports:
|
|
active: true
|
|
UnusedPrivateMember:
|
|
active: true
|
|
allowedNames: "_.*"
|
|
WildcardImport:
|
|
active: false # Allow wildcard imports
|