mirror of
https://github.com/fankes/pagecurl-multiplatform.git
synced 2025-09-05 18:25:20 +08:00
Update versions, add detekt and spotless
This commit is contained in:
25
build.gradle
25
build.gradle
@@ -1,15 +1,26 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
ext {
|
ext {
|
||||||
compose_version = "1.2.0-beta01"
|
compose_version = "1.2.1"
|
||||||
activity = "1.4.0"
|
compose_compiler_version = "1.3.0"
|
||||||
|
activity = "1.5.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
plugins {
|
plugins {
|
||||||
id "com.android.application" version "7.1.1" apply false
|
id "com.android.application" version "7.2.0" apply false
|
||||||
id "com.android.library" version "7.1.1" apply false
|
id "com.android.library" version "7.2.0" apply false
|
||||||
id "org.jetbrains.kotlin.android" version "1.6.21" apply false
|
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
|
||||||
|
id "io.gitlab.arturbosch.detekt" version "1.21.0"
|
||||||
|
id "com.diffplug.spotless" version "6.5.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
task clean(type: Delete) {
|
configure(subprojects) {
|
||||||
delete rootProject.buildDir
|
apply plugin: "io.gitlab.arturbosch.detekt"
|
||||||
|
apply plugin: "com.diffplug.spotless"
|
||||||
|
|
||||||
|
spotless {
|
||||||
|
kotlin {
|
||||||
|
target("**/*.kt")
|
||||||
|
ktlint("0.43.2")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
684
config/detekt/detekt.yml
Normal file
684
config/detekt/detekt.yml
Normal file
@@ -0,0 +1,684 @@
|
|||||||
|
build:
|
||||||
|
maxIssues: 0
|
||||||
|
excludeCorrectable: false
|
||||||
|
weights:
|
||||||
|
# complexity: 2
|
||||||
|
# LongParameterList: 1
|
||||||
|
# style: 1
|
||||||
|
# comments: 1
|
||||||
|
|
||||||
|
config:
|
||||||
|
validation: true
|
||||||
|
warningsAsErrors: false
|
||||||
|
# when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]'
|
||||||
|
excludes: ''
|
||||||
|
|
||||||
|
processors:
|
||||||
|
active: true
|
||||||
|
exclude:
|
||||||
|
- 'DetektProgressListener'
|
||||||
|
# - 'KtFileCountProcessor'
|
||||||
|
# - 'PackageCountProcessor'
|
||||||
|
# - 'ClassCountProcessor'
|
||||||
|
# - 'FunctionCountProcessor'
|
||||||
|
# - 'PropertyCountProcessor'
|
||||||
|
# - 'ProjectComplexityProcessor'
|
||||||
|
# - 'ProjectCognitiveComplexityProcessor'
|
||||||
|
# - 'ProjectLLOCProcessor'
|
||||||
|
# - 'ProjectCLOCProcessor'
|
||||||
|
# - 'ProjectLOCProcessor'
|
||||||
|
# - 'ProjectSLOCProcessor'
|
||||||
|
# - 'LicenseHeaderLoaderExtension'
|
||||||
|
|
||||||
|
console-reports:
|
||||||
|
active: true
|
||||||
|
exclude:
|
||||||
|
- 'ProjectStatisticsReport'
|
||||||
|
- 'ComplexityReport'
|
||||||
|
- 'NotificationReport'
|
||||||
|
- 'FindingsReport'
|
||||||
|
- 'FileBasedFindingsReport'
|
||||||
|
# - 'LiteFindingsReport'
|
||||||
|
|
||||||
|
output-reports:
|
||||||
|
active: true
|
||||||
|
exclude:
|
||||||
|
# - 'TxtOutputReport'
|
||||||
|
# - 'XmlOutputReport'
|
||||||
|
# - 'HtmlOutputReport'
|
||||||
|
|
||||||
|
comments:
|
||||||
|
active: true
|
||||||
|
AbsentOrWrongFileLicense:
|
||||||
|
active: false
|
||||||
|
licenseTemplateFile: 'license.template'
|
||||||
|
licenseTemplateIsRegex: false
|
||||||
|
CommentOverPrivateFunction:
|
||||||
|
active: false
|
||||||
|
CommentOverPrivateProperty:
|
||||||
|
active: false
|
||||||
|
DeprecatedBlockTag:
|
||||||
|
active: false
|
||||||
|
EndOfSentenceFormat:
|
||||||
|
active: false
|
||||||
|
endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)'
|
||||||
|
OutdatedDocumentation:
|
||||||
|
active: false
|
||||||
|
matchTypeParameters: true
|
||||||
|
matchDeclarationsOrder: true
|
||||||
|
allowParamOnConstructorProperties: false
|
||||||
|
UndocumentedPublicClass:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
searchInNestedClass: true
|
||||||
|
searchInInnerClass: true
|
||||||
|
searchInInnerObject: true
|
||||||
|
searchInInnerInterface: true
|
||||||
|
UndocumentedPublicFunction:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
UndocumentedPublicProperty:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
|
||||||
|
complexity:
|
||||||
|
active: true
|
||||||
|
ComplexCondition:
|
||||||
|
active: true
|
||||||
|
threshold: 4
|
||||||
|
ComplexInterface:
|
||||||
|
active: false
|
||||||
|
threshold: 10
|
||||||
|
includeStaticDeclarations: false
|
||||||
|
includePrivateDeclarations: false
|
||||||
|
ComplexMethod:
|
||||||
|
active: true
|
||||||
|
threshold: 15
|
||||||
|
ignoreSingleWhenExpression: false
|
||||||
|
ignoreSimpleWhenEntries: false
|
||||||
|
ignoreNestingFunctions: false
|
||||||
|
nestingFunctions:
|
||||||
|
- 'also'
|
||||||
|
- 'apply'
|
||||||
|
- 'forEach'
|
||||||
|
- 'isNotNull'
|
||||||
|
- 'ifNull'
|
||||||
|
- 'let'
|
||||||
|
- 'run'
|
||||||
|
- 'use'
|
||||||
|
- 'with'
|
||||||
|
LabeledExpression:
|
||||||
|
active: false
|
||||||
|
ignoredLabels: []
|
||||||
|
LargeClass:
|
||||||
|
active: true
|
||||||
|
threshold: 600
|
||||||
|
LongMethod:
|
||||||
|
active: true
|
||||||
|
threshold: 60
|
||||||
|
LongParameterList:
|
||||||
|
active: true
|
||||||
|
functionThreshold: 10
|
||||||
|
constructorThreshold: 7
|
||||||
|
ignoreDefaultParameters: false
|
||||||
|
ignoreDataClasses: true
|
||||||
|
ignoreAnnotated: [ 'Composable' ]
|
||||||
|
ignoreAnnotatedParameter: []
|
||||||
|
MethodOverloading:
|
||||||
|
active: false
|
||||||
|
threshold: 6
|
||||||
|
NamedArguments:
|
||||||
|
active: false
|
||||||
|
threshold: 3
|
||||||
|
ignoreArgumentsMatchingNames: false
|
||||||
|
NestedBlockDepth:
|
||||||
|
active: true
|
||||||
|
threshold: 4
|
||||||
|
ReplaceSafeCallChainWithRun:
|
||||||
|
active: false
|
||||||
|
StringLiteralDuplication:
|
||||||
|
active: false
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
threshold: 3
|
||||||
|
ignoreAnnotation: true
|
||||||
|
excludeStringsWithLessThan5Characters: true
|
||||||
|
ignoreStringsRegex: '$^'
|
||||||
|
TooManyFunctions:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
thresholdInFiles: 11
|
||||||
|
thresholdInClasses: 11
|
||||||
|
thresholdInInterfaces: 11
|
||||||
|
thresholdInObjects: 11
|
||||||
|
thresholdInEnums: 11
|
||||||
|
ignoreDeprecated: false
|
||||||
|
ignorePrivate: false
|
||||||
|
ignoreOverridden: false
|
||||||
|
|
||||||
|
coroutines:
|
||||||
|
active: true
|
||||||
|
GlobalCoroutineUsage:
|
||||||
|
active: false
|
||||||
|
InjectDispatcher:
|
||||||
|
active: false
|
||||||
|
dispatcherNames:
|
||||||
|
- 'IO'
|
||||||
|
- 'Default'
|
||||||
|
- 'Unconfined'
|
||||||
|
RedundantSuspendModifier:
|
||||||
|
active: false
|
||||||
|
SleepInsteadOfDelay:
|
||||||
|
active: false
|
||||||
|
SuspendFunWithCoroutineScopeReceiver:
|
||||||
|
active: false
|
||||||
|
SuspendFunWithFlowReturnType:
|
||||||
|
active: false
|
||||||
|
|
||||||
|
empty-blocks:
|
||||||
|
active: true
|
||||||
|
EmptyCatchBlock:
|
||||||
|
active: true
|
||||||
|
allowedExceptionNameRegex: '_|(ignore|expected).*'
|
||||||
|
EmptyClassBlock:
|
||||||
|
active: true
|
||||||
|
EmptyDefaultConstructor:
|
||||||
|
active: true
|
||||||
|
EmptyDoWhileBlock:
|
||||||
|
active: true
|
||||||
|
EmptyElseBlock:
|
||||||
|
active: true
|
||||||
|
EmptyFinallyBlock:
|
||||||
|
active: true
|
||||||
|
EmptyForBlock:
|
||||||
|
active: true
|
||||||
|
EmptyFunctionBlock:
|
||||||
|
active: true
|
||||||
|
ignoreOverridden: false
|
||||||
|
EmptyIfBlock:
|
||||||
|
active: true
|
||||||
|
EmptyInitBlock:
|
||||||
|
active: true
|
||||||
|
EmptyKtFile:
|
||||||
|
active: true
|
||||||
|
EmptySecondaryConstructor:
|
||||||
|
active: true
|
||||||
|
EmptyTryBlock:
|
||||||
|
active: true
|
||||||
|
EmptyWhenBlock:
|
||||||
|
active: true
|
||||||
|
EmptyWhileBlock:
|
||||||
|
active: true
|
||||||
|
|
||||||
|
exceptions:
|
||||||
|
active: true
|
||||||
|
ExceptionRaisedInUnexpectedLocation:
|
||||||
|
active: true
|
||||||
|
methodNames:
|
||||||
|
- 'equals'
|
||||||
|
- 'finalize'
|
||||||
|
- 'hashCode'
|
||||||
|
- 'toString'
|
||||||
|
InstanceOfCheckForException:
|
||||||
|
active: false
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
NotImplementedDeclaration:
|
||||||
|
active: false
|
||||||
|
ObjectExtendsThrowable:
|
||||||
|
active: false
|
||||||
|
PrintStackTrace:
|
||||||
|
active: true
|
||||||
|
RethrowCaughtException:
|
||||||
|
active: true
|
||||||
|
ReturnFromFinally:
|
||||||
|
active: true
|
||||||
|
ignoreLabeled: false
|
||||||
|
SwallowedException:
|
||||||
|
active: true
|
||||||
|
ignoredExceptionTypes:
|
||||||
|
- 'InterruptedException'
|
||||||
|
- 'MalformedURLException'
|
||||||
|
- 'NumberFormatException'
|
||||||
|
- 'ParseException'
|
||||||
|
allowedExceptionNameRegex: '_|(ignore|expected).*'
|
||||||
|
ThrowingExceptionFromFinally:
|
||||||
|
active: true
|
||||||
|
ThrowingExceptionInMain:
|
||||||
|
active: false
|
||||||
|
ThrowingExceptionsWithoutMessageOrCause:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
exceptions:
|
||||||
|
- 'ArrayIndexOutOfBoundsException'
|
||||||
|
- 'Exception'
|
||||||
|
- 'IllegalArgumentException'
|
||||||
|
- 'IllegalMonitorStateException'
|
||||||
|
- 'IllegalStateException'
|
||||||
|
- 'IndexOutOfBoundsException'
|
||||||
|
- 'NullPointerException'
|
||||||
|
- 'RuntimeException'
|
||||||
|
- 'Throwable'
|
||||||
|
ThrowingNewInstanceOfSameException:
|
||||||
|
active: true
|
||||||
|
TooGenericExceptionCaught:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
exceptionNames:
|
||||||
|
- 'ArrayIndexOutOfBoundsException'
|
||||||
|
- 'Error'
|
||||||
|
- 'Exception'
|
||||||
|
- 'IllegalMonitorStateException'
|
||||||
|
- 'IndexOutOfBoundsException'
|
||||||
|
- 'NullPointerException'
|
||||||
|
- 'RuntimeException'
|
||||||
|
- 'Throwable'
|
||||||
|
allowedExceptionNameRegex: '_|(ignore|expected).*'
|
||||||
|
TooGenericExceptionThrown:
|
||||||
|
active: true
|
||||||
|
exceptionNames:
|
||||||
|
- 'Error'
|
||||||
|
- 'Exception'
|
||||||
|
- 'RuntimeException'
|
||||||
|
- 'Throwable'
|
||||||
|
|
||||||
|
naming:
|
||||||
|
active: true
|
||||||
|
BooleanPropertyNaming:
|
||||||
|
active: false
|
||||||
|
allowedPattern: '^(is|has|are)'
|
||||||
|
ignoreOverridden: true
|
||||||
|
ClassNaming:
|
||||||
|
active: true
|
||||||
|
classPattern: '[A-Z][a-zA-Z0-9]*'
|
||||||
|
ConstructorParameterNaming:
|
||||||
|
active: true
|
||||||
|
parameterPattern: '[a-z][A-Za-z0-9]*'
|
||||||
|
privateParameterPattern: '[a-z][A-Za-z0-9]*'
|
||||||
|
excludeClassPattern: '$^'
|
||||||
|
ignoreOverridden: true
|
||||||
|
EnumNaming:
|
||||||
|
active: true
|
||||||
|
enumEntryPattern: '[A-Z][_a-zA-Z0-9]*'
|
||||||
|
ForbiddenClassName:
|
||||||
|
active: false
|
||||||
|
forbiddenName: []
|
||||||
|
FunctionMaxLength:
|
||||||
|
active: false
|
||||||
|
maximumFunctionNameLength: 30
|
||||||
|
FunctionMinLength:
|
||||||
|
active: false
|
||||||
|
minimumFunctionNameLength: 3
|
||||||
|
FunctionNaming:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
functionPattern: '[a-z][a-zA-Z0-9]*'
|
||||||
|
excludeClassPattern: '$^'
|
||||||
|
ignoreOverridden: true
|
||||||
|
ignoreAnnotated: [ 'Composable' ]
|
||||||
|
FunctionParameterNaming:
|
||||||
|
active: true
|
||||||
|
parameterPattern: '[a-z][A-Za-z0-9]*'
|
||||||
|
excludeClassPattern: '$^'
|
||||||
|
ignoreOverridden: true
|
||||||
|
InvalidPackageDeclaration:
|
||||||
|
active: false
|
||||||
|
rootPackage: ''
|
||||||
|
requireRootInDeclaration: false
|
||||||
|
LambdaParameterNaming:
|
||||||
|
active: false
|
||||||
|
parameterPattern: '[a-z][A-Za-z0-9]*|_'
|
||||||
|
MatchingDeclarationName:
|
||||||
|
active: true
|
||||||
|
mustBeFirst: true
|
||||||
|
MemberNameEqualsClassName:
|
||||||
|
active: true
|
||||||
|
ignoreOverridden: true
|
||||||
|
NoNameShadowing:
|
||||||
|
active: false
|
||||||
|
NonBooleanPropertyPrefixedWithIs:
|
||||||
|
active: false
|
||||||
|
ObjectPropertyNaming:
|
||||||
|
active: true
|
||||||
|
constantPattern: '[A-Za-z][_A-Za-z0-9]*'
|
||||||
|
propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
|
||||||
|
privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*'
|
||||||
|
PackageNaming:
|
||||||
|
active: true
|
||||||
|
packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*'
|
||||||
|
TopLevelPropertyNaming:
|
||||||
|
active: true
|
||||||
|
constantPattern: '[A-Z][A-Za-z0-9]*'
|
||||||
|
propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
|
||||||
|
privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*'
|
||||||
|
VariableMaxLength:
|
||||||
|
active: false
|
||||||
|
maximumVariableNameLength: 64
|
||||||
|
VariableMinLength:
|
||||||
|
active: false
|
||||||
|
minimumVariableNameLength: 1
|
||||||
|
VariableNaming:
|
||||||
|
active: true
|
||||||
|
variablePattern: '[a-z][A-Za-z0-9]*'
|
||||||
|
privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*'
|
||||||
|
excludeClassPattern: '$^'
|
||||||
|
ignoreOverridden: true
|
||||||
|
|
||||||
|
performance:
|
||||||
|
active: true
|
||||||
|
ArrayPrimitive:
|
||||||
|
active: true
|
||||||
|
ForEachOnRange:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
SpreadOperator:
|
||||||
|
active: false
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
UnnecessaryTemporaryInstantiation:
|
||||||
|
active: true
|
||||||
|
|
||||||
|
potential-bugs:
|
||||||
|
active: true
|
||||||
|
AvoidReferentialEquality:
|
||||||
|
active: false
|
||||||
|
forbiddenTypePatterns:
|
||||||
|
- 'kotlin.String'
|
||||||
|
CastToNullableType:
|
||||||
|
active: false
|
||||||
|
Deprecation:
|
||||||
|
active: false
|
||||||
|
DontDowncastCollectionTypes:
|
||||||
|
active: false
|
||||||
|
DoubleMutabilityForCollection:
|
||||||
|
active: false
|
||||||
|
mutableTypes:
|
||||||
|
- 'kotlin.collections.MutableList'
|
||||||
|
- 'kotlin.collections.MutableMap'
|
||||||
|
- 'kotlin.collections.MutableSet'
|
||||||
|
- 'java.util.ArrayList'
|
||||||
|
- 'java.util.LinkedHashSet'
|
||||||
|
- 'java.util.HashSet'
|
||||||
|
- 'java.util.LinkedHashMap'
|
||||||
|
- 'java.util.HashMap'
|
||||||
|
DuplicateCaseInWhenExpression:
|
||||||
|
active: true
|
||||||
|
ElseCaseInsteadOfExhaustiveWhen:
|
||||||
|
active: false
|
||||||
|
EqualsAlwaysReturnsTrueOrFalse:
|
||||||
|
active: true
|
||||||
|
EqualsWithHashCodeExist:
|
||||||
|
active: true
|
||||||
|
ExitOutsideMain:
|
||||||
|
active: false
|
||||||
|
ExplicitGarbageCollectionCall:
|
||||||
|
active: true
|
||||||
|
HasPlatformType:
|
||||||
|
active: false
|
||||||
|
IgnoredReturnValue:
|
||||||
|
active: false
|
||||||
|
restrictToAnnotatedMethods: true
|
||||||
|
returnValueAnnotations:
|
||||||
|
- '*.CheckResult'
|
||||||
|
- '*.CheckReturnValue'
|
||||||
|
ignoreReturnValueAnnotations:
|
||||||
|
- '*.CanIgnoreReturnValue'
|
||||||
|
ignoreFunctionCall: []
|
||||||
|
ImplicitDefaultLocale:
|
||||||
|
active: true
|
||||||
|
ImplicitUnitReturnType:
|
||||||
|
active: false
|
||||||
|
allowExplicitReturnType: true
|
||||||
|
InvalidRange:
|
||||||
|
active: true
|
||||||
|
IteratorHasNextCallsNextMethod:
|
||||||
|
active: true
|
||||||
|
IteratorNotThrowingNoSuchElementException:
|
||||||
|
active: true
|
||||||
|
LateinitUsage:
|
||||||
|
active: false
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
ignoreOnClassesPattern: ''
|
||||||
|
MapGetWithNotNullAssertionOperator:
|
||||||
|
active: false
|
||||||
|
MissingPackageDeclaration:
|
||||||
|
active: false
|
||||||
|
excludes: ['**/*.kts']
|
||||||
|
MissingWhenCase:
|
||||||
|
active: true
|
||||||
|
allowElseExpression: true
|
||||||
|
NullCheckOnMutableProperty:
|
||||||
|
active: false
|
||||||
|
NullableToStringCall:
|
||||||
|
active: false
|
||||||
|
RedundantElseInWhen:
|
||||||
|
active: true
|
||||||
|
UnconditionalJumpStatementInLoop:
|
||||||
|
active: false
|
||||||
|
UnnecessaryNotNullOperator:
|
||||||
|
active: true
|
||||||
|
UnnecessarySafeCall:
|
||||||
|
active: true
|
||||||
|
UnreachableCatchBlock:
|
||||||
|
active: false
|
||||||
|
UnreachableCode:
|
||||||
|
active: true
|
||||||
|
UnsafeCallOnNullableType:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
UnsafeCast:
|
||||||
|
active: true
|
||||||
|
UnusedUnaryOperator:
|
||||||
|
active: false
|
||||||
|
UselessPostfixExpression:
|
||||||
|
active: false
|
||||||
|
WrongEqualsTypeParameter:
|
||||||
|
active: true
|
||||||
|
|
||||||
|
style:
|
||||||
|
active: true
|
||||||
|
CanBeNonNullable:
|
||||||
|
active: false
|
||||||
|
ClassOrdering:
|
||||||
|
active: false
|
||||||
|
CollapsibleIfStatements:
|
||||||
|
active: false
|
||||||
|
DataClassContainsFunctions:
|
||||||
|
active: false
|
||||||
|
conversionFunctionPrefix: 'to'
|
||||||
|
DataClassShouldBeImmutable:
|
||||||
|
active: false
|
||||||
|
DestructuringDeclarationWithTooManyEntries:
|
||||||
|
active: false
|
||||||
|
maxDestructuringEntries: 3
|
||||||
|
EqualsNullCall:
|
||||||
|
active: true
|
||||||
|
EqualsOnSignatureLine:
|
||||||
|
active: false
|
||||||
|
ExplicitCollectionElementAccessMethod:
|
||||||
|
active: false
|
||||||
|
ExplicitItLambdaParameter:
|
||||||
|
active: false
|
||||||
|
ExpressionBodySyntax:
|
||||||
|
active: false
|
||||||
|
includeLineWrapping: false
|
||||||
|
ForbiddenComment:
|
||||||
|
active: true
|
||||||
|
values:
|
||||||
|
- 'FIXME:'
|
||||||
|
- 'STOPSHIP:'
|
||||||
|
- 'TODO:'
|
||||||
|
allowedPatterns: ''
|
||||||
|
customMessage: ''
|
||||||
|
ForbiddenImport:
|
||||||
|
active: false
|
||||||
|
imports: []
|
||||||
|
forbiddenPatterns: ''
|
||||||
|
ForbiddenMethodCall:
|
||||||
|
active: false
|
||||||
|
methods:
|
||||||
|
- 'kotlin.io.print'
|
||||||
|
- 'kotlin.io.println'
|
||||||
|
ForbiddenPublicDataClass:
|
||||||
|
active: true
|
||||||
|
excludes: ['**']
|
||||||
|
ignorePackages:
|
||||||
|
- '*.internal'
|
||||||
|
- '*.internal.*'
|
||||||
|
ForbiddenVoid:
|
||||||
|
active: false
|
||||||
|
ignoreOverridden: false
|
||||||
|
ignoreUsageInGenerics: false
|
||||||
|
FunctionOnlyReturningConstant:
|
||||||
|
active: true
|
||||||
|
ignoreOverridableFunction: true
|
||||||
|
ignoreActualFunction: true
|
||||||
|
excludedFunctions: ''
|
||||||
|
LibraryCodeMustSpecifyReturnType:
|
||||||
|
active: true
|
||||||
|
excludes: ['**']
|
||||||
|
LibraryEntitiesShouldNotBePublic:
|
||||||
|
active: true
|
||||||
|
excludes: ['**']
|
||||||
|
LoopWithTooManyJumpStatements:
|
||||||
|
active: true
|
||||||
|
maxJumpCount: 1
|
||||||
|
MagicNumber:
|
||||||
|
active: false
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
ignoreNumbers:
|
||||||
|
- '-1'
|
||||||
|
- '0'
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
ignoreHashCodeFunction: true
|
||||||
|
ignorePropertyDeclaration: false
|
||||||
|
ignoreLocalVariableDeclaration: false
|
||||||
|
ignoreConstantDeclaration: true
|
||||||
|
ignoreCompanionObjectPropertyDeclaration: true
|
||||||
|
ignoreAnnotation: false
|
||||||
|
ignoreNamedArgument: true
|
||||||
|
ignoreEnums: false
|
||||||
|
ignoreRanges: false
|
||||||
|
ignoreExtensionFunctions: true
|
||||||
|
MandatoryBracesIfStatements:
|
||||||
|
active: false
|
||||||
|
MandatoryBracesLoops:
|
||||||
|
active: false
|
||||||
|
MaxLineLength:
|
||||||
|
active: true
|
||||||
|
maxLineLength: 120
|
||||||
|
excludePackageStatements: true
|
||||||
|
excludeImportStatements: true
|
||||||
|
excludeCommentStatements: false
|
||||||
|
MayBeConst:
|
||||||
|
active: true
|
||||||
|
ModifierOrder:
|
||||||
|
active: true
|
||||||
|
MultilineLambdaItParameter:
|
||||||
|
active: false
|
||||||
|
NestedClassesVisibility:
|
||||||
|
active: true
|
||||||
|
NewLineAtEndOfFile:
|
||||||
|
active: true
|
||||||
|
NoTabs:
|
||||||
|
active: false
|
||||||
|
ObjectLiteralToLambda:
|
||||||
|
active: false
|
||||||
|
OptionalAbstractKeyword:
|
||||||
|
active: true
|
||||||
|
OptionalUnit:
|
||||||
|
active: false
|
||||||
|
OptionalWhenBraces:
|
||||||
|
active: false
|
||||||
|
PreferToOverPairSyntax:
|
||||||
|
active: false
|
||||||
|
ProtectedMemberInFinalClass:
|
||||||
|
active: true
|
||||||
|
RedundantExplicitType:
|
||||||
|
active: false
|
||||||
|
RedundantHigherOrderMapUsage:
|
||||||
|
active: false
|
||||||
|
RedundantVisibilityModifierRule:
|
||||||
|
active: false
|
||||||
|
ReturnCount:
|
||||||
|
active: true
|
||||||
|
max: 2
|
||||||
|
excludedFunctions: 'equals'
|
||||||
|
excludeLabeled: false
|
||||||
|
excludeReturnFromLambda: true
|
||||||
|
excludeGuardClauses: false
|
||||||
|
SafeCast:
|
||||||
|
active: true
|
||||||
|
SerialVersionUIDInSerializableClass:
|
||||||
|
active: true
|
||||||
|
SpacingBetweenPackageAndImports:
|
||||||
|
active: false
|
||||||
|
ThrowsCount:
|
||||||
|
active: true
|
||||||
|
max: 2
|
||||||
|
excludeGuardClauses: false
|
||||||
|
TrailingWhitespace:
|
||||||
|
active: false
|
||||||
|
UnderscoresInNumericLiterals:
|
||||||
|
active: false
|
||||||
|
acceptableLength: 4
|
||||||
|
allowNonStandardGrouping: false
|
||||||
|
UnnecessaryAbstractClass:
|
||||||
|
active: true
|
||||||
|
UnnecessaryAnnotationUseSiteTarget:
|
||||||
|
active: false
|
||||||
|
UnnecessaryApply:
|
||||||
|
active: true
|
||||||
|
UnnecessaryFilter:
|
||||||
|
active: false
|
||||||
|
UnnecessaryInheritance:
|
||||||
|
active: true
|
||||||
|
UnnecessaryInnerClass:
|
||||||
|
active: false
|
||||||
|
UnnecessaryLet:
|
||||||
|
active: false
|
||||||
|
UnnecessaryParentheses:
|
||||||
|
active: false
|
||||||
|
UntilInsteadOfRangeTo:
|
||||||
|
active: false
|
||||||
|
UnusedImports:
|
||||||
|
active: false
|
||||||
|
UnusedPrivateClass:
|
||||||
|
active: true
|
||||||
|
UnusedPrivateMember:
|
||||||
|
active: true
|
||||||
|
allowedNames: '(_|ignored|expected|serialVersionUID)'
|
||||||
|
UseAnyOrNoneInsteadOfFind:
|
||||||
|
active: false
|
||||||
|
UseArrayLiteralsInAnnotations:
|
||||||
|
active: false
|
||||||
|
UseCheckNotNull:
|
||||||
|
active: false
|
||||||
|
UseCheckOrError:
|
||||||
|
active: false
|
||||||
|
UseDataClass:
|
||||||
|
active: false
|
||||||
|
allowVars: false
|
||||||
|
UseEmptyCounterpart:
|
||||||
|
active: false
|
||||||
|
UseIfEmptyOrIfBlank:
|
||||||
|
active: false
|
||||||
|
UseIfInsteadOfWhen:
|
||||||
|
active: false
|
||||||
|
UseIsNullOrEmpty:
|
||||||
|
active: false
|
||||||
|
UseOrEmpty:
|
||||||
|
active: false
|
||||||
|
UseRequire:
|
||||||
|
active: false
|
||||||
|
UseRequireNotNull:
|
||||||
|
active: false
|
||||||
|
UselessCallOnNotNull:
|
||||||
|
active: true
|
||||||
|
UtilityClassWithPublicConstructor:
|
||||||
|
active: true
|
||||||
|
VarCouldBeVal:
|
||||||
|
active: true
|
||||||
|
WildcardImport:
|
||||||
|
active: true
|
||||||
|
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||||
|
excludeImports:
|
||||||
|
- 'java.util.*'
|
@@ -38,7 +38,7 @@ android {
|
|||||||
compose true
|
compose true
|
||||||
}
|
}
|
||||||
composeOptions {
|
composeOptions {
|
||||||
kotlinCompilerExtensionVersion compose_version
|
kotlinCompilerExtensionVersion compose_compiler_version
|
||||||
}
|
}
|
||||||
packagingOptions {
|
packagingOptions {
|
||||||
resources {
|
resources {
|
||||||
|
@@ -1,9 +1,18 @@
|
|||||||
|
@file:Suppress("MaxLineLength", "UndocumentedPublicProperty")
|
||||||
|
|
||||||
package eu.wewox.pagecurl
|
package eu.wewox.pagecurl
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model for data for the page.
|
||||||
|
*
|
||||||
|
* @property title The title to show on the page.
|
||||||
|
* @property message The message to show on the page.
|
||||||
|
*/
|
||||||
data class HowToPageData(
|
data class HowToPageData(
|
||||||
val title: String,
|
val title: String,
|
||||||
val message: String,
|
val message: String,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val simpleHowToPages = listOf(
|
val simpleHowToPages = listOf(
|
||||||
HowToPageData(
|
HowToPageData(
|
||||||
|
@@ -18,6 +18,13 @@ import eu.wewox.pagecurl.HowToPageData
|
|||||||
import eu.wewox.pagecurl.ui.SpacingLarge
|
import eu.wewox.pagecurl.ui.SpacingLarge
|
||||||
import eu.wewox.pagecurl.ui.SpacingMedium
|
import eu.wewox.pagecurl.ui.SpacingMedium
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The simple page to use for demo purposes.
|
||||||
|
*
|
||||||
|
* @param index The index of the page to show a page number in the bottom.
|
||||||
|
* @param page The page data to show.
|
||||||
|
* @param modifier The modifier for this composable.
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun HowToPage(
|
fun HowToPage(
|
||||||
index: Int,
|
index: Int,
|
||||||
|
@@ -20,6 +20,15 @@ import androidx.compose.ui.unit.dp
|
|||||||
import eu.wewox.pagecurl.ExperimentalPageCurlApi
|
import eu.wewox.pagecurl.ExperimentalPageCurlApi
|
||||||
import eu.wewox.pagecurl.config.PageCurlConfig
|
import eu.wewox.pagecurl.config.PageCurlConfig
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layout which could be zoomed out and zoomed in to show / hide the [bottom] bar.
|
||||||
|
*
|
||||||
|
* @param zoomOut True when layout is zoomed out.
|
||||||
|
* @param config The [PageCurlConfig] to turn off interactions in the page curl.
|
||||||
|
* @param bottom The content of the bottom bar.
|
||||||
|
* @param modifier The modifier for this composable.
|
||||||
|
* @param pageCurl The content where PageCurl should be placed.
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun ZoomOutLayout(
|
fun ZoomOutLayout(
|
||||||
zoomOut: Boolean,
|
zoomOut: Boolean,
|
||||||
@@ -29,7 +38,7 @@ fun ZoomOutLayout(
|
|||||||
pageCurl: @Composable () -> Unit,
|
pageCurl: @Composable () -> Unit,
|
||||||
) {
|
) {
|
||||||
// Disable all state interactions when PageCurl is zoomed out
|
// Disable all state interactions when PageCurl is zoomed out
|
||||||
LaunchedEffect(zoomOut) {
|
LaunchedEffect(zoomOut, config) {
|
||||||
with(config) {
|
with(config) {
|
||||||
dragForwardEnabled = !zoomOut
|
dragForwardEnabled = !zoomOut
|
||||||
dragBackwardEnabled = !zoomOut
|
dragBackwardEnabled = !zoomOut
|
||||||
@@ -54,9 +63,8 @@ fun ZoomOutLayout(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ZoomOutLayout(
|
private fun ZoomOutLayout(
|
||||||
zoomOut: Boolean,
|
zoomOut: Boolean,
|
||||||
bottom: @Composable () -> Unit,
|
bottom: @Composable () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
@file:OptIn(ExperimentalPageCurlApi::class)
|
@file:OptIn(ExperimentalPageCurlApi::class)
|
||||||
|
@file:Suppress("MagicNumber")
|
||||||
|
|
||||||
package eu.wewox.pagecurl.screens
|
package eu.wewox.pagecurl.screens
|
||||||
|
|
||||||
@@ -42,6 +43,10 @@ import eu.wewox.pagecurl.ui.SpacingLarge
|
|||||||
import eu.wewox.pagecurl.ui.SpacingMedium
|
import eu.wewox.pagecurl.ui.SpacingMedium
|
||||||
import eu.wewox.pagecurl.ui.SpacingSmall
|
import eu.wewox.pagecurl.ui.SpacingSmall
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Back-Page Configuration in Page Curl.
|
||||||
|
* Example how to customize the back-page (the back of the page user see during the drag or animation).
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun BackPagePageCurlScreen() {
|
fun BackPagePageCurlScreen() {
|
||||||
Box(Modifier.fillMaxSize()) {
|
Box(Modifier.fillMaxSize()) {
|
||||||
@@ -86,7 +91,7 @@ private fun SettingsRow(
|
|||||||
Column(
|
Column(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = SpacingMedium)
|
.padding(vertical = SpacingLarge)
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = "Alpha",
|
text = "Alpha",
|
||||||
|
@@ -38,6 +38,10 @@ import eu.wewox.pagecurl.ui.SpacingLarge
|
|||||||
import eu.wewox.pagecurl.ui.SpacingMedium
|
import eu.wewox.pagecurl.ui.SpacingMedium
|
||||||
import eu.wewox.pagecurl.ui.SpacingSmall
|
import eu.wewox.pagecurl.ui.SpacingSmall
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interactions Configurations In Page Curl.
|
||||||
|
* Example interactions (drag / tap) can be customized.
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun InteractionConfigInPageCurlScreen() {
|
fun InteractionConfigInPageCurlScreen() {
|
||||||
Box(Modifier.fillMaxSize()) {
|
Box(Modifier.fillMaxSize()) {
|
||||||
@@ -114,37 +118,48 @@ private fun SettingsRow(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
when (selectedOption) {
|
SettingsRowSlider(
|
||||||
InteractionOption.Drag -> {
|
selectedOption = selectedOption,
|
||||||
Slider(
|
config = config,
|
||||||
value = config.dragForwardInteraction.start.left,
|
)
|
||||||
onValueChange = {
|
}
|
||||||
config.dragForwardInteraction = PageCurlConfig.DragInteraction(
|
}
|
||||||
Rect(it, 0.0f, 1.0f, 1.0f),
|
|
||||||
Rect(0.0f, 0.0f, it, 1.0f)
|
@Composable
|
||||||
)
|
private fun SettingsRowSlider(
|
||||||
config.dragBackwardInteraction = PageCurlConfig.DragInteraction(
|
selectedOption: InteractionOption,
|
||||||
Rect(0.0f, 0.0f, it, 1.0f),
|
config: PageCurlConfig,
|
||||||
Rect(it, 0.0f, 1.0f, 1.0f),
|
) {
|
||||||
)
|
when (selectedOption) {
|
||||||
},
|
InteractionOption.Drag -> {
|
||||||
modifier = Modifier.fillMaxWidth()
|
Slider(
|
||||||
)
|
value = config.dragForwardInteraction.start.left,
|
||||||
}
|
onValueChange = {
|
||||||
InteractionOption.Tap -> {
|
config.dragForwardInteraction = PageCurlConfig.DragInteraction(
|
||||||
Slider(
|
Rect(it, 0.0f, 1.0f, 1.0f),
|
||||||
value = config.tapForwardInteraction.target.left,
|
Rect(0.0f, 0.0f, it, 1.0f)
|
||||||
onValueChange = {
|
)
|
||||||
config.tapForwardInteraction = PageCurlConfig.TapInteraction(
|
config.dragBackwardInteraction = PageCurlConfig.DragInteraction(
|
||||||
Rect(it, 0.0f, 1.0f, 1.0f),
|
Rect(0.0f, 0.0f, it, 1.0f),
|
||||||
)
|
Rect(it, 0.0f, 1.0f, 1.0f),
|
||||||
config.tapBackwardInteraction = PageCurlConfig.TapInteraction(
|
)
|
||||||
Rect(0.0f, 0.0f, it, 1.0f),
|
},
|
||||||
)
|
modifier = Modifier.fillMaxWidth()
|
||||||
},
|
)
|
||||||
modifier = Modifier.fillMaxWidth()
|
}
|
||||||
)
|
InteractionOption.Tap -> {
|
||||||
}
|
Slider(
|
||||||
|
value = config.tapForwardInteraction.target.left,
|
||||||
|
onValueChange = {
|
||||||
|
config.tapForwardInteraction = PageCurlConfig.TapInteraction(
|
||||||
|
Rect(it, 0.0f, 1.0f, 1.0f),
|
||||||
|
)
|
||||||
|
config.tapBackwardInteraction = PageCurlConfig.TapInteraction(
|
||||||
|
Rect(0.0f, 0.0f, it, 1.0f),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,10 @@ import eu.wewox.pagecurl.config.rememberPageCurlConfig
|
|||||||
import eu.wewox.pagecurl.page.PageCurl
|
import eu.wewox.pagecurl.page.PageCurl
|
||||||
import eu.wewox.pagecurl.page.rememberPageCurlState
|
import eu.wewox.pagecurl.page.rememberPageCurlState
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Page Curl With Settings.
|
||||||
|
* Showcases how individual interactions can be toggled on / off.
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsPageCurlScreen() {
|
fun SettingsPageCurlScreen() {
|
||||||
Box(Modifier.fillMaxSize()) {
|
Box(Modifier.fillMaxSize()) {
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
@file:OptIn(ExperimentalPageCurlApi::class)
|
@file:OptIn(ExperimentalPageCurlApi::class)
|
||||||
|
@file:Suppress("MagicNumber")
|
||||||
|
|
||||||
package eu.wewox.pagecurl.screens
|
package eu.wewox.pagecurl.screens
|
||||||
|
|
||||||
@@ -29,6 +30,10 @@ import eu.wewox.pagecurl.page.PageCurl
|
|||||||
import eu.wewox.pagecurl.page.rememberPageCurlState
|
import eu.wewox.pagecurl.page.rememberPageCurlState
|
||||||
import eu.wewox.pagecurl.ui.SpacingLarge
|
import eu.wewox.pagecurl.ui.SpacingLarge
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shadow Configuration in Page Curl.
|
||||||
|
* Example how to customize shadow of the page.
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun ShadowInPageCurlScreen() {
|
fun ShadowInPageCurlScreen() {
|
||||||
Box(Modifier.fillMaxSize()) {
|
Box(Modifier.fillMaxSize()) {
|
||||||
|
@@ -13,6 +13,10 @@ import eu.wewox.pagecurl.components.HowToPage
|
|||||||
import eu.wewox.pagecurl.page.PageCurl
|
import eu.wewox.pagecurl.page.PageCurl
|
||||||
import eu.wewox.pagecurl.page.rememberPageCurlState
|
import eu.wewox.pagecurl.page.rememberPageCurlState
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Page Curl With Settings.
|
||||||
|
* Showcases how individual interactions can be toggled on / off.
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun SimplePageCurlScreen() {
|
fun SimplePageCurlScreen() {
|
||||||
Box(Modifier.fillMaxSize()) {
|
Box(Modifier.fillMaxSize()) {
|
||||||
|
@@ -35,6 +35,10 @@ import eu.wewox.pagecurl.ui.SpacingLarge
|
|||||||
import eu.wewox.pagecurl.ui.SpacingMedium
|
import eu.wewox.pagecurl.ui.SpacingMedium
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Page Curl With State Management.
|
||||||
|
* Example how state can be used to change current page (snap / animate).
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun StateInPageCurlScreen() {
|
fun StateInPageCurlScreen() {
|
||||||
Box(Modifier.fillMaxSize()) {
|
Box(Modifier.fillMaxSize()) {
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
@file:Suppress("UndocumentedPublicProperty")
|
||||||
|
|
||||||
package eu.wewox.pagecurl.ui.theme
|
package eu.wewox.pagecurl.ui.theme
|
||||||
|
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
@@ -5,4 +7,4 @@ import androidx.compose.ui.graphics.Color
|
|||||||
val Purple200 = Color(0xFFBB86FC)
|
val Purple200 = Color(0xFFBB86FC)
|
||||||
val Purple500 = Color(0xFF6200EE)
|
val Purple500 = Color(0xFF6200EE)
|
||||||
val Purple700 = Color(0xFF3700B3)
|
val Purple700 = Color(0xFF3700B3)
|
||||||
val Teal200 = Color(0xFF03DAC5)
|
val Teal200 = Color(0xFF03DAC5)
|
||||||
|
@@ -4,8 +4,11 @@ import androidx.compose.foundation.shape.RoundedCornerShape
|
|||||||
import androidx.compose.material.Shapes
|
import androidx.compose.material.Shapes
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The application shapes.
|
||||||
|
*/
|
||||||
val Shapes = Shapes(
|
val Shapes = Shapes(
|
||||||
small = RoundedCornerShape(4.dp),
|
small = RoundedCornerShape(4.dp),
|
||||||
medium = RoundedCornerShape(4.dp),
|
medium = RoundedCornerShape(4.dp),
|
||||||
large = RoundedCornerShape(0.dp)
|
large = RoundedCornerShape(0.dp)
|
||||||
)
|
)
|
||||||
|
@@ -2,6 +2,7 @@ package eu.wewox.pagecurl.ui.theme
|
|||||||
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.MaterialTheme
|
||||||
|
import androidx.compose.material.Typography
|
||||||
import androidx.compose.material.darkColors
|
import androidx.compose.material.darkColors
|
||||||
import androidx.compose.material.lightColors
|
import androidx.compose.material.lightColors
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
@@ -9,24 +10,18 @@ import androidx.compose.runtime.Composable
|
|||||||
private val DarkColorPalette = darkColors(
|
private val DarkColorPalette = darkColors(
|
||||||
primary = Purple200,
|
primary = Purple200,
|
||||||
primaryVariant = Purple700,
|
primaryVariant = Purple700,
|
||||||
secondary = Teal200
|
secondary = Teal200,
|
||||||
)
|
)
|
||||||
|
|
||||||
private val LightColorPalette = lightColors(
|
private val LightColorPalette = lightColors(
|
||||||
primary = Purple500,
|
primary = Purple500,
|
||||||
primaryVariant = Purple700,
|
primaryVariant = Purple700,
|
||||||
secondary = Teal200
|
secondary = Teal200,
|
||||||
|
|
||||||
/* Other default colors to override
|
|
||||||
background = Color.White,
|
|
||||||
surface = Color.White,
|
|
||||||
onPrimary = Color.White,
|
|
||||||
onSecondary = Color.Black,
|
|
||||||
onBackground = Color.Black,
|
|
||||||
onSurface = Color.Black,
|
|
||||||
*/
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The theme to use for demo application.
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun PageCurlTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) {
|
fun PageCurlTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) {
|
||||||
val colors = if (darkTheme) {
|
val colors = if (darkTheme) {
|
||||||
@@ -37,8 +32,8 @@ fun PageCurlTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composab
|
|||||||
|
|
||||||
MaterialTheme(
|
MaterialTheme(
|
||||||
colors = colors,
|
colors = colors,
|
||||||
typography = Typography,
|
typography = Typography(),
|
||||||
shapes = Shapes,
|
shapes = Shapes,
|
||||||
content = content
|
content = content
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -1,28 +0,0 @@
|
|||||||
package eu.wewox.pagecurl.ui.theme
|
|
||||||
|
|
||||||
import androidx.compose.material.Typography
|
|
||||||
import androidx.compose.ui.text.TextStyle
|
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
|
||||||
import androidx.compose.ui.unit.sp
|
|
||||||
|
|
||||||
// Set of Material typography styles to start with
|
|
||||||
val Typography = Typography(
|
|
||||||
body1 = TextStyle(
|
|
||||||
fontFamily = FontFamily.Default,
|
|
||||||
fontWeight = FontWeight.Normal,
|
|
||||||
fontSize = 16.sp
|
|
||||||
)
|
|
||||||
/* Other default text styles to override
|
|
||||||
button = TextStyle(
|
|
||||||
fontFamily = FontFamily.Default,
|
|
||||||
fontWeight = FontWeight.W500,
|
|
||||||
fontSize = 14.sp
|
|
||||||
),
|
|
||||||
caption = TextStyle(
|
|
||||||
fontFamily = FontFamily.Default,
|
|
||||||
fontWeight = FontWeight.Normal,
|
|
||||||
fontSize = 12.sp
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
)
|
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
|||||||
#Tue Mar 22 09:36:17 CET 2022
|
#Thu Aug 18 14:58:20 CEST 2022
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
@@ -27,7 +27,7 @@ android {
|
|||||||
compose true
|
compose true
|
||||||
}
|
}
|
||||||
composeOptions {
|
composeOptions {
|
||||||
kotlinCompilerExtensionVersion compose_version
|
kotlinCompilerExtensionVersion compose_compiler_version
|
||||||
}
|
}
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "1.8"
|
jvmTarget = "1.8"
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
@file:Suppress("LongParameterList", "LongMethod")
|
||||||
|
|
||||||
package eu.wewox.pagecurl.config
|
package eu.wewox.pagecurl.config
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
@@ -63,6 +63,7 @@ public fun rememberPageCurlState(
|
|||||||
* The state of the PageCurl.
|
* The state of the PageCurl.
|
||||||
*
|
*
|
||||||
* @property max The max number of pages.
|
* @property max The max number of pages.
|
||||||
|
* @property config The configuration for PageCurl.
|
||||||
* @param initialCurrent The initial current page.
|
* @param initialCurrent The initial current page.
|
||||||
*/
|
*/
|
||||||
@ExperimentalPageCurlApi
|
@ExperimentalPageCurlApi
|
||||||
|
@@ -38,7 +38,11 @@ internal fun Modifier.tapGesture(
|
|||||||
return@awaitPointerEventScope
|
return@awaitPointerEventScope
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.tapBackwardEnabled && config.tapBackwardInteraction.target.multiply(size).contains(up.position)) {
|
if (config.tapBackwardEnabled &&
|
||||||
|
config.tapBackwardInteraction.target
|
||||||
|
.multiply(size)
|
||||||
|
.contains(up.position)
|
||||||
|
) {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
onTapBackward()
|
onTapBackward()
|
||||||
}
|
}
|
||||||
|
@@ -19,9 +19,12 @@ internal fun lineLineIntersection(
|
|||||||
val denominator = (line1a.x - line1b.x) * (line2a.y - line2b.y) - (line1a.y - line1b.y) * (line2a.x - line2b.x)
|
val denominator = (line1a.x - line1b.x) * (line2a.y - line2b.y) - (line1a.y - line1b.y) * (line2a.x - line2b.x)
|
||||||
if (denominator == 0f) return null
|
if (denominator == 0f) return null
|
||||||
|
|
||||||
val x = ((line1a.x * line1b.y - line1a.y * line1b.x) * (line2a.x - line2b.x) -
|
val x1 = (line1a.x * line1b.y - line1a.y * line1b.x) * (line2a.x - line2b.x)
|
||||||
(line1a.x - line1b.x) * (line2a.x * line2b.y - line2a.y * line2b.x)) / denominator
|
val x2 = (line1a.x - line1b.x) * (line2a.x * line2b.y - line2a.y * line2b.x)
|
||||||
val y = ((line1a.x * line1b.y - line1a.y * line1b.x) * (line2a.y - line2b.y) -
|
val x = (x1 - x2) / denominator
|
||||||
(line1a.y - line1b.y) * (line2a.x * line2b.y - line2a.y * line2b.x)) / denominator
|
|
||||||
|
val y1 = (line1a.x * line1b.y - line1a.y * line1b.x) * (line2a.y - line2b.y)
|
||||||
|
val y2 = (line1a.y - line1b.y) * (line2a.x * line2b.y - line2a.y * line2b.x)
|
||||||
|
val y = (y1 - y2) / denominator
|
||||||
return Offset(x, y)
|
return Offset(x, y)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user