Compare commits
19 Commits
7c26e90687
...
d5be6a9b5f
| Author | SHA1 | Date | |
|---|---|---|---|
| d5be6a9b5f | |||
| fa3ac69752 | |||
| 95e2d9a3bf | |||
| fd84f18e4d | |||
| fe025c8a69 | |||
| 3cd21f8fca | |||
| 2c88a9eb7e | |||
| b16ced1c18 | |||
| f3c1ae70d4 | |||
| f89ffbcec3 | |||
| edbe5629fd | |||
| d066886b66 | |||
| 888382f7ce | |||
| c31be55fe6 | |||
| e6a3c1605f | |||
| 246b39ca1a | |||
| 133ea5a88b | |||
| e4c17969b7 | |||
| d98deb406f |
48
.kotlin/errors/errors-1779328932072.log
Normal file
48
.kotlin/errors/errors-1779328932072.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker16581845903846430587.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779330173402.log
Normal file
48
.kotlin/errors/errors-1779330173402.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker6719952351116085200.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779330174351.log
Normal file
48
.kotlin/errors/errors-1779330174351.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker6345666449733208759.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779330396999.log
Normal file
48
.kotlin/errors/errors-1779330396999.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker567504933305747395.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779330397314.log
Normal file
48
.kotlin/errors/errors-1779330397314.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker1748355064623279615.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779346647785.log
Normal file
48
.kotlin/errors/errors-1779346647785.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker1026478979360065812.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779346648867.log
Normal file
48
.kotlin/errors/errors-1779346648867.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker11186798026956229114.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779433455420.log
Normal file
48
.kotlin/errors/errors-1779433455420.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker11920652299343822339.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779433455772.log
Normal file
48
.kotlin/errors/errors-1779433455772.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker5665442261344946841.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779433702048.log
Normal file
48
.kotlin/errors/errors-1779433702048.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker6456004413495638737.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779433702374.log
Normal file
48
.kotlin/errors/errors-1779433702374.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker14563136154932986400.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779434066255.log
Normal file
48
.kotlin/errors/errors-1779434066255.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker8779980163314489704.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779434066613.log
Normal file
48
.kotlin/errors/errors-1779434066613.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker7827770610958581658.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779434667008.log
Normal file
48
.kotlin/errors/errors-1779434667008.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker7690567857171527290.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779434667339.log
Normal file
48
.kotlin/errors/errors-1779434667339.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker9415162026330905469.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779434981318.log
Normal file
48
.kotlin/errors/errors-1779434981318.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker3378983272593946608.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779434981663.log
Normal file
48
.kotlin/errors/errors-1779434981663.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker1370985791134754779.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779517395470.log
Normal file
48
.kotlin/errors/errors-1779517395470.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker12650102232292672793.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779517396396.log
Normal file
48
.kotlin/errors/errors-1779517396396.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker2077405252922174295.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779525667150.log
Normal file
48
.kotlin/errors/errors-1779525667150.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker13865236646716426209.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779526129559.log
Normal file
48
.kotlin/errors/errors-1779526129559.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker3565929668175938003.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779526336962.log
Normal file
48
.kotlin/errors/errors-1779526336962.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker16671810096599011118.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779526448861.log
Normal file
48
.kotlin/errors/errors-1779526448861.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker16632472017645128501.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779676920998.log
Normal file
48
.kotlin/errors/errors-1779676920998.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker3136252475112532487.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779691414613.log
Normal file
48
.kotlin/errors/errors-1779691414613.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker1604220527296352118.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779694070210.log
Normal file
48
.kotlin/errors/errors-1779694070210.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker9673505676987263453.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
48
.kotlin/errors/errors-1779696172157.log
Normal file
48
.kotlin/errors/errors-1779696172157.log
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
kotlin version: 2.2.10
|
||||||
|
error message: java.nio.file.AccessDeniedException: C:\Users\Administrator\AppData\Local\kotlin\daemon\kotlin-daemon-client-tsmarker17838896787258721930.tmp
|
||||||
|
|
||||||
|
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
|
||||||
|
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:214)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||||
|
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||||
|
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||||
|
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||||
|
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
|
||||||
|
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||||
|
at org.gradle.internal.Factories$1.create(Factories.java:30)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:269)
|
||||||
|
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:42)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:267)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:259)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||||
|
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||||
|
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||||
|
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||||
|
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||||
|
|
||||||
|
|
||||||
@@ -60,6 +60,8 @@ dependencies {
|
|||||||
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
|
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
|
||||||
// OkHttp(Retrofit 会自动依赖 OkHttp,但显式指定版本也可以)
|
// OkHttp(Retrofit 会自动依赖 OkHttp,但显式指定版本也可以)
|
||||||
implementation("com.squareup.okhttp3:okhttp:4.12.0")
|
implementation("com.squareup.okhttp3:okhttp:4.12.0")
|
||||||
|
implementation("com.github.bumptech.glide:okhttp3-integration:4.11.0@aar")
|
||||||
|
|
||||||
// OkHttp 日志拦截器
|
// OkHttp 日志拦截器
|
||||||
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
|
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
|
||||||
implementation("com.blankj:utilcodex:1.31.1")
|
implementation("com.blankj:utilcodex:1.31.1")
|
||||||
@@ -100,5 +102,6 @@ dependencies {
|
|||||||
implementation("androidx.camera:camera-view:1.0.0-alpha25")
|
implementation("androidx.camera:camera-view:1.0.0-alpha25")
|
||||||
//上拉刷新下拉加载
|
//上拉刷新下拉加载
|
||||||
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
|
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
|
||||||
|
implementation("com.yanzhenjie.recyclerview:x:1.3.2")
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -87,9 +87,6 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".liveVideo.LiveVideoActivity"
|
android:name=".liveVideo.LiveVideoActivity"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<activity
|
|
||||||
android:name=".home.ScanActivity"
|
|
||||||
android:exported="false" />
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".home.SetNameActivity"
|
android:name=".home.SetNameActivity"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import bean.LoginBean
|
|||||||
import com.blankj.utilcode.util.Utils
|
import com.blankj.utilcode.util.Utils
|
||||||
import com.example.defenseapplication.bean.BaseInfo
|
import com.example.defenseapplication.bean.BaseInfo
|
||||||
import com.example.defenseapplication.utils.ApiConfig
|
import com.example.defenseapplication.utils.ApiConfig
|
||||||
|
import com.example.defenseapplication.utils.LanguageHeaderManager
|
||||||
import com.example.defenseapplication.utils.LanguageUtil
|
import com.example.defenseapplication.utils.LanguageUtil
|
||||||
import com.example.defenseapplication.utils.UserinfoUtil
|
import com.example.defenseapplication.utils.UserinfoUtil
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
|
|||||||
@@ -1,25 +1,36 @@
|
|||||||
package com.example.defenseapplication.adapter
|
package com.example.defenseapplication.adapter
|
||||||
|
|
||||||
|
import android.graphics.Color
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.databinding.ItemAddLinkedUserBinding
|
import com.example.defenseapplication.databinding.ItemAddLinkedUserBinding
|
||||||
|
|
||||||
data class UserItem(val name: String, val phone: String)
|
data class UserItem(val name: String, val phone: String, val userId: String = "")
|
||||||
|
|
||||||
class AddLinkedUserAdapter(
|
class AddLinkedUserAdapter(
|
||||||
private val data: List<UserItem>,
|
private val data: List<UserItem>,
|
||||||
private val selectedIds: MutableSet<String>,
|
private val selectedIds: MutableSet<String>,
|
||||||
private val onItemClick: (String, Boolean) -> Unit
|
private val selectedUserIdMap: MutableMap<String, String>,
|
||||||
|
private val onItemClick: (String, Boolean, String?) -> Unit
|
||||||
) : RecyclerView.Adapter<AddLinkedUserAdapter.ViewHolder>() {
|
) : RecyclerView.Adapter<AddLinkedUserAdapter.ViewHolder>() {
|
||||||
|
|
||||||
inner class ViewHolder(val binding: ItemAddLinkedUserBinding) : RecyclerView.ViewHolder(binding.root) {
|
inner class ViewHolder(val binding: ItemAddLinkedUserBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||||
fun bind(item: UserItem) {
|
fun bind(item: UserItem) {
|
||||||
binding.tvUserName.text = "${item.name}-${item.phone}"
|
binding.tvUserName.text = "${item.name}-${item.phone}"
|
||||||
binding.cbSelect.isChecked = selectedIds.contains(item.phone)
|
val isChecked = selectedIds.contains(item.phone)
|
||||||
binding.cbSelect.setOnClickListener {
|
binding.cbSelect.isChecked = isChecked
|
||||||
val isChecked = binding.cbSelect.isChecked
|
binding.cbSelect.setOnCheckedChangeListener { _, checked ->
|
||||||
onItemClick(item.phone, isChecked)
|
if (checked) {
|
||||||
|
binding.cbSelect.buttonTintList = android.content.res.ColorStateList.valueOf(Color.parseColor("#09C2BD"))
|
||||||
|
} else {
|
||||||
|
binding.cbSelect.buttonTintList = null
|
||||||
|
}
|
||||||
|
onItemClick(item.phone, checked, item.userId)
|
||||||
|
}
|
||||||
|
if (isChecked) {
|
||||||
|
binding.cbSelect.buttonTintList = android.content.res.ColorStateList.valueOf(Color.parseColor("#09C2BD"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,12 @@ class FamilySwitchAdapter(
|
|||||||
) : RecyclerView.ViewHolder(binding.root) {
|
) : RecyclerView.ViewHolder(binding.root) {
|
||||||
|
|
||||||
fun bind(item: FamilyItem, isSelected: Boolean) {
|
fun bind(item: FamilyItem, isSelected: Boolean) {
|
||||||
binding.tvFamilyName.text = item.name
|
val displayName = if (item.role == "appadmin") {
|
||||||
|
binding.root.context.getString(R.string.my_family_admin, item.name)
|
||||||
|
} else {
|
||||||
|
binding.root.context.getString(R.string.family_member, item.name)
|
||||||
|
}
|
||||||
|
binding.tvFamilyName.text = displayName
|
||||||
|
|
||||||
binding.root.setBackgroundColor(
|
binding.root.setBackgroundColor(
|
||||||
ContextCompat.getColor(
|
ContextCompat.getColor(
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import androidx.recyclerview.widget.RecyclerView
|
|||||||
import com.example.defenseapplication.databinding.ItemLinkedUserBinding
|
import com.example.defenseapplication.databinding.ItemLinkedUserBinding
|
||||||
|
|
||||||
data class LinkedUser(
|
data class LinkedUser(
|
||||||
|
val userId: String,
|
||||||
val name: String,
|
val name: String,
|
||||||
val phone: String,
|
val phone: String,
|
||||||
val idCard: String,
|
val idCard: String,
|
||||||
@@ -14,9 +15,8 @@ data class LinkedUser(
|
|||||||
)
|
)
|
||||||
|
|
||||||
class LinkedUserAdapter(
|
class LinkedUserAdapter(
|
||||||
private val deleteText: String,
|
private val isUnlinkMode: Boolean,
|
||||||
private val onItemClick: (LinkedUser, Int) -> Unit,
|
private val onItemClick: (LinkedUser, Int) -> Unit
|
||||||
private val onDeleteClick: (LinkedUser, Int) -> Unit
|
|
||||||
) : RecyclerView.Adapter<LinkedUserAdapter.LinkedUserViewHolder>() {
|
) : RecyclerView.Adapter<LinkedUserAdapter.LinkedUserViewHolder>() {
|
||||||
|
|
||||||
private val items = mutableListOf<LinkedUser>()
|
private val items = mutableListOf<LinkedUser>()
|
||||||
@@ -44,33 +44,24 @@ class LinkedUserAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: LinkedUserViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: LinkedUserViewHolder, position: Int) {
|
||||||
|
|
||||||
holder.bind(items[position], position)
|
holder.bind(items[position], position)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemCount(): Int = items.size
|
override fun getItemCount(): Int = items.size
|
||||||
|
|
||||||
inner class LinkedUserViewHolder(
|
inner class LinkedUserViewHolder(
|
||||||
private val binding: ItemLinkedUserBinding
|
val binding: ItemLinkedUserBinding
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
) : RecyclerView.ViewHolder(binding.root) {
|
||||||
|
|
||||||
fun bind(item: LinkedUser, position: Int) {
|
fun bind(item: LinkedUser, position: Int) {
|
||||||
binding.llContent.translationX = 0f
|
|
||||||
binding.tvUserName.text = item.name
|
binding.tvUserName.text = item.name
|
||||||
|
binding.tvTime.text = item.time
|
||||||
binding.tvPhone.text = "手机号码:${item.phone}"
|
binding.tvPhone.text = "手机号码:${item.phone}"
|
||||||
binding.tvIdCard.text = "身份证号:${item.idCard}"
|
binding.tvIdCard.text = "身份证号:${item.idCard}"
|
||||||
binding.tvTime.text = item.time
|
|
||||||
//设置删除按钮的文字
|
binding.root.setOnClickListener {
|
||||||
binding.tvDeleteAction.text = deleteText
|
|
||||||
binding.llContent.setOnClickListener {
|
|
||||||
onItemClick(item, position)
|
onItemClick(item, position)
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.llDelete.setOnClickListener {
|
|
||||||
onDeleteClick(item, position)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getContentLayout(): View = binding.llContent
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,12 @@ import androidx.recyclerview.widget.RecyclerView
|
|||||||
import com.example.defenseapplication.databinding.ItemWifiBinding
|
import com.example.defenseapplication.databinding.ItemWifiBinding
|
||||||
|
|
||||||
class WifiListAdapter(
|
class WifiListAdapter(
|
||||||
private val wifiList: List<String>,
|
wifiList: List<String>,
|
||||||
private val onItemClick: (String) -> Unit
|
private val onItemClick: (String) -> Unit
|
||||||
) : RecyclerView.Adapter<WifiListAdapter.ViewHolder>() {
|
) : RecyclerView.Adapter<WifiListAdapter.ViewHolder>() {
|
||||||
|
|
||||||
|
private val wifiList = mutableListOf<String>().apply { addAll(wifiList) }
|
||||||
|
|
||||||
inner class ViewHolder(val binding: ItemWifiBinding) : RecyclerView.ViewHolder(binding.root) {
|
inner class ViewHolder(val binding: ItemWifiBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||||
init {
|
init {
|
||||||
itemView.setOnClickListener {
|
itemView.setOnClickListener {
|
||||||
@@ -35,4 +37,17 @@ class WifiListAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemCount(): Int = wifiList.size
|
override fun getItemCount(): Int = wifiList.size
|
||||||
|
|
||||||
|
fun updateData(newList: List<String>) {
|
||||||
|
wifiList.clear()
|
||||||
|
wifiList.addAll(newList)
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addData(newList: List<String>) {
|
||||||
|
val startPosition = wifiList.size
|
||||||
|
val newItems = newList.filter { !wifiList.contains(it) }
|
||||||
|
wifiList.addAll(newItems)
|
||||||
|
notifyItemRangeInserted(startPosition, newItems.size)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class AddDeviceBean(
|
||||||
|
val deviceEm: String? = null,//设备型号
|
||||||
|
val deviceNo: String? = null,//设备编号
|
||||||
|
val deviceSn: String? = null,//设备序列号
|
||||||
|
val fwVer: String? = null,//固件版本
|
||||||
|
val status: String? = null,//状态 1-在线 0-离线 2-故障 3-到期
|
||||||
|
val wifiName: String? = null,//WiFi名称
|
||||||
|
val wifiPassword: String? = null,//WiFi密码
|
||||||
|
val mac: String? = null,//邀请码
|
||||||
|
val deviceName: String? = null,//设备名称
|
||||||
|
)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class AddDeviceUserRequest(
|
||||||
|
val deviceId: String,
|
||||||
|
val deviceNo: String? = null,
|
||||||
|
val deviceName: String? = null,
|
||||||
|
val userId: String
|
||||||
|
)
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
class DeleteBean {
|
||||||
|
var deviceId: String? = null
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class DeleteDeviceUserRequest(
|
||||||
|
val userId: String,
|
||||||
|
val deviceId: String
|
||||||
|
)
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class DeviceUserBean(
|
||||||
|
val createDept: Int ? = null, //创建部门
|
||||||
|
val createBy: Int? = null, //创建人
|
||||||
|
val updateBy: Int? = null, //更新者
|
||||||
|
val updateTime: String? = null, //更新时间
|
||||||
|
val paramskeykey: String? = null,
|
||||||
|
val deviceId: String? = null, // 设备 ID
|
||||||
|
val deviceNo: String? = null, // 设备编号
|
||||||
|
val deviceName: String? = null, // 设备名称
|
||||||
|
val userId: String? = null, // 用户 ID
|
||||||
|
val nickName: String? = null, // 用户昵称
|
||||||
|
val idCard: String? = null, // 身份证号
|
||||||
|
val phonenumber: String? = null, // 手机号码
|
||||||
|
val createTime: String? = null // 创建时间
|
||||||
|
)
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class FamilyMembersBean(
|
||||||
|
val id: String? = null, // ID
|
||||||
|
val parentId: String? = null, // 家长 id
|
||||||
|
val parentName: String? = null, // 家长昵称
|
||||||
|
val userId: String? = null, // 成员 id
|
||||||
|
val nickName: String? = null, // 成员昵称
|
||||||
|
val idCard: String? = null, // 身份证号
|
||||||
|
val phonenumber: String? = null, // 手机号码
|
||||||
|
val status: String? = null, // 账号状态(0 正常 1 停用)
|
||||||
|
val role: String? = null, // 角色
|
||||||
|
val createTime: String? = null, // 创建时间
|
||||||
|
val inviteCode: String? = null, // 邀请码
|
||||||
|
val createDept: Int? = null, // 创建部门
|
||||||
|
val createBy: Int? = null, // 创建人
|
||||||
|
val updateBy: Int? = null, // 更新者
|
||||||
|
val updateTime: String? = null, // 更新时间
|
||||||
|
val paramskeykey: String? = null
|
||||||
|
)
|
||||||
@@ -9,6 +9,7 @@ data class LoginBean(
|
|||||||
val role: String,
|
val role: String,
|
||||||
val scope: Any
|
val scope: Any
|
||||||
)
|
)
|
||||||
|
|
||||||
data class LoginRequest(
|
data class LoginRequest(
|
||||||
val clientId: String = "428a8310cd442757ae699df5d894f051",
|
val clientId: String = "428a8310cd442757ae699df5d894f051",
|
||||||
val grantType: String,
|
val grantType: String,
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class ObtainInviterInformationBean(
|
||||||
|
val nickName: String? = null,
|
||||||
|
val idCard: String? = null,
|
||||||
|
val phonenumber: String? = null,
|
||||||
|
val userId: String? = null,
|
||||||
|
val id: String? = null,
|
||||||
|
val status: String? = null,
|
||||||
|
val mac: String? = null
|
||||||
|
|
||||||
|
)
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class ObtainInviterInformationRequest(
|
||||||
|
val childId: String
|
||||||
|
)
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class UpdatePassword(
|
||||||
|
val oldPassword: String,
|
||||||
|
val password: String
|
||||||
|
)
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class UpdateUserInfo(
|
||||||
|
val userId: String?=null,
|
||||||
|
val nickName: String?=null,
|
||||||
|
val idCard: String?=null,
|
||||||
|
val userType: String?=null,
|
||||||
|
val phonenumber: String?=null,
|
||||||
|
val avatar: String?=null,
|
||||||
|
val password: String?=null,
|
||||||
|
val status: String?=null,
|
||||||
|
val faceAddr: String?=null,
|
||||||
|
val mac: String?=null,
|
||||||
|
val remark: String?=null,
|
||||||
|
val smsCoode: String?=null,
|
||||||
|
val optionPassword: String?=null,
|
||||||
|
val optionStatus: String?=null,
|
||||||
|
)
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
|
data class UserInfoBean(
|
||||||
|
val userId: String? = null,
|
||||||
|
val userName: String? = null,
|
||||||
|
val nickName: String? = null,
|
||||||
|
val phonenumber: String? = null,
|
||||||
|
val avatar: String? = null,
|
||||||
|
val role: String? = null,
|
||||||
|
val idCard: String? = null,
|
||||||
|
val createTime: String? = null,
|
||||||
|
val optionPassword: String? = null,
|
||||||
|
val optionStatus: String? = null,
|
||||||
|
): Serializable
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.example.defenseapplication.bean
|
||||||
|
|
||||||
|
data class VerifyOptionPasswordRequest(
|
||||||
|
val optionPassword: String
|
||||||
|
)
|
||||||
@@ -6,12 +6,8 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.net.ConnectivityManager
|
import android.graphics.Rect
|
||||||
import android.net.Network
|
|
||||||
import android.net.NetworkCapabilities
|
|
||||||
import android.net.NetworkRequest
|
|
||||||
import android.net.wifi.ScanResult
|
import android.net.wifi.ScanResult
|
||||||
import android.net.wifi.WifiConfiguration
|
|
||||||
import android.net.wifi.WifiManager
|
import android.net.wifi.WifiManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
@@ -26,24 +22,22 @@ import android.widget.Toast
|
|||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.adapter.WifiListAdapter
|
import com.example.defenseapplication.adapter.WifiListAdapter
|
||||||
import com.example.defenseapplication.databinding.AddFamilyActivityBinding
|
import com.example.defenseapplication.databinding.AddFamilyActivityBinding
|
||||||
import com.example.defenseapplication.databinding.DialogWifiListBinding
|
import com.example.defenseapplication.databinding.DialogWifiListBinding
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
|
||||||
//选择wifi页面
|
|
||||||
class AddFamilyActivity : AppCompatActivity() {
|
class AddFamilyActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private lateinit var binding: AddFamilyActivityBinding
|
private lateinit var binding: AddFamilyActivityBinding
|
||||||
private lateinit var wifiManager: WifiManager
|
private lateinit var wifiManager: WifiManager
|
||||||
private lateinit var connectivityManager: ConnectivityManager
|
|
||||||
private lateinit var wifiScanReceiver: BroadcastReceiver
|
private lateinit var wifiScanReceiver: BroadcastReceiver
|
||||||
private var popupWindow: PopupWindow? = null
|
private var popupWindow: PopupWindow? = null
|
||||||
private val handler = Handler(Looper.getMainLooper())
|
private val handler = Handler(Looper.getMainLooper())
|
||||||
private var isConnecting = false
|
private var wifiListAdapter: WifiListAdapter? = null
|
||||||
private var targetWifiName: String = ""
|
private var isLoadingMore = false
|
||||||
private var networkCallback: ConnectivityManager.NetworkCallback? = null
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -53,6 +47,7 @@ class AddFamilyActivity : AppCompatActivity() {
|
|||||||
.statusBarDarkFont(true)
|
.statusBarDarkFont(true)
|
||||||
.titleBar(binding.topBar)
|
.titleBar(binding.topBar)
|
||||||
.init()
|
.init()
|
||||||
|
|
||||||
binding.ivBack.setOnClickListener {
|
binding.ivBack.setOnClickListener {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
@@ -70,8 +65,8 @@ class AddFamilyActivity : AppCompatActivity() {
|
|||||||
updateBottomButtonVisibility()
|
updateBottomButtonVisibility()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
|
wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
|
||||||
connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
|
||||||
|
|
||||||
wifiScanReceiver = object : BroadcastReceiver() {
|
wifiScanReceiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
@@ -81,12 +76,8 @@ class AddFamilyActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.btnConfirm.setOnClickListener {
|
|
||||||
//startActivity(Intent(this, ConnectDeviceActivity::class.java))
|
|
||||||
if (isConnecting) {
|
|
||||||
return@setOnClickListener
|
|
||||||
}
|
|
||||||
|
|
||||||
|
binding.btnConfirm.setOnClickListener {
|
||||||
val wifiName = binding.etWifiName.text.toString().trim()
|
val wifiName = binding.etWifiName.text.toString().trim()
|
||||||
val wifiPassword = binding.etWifiPassword.text.toString()
|
val wifiPassword = binding.etWifiPassword.text.toString()
|
||||||
|
|
||||||
@@ -100,142 +91,12 @@ class AddFamilyActivity : AppCompatActivity() {
|
|||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
|
|
||||||
isConnecting = true
|
|
||||||
binding.btnConfirm.isEnabled = false
|
|
||||||
|
|
||||||
verifyWifiPassword(wifiName, wifiPassword)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun verifyWifiPassword(wifiName: String, wifiPassword: String) {
|
|
||||||
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
|
|
||||||
!= PackageManager.PERMISSION_GRANTED ||
|
|
||||||
ActivityCompat.checkSelfPermission(this, Manifest.permission.CHANGE_WIFI_STATE)
|
|
||||||
!= PackageManager.PERMISSION_GRANTED ||
|
|
||||||
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE)
|
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
|
||||||
ActivityCompat.requestPermissions(this,
|
|
||||||
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,
|
|
||||||
Manifest.permission.CHANGE_WIFI_STATE,
|
|
||||||
Manifest.permission.ACCESS_NETWORK_STATE),
|
|
||||||
1002)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
targetWifiName = wifiName
|
|
||||||
|
|
||||||
if (!wifiManager.isWifiEnabled) {
|
|
||||||
wifiManager.isWifiEnabled = true
|
|
||||||
}
|
|
||||||
|
|
||||||
val existingConfig = findExistingWifiConfig(wifiName)
|
|
||||||
var netId: Int
|
|
||||||
|
|
||||||
if (existingConfig != null) {
|
|
||||||
netId = existingConfig.networkId
|
|
||||||
existingConfig.preSharedKey = "\"$wifiPassword\""
|
|
||||||
wifiManager.updateNetwork(existingConfig)
|
|
||||||
} else {
|
|
||||||
val wifiConfig = createWifiConfig(wifiName, wifiPassword)
|
|
||||||
netId = wifiManager.addNetwork(wifiConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (netId == -1) {
|
|
||||||
isConnecting = false
|
|
||||||
binding.btnConfirm.isEnabled = true
|
|
||||||
ToastUtils.showError(this, getString(R.string.wifi_connection_failed))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
networkCallback = object : ConnectivityManager.NetworkCallback() {
|
|
||||||
override fun onAvailable(network: Network) {
|
|
||||||
super.onAvailable(network)
|
|
||||||
checkWifiConnected()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCapabilitiesChanged(network: Network, capabilities: NetworkCapabilities) {
|
|
||||||
super.onCapabilitiesChanged(network, capabilities)
|
|
||||||
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
|
|
||||||
checkWifiConnected()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val request = NetworkRequest.Builder()
|
|
||||||
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
connectivityManager.registerNetworkCallback(request, networkCallback!!)
|
|
||||||
|
|
||||||
wifiManager.enableNetwork(netId, true)
|
|
||||||
wifiManager.saveConfiguration()
|
|
||||||
|
|
||||||
handler.postDelayed({
|
|
||||||
if (isConnecting) {
|
|
||||||
isConnecting = false
|
|
||||||
binding.btnConfirm.isEnabled = true
|
|
||||||
networkCallback?.let {
|
|
||||||
try {
|
|
||||||
connectivityManager.unregisterNetworkCallback(it)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
networkCallback = null
|
|
||||||
ToastUtils.showError(this, getString(R.string.wifi_connection_failed))
|
|
||||||
}
|
|
||||||
}, 15000)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun findExistingWifiConfig(wifiName: String): WifiConfiguration? {
|
|
||||||
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
|
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
val configuredNetworks = wifiManager.configuredNetworks
|
|
||||||
configuredNetworks?.forEach { config ->
|
|
||||||
if (config.SSID == "\"$wifiName\"") {
|
|
||||||
return config
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun checkWifiConnected() {
|
|
||||||
if (!isConnecting) return
|
|
||||||
|
|
||||||
val info = wifiManager.connectionInfo
|
|
||||||
if (info.ssid == "\"$targetWifiName\"" && info.networkId != -1) {
|
|
||||||
isConnecting = false
|
|
||||||
binding.btnConfirm.isEnabled = true
|
|
||||||
networkCallback?.let {
|
|
||||||
try {
|
|
||||||
connectivityManager.unregisterNetworkCallback(it)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
networkCallback = null
|
|
||||||
runOnUiThread {
|
|
||||||
ToastUtils.showSuccess(this@AddFamilyActivity, getString(R.string.wifi_connection_success))
|
|
||||||
val intent = Intent(this@AddFamilyActivity, ConnectDeviceActivity::class.java)
|
val intent = Intent(this@AddFamilyActivity, ConnectDeviceActivity::class.java)
|
||||||
intent.putExtra("wifi_name", targetWifiName)
|
intent.putExtra("wifi_name", wifiName)
|
||||||
|
intent.putExtra("wifi_password", wifiPassword)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun createWifiConfig(ssid: String, password: String): WifiConfiguration {
|
|
||||||
val config = WifiConfiguration()
|
|
||||||
config.SSID = "\"$ssid\""
|
|
||||||
config.preSharedKey = "\"$password\""
|
|
||||||
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK)
|
|
||||||
config.allowedProtocols.set(WifiConfiguration.Protocol.RSN)
|
|
||||||
config.allowedProtocols.set(WifiConfiguration.Protocol.WPA)
|
|
||||||
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP)
|
|
||||||
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP)
|
|
||||||
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP)
|
|
||||||
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP)
|
|
||||||
return config
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showWifiListDialog() {
|
private fun showWifiListDialog() {
|
||||||
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
|
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
|
||||||
@@ -255,10 +116,14 @@ class AddFamilyActivity : AppCompatActivity() {
|
|||||||
wifiManager.startScan()
|
wifiManager.startScan()
|
||||||
|
|
||||||
val dialogBinding = DialogWifiListBinding.inflate(LayoutInflater.from(this))
|
val dialogBinding = DialogWifiListBinding.inflate(LayoutInflater.from(this))
|
||||||
|
|
||||||
|
val screenHeight = getScreenHeight()
|
||||||
|
val popupHeight = (screenHeight * 2 / 3).toInt()
|
||||||
|
|
||||||
popupWindow = PopupWindow(
|
popupWindow = PopupWindow(
|
||||||
dialogBinding.root,
|
dialogBinding.root,
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
popupHeight
|
||||||
).apply {
|
).apply {
|
||||||
isFocusable = true
|
isFocusable = true
|
||||||
setBackgroundDrawable(null)
|
setBackgroundDrawable(null)
|
||||||
@@ -273,10 +138,54 @@ class AddFamilyActivity : AppCompatActivity() {
|
|||||||
dialogBinding.rvWifiList.layoutManager = LinearLayoutManager(this@AddFamilyActivity)
|
dialogBinding.rvWifiList.layoutManager = LinearLayoutManager(this@AddFamilyActivity)
|
||||||
|
|
||||||
val wifiList = getWifiList()
|
val wifiList = getWifiList()
|
||||||
dialogBinding.rvWifiList.adapter = WifiListAdapter(wifiList) { wifiName ->
|
wifiListAdapter = WifiListAdapter(wifiList) { wifiName ->
|
||||||
binding.etWifiName.setText(wifiName)
|
binding.etWifiName.setText(wifiName)
|
||||||
popupWindow?.dismiss()
|
popupWindow?.dismiss()
|
||||||
}
|
}
|
||||||
|
dialogBinding.rvWifiList.adapter = wifiListAdapter
|
||||||
|
|
||||||
|
dialogBinding.swipeRefreshLayout.setOnRefreshListener {
|
||||||
|
refreshWifiList(dialogBinding)
|
||||||
|
}
|
||||||
|
|
||||||
|
dialogBinding.rvWifiList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||||
|
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy)
|
||||||
|
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
|
||||||
|
val lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition()
|
||||||
|
val totalItemCount = layoutManager.itemCount
|
||||||
|
|
||||||
|
if (lastVisibleItemPosition == totalItemCount - 1 && dy > 0 && !isLoadingMore && totalItemCount > 0) {
|
||||||
|
loadMoreWifiList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getScreenHeight(): Int {
|
||||||
|
val rect = Rect()
|
||||||
|
window.decorView.getWindowVisibleDisplayFrame(rect)
|
||||||
|
return rect.height()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun refreshWifiList(dialogBinding: DialogWifiListBinding) {
|
||||||
|
dialogBinding.swipeRefreshLayout.isRefreshing = true
|
||||||
|
handler.postDelayed({
|
||||||
|
wifiManager.startScan()
|
||||||
|
val newWifiList = getWifiList()
|
||||||
|
wifiListAdapter?.updateData(newWifiList)
|
||||||
|
dialogBinding.swipeRefreshLayout.isRefreshing = false
|
||||||
|
}, 1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun loadMoreWifiList() {
|
||||||
|
isLoadingMore = true
|
||||||
|
handler.postDelayed({
|
||||||
|
wifiManager.startScan()
|
||||||
|
val newWifiList = getWifiList()
|
||||||
|
wifiListAdapter?.addData(newWifiList)
|
||||||
|
isLoadingMore = false
|
||||||
|
}, 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateBottomButtonVisibility() {
|
private fun updateBottomButtonVisibility() {
|
||||||
@@ -315,31 +224,19 @@ class AddFamilyActivity : AppCompatActivity() {
|
|||||||
super.onStop()
|
super.onStop()
|
||||||
unregisterReceiver(wifiScanReceiver)
|
unregisterReceiver(wifiScanReceiver)
|
||||||
popupWindow?.dismiss()
|
popupWindow?.dismiss()
|
||||||
networkCallback?.let {
|
|
||||||
try {
|
|
||||||
connectivityManager.unregisterNetworkCallback(it)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
networkCallback = null
|
|
||||||
handler.removeCallbacksAndMessages(null)
|
handler.removeCallbacksAndMessages(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||||
when (requestCode) {
|
when (requestCode) {
|
||||||
1002 -> {
|
1001 -> {
|
||||||
if (grantResults.isNotEmpty() &&
|
if (grantResults.isNotEmpty() &&
|
||||||
grantResults.size >= 3 &&
|
grantResults.size >= 2 &&
|
||||||
grantResults[0] == PackageManager.PERMISSION_GRANTED &&
|
grantResults[0] == PackageManager.PERMISSION_GRANTED &&
|
||||||
grantResults[1] == PackageManager.PERMISSION_GRANTED &&
|
grantResults[1] == PackageManager.PERMISSION_GRANTED) {
|
||||||
grantResults[2] == PackageManager.PERMISSION_GRANTED) {
|
showWifiListDialog()
|
||||||
val wifiName = binding.etWifiName.text.toString().trim()
|
|
||||||
val wifiPassword = binding.etWifiPassword.text.toString()
|
|
||||||
verifyWifiPassword(wifiName, wifiPassword)
|
|
||||||
} else {
|
} else {
|
||||||
isConnecting = false
|
|
||||||
binding.btnConfirm.isEnabled = true
|
|
||||||
Toast.makeText(this, R.string.permission_denied, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.permission_denied, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,7 +97,12 @@ class ConnectDeviceActivity : AppCompatActivity() {
|
|||||||
// 跳转到下一个界面或关闭当前页面
|
// 跳转到下一个界面或关闭当前页面
|
||||||
// 使用 Handler 延迟跳转
|
// 使用 Handler 延迟跳转
|
||||||
Handler(Looper.getMainLooper()).postDelayed({
|
Handler(Looper.getMainLooper()).postDelayed({
|
||||||
startActivity(Intent(this, SetNameActivity::class.java))
|
val wifiName = intent.getStringExtra("wifi_name") ?: ""
|
||||||
|
val wifiPassword = intent.getStringExtra("wifi_password") ?: ""
|
||||||
|
startActivity(Intent(this, SetNameActivity::class.java).apply {
|
||||||
|
putExtra("wifi_name", wifiName)
|
||||||
|
putExtra("wifi_password", wifiPassword)
|
||||||
|
})
|
||||||
finish()
|
finish()
|
||||||
}, 1000) // 1秒后跳转
|
}, 1000) // 1秒后跳转
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,9 +8,12 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
|
import com.example.defenseapplication.bean.UserInfoBean
|
||||||
import com.example.defenseapplication.databinding.PersonalFragmentBinding
|
import com.example.defenseapplication.databinding.PersonalFragmentBinding
|
||||||
import com.example.defenseapplication.liveVideo.LinkedUserActivity
|
import com.example.defenseapplication.liveVideo.LinkedUserActivity
|
||||||
|
import com.example.defenseapplication.personal.FaceManagementActivity
|
||||||
import com.example.defenseapplication.personal.PasswordManagementActivity
|
import com.example.defenseapplication.personal.PasswordManagementActivity
|
||||||
import com.example.defenseapplication.personal.PersonalProfileActivity
|
import com.example.defenseapplication.personal.PersonalProfileActivity
|
||||||
import com.example.defenseapplication.utils.LanguageUtil
|
import com.example.defenseapplication.utils.LanguageUtil
|
||||||
@@ -44,9 +47,26 @@ class PersonalFragment : Fragment() {
|
|||||||
.circleCrop()
|
.circleCrop()
|
||||||
.into(binding.ivAvatar)
|
.into(binding.ivAvatar)
|
||||||
binding.headerLayout.setOnClickListener {
|
binding.headerLayout.setOnClickListener {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().getUserInfo()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200 && response.data != null) {
|
||||||
|
val intent = Intent(requireContext(), PersonalProfileActivity::class.java)
|
||||||
|
intent.putExtra("userInfo", response.data)
|
||||||
|
startActivity(intent)
|
||||||
|
} else {
|
||||||
val intent = Intent(requireContext(), PersonalProfileActivity::class.java)
|
val intent = Intent(requireContext(), PersonalProfileActivity::class.java)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
val intent = Intent(requireContext(), PersonalProfileActivity::class.java)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// 更新当前语言显示
|
// 更新当前语言显示
|
||||||
updateCurrentLanguageDisplay()
|
updateCurrentLanguageDisplay()
|
||||||
// 语言设置点击事件
|
// 语言设置点击事件
|
||||||
@@ -68,6 +88,35 @@ class PersonalFragment : Fragment() {
|
|||||||
val intent= Intent(requireContext(), PasswordManagementActivity::class.java)
|
val intent= Intent(requireContext(), PasswordManagementActivity::class.java)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
|
//人脸管理点击事件跳转人脸管理页面
|
||||||
|
binding.itemFaceManage.setOnClickListener {
|
||||||
|
val intent= Intent(requireContext(), FaceManagementActivity::class.java)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
// 退出登录点击事件
|
||||||
|
binding.btnLogout.setOnClickListener {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().logout()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
UserinfoUtil.clearUserInfo()
|
||||||
|
val intent = Intent(requireContext(), com.example.defenseapplication.login.LoginActivity::class.java)
|
||||||
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||||
|
startActivity(intent)
|
||||||
|
requireActivity().finish()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(requireContext(), getString(R.string.logout_fail), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(requireContext(), getString(R.string.logout_fail), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
fetchCurrentFamily()
|
fetchCurrentFamily()
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
@@ -157,6 +206,53 @@ class PersonalFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
fetchUserInfo()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fetchUserInfo() {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().getUserInfo()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200 && response.data != null) {
|
||||||
|
updateUserUI(response.data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateUserUI(userInfo: UserInfoBean) {
|
||||||
|
userInfo.nickName?.let {
|
||||||
|
binding.tvNickname.text = it
|
||||||
|
}
|
||||||
|
userInfo.phonenumber?.let {
|
||||||
|
binding.tvPhone.text = it
|
||||||
|
}
|
||||||
|
userInfo.avatar?.let {
|
||||||
|
val requestOptions = RequestOptions()
|
||||||
|
.placeholder(R.drawable.img) // 加载中显示
|
||||||
|
.error(R.drawable.img) // 失败时显示
|
||||||
|
|
||||||
|
Glide.with(this)
|
||||||
|
.load(it) // 如果 avatar 为 null,Glide 会直接回调 error
|
||||||
|
.apply(requestOptions)
|
||||||
|
.circleCrop()
|
||||||
|
.into(binding.ivAvatar)
|
||||||
|
}
|
||||||
|
userInfo.role?.let {
|
||||||
|
binding.tvRoleTag.text = if (it == "appadmin") {
|
||||||
|
getString(R.string.admin)
|
||||||
|
} else {
|
||||||
|
getString(R.string.member)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
_binding = null // 避免内存泄漏
|
_binding = null // 避免内存泄漏
|
||||||
|
|||||||
@@ -2,14 +2,24 @@ package com.example.defenseapplication.home
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import com.example.defenseapplication.bean.AddDeviceBean
|
||||||
|
import com.example.defenseapplication.bean.DeviceBean
|
||||||
import com.example.defenseapplication.databinding.SetNameActivityBinding
|
import com.example.defenseapplication.databinding.SetNameActivityBinding
|
||||||
import com.example.defenseapplication.liveVideo.LiveVideoActivity
|
import com.example.defenseapplication.liveVideo.LiveVideoActivity
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
//设置名字页面
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
class SetNameActivity : AppCompatActivity() {
|
class SetNameActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private lateinit var binding: SetNameActivityBinding
|
private lateinit var binding: SetNameActivityBinding
|
||||||
|
private var wifiName: String = ""
|
||||||
|
private var wifiPassword: String = ""
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -19,12 +29,49 @@ class SetNameActivity : AppCompatActivity() {
|
|||||||
.statusBarDarkFont(true)
|
.statusBarDarkFont(true)
|
||||||
.titleBar(binding.topBar)
|
.titleBar(binding.topBar)
|
||||||
.init()
|
.init()
|
||||||
|
|
||||||
|
// 获取传递的 WiFi 名称和密码
|
||||||
|
wifiName = intent.getStringExtra("wifi_name") ?: ""
|
||||||
|
wifiPassword = intent.getStringExtra("wifi_password") ?: ""
|
||||||
|
|
||||||
binding.ivBack.setOnClickListener {
|
binding.ivBack.setOnClickListener {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnConfirm.setOnClickListener {
|
binding.btnConfirm.setOnClickListener {
|
||||||
val deviceName = binding.etName.text.toString().trim()
|
val deviceName = binding.etName.text.toString().trim()
|
||||||
startActivity(Intent(this, LiveVideoActivity::class.java).apply {})
|
if (deviceName.isEmpty()) {
|
||||||
|
Toast.makeText(this, "请输入设备名称", Toast.LENGTH_SHORT).show()
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
addDevice(deviceName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addDevice(deviceName: String) {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val deviceBean = AddDeviceBean(
|
||||||
|
deviceName = deviceName,
|
||||||
|
wifiName = wifiName,
|
||||||
|
wifiPassword = wifiPassword,
|
||||||
|
status = "0"
|
||||||
|
)
|
||||||
|
val result = RetrofitNetwork.getNetworkService().addDevice(deviceBean)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (result.code == 200) {
|
||||||
|
Toast.makeText(this@SetNameActivity, "设备添加成功", Toast.LENGTH_SHORT).show()
|
||||||
|
startActivity(Intent(this@SetNameActivity, LiveVideoActivity::class.java))
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@SetNameActivity, result.msg ?: "添加失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@SetNameActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,16 +3,28 @@ package com.example.defenseapplication.liveVideo
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.adapter.AddLinkedUserAdapter
|
import com.example.defenseapplication.adapter.AddLinkedUserAdapter
|
||||||
import com.example.defenseapplication.adapter.UserItem
|
import com.example.defenseapplication.adapter.UserItem
|
||||||
|
import com.example.defenseapplication.bean.AddDeviceUserRequest
|
||||||
|
import com.example.defenseapplication.bean.FamilyMembersBean
|
||||||
import com.example.defenseapplication.databinding.AddLinkedUserActivityBinding
|
import com.example.defenseapplication.databinding.AddLinkedUserActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.DeviceIdEvent
|
||||||
|
import com.example.defenseapplication.utils.DeviceUserUpdateEvent
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
//添加关联用户
|
//添加关联用户
|
||||||
class AddLinkedUserActivity : AppCompatActivity() {
|
class AddLinkedUserActivity : AppCompatActivity() {
|
||||||
private lateinit var binding: AddLinkedUserActivityBinding
|
private lateinit var binding: AddLinkedUserActivityBinding
|
||||||
private val selectedPhoneSet = mutableSetOf<String>()
|
private val selectedPhoneSet = mutableSetOf<String>()
|
||||||
|
private val userItemList = mutableListOf<UserItem>()
|
||||||
|
private val selectedUserIdMap = mutableMapOf<String, String>()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -26,23 +38,85 @@ class AddLinkedUserActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initListener()
|
initListener()
|
||||||
|
setupSwipeRefresh()
|
||||||
|
fetchFamilyMembers()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupSwipeRefresh() {
|
||||||
|
binding.swipeRefresh.setOnRefreshListener {
|
||||||
|
fetchFamilyMembers()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initRecyclerView() {
|
private fun initRecyclerView() {
|
||||||
val mockData = listOf(
|
|
||||||
UserItem("王五", "13566666666"),
|
|
||||||
UserItem("赵六", "15733333333")
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.rvAddLinkedUser.layoutManager = LinearLayoutManager(this)
|
binding.rvAddLinkedUser.layoutManager = LinearLayoutManager(this)
|
||||||
binding.rvAddLinkedUser.adapter =
|
binding.rvAddLinkedUser.adapter =
|
||||||
AddLinkedUserAdapter(mockData, selectedPhoneSet) { phone, isChecked ->
|
AddLinkedUserAdapter(userItemList, selectedPhoneSet, selectedUserIdMap) { phone, isChecked, userId ->
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
selectedPhoneSet.add(phone)
|
selectedPhoneSet.add(phone)
|
||||||
|
userId?.let { selectedUserIdMap[phone] = it }
|
||||||
} else {
|
} else {
|
||||||
selectedPhoneSet.remove(phone)
|
selectedPhoneSet.remove(phone)
|
||||||
|
selectedUserIdMap.remove(phone)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 设置上拉加载更多
|
||||||
|
binding.rvAddLinkedUser.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||||
|
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy)
|
||||||
|
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
|
||||||
|
val totalItemCount = layoutManager.itemCount
|
||||||
|
val lastVisibleItem = layoutManager.findLastVisibleItemPosition()
|
||||||
|
if (totalItemCount > 0 && lastVisibleItem >= totalItemCount - 3) {
|
||||||
|
// 滑到底部时自动刷新(加载更多)
|
||||||
|
if (!binding.swipeRefresh.isRefreshing) {
|
||||||
|
fetchFamilyMembers()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fetchFamilyMembers() {
|
||||||
|
binding.swipeRefresh.isRefreshing = true
|
||||||
|
lifecycleScope.launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().getFamilyMembers()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.swipeRefresh.isRefreshing = false
|
||||||
|
if (response.code == 200) {
|
||||||
|
if (response.data != null && response.data.isNotEmpty()) {
|
||||||
|
updateFamilyMemberList(response.data)
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@AddLinkedUserActivity, "暂无家庭成员数据", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@AddLinkedUserActivity, "请求失败: ${response.msg}", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
android.util.Log.e("AddLinkedUserActivity", "网络请求异常", e)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.swipeRefresh.isRefreshing = false
|
||||||
|
Toast.makeText(this@AddLinkedUserActivity, "网络请求失败: ${e.message}", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateFamilyMemberList(familyMembersList: List<FamilyMembersBean>) {
|
||||||
|
userItemList.clear()
|
||||||
|
familyMembersList.forEach { member ->
|
||||||
|
userItemList.add(
|
||||||
|
UserItem(
|
||||||
|
name = member.nickName ?: member.parentName ?: "未知用户",
|
||||||
|
phone = member.phonenumber ?: "",
|
||||||
|
userId = member.userId ?: ""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
binding.rvAddLinkedUser.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initListener() {
|
private fun initListener() {
|
||||||
@@ -50,12 +124,52 @@ class AddLinkedUserActivity : AppCompatActivity() {
|
|||||||
if (selectedPhoneSet.isEmpty()) {
|
if (selectedPhoneSet.isEmpty()) {
|
||||||
Toast.makeText(this, getString(R.string.please_select_at_least_one_user), Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, getString(R.string.please_select_at_least_one_user), Toast.LENGTH_SHORT).show()
|
||||||
} else {
|
} else {
|
||||||
val message = getString(R.string.selected_users_voice, selectedPhoneSet.size)
|
addDeviceUser()
|
||||||
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.ivBack.setOnClickListener {
|
binding.ivBack.setOnClickListener {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun addDeviceUser() {
|
||||||
|
val deviceId = DeviceIdEvent.getDeviceId()
|
||||||
|
if (deviceId.isNullOrEmpty()) {
|
||||||
|
Toast.makeText(this, "设备ID为空", Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
var successCount = 0
|
||||||
|
for ((phone, userId) in selectedUserIdMap) {
|
||||||
|
try {
|
||||||
|
val request = AddDeviceUserRequest(
|
||||||
|
deviceId = deviceId,
|
||||||
|
userId = userId
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().addDeviceUser(request)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
successCount++
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@AddLinkedUserActivity, "添加用户 $phone 失败: ${response.msg}", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@AddLinkedUserActivity, "添加用户 $phone 失败: 网络错误", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (successCount > 0) {
|
||||||
|
Toast.makeText(this@AddLinkedUserActivity, "成功添加 $successCount 个用户", Toast.LENGTH_SHORT).show()
|
||||||
|
DeviceUserUpdateEvent.notifyUpdate()
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,28 +2,42 @@ package com.example.defenseapplication.liveVideo
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.Editable
|
||||||
|
import android.text.TextWatcher
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.adapter.LinkedUser
|
import com.example.defenseapplication.adapter.LinkedUser
|
||||||
import com.example.defenseapplication.adapter.LinkedUserAdapter
|
import com.example.defenseapplication.adapter.LinkedUserAdapter
|
||||||
|
import com.example.defenseapplication.bean.DeleteDeviceUserRequest
|
||||||
|
import com.example.defenseapplication.bean.DeviceUserBean
|
||||||
|
import com.example.defenseapplication.bean.FamilyMembersBean
|
||||||
import com.example.defenseapplication.databinding.LinkedUserActivityBinding
|
import com.example.defenseapplication.databinding.LinkedUserActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.DeviceIdEvent
|
||||||
|
import com.example.defenseapplication.utils.DeviceUserUpdateEvent
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.example.defenseapplication.view.CustomDialogFragmentText
|
import com.example.defenseapplication.view.CustomDialogFragmentText
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
//关联用户页面
|
import com.yanzhenjie.recyclerview.SwipeMenuItem
|
||||||
|
import com.yanzhenjie.recyclerview.SwipeRecyclerView
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
//关联用户
|
||||||
class LinkedUserActivity : AppCompatActivity() {
|
class LinkedUserActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private lateinit var binding: LinkedUserActivityBinding
|
private lateinit var binding: LinkedUserActivityBinding
|
||||||
private lateinit var adapter: LinkedUserAdapter
|
private lateinit var adapter: LinkedUserAdapter
|
||||||
|
private val fullUserList = mutableListOf<LinkedUser>()
|
||||||
private val userList = mutableListOf<LinkedUser>()
|
private val userList = mutableListOf<LinkedUser>()
|
||||||
private var mode: Int = MODE_SETTINGS
|
private var mode: Int = MODE_SETTINGS
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val REQUEST_CODE_SEARCH = 1001
|
|
||||||
const val EXTRA_SEARCH_RESULT = "search_result"
|
|
||||||
const val EXTRA_MODE = "extra_mode"
|
const val EXTRA_MODE = "extra_mode"
|
||||||
const val MODE_SETTINGS = 0
|
const val MODE_SETTINGS = 0
|
||||||
const val MODE_PERSONAL = 1
|
const val MODE_PERSONAL = 1
|
||||||
@@ -45,101 +59,72 @@ class LinkedUserActivity : AppCompatActivity() {
|
|||||||
initData()
|
initData()
|
||||||
initListener()
|
initListener()
|
||||||
setupModeUI()
|
setupModeUI()
|
||||||
|
DeviceUserUpdateEvent.addListener(deviceUserUpdateListener)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val deviceUserUpdateListener = object : DeviceUserUpdateEvent.DeviceUserUpdateListener {
|
||||||
|
override fun onDeviceUserUpdated() {
|
||||||
|
fetchUserList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
super.onDestroy()
|
||||||
|
DeviceUserUpdateEvent.removeListener(deviceUserUpdateListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initView() {
|
private fun initView() {
|
||||||
val deleteText = if (mode == MODE_SETTINGS) getString(R.string.unlink) else getString(R.string.delete)
|
|
||||||
adapter = LinkedUserAdapter(
|
adapter = LinkedUserAdapter(
|
||||||
deleteText = deleteText,
|
isUnlinkMode = mode == MODE_SETTINGS,
|
||||||
onItemClick = { user, position ->
|
onItemClick = { user, position ->
|
||||||
val intent = Intent(this, UserDetailsActivity::class.java).apply {
|
val intent = Intent(this, UserDetailsActivity::class.java).apply {
|
||||||
putExtra("name", user.name)
|
putExtra("userId", user.userId)
|
||||||
putExtra("phone", user.phone)
|
putExtra("deleteText", if (mode == MODE_SETTINGS) getString(R.string.unlink) else getString(R.string.delete))
|
||||||
putExtra("idCard", user.idCard)
|
putExtra("isUnlinkMode", mode == MODE_SETTINGS)
|
||||||
putExtra("time", user.time)
|
|
||||||
}
|
}
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
},
|
|
||||||
onDeleteClick = { user, position ->
|
|
||||||
showUnlinkDialog(user, position)
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
binding.rvLinkedUser.layoutManager = LinearLayoutManager(this)
|
|
||||||
binding.rvLinkedUser.adapter = adapter
|
|
||||||
|
|
||||||
val swipeThreshold = -300f
|
(binding.rvLinkedUser as RecyclerView).layoutManager = LinearLayoutManager(this)
|
||||||
val heldPositions = mutableMapOf<Int, Boolean>()
|
|
||||||
|
|
||||||
val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
|
binding.swipeRefresh.setOnRefreshListener {
|
||||||
override fun onMove(
|
fetchUserList()
|
||||||
recyclerView: RecyclerView,
|
|
||||||
viewHolder: RecyclerView.ViewHolder,
|
|
||||||
target: RecyclerView.ViewHolder
|
|
||||||
): Boolean = false
|
|
||||||
|
|
||||||
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onChildDraw(
|
binding.rvLinkedUser.setSwipeMenuCreator { leftMenu, rightMenu, position ->
|
||||||
c: android.graphics.Canvas,
|
if (mode == MODE_SETTINGS) {
|
||||||
recyclerView: RecyclerView,
|
val unlinkItem = SwipeMenuItem(this@LinkedUserActivity).apply {
|
||||||
viewHolder: RecyclerView.ViewHolder,
|
setText(getString(R.string.unlink))
|
||||||
dX: Float,
|
setBackgroundColor(getColor(R.color.red))
|
||||||
dY: Float,
|
setTextColor(getColor(R.color.white))
|
||||||
actionState: Int,
|
width = 200
|
||||||
isCurrentlyActive: Boolean
|
height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
) {
|
}
|
||||||
if (viewHolder is LinkedUserAdapter.LinkedUserViewHolder) {
|
rightMenu.addMenuItem(unlinkItem)
|
||||||
val contentLayout = viewHolder.getContentLayout()
|
|
||||||
val position = viewHolder.adapterPosition
|
|
||||||
|
|
||||||
if (isCurrentlyActive) {
|
|
||||||
val swipeDistance = if (dX < swipeThreshold) swipeThreshold else dX
|
|
||||||
contentLayout.translationX = swipeDistance
|
|
||||||
} else {
|
} else {
|
||||||
val isHeld = heldPositions[position]
|
val deleteItem = SwipeMenuItem(this@LinkedUserActivity).apply {
|
||||||
if (isHeld == true) {
|
setText(getString(R.string.delete))
|
||||||
contentLayout.translationX = swipeThreshold
|
setBackgroundColor(getColor(R.color.red))
|
||||||
}
|
setTextColor(getColor(R.color.white))
|
||||||
|
width = 200
|
||||||
|
height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
}
|
}
|
||||||
|
rightMenu.addMenuItem(deleteItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
binding.rvLinkedUser.setOnItemMenuClickListener { _, position ->
|
||||||
- 滑动超过一半后松手:列表项 保持在滑动位置 ,显示"解除关联"按钮
|
// 直接关闭菜单(使用 RecyclerView 的方法)
|
||||||
- 滑动未超过一半松手:列表项 恢复原位
|
binding.rvLinkedUser.smoothCloseMenu() // 或 closeMenu()
|
||||||
* */
|
val user = userList[position]
|
||||||
override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
|
showDeleteDialog(user, position)
|
||||||
super.clearView(recyclerView, viewHolder)
|
|
||||||
if (viewHolder is LinkedUserAdapter.LinkedUserViewHolder) {
|
|
||||||
val position = viewHolder.adapterPosition
|
|
||||||
val contentLayout = viewHolder.getContentLayout()
|
|
||||||
|
|
||||||
if (contentLayout.translationX < swipeThreshold / 2) {
|
|
||||||
heldPositions[position] = true
|
|
||||||
contentLayout.translationX = swipeThreshold
|
|
||||||
} else {
|
|
||||||
heldPositions.remove(position)
|
|
||||||
contentLayout.animate()
|
|
||||||
.translationX(0f)
|
|
||||||
.setDuration(300)
|
|
||||||
.start()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSwipeThreshold(viewHolder: RecyclerView.ViewHolder): Float = 0.05f
|
(binding.rvLinkedUser as RecyclerView).adapter = adapter
|
||||||
})
|
|
||||||
itemTouchHelper.attachToRecyclerView(binding.rvLinkedUser)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private var currentSwipePosition: Int = -1
|
private fun showDeleteDialog(user: LinkedUser, position: Int) {
|
||||||
private var currentSwipeHeld: Boolean = false
|
|
||||||
|
|
||||||
private fun showUnlinkDialog(user: LinkedUser, position: Int) {
|
|
||||||
currentSwipePosition = position
|
|
||||||
currentSwipeHeld = true
|
|
||||||
|
|
||||||
val dialog = CustomDialogFragmentText()
|
val dialog = CustomDialogFragmentText()
|
||||||
if (mode == MODE_SETTINGS) {
|
if (mode == MODE_SETTINGS) {
|
||||||
dialog.setTitle(getString(R.string.tip))
|
dialog.setTitle(getString(R.string.tip))
|
||||||
@@ -149,40 +134,134 @@ class LinkedUserActivity : AppCompatActivity() {
|
|||||||
dialog.setMessage(getString(R.string.confirm_delete_user))
|
dialog.setMessage(getString(R.string.confirm_delete_user))
|
||||||
}
|
}
|
||||||
dialog.setShowInput(false)
|
dialog.setShowInput(false)
|
||||||
dialog.setPositiveText(getString(R.string.confirm))
|
|
||||||
dialog.setNegativeText(getString(R.string.cancel))
|
|
||||||
dialog.setOnConfirmListener {
|
dialog.setOnConfirmListener {
|
||||||
userList.removeAt(position)
|
deleteDeviceUser(user, position)
|
||||||
adapter.removeItem(position)
|
|
||||||
resetSwipeState()
|
|
||||||
}
|
}
|
||||||
dialog.setOnDismissListener {
|
dialog.show(supportFragmentManager, "DeleteDialog")
|
||||||
resetSwipeState()
|
|
||||||
}
|
|
||||||
dialog.show(supportFragmentManager, "UnlinkDialog")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resetSwipeState() {
|
private fun deleteDeviceUser(user: LinkedUser, position: Int) {
|
||||||
if (currentSwipePosition >= 0 && currentSwipeHeld) {
|
val deviceId = DeviceIdEvent.getDeviceId()
|
||||||
binding.rvLinkedUser.post {
|
if (deviceId.isNullOrEmpty() || user.userId.isEmpty()) {
|
||||||
val viewHolder = binding.rvLinkedUser.findViewHolderForAdapterPosition(currentSwipePosition)
|
Toast.makeText(this, "参数错误", Toast.LENGTH_SHORT).show()
|
||||||
if (viewHolder is LinkedUserAdapter.LinkedUserViewHolder) {
|
return
|
||||||
viewHolder.getContentLayout().animate()
|
}
|
||||||
.translationX(0f)
|
|
||||||
.setDuration(300)
|
lifecycleScope.launch {
|
||||||
.start()
|
try {
|
||||||
|
val request = DeleteDeviceUserRequest(
|
||||||
|
userId = user.userId,
|
||||||
|
deviceId = deviceId
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().deleteDeviceUser(request)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
userList.removeAt(position)
|
||||||
|
adapter.notifyItemRemoved(position) // 通知删除动画
|
||||||
|
adapter.notifyItemRangeChanged(position, userList.size - position) // 更新后续位置索引
|
||||||
|
Toast.makeText(this@LinkedUserActivity, "删除成功", Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@LinkedUserActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@LinkedUserActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
currentSwipePosition = -1
|
|
||||||
currentSwipeHeld = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initData() {
|
private fun initData() {
|
||||||
|
fetchUserList()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fetchUserList() {
|
||||||
|
binding.swipeRefresh.isRefreshing = true
|
||||||
|
lifecycleScope.launch {
|
||||||
|
try {
|
||||||
|
var deviceId: String? = null
|
||||||
|
if (mode == MODE_SETTINGS) {
|
||||||
|
deviceId = DeviceIdEvent.getDeviceId()
|
||||||
|
if (deviceId.isNullOrEmpty()) {
|
||||||
|
Toast.makeText(this@LinkedUserActivity, "设备 ID 为空", Toast.LENGTH_SHORT).show()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.swipeRefresh.isRefreshing = false
|
||||||
|
}
|
||||||
|
return@launch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val response = if (mode == MODE_SETTINGS) {
|
||||||
|
RetrofitNetwork.getNetworkService().getDeviceUserList(deviceId!!)
|
||||||
|
} else {
|
||||||
|
RetrofitNetwork.getNetworkService().getFamilyMembers()
|
||||||
|
}
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.swipeRefresh.isRefreshing = false
|
||||||
|
if (response.code == 200 && response.data != null) {
|
||||||
|
if (mode == MODE_SETTINGS) {
|
||||||
|
updateDeviceUserList(response.data as List<DeviceUserBean>)
|
||||||
|
} else {
|
||||||
|
updateFamilyMembersList(response.data as List<FamilyMembersBean>)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@LinkedUserActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.swipeRefresh.isRefreshing = false
|
||||||
|
Toast.makeText(this@LinkedUserActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateDeviceUserList(deviceUserList: List<DeviceUserBean>) {
|
||||||
|
fullUserList.clear()
|
||||||
|
deviceUserList.forEach { deviceUser ->
|
||||||
|
fullUserList.add(
|
||||||
|
LinkedUser(
|
||||||
|
userId = deviceUser.userId ?: "",
|
||||||
|
name = deviceUser.nickName ?: "未知用户",
|
||||||
|
phone = deviceUser.phonenumber ?: "",
|
||||||
|
idCard = deviceUser.idCard ?: "",
|
||||||
|
time = deviceUser.createTime ?: ""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
filterUsers(binding.etSearch.text?.toString() ?: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateFamilyMembersList(familyMembersList: List<FamilyMembersBean>) {
|
||||||
|
fullUserList.clear()
|
||||||
|
familyMembersList.forEach { member ->
|
||||||
|
fullUserList.add(
|
||||||
|
LinkedUser(
|
||||||
|
userId = member.userId ?: "",
|
||||||
|
name = member.nickName ?: member.parentName ?: "未知用户",
|
||||||
|
phone = member.phonenumber ?: "",
|
||||||
|
idCard = member.idCard ?: "",
|
||||||
|
time = member.createTime ?: ""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
filterUsers(binding.etSearch.text?.toString() ?: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun filterUsers(keyword: String) {
|
||||||
userList.clear()
|
userList.clear()
|
||||||
userList.add(LinkedUser("张三", "12388888888", "123456789012345678", "2026-05-06 16:03:26"))
|
if (keyword.isEmpty()) {
|
||||||
userList.add(LinkedUser("李四", "13899999999", "987654321098765432", "2026-05-05 14:20:15"))
|
userList.addAll(fullUserList)
|
||||||
userList.add(LinkedUser("王五", "15977777777", "456123789012345678", "2026-05-04 10:15:30"))
|
} else {
|
||||||
|
val lowerKeyword = keyword.lowercase()
|
||||||
|
fullUserList.filter {
|
||||||
|
it.name.lowercase().contains(lowerKeyword) ||
|
||||||
|
it.phone.contains(keyword)
|
||||||
|
}.forEach { userList.add(it) }
|
||||||
|
}
|
||||||
adapter.submitList(userList)
|
adapter.submitList(userList)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,10 +270,13 @@ class LinkedUserActivity : AppCompatActivity() {
|
|||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.searchLayout.setOnClickListener {
|
binding.etSearch.addTextChangedListener(object : TextWatcher {
|
||||||
val intent = Intent(this, LinkedUserSearchActivity::class.java)
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||||
startActivityForResult(intent, REQUEST_CODE_SEARCH)
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
||||||
|
override fun afterTextChanged(s: Editable?) {
|
||||||
|
filterUsers(s?.toString() ?: "")
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
binding.btnAddLinkedUser.setOnClickListener {
|
binding.btnAddLinkedUser.setOnClickListener {
|
||||||
val intent = Intent(this, AddLinkedUserActivity::class.java)
|
val intent = Intent(this, AddLinkedUserActivity::class.java)
|
||||||
@@ -219,17 +301,5 @@ class LinkedUserActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
if (requestCode == REQUEST_CODE_SEARCH && resultCode == RESULT_OK) {
|
|
||||||
data?.getStringExtra(EXTRA_SEARCH_RESULT)?.let { result ->
|
|
||||||
val newUser = LinkedUser(
|
|
||||||
name = result,
|
|
||||||
phone = "13800000000",
|
|
||||||
idCard = "110101199001011234",
|
|
||||||
time = "2026-05-10 ${android.text.format.DateFormat.format("HH:mm:ss", System.currentTimeMillis())}"
|
|
||||||
)
|
|
||||||
userList.add(0, newUser)
|
|
||||||
adapter.submitList(userList)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
package com.example.defenseapplication.liveVideo
|
|
||||||
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
|
||||||
import com.example.defenseapplication.databinding.LinkedUserSearchActivityBinding
|
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
|
||||||
|
|
||||||
//搜索
|
|
||||||
class LinkedUserSearchActivity : AppCompatActivity() {
|
|
||||||
|
|
||||||
private lateinit var binding: LinkedUserSearchActivityBinding
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
binding = LinkedUserSearchActivityBinding.inflate(layoutInflater)
|
|
||||||
setContentView(binding.root)
|
|
||||||
|
|
||||||
ImmersionBar.with(this)
|
|
||||||
.statusBarDarkFont(true)
|
|
||||||
.titleBar(binding.topBar)
|
|
||||||
.init()
|
|
||||||
|
|
||||||
initListener()
|
|
||||||
initData()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun initListener() {
|
|
||||||
binding.ivBack.setOnClickListener {
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.btnSearch.setOnClickListener {
|
|
||||||
initData()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun initData() {
|
|
||||||
val searchText = binding.etSearch.text.toString().trim()
|
|
||||||
|
|
||||||
binding.rvSearchResult.layoutManager = LinearLayoutManager(this)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,8 +4,10 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.base.BaseActivity
|
import com.example.defenseapplication.base.BaseActivity
|
||||||
|
import com.example.defenseapplication.bean.DeviceUserBean
|
||||||
import com.example.defenseapplication.databinding.SettingsActivityBinding
|
import com.example.defenseapplication.databinding.SettingsActivityBinding
|
||||||
import com.example.defenseapplication.utils.DeviceIdEvent
|
import com.example.defenseapplication.utils.DeviceIdEvent
|
||||||
import com.example.defenseapplication.utils.LanguageUtil
|
import com.example.defenseapplication.utils.LanguageUtil
|
||||||
@@ -22,8 +24,6 @@ import kotlinx.coroutines.withContext
|
|||||||
class SettingsActivity : BaseActivity() {
|
class SettingsActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: SettingsActivityBinding
|
private lateinit var binding: SettingsActivityBinding
|
||||||
private val SP_NAME = "DeviceSettings"
|
|
||||||
private val KEY_RECOGNITION_MODE = "recognition_mode"
|
|
||||||
private var alertAudio: String? = null
|
private var alertAudio: String? = null
|
||||||
private var audioContent: String? = null
|
private var audioContent: String? = null
|
||||||
|
|
||||||
@@ -76,13 +76,49 @@ class SettingsActivity : BaseActivity() {
|
|||||||
.setPositiveText(getString(R.string.confirm))
|
.setPositiveText(getString(R.string.confirm))
|
||||||
.setShowInput(false)
|
.setShowInput(false)
|
||||||
dialog.setOnConfirmListener {
|
dialog.setOnConfirmListener {
|
||||||
finish()
|
unbindDevice()
|
||||||
}
|
}
|
||||||
dialog.show(supportFragmentManager, "CustomDialogFragment")
|
dialog.show(supportFragmentManager, "CustomDialogFragment")
|
||||||
}
|
}
|
||||||
binding.itemWaterGunSetting.setOnClickListener {
|
binding.itemWaterGunSetting.setOnClickListener {
|
||||||
val intent = Intent(this, WaterGunSettingsActivity::class.java)
|
val intent = Intent(this, WaterGunSettingsActivity::class.java)
|
||||||
|
// 传递水枪设置参数
|
||||||
|
val deviceId = DeviceIdEvent.getDeviceId()
|
||||||
|
if (!deviceId.isNullOrEmpty()) {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().getDeviceInfo(deviceId)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200 && response.data != null) {
|
||||||
|
val device = response.data
|
||||||
|
intent.putExtra("strikeRange", device.strikeRange ?: "7")
|
||||||
|
intent.putExtra("strikeInterval", device.strikeInterval ?: "3")
|
||||||
|
intent.putExtra("container", device.container ?: "容器4")
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
|
} else {
|
||||||
|
// 如果获取失败,使用默认值
|
||||||
|
intent.putExtra("strikeRange", "7")
|
||||||
|
intent.putExtra("strikeInterval", "3")
|
||||||
|
intent.putExtra("container", "容器4")
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
intent.putExtra("strikeRange", "7")
|
||||||
|
intent.putExtra("strikeInterval", "3")
|
||||||
|
intent.putExtra("container", "容器4")
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
intent.putExtra("strikeRange", "7")
|
||||||
|
intent.putExtra("strikeInterval", "3")
|
||||||
|
intent.putExtra("container", "容器4")
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
binding.itemAutoMode.setOnClickListener {
|
binding.itemAutoMode.setOnClickListener {
|
||||||
val intent = Intent(this, AutoModeActivity::class.java)
|
val intent = Intent(this, AutoModeActivity::class.java)
|
||||||
@@ -100,6 +136,7 @@ class SettingsActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
binding.itemWifiManage.setOnClickListener {
|
binding.itemWifiManage.setOnClickListener {
|
||||||
val intent = Intent(this, WiFiManagementActivity::class.java)
|
val intent = Intent(this, WiFiManagementActivity::class.java)
|
||||||
|
intent.putExtra("wifi_name", binding.tvWifiName.text.toString())
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,14 +148,14 @@ class SettingsActivity : BaseActivity() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
lifecycleScope.launch {
|
||||||
try {
|
try {
|
||||||
val response = RetrofitNetwork.getNetworkService().getDeviceInfo(deviceId)
|
val deviceResponse = RetrofitNetwork.getNetworkService().getDeviceInfo(deviceId)
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
if (response.code == 200 && response.data != null) {
|
if (deviceResponse.code == 200 && deviceResponse.data != null) {
|
||||||
updateDeviceInfo(response.data)
|
updateDeviceInfo(deviceResponse.data)
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this@SettingsActivity, response.msg, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this@SettingsActivity, deviceResponse.msg, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@@ -128,6 +165,32 @@ class SettingsActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fetchDeviceUserList()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fetchDeviceUserList() {
|
||||||
|
val deviceId = DeviceIdEvent.getDeviceId()
|
||||||
|
if (deviceId.isNullOrEmpty()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().getDeviceUserList(deviceId)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200 && response.data != null) {
|
||||||
|
updateRelatedUsersCount(response.data.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateRelatedUsersCount(count: Int) {
|
||||||
|
binding.tvRelatedUsers.text = "$count 人"
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateDeviceInfo(device: com.example.defenseapplication.bean.DeviceBean) {
|
private fun updateDeviceInfo(device: com.example.defenseapplication.bean.DeviceBean) {
|
||||||
@@ -243,4 +306,36 @@ class SettingsActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun unbindDevice() {
|
||||||
|
val deviceId = DeviceIdEvent.getDeviceId()
|
||||||
|
if (deviceId.isNullOrEmpty()) {
|
||||||
|
Toast.makeText(this, "设备ID为空", Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val deleteBean = com.example.defenseapplication.bean.DeleteBean()
|
||||||
|
deleteBean.deviceId = deviceId
|
||||||
|
val response = RetrofitNetwork.getNetworkService().deleteDevice(deleteBean)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
Toast.makeText(this@SettingsActivity, "解绑成功", Toast.LENGTH_SHORT).show()
|
||||||
|
val intent = Intent(this@SettingsActivity, com.example.defenseapplication.home.HomeActivity::class.java)
|
||||||
|
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
|
startActivity(intent)
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@SettingsActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@SettingsActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import com.example.defenseapplication.databinding.StrikePositionActivityBinding
|
|||||||
import com.example.defenseapplication.view.CustomDialogFragment
|
import com.example.defenseapplication.view.CustomDialogFragment
|
||||||
import com.example.defenseapplication.view.showDefenseDialog
|
import com.example.defenseapplication.view.showDefenseDialog
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
//打击位置
|
||||||
class StrikePositionActivity : AppCompatActivity() {
|
class StrikePositionActivity : AppCompatActivity() {
|
||||||
private lateinit var binding: StrikePositionActivityBinding
|
private lateinit var binding: StrikePositionActivityBinding
|
||||||
private lateinit var markerLayoutParams: RelativeLayout.LayoutParams
|
private lateinit var markerLayoutParams: RelativeLayout.LayoutParams
|
||||||
|
|||||||
@@ -1,20 +1,28 @@
|
|||||||
package com.example.defenseapplication.liveVideo
|
package com.example.defenseapplication.liveVideo
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
|
import com.example.defenseapplication.bean.DeleteDeviceUserRequest
|
||||||
|
import com.example.defenseapplication.bean.ObtainInviterInformationRequest
|
||||||
|
import com.example.defenseapplication.utils.DeviceIdEvent
|
||||||
|
import com.example.defenseapplication.utils.DeviceUserUpdateEvent
|
||||||
import com.example.defenseapplication.databinding.UserDetailsActivityBinding
|
import com.example.defenseapplication.databinding.UserDetailsActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.example.defenseapplication.view.CustomDialogFragmentText
|
import com.example.defenseapplication.view.CustomDialogFragmentText
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
//用户详情页面
|
//用户详情页面
|
||||||
class UserDetailsActivity : AppCompatActivity() {
|
class UserDetailsActivity : AppCompatActivity() {
|
||||||
private lateinit var binding: UserDetailsActivityBinding
|
private lateinit var binding: UserDetailsActivityBinding
|
||||||
|
|
||||||
private lateinit var userName: String
|
private var userId: String = ""
|
||||||
private lateinit var phone: String
|
|
||||||
private lateinit var idCard: String
|
|
||||||
private lateinit var time: String
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -27,22 +35,45 @@ class UserDetailsActivity : AppCompatActivity() {
|
|||||||
.init()
|
.init()
|
||||||
|
|
||||||
initData()
|
initData()
|
||||||
initView()
|
|
||||||
initListener()
|
initListener()
|
||||||
|
fetchInviterInformation()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initData() {
|
private fun initData() {
|
||||||
userName = intent.getStringExtra("name") ?: ""
|
userId = intent.getStringExtra("userId") ?: ""
|
||||||
phone = intent.getStringExtra("phone") ?: ""
|
|
||||||
idCard = intent.getStringExtra("idCard") ?: ""
|
|
||||||
time = intent.getStringExtra("time") ?: ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initView() {
|
private fun fetchInviterInformation() {
|
||||||
binding.tvContactName.text = userName
|
if (userId.isEmpty()) {
|
||||||
binding.tvPhone.text = phone
|
Toast.makeText(this, "用户ID为空", Toast.LENGTH_SHORT).show()
|
||||||
binding.tvIdCard.text = idCard
|
return
|
||||||
binding.tvMacAddress.text = "AA:BB:CC:DD:EE:FF"
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
try {
|
||||||
|
val request = ObtainInviterInformationRequest(childId = userId)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().obtainInviterInformation(request)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200 && response.data != null) {
|
||||||
|
updateUI(response.data!!)
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@UserDetailsActivity, response.msg ?: "获取信息失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@UserDetailsActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateUI(data: com.example.defenseapplication.bean.ObtainInviterInformationBean) {
|
||||||
|
binding.tvContactName.text = data.nickName ?: "未知用户"
|
||||||
|
binding.tvPhone.text = data.phonenumber ?: ""
|
||||||
|
binding.tvIdCard.text = data.idCard ?: ""
|
||||||
|
binding.tvMacAddress.text = data.mac ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initListener() {
|
private fun initListener() {
|
||||||
@@ -75,13 +106,40 @@ class UserDetailsActivity : AppCompatActivity() {
|
|||||||
dialog.setPositiveText(getString(R.string.confirm))
|
dialog.setPositiveText(getString(R.string.confirm))
|
||||||
dialog.setNegativeText(getString(R.string.cancel))
|
dialog.setNegativeText(getString(R.string.cancel))
|
||||||
dialog.setOnConfirmListener {
|
dialog.setOnConfirmListener {
|
||||||
finish()
|
deleteDeviceUser()
|
||||||
// if(){
|
|
||||||
// ToastUtils.showSuccess(this, getString(R.string.wifi_connection_success)
|
|
||||||
// }else{
|
|
||||||
// ToastUtils.showError(this, getString(R.string.wifi_connection_failed))
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
dialog.show(supportFragmentManager, "DeleteUserDialog")
|
dialog.show(supportFragmentManager, "DeleteUserDialog")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun deleteDeviceUser() {
|
||||||
|
val deviceId = DeviceIdEvent.getDeviceId()
|
||||||
|
if (deviceId.isNullOrEmpty() || userId.isEmpty()) {
|
||||||
|
Toast.makeText(this, "参数错误", Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
try {
|
||||||
|
val request = DeleteDeviceUserRequest(
|
||||||
|
userId = userId,
|
||||||
|
deviceId = deviceId
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().deleteDeviceUser(request)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
Toast.makeText(this@UserDetailsActivity, "删除成功", Toast.LENGTH_SHORT).show()
|
||||||
|
DeviceUserUpdateEvent.notifyUpdate()
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@UserDetailsActivity, response.msg ?: "删除失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@UserDetailsActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,30 @@
|
|||||||
package com.example.defenseapplication.liveVideo
|
package com.example.defenseapplication.liveVideo
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.base.BaseActivity
|
import com.example.defenseapplication.base.BaseActivity
|
||||||
|
import com.example.defenseapplication.bean.DeviceBean
|
||||||
import com.example.defenseapplication.databinding.WaterGunSettingsActivityBinding
|
import com.example.defenseapplication.databinding.WaterGunSettingsActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.DeviceIdEvent
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.example.defenseapplication.view.ContainerSelectDialog
|
import com.example.defenseapplication.view.ContainerSelectDialog
|
||||||
import com.example.defenseapplication.view.CustomDialogFragmentText
|
import com.example.defenseapplication.view.CustomDialogFragmentText
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
//水枪设置
|
//水枪设置
|
||||||
class WaterGunSettingsActivity : BaseActivity() {
|
class WaterGunSettingsActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: WaterGunSettingsActivityBinding
|
private lateinit var binding: WaterGunSettingsActivityBinding
|
||||||
|
private var deviceId: String? = null
|
||||||
|
private var currentStrikeRange: String = "7"
|
||||||
|
private var currentStrikeInterval: String = "3"
|
||||||
|
private var currentContainer: String = "容器4"
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -24,6 +36,18 @@ class WaterGunSettingsActivity : BaseActivity() {
|
|||||||
.titleBar(binding.topBar)
|
.titleBar(binding.topBar)
|
||||||
.init()
|
.init()
|
||||||
|
|
||||||
|
deviceId = DeviceIdEvent.getDeviceId()
|
||||||
|
|
||||||
|
// 接收传递过来的参数
|
||||||
|
currentStrikeRange = intent.getStringExtra("strikeRange") ?: "7"
|
||||||
|
currentStrikeInterval = intent.getStringExtra("strikeInterval") ?: "3"
|
||||||
|
currentContainer = intent.getStringExtra("container") ?: "容器4"
|
||||||
|
|
||||||
|
// 显示初始值
|
||||||
|
binding.tvDistance.text = "${currentStrikeRange}m"
|
||||||
|
binding.tvInterval.text = "${currentStrikeInterval}s"
|
||||||
|
binding.tvContainer.text = currentContainer
|
||||||
|
|
||||||
initListeners()
|
initListeners()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,9 +59,9 @@ class WaterGunSettingsActivity : BaseActivity() {
|
|||||||
binding.itemDistance.setOnClickListener {
|
binding.itemDistance.setOnClickListener {
|
||||||
val dialog = CustomDialogFragmentText()
|
val dialog = CustomDialogFragmentText()
|
||||||
.setTitle(getString(R.string.strike_distance))
|
.setTitle(getString(R.string.strike_distance))
|
||||||
.setInputText(binding.tvDistance.text.toString().replace("m", ""))
|
.setInputText(currentStrikeRange)
|
||||||
dialog.setOnConfirmListener { distance ->
|
dialog.setOnConfirmListener { distance ->
|
||||||
binding.tvDistance.text = "${distance}m"
|
updateStrikeRange(distance)
|
||||||
}
|
}
|
||||||
dialog.show(supportFragmentManager, "DistanceDialog")
|
dialog.show(supportFragmentManager, "DistanceDialog")
|
||||||
}
|
}
|
||||||
@@ -45,23 +69,118 @@ class WaterGunSettingsActivity : BaseActivity() {
|
|||||||
binding.itemInterval.setOnClickListener {
|
binding.itemInterval.setOnClickListener {
|
||||||
val dialog = CustomDialogFragmentText()
|
val dialog = CustomDialogFragmentText()
|
||||||
.setTitle(getString(R.string.strike_interval))
|
.setTitle(getString(R.string.strike_interval))
|
||||||
.setInputText(binding.tvInterval.text.toString().replace("s", ""))
|
.setInputText(currentStrikeInterval)
|
||||||
dialog.setOnConfirmListener { interval ->
|
dialog.setOnConfirmListener { interval ->
|
||||||
binding.tvInterval.text = "${interval}s"
|
updateStrikeInterval(interval)
|
||||||
}
|
}
|
||||||
dialog.show(supportFragmentManager, "IntervalDialog")
|
dialog.show(supportFragmentManager, "IntervalDialog")
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.itemContainer.setOnClickListener {
|
binding.itemContainer.setOnClickListener {
|
||||||
val dialog = ContainerSelectDialog(this)
|
val dialog = ContainerSelectDialog(this)
|
||||||
dialog.setSelectedContainer(binding.tvContainer.text.toString())
|
dialog.setSelectedContainer(currentContainer)
|
||||||
dialog.setOnConfirmListener { container ->
|
dialog.setOnConfirmListener { container ->
|
||||||
binding.tvContainer.text = container
|
updateContainer(container)
|
||||||
}
|
}
|
||||||
dialog.show()
|
dialog.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.itemPosition.setOnClickListener {
|
binding.itemPosition.setOnClickListener {
|
||||||
startActivity(Intent(this, StrikePositionActivity::class.java))
|
// 跳转到打击位置设置页面
|
||||||
|
startActivity(android.content.Intent(this, StrikePositionActivity::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateStrikeRange(distance: String) {
|
||||||
|
if (deviceId.isNullOrEmpty()) {
|
||||||
|
Toast.makeText(this, "设备ID为空", Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val deviceBean = DeviceBean(
|
||||||
|
id = deviceId,
|
||||||
|
strikeRange = distance
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().updateDeviceInfo(deviceBean)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
currentStrikeRange = distance
|
||||||
|
binding.tvDistance.text = "${distance}m"
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, "修改成功", Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateStrikeInterval(interval: String) {
|
||||||
|
if (deviceId.isNullOrEmpty()) {
|
||||||
|
Toast.makeText(this, "设备ID为空", Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val deviceBean = DeviceBean(
|
||||||
|
id = deviceId,
|
||||||
|
strikeInterval = interval
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().updateDeviceInfo(deviceBean)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
currentStrikeInterval = interval
|
||||||
|
binding.tvInterval.text = "${interval}s"
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, "修改成功", Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateContainer(container: String) {
|
||||||
|
if (deviceId.isNullOrEmpty()) {
|
||||||
|
Toast.makeText(this, "设备ID为空", Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val deviceBean = DeviceBean(
|
||||||
|
id = deviceId,
|
||||||
|
container = container
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().updateDeviceInfo(deviceBean)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
currentContainer = container
|
||||||
|
binding.tvContainer.text = container
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, "修改成功", Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@WaterGunSettingsActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,9 +20,17 @@ import androidx.core.app.ActivityCompat
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.adapter.WifiListAdapter
|
import com.example.defenseapplication.adapter.WifiListAdapter
|
||||||
|
import com.example.defenseapplication.bean.DeviceBean
|
||||||
import com.example.defenseapplication.databinding.DialogWifiListBinding
|
import com.example.defenseapplication.databinding.DialogWifiListBinding
|
||||||
import com.example.defenseapplication.databinding.WifiManagementActivityBinding
|
import com.example.defenseapplication.databinding.WifiManagementActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.DeviceIdEvent
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
//WiFi管理
|
//WiFi管理
|
||||||
class WiFiManagementActivity : AppCompatActivity() {
|
class WiFiManagementActivity : AppCompatActivity() {
|
||||||
|
|
||||||
@@ -30,6 +38,11 @@ class WiFiManagementActivity : AppCompatActivity() {
|
|||||||
private lateinit var wifiManager: WifiManager
|
private lateinit var wifiManager: WifiManager
|
||||||
private lateinit var wifiScanReceiver: BroadcastReceiver
|
private lateinit var wifiScanReceiver: BroadcastReceiver
|
||||||
private var popupWindow: PopupWindow? = null
|
private var popupWindow: PopupWindow? = null
|
||||||
|
private var currentWifiName: String? = null
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val EXTRA_WIFI_NAME = "wifi_name"
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -39,6 +52,13 @@ class WiFiManagementActivity : AppCompatActivity() {
|
|||||||
.statusBarDarkFont(true)
|
.statusBarDarkFont(true)
|
||||||
.titleBar(binding.topBar)
|
.titleBar(binding.topBar)
|
||||||
.init()
|
.init()
|
||||||
|
|
||||||
|
// 获取传递过来的WiFi名称
|
||||||
|
currentWifiName = intent.getStringExtra(EXTRA_WIFI_NAME)
|
||||||
|
if (!currentWifiName.isNullOrEmpty() && currentWifiName != getString(R.string.not_set)) {
|
||||||
|
binding.etWifiName.setText(currentWifiName)
|
||||||
|
}
|
||||||
|
|
||||||
binding.ivBack.setOnClickListener {
|
binding.ivBack.setOnClickListener {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
@@ -56,6 +76,17 @@ class WiFiManagementActivity : AppCompatActivity() {
|
|||||||
updateBottomButtonVisibility()
|
updateBottomButtonVisibility()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
binding.etWifiPassword.addTextChangedListener(object : TextWatcher {
|
||||||
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||||
|
|
||||||
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
||||||
|
|
||||||
|
override fun afterTextChanged(s: Editable?) {
|
||||||
|
updateBottomButtonVisibility()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
|
wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
|
||||||
|
|
||||||
wifiScanReceiver = object : BroadcastReceiver() {
|
wifiScanReceiver = object : BroadcastReceiver() {
|
||||||
@@ -66,14 +97,61 @@ class WiFiManagementActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//点击确定成功失败吐司
|
|
||||||
binding.btnConfirm.setOnClickListener {
|
|
||||||
// if(){
|
|
||||||
// ToastUtils.showSuccess(this, getString(R.string.wifi_connection_success))
|
|
||||||
// }else{
|
|
||||||
// ToastUtils.showError(this, getString(R.string.wifi_connection_failed))
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
// 点击确定按钮,修改WiFi信息
|
||||||
|
binding.btnConfirm.setOnClickListener {
|
||||||
|
updateWifiInfo()
|
||||||
|
}
|
||||||
|
|
||||||
|
updateBottomButtonVisibility()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateWifiInfo() {
|
||||||
|
val wifiName = binding.etWifiName.text.toString().trim()
|
||||||
|
val wifiPassword = binding.etWifiPassword.text.toString().trim()
|
||||||
|
|
||||||
|
if (wifiName.isEmpty()) {
|
||||||
|
ToastUtils.showError(this, getString(R.string.enter_wifi_name))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wifiPassword.isEmpty()) {
|
||||||
|
ToastUtils.showError(this, getString(R.string.enter_wifi_password))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val deviceId = DeviceIdEvent.getDeviceId()
|
||||||
|
if (deviceId.isNullOrEmpty()) {
|
||||||
|
ToastUtils.showError(this, getString(R.string.device_id_empty))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.btnConfirm.isEnabled = false
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val deviceBean = DeviceBean(
|
||||||
|
id = deviceId,
|
||||||
|
wifiName = wifiName,
|
||||||
|
wifiPassword = wifiPassword
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().updateDeviceInfo(deviceBean)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.btnConfirm.isEnabled = true
|
||||||
|
if (response.code == 200) {
|
||||||
|
ToastUtils.showSuccess(this@WiFiManagementActivity, getString(R.string.modify_success))
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
ToastUtils.showError(this@WiFiManagementActivity, response.msg ?: getString(R.string.modify_failed))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.btnConfirm.isEnabled = true
|
||||||
|
ToastUtils.showError(this@WiFiManagementActivity, getString(R.string.network_request_failed))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,10 +173,15 @@ class WiFiManagementActivity : AppCompatActivity() {
|
|||||||
wifiManager.startScan()
|
wifiManager.startScan()
|
||||||
|
|
||||||
val dialogBinding = DialogWifiListBinding.inflate(LayoutInflater.from(this))
|
val dialogBinding = DialogWifiListBinding.inflate(LayoutInflater.from(this))
|
||||||
|
|
||||||
|
// 设置弹窗高度为屏幕的2/3
|
||||||
|
val screenHeight = resources.displayMetrics.heightPixels
|
||||||
|
val popupHeight = (screenHeight * 2 / 3)
|
||||||
|
|
||||||
popupWindow = PopupWindow(
|
popupWindow = PopupWindow(
|
||||||
dialogBinding.root,
|
dialogBinding.root,
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
popupHeight
|
||||||
).apply {
|
).apply {
|
||||||
isFocusable = true
|
isFocusable = true
|
||||||
setBackgroundDrawable(null)
|
setBackgroundDrawable(null)
|
||||||
@@ -113,16 +196,27 @@ class WiFiManagementActivity : AppCompatActivity() {
|
|||||||
dialogBinding.rvWifiList.layoutManager = LinearLayoutManager(this@WiFiManagementActivity)
|
dialogBinding.rvWifiList.layoutManager = LinearLayoutManager(this@WiFiManagementActivity)
|
||||||
|
|
||||||
val wifiList = getWifiList()
|
val wifiList = getWifiList()
|
||||||
dialogBinding.rvWifiList.adapter = WifiListAdapter(wifiList) { wifiName ->
|
val adapter = WifiListAdapter(wifiList) { wifiName ->
|
||||||
binding.etWifiName.setText(wifiName)
|
binding.etWifiName.setText(wifiName)
|
||||||
popupWindow?.dismiss()
|
popupWindow?.dismiss()
|
||||||
}
|
}
|
||||||
|
dialogBinding.rvWifiList.adapter = adapter
|
||||||
|
|
||||||
|
// 添加下拉刷新功能
|
||||||
|
dialogBinding.swipeRefreshLayout.setOnRefreshListener {
|
||||||
|
wifiManager.startScan()
|
||||||
|
// 延迟1秒后停止刷新动画
|
||||||
|
android.os.Handler().postDelayed({
|
||||||
|
dialogBinding.swipeRefreshLayout.isRefreshing = false
|
||||||
|
}, 1000)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateBottomButtonVisibility() {
|
private fun updateBottomButtonVisibility() {
|
||||||
val wifiName = binding.etWifiName.text.toString().trim()
|
val wifiName = binding.etWifiName.text.toString().trim()
|
||||||
|
val wifiPassword = binding.etWifiPassword.text.toString().trim()
|
||||||
binding.bottomButtonLayout.visibility =
|
binding.bottomButtonLayout.visibility =
|
||||||
if (wifiName.isNotEmpty()) android.view.View.VISIBLE else android.view.View.GONE
|
if (wifiName.isNotEmpty() && wifiPassword.isNotEmpty()) android.view.View.VISIBLE else android.view.View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getWifiList(): List<String> {
|
private fun getWifiList(): List<String> {
|
||||||
@@ -135,6 +229,9 @@ class WiFiManagementActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateWifiList() {
|
private fun updateWifiList() {
|
||||||
|
popupWindow?.contentView?.findViewById<androidx.swiperefreshlayout.widget.SwipeRefreshLayout>(R.id.swipeRefreshLayout)?.let { swipeRefreshLayout ->
|
||||||
|
swipeRefreshLayout.isRefreshing = false
|
||||||
|
}
|
||||||
popupWindow?.contentView?.findViewById<androidx.recyclerview.widget.RecyclerView>(R.id.rvWifiList)?.let { recyclerView ->
|
popupWindow?.contentView?.findViewById<androidx.recyclerview.widget.RecyclerView>(R.id.rvWifiList)?.let { recyclerView ->
|
||||||
val wifiList = getWifiList()
|
val wifiList = getWifiList()
|
||||||
recyclerView.adapter = WifiListAdapter(wifiList) { wifiName ->
|
recyclerView.adapter = WifiListAdapter(wifiList) { wifiName ->
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ import android.Manifest
|
|||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.annotation.OptIn
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.camera.core.CameraSelector
|
import androidx.camera.core.CameraSelector
|
||||||
|
import androidx.camera.core.ExperimentalGetImage
|
||||||
import androidx.camera.core.ImageAnalysis
|
import androidx.camera.core.ImageAnalysis
|
||||||
import androidx.camera.core.Preview
|
import androidx.camera.core.Preview
|
||||||
import androidx.camera.lifecycle.ProcessCameraProvider
|
import androidx.camera.lifecycle.ProcessCameraProvider
|
||||||
@@ -38,6 +40,9 @@ class FaceVerificationActivity : AppCompatActivity() {
|
|||||||
.statusBarDarkFont(true)
|
.statusBarDarkFont(true)
|
||||||
.titleBar(binding.topContainer)
|
.titleBar(binding.topContainer)
|
||||||
.init()
|
.init()
|
||||||
|
binding.backIcon.setOnClickListener {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
// 初始化人脸检测器(选项可自行调整)
|
// 初始化人脸检测器(选项可自行调整)
|
||||||
val options = FaceDetectorOptions.Builder()
|
val options = FaceDetectorOptions.Builder()
|
||||||
.setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
|
.setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
|
||||||
@@ -65,6 +70,7 @@ class FaceVerificationActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalGetImage::class)
|
||||||
private fun startCamera() {
|
private fun startCamera() {
|
||||||
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
|
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
|
||||||
cameraProviderFuture.addListener({
|
cameraProviderFuture.addListener({
|
||||||
@@ -81,8 +87,8 @@ class FaceVerificationActivity : AppCompatActivity() {
|
|||||||
.build()
|
.build()
|
||||||
imageAnalysis.setAnalyzer(cameraExecutor, FaceAnalyzer(faceDetector, binding.overlay))
|
imageAnalysis.setAnalyzer(cameraExecutor, FaceAnalyzer(faceDetector, binding.overlay))
|
||||||
|
|
||||||
// 选择后置摄像头
|
// 选择前置摄像头
|
||||||
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
|
val cameraSelector = CameraSelector.DEFAULT_FRONT_CAMERA
|
||||||
|
|
||||||
// 绑定到生命周期
|
// 绑定到生命周期
|
||||||
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalysis)
|
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalysis)
|
||||||
|
|||||||
@@ -2,5 +2,6 @@ package com.example.defenseapplication.model
|
|||||||
|
|
||||||
data class FamilyItem(
|
data class FamilyItem(
|
||||||
val id: String,
|
val id: String,
|
||||||
val name: String
|
val name: String,
|
||||||
|
val role: String
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,40 +6,43 @@ import android.graphics.Bitmap
|
|||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.Paint
|
import android.graphics.Paint
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.text.TextPaint
|
import android.text.TextPaint
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.RadioButton
|
|
||||||
import android.widget.RadioGroup
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
|
import com.example.defenseapplication.bean.VerifyOptionPasswordRequest
|
||||||
import com.example.defenseapplication.databinding.DialogExpireTimeBinding
|
import com.example.defenseapplication.databinding.DialogExpireTimeBinding
|
||||||
import com.example.defenseapplication.databinding.InvitationCodeActivityBinding
|
import com.example.defenseapplication.databinding.InvitationCodeActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.google.zxing.BarcodeFormat
|
import com.google.zxing.BarcodeFormat
|
||||||
import com.google.zxing.EncodeHintType
|
import com.google.zxing.EncodeHintType
|
||||||
import com.google.zxing.qrcode.QRCodeWriter
|
import com.google.zxing.qrcode.QRCodeWriter
|
||||||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
|
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
import java.util.Hashtable
|
import java.util.Hashtable
|
||||||
|
|
||||||
//邀请码页面
|
|
||||||
class InvitationCodeActivity : AppCompatActivity() {
|
class InvitationCodeActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private lateinit var binding: InvitationCodeActivityBinding
|
private lateinit var binding: InvitationCodeActivityBinding
|
||||||
private var expireTimeInMillis: Long = 24 * 60 * 60 * 1000 // 默认24小时
|
private var expireTimeInMillis: Long = EXPIRE_24H // 默认24小时
|
||||||
private var selectedExpireOption: Int = 0 // 0: 24h, 1: 7d,默认选中24h
|
private var selectedExpireOption: Int = 0 // 0: 24h, 1: 7d,默认选中24h
|
||||||
private var generatedInviteCode: String = "" // 生成的邀请码
|
private var generatedInviteCode: String = "" // 生成的邀请码
|
||||||
private var expireTimestamp: Long = 0 // 过期时间戳
|
private var expireTimestamp: Long = 0 // 过期时间戳
|
||||||
private var qrCodeContent: String = "" // 生成的二维码内容
|
private var qrCodeContent: String = "" // 生成的二维码内容
|
||||||
private var lastClickTime: Long = 0 // 上次点击时间,用于防止多次点击
|
private var lastClickTime: Long = 0 // 上次点击时间,用于防止多次点击
|
||||||
private var expireTimeDialog: BottomSheetDialog? = null // 时效选择弹窗
|
private var expireTimeDialog: BottomSheetDialog? = null // 时效选择弹窗
|
||||||
|
private var isLoading = false // 是否正在加载
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val EXPIRE_24H = 24 * 60 * 60 * 1000L
|
const val EXPIRE_24H = 24 * 60 * 60 * 1000L
|
||||||
@@ -61,6 +64,9 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
binding.tvExpireTime.text = getString(R.string.expire_24h)
|
binding.tvExpireTime.text = getString(R.string.expire_24h)
|
||||||
// 默认显示灰色占位区域,二维码不可见
|
// 默认显示灰色占位区域,二维码不可见
|
||||||
hideQrCode()
|
hideQrCode()
|
||||||
|
|
||||||
|
// 页面加载时查询推荐码状态
|
||||||
|
queryRecommendationCodeStatus()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initListener() {
|
private fun initListener() {
|
||||||
@@ -73,7 +79,7 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.llWechatShare.setOnClickListener {
|
binding.llWechatShare.setOnClickListener {
|
||||||
// 防止多次点击(间隔1秒)
|
// 防止多次点击(间隔3秒)
|
||||||
val currentTime = System.currentTimeMillis()
|
val currentTime = System.currentTimeMillis()
|
||||||
if (currentTime - lastClickTime < 3000) {
|
if (currentTime - lastClickTime < 3000) {
|
||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
@@ -82,6 +88,119 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
// 微信分享功能
|
// 微信分享功能
|
||||||
shareToWeChat()
|
shareToWeChat()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 撤销邀请按钮
|
||||||
|
binding.btnCancelInvite.setOnClickListener {
|
||||||
|
cancelInvitation()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新生成按钮
|
||||||
|
binding.btnRegenerate.setOnClickListener {
|
||||||
|
regenerateInvitation()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询推荐码状态
|
||||||
|
*/
|
||||||
|
private fun queryRecommendationCodeStatus() {
|
||||||
|
isLoading = true
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
// 注意:接口需要传入code参数,但我们可能不知道当前的推荐码
|
||||||
|
// 这里使用空字符串或默认值进行查询
|
||||||
|
val response = RetrofitNetwork.getNetworkService().selectRecommendationCode("")
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
isLoading = false
|
||||||
|
if (response.code == 200) {
|
||||||
|
// 有推荐码,解析返回的数据
|
||||||
|
handleRecommendationCodeResponse(response.data)
|
||||||
|
} else {
|
||||||
|
// 没有推荐码或查询失败,生成默认24小时的推荐码
|
||||||
|
generateDefaultRecommendationCode()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
isLoading = false
|
||||||
|
// 网络异常,生成默认24小时的推荐码
|
||||||
|
generateDefaultRecommendationCode()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理推荐码查询响应
|
||||||
|
*/
|
||||||
|
private fun handleRecommendationCodeResponse(data: Any?) {
|
||||||
|
// 解析返回的数据,获取推荐码和过期时间
|
||||||
|
// 这里需要根据实际接口返回格式进行解析
|
||||||
|
if (data is Map<*, *>) {
|
||||||
|
generatedInviteCode = data["code"]?.toString() ?: ""
|
||||||
|
expireTimestamp = data["expireTime"]?.toString()?.toLongOrNull() ?: 0L
|
||||||
|
|
||||||
|
// 检查推荐码是否过期
|
||||||
|
if (expireTimestamp > 0 && System.currentTimeMillis() < expireTimestamp) {
|
||||||
|
// 推荐码有效,显示二维码
|
||||||
|
qrCodeContent = "{\"type\":\"invite\",\"code\":\"$generatedInviteCode\",\"expire\":$expireTimestamp}"
|
||||||
|
showQrCode()
|
||||||
|
generateQRCode()
|
||||||
|
|
||||||
|
// 根据过期时间设置显示的时效
|
||||||
|
val remainingTime = expireTimestamp - System.currentTimeMillis()
|
||||||
|
if (remainingTime > EXPIRE_24H) {
|
||||||
|
// 超过24小时,认为是7天的
|
||||||
|
expireTimeInMillis = EXPIRE_7D
|
||||||
|
selectedExpireOption = 1
|
||||||
|
binding.tvExpireTime.text = getString(R.string.expire_7d)
|
||||||
|
} else {
|
||||||
|
expireTimeInMillis = EXPIRE_24H
|
||||||
|
selectedExpireOption = 0
|
||||||
|
binding.tvExpireTime.text = getString(R.string.expire_24h)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 推荐码已过期,生成新的默认24小时推荐码
|
||||||
|
generateDefaultRecommendationCode()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 数据格式不对,生成新的推荐码
|
||||||
|
generateDefaultRecommendationCode()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成默认24小时的推荐码
|
||||||
|
*/
|
||||||
|
private fun generateDefaultRecommendationCode() {
|
||||||
|
expireTimeInMillis = EXPIRE_24H
|
||||||
|
selectedExpireOption = 0
|
||||||
|
binding.tvExpireTime.text = getString(R.string.expire_24h)
|
||||||
|
|
||||||
|
// 生成推荐码(本地生成,实际应该调用API)
|
||||||
|
generateQRCode()
|
||||||
|
showQrCode()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理生成推荐码成功
|
||||||
|
*/
|
||||||
|
private fun handleGenerateSuccess(data: Any?, expireDays: Int) {
|
||||||
|
// 解析返回的数据
|
||||||
|
if (data is Map<*, *>) {
|
||||||
|
generatedInviteCode = data["code"]?.toString() ?: ""
|
||||||
|
expireTimestamp = data["expireTime"]?.toString()?.toLongOrNull() ?: (System.currentTimeMillis() + expireTimeInMillis)
|
||||||
|
qrCodeContent = "{\"type\":\"invite\",\"code\":\"$generatedInviteCode\",\"expire\":$expireTimestamp}"
|
||||||
|
|
||||||
|
showQrCode()
|
||||||
|
generateQRCode()
|
||||||
|
} else {
|
||||||
|
// 如果接口没有返回推荐码,本地生成一个
|
||||||
|
generateInviteCode()
|
||||||
|
showQrCode()
|
||||||
|
generateQRCode()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showExpireTimeDialog() {
|
private fun showExpireTimeDialog() {
|
||||||
@@ -108,6 +227,7 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dialogBinding.tvConfirm.setOnClickListener {
|
dialogBinding.tvConfirm.setOnClickListener {
|
||||||
|
// 直接设置新的时效并生成二维码
|
||||||
when (selectedExpireOption) {
|
when (selectedExpireOption) {
|
||||||
0 -> {
|
0 -> {
|
||||||
expireTimeInMillis = EXPIRE_24H
|
expireTimeInMillis = EXPIRE_24H
|
||||||
@@ -118,7 +238,7 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
binding.tvExpireTime.text = getString(R.string.expire_7d)
|
binding.tvExpireTime.text = getString(R.string.expire_7d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 选择后显示二维码并生成
|
// 显示二维码并生成
|
||||||
showQrCode()
|
showQrCode()
|
||||||
generateQRCode()
|
generateQRCode()
|
||||||
expireTimeDialog?.dismiss()
|
expireTimeDialog?.dismiss()
|
||||||
@@ -128,31 +248,31 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun hideQrCode() {
|
private fun hideQrCode() {
|
||||||
// 隐藏二维码,显示灰色占位区域
|
|
||||||
binding.ivQrCode.visibility = View.GONE
|
binding.ivQrCode.visibility = View.GONE
|
||||||
binding.ivQrLogo.visibility = View.GONE
|
binding.ivQrLogo.visibility = View.GONE
|
||||||
binding.vQrPlaceholder.visibility = View.VISIBLE
|
binding.vQrPlaceholder.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showQrCode() {
|
private fun showQrCode() {
|
||||||
// 显示二维码,隐藏灰色占位区域
|
|
||||||
binding.vQrPlaceholder.visibility = View.GONE
|
binding.vQrPlaceholder.visibility = View.GONE
|
||||||
binding.ivQrCode.visibility = View.VISIBLE
|
binding.ivQrCode.visibility = View.VISIBLE
|
||||||
binding.ivQrLogo.visibility = View.VISIBLE
|
binding.ivQrLogo.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateQRCode() {
|
private fun generateQRCode() {
|
||||||
val content = generateInviteCode()
|
val content = if (qrCodeContent.isNotEmpty()) qrCodeContent else generateInviteCode()
|
||||||
val qrBitmap = createQRCodeWithLogo(content, 400, 400)
|
val qrBitmap = createQRCodeWithLogo(content, 400, 400)
|
||||||
binding.ivQrCode.setImageBitmap(qrBitmap)
|
binding.ivQrCode.setImageBitmap(qrBitmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateInviteCode(): String {
|
private fun generateInviteCode(): String {
|
||||||
// 生成包含邀请信息的JSON字符串
|
|
||||||
val timestamp = System.currentTimeMillis()
|
val timestamp = System.currentTimeMillis()
|
||||||
expireTimestamp = timestamp + expireTimeInMillis
|
expireTimestamp = timestamp + expireTimeInMillis
|
||||||
generatedInviteCode = "INV${timestamp}"
|
generatedInviteCode = "INV${timestamp}"
|
||||||
qrCodeContent = "{\"type\":\"invite\",\"code\":\"$generatedInviteCode\",\"expire\":$expireTimestamp}"
|
qrCodeContent = "{\"type\":\"invite\",\"code\":\"$generatedInviteCode\",\"expire\":$expireTimestamp}"
|
||||||
|
// 输出日志,方便调试验证
|
||||||
|
android.util.Log.d("InvitationCode", "生成的二维码内容: $qrCodeContent")
|
||||||
|
android.util.Log.d("InvitationCode", "推荐码: $generatedInviteCode, 过期时间戳: $expireTimestamp")
|
||||||
return qrCodeContent
|
return qrCodeContent
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,7 +281,6 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
val hints = Hashtable<EncodeHintType, Any>()
|
val hints = Hashtable<EncodeHintType, Any>()
|
||||||
hints[EncodeHintType.CHARACTER_SET] = "UTF-8"
|
hints[EncodeHintType.CHARACTER_SET] = "UTF-8"
|
||||||
hints[EncodeHintType.ERROR_CORRECTION] = ErrorCorrectionLevel.H
|
hints[EncodeHintType.ERROR_CORRECTION] = ErrorCorrectionLevel.H
|
||||||
// 设置二维码边距为最小(1)
|
|
||||||
hints[EncodeHintType.MARGIN] = 1
|
hints[EncodeHintType.MARGIN] = 1
|
||||||
|
|
||||||
val writer = QRCodeWriter()
|
val writer = QRCodeWriter()
|
||||||
@@ -170,10 +289,8 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
val qrBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
val qrBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
||||||
val canvas = Canvas(qrBitmap)
|
val canvas = Canvas(qrBitmap)
|
||||||
|
|
||||||
// 绘制白色背景
|
|
||||||
canvas.drawColor(Color.WHITE)
|
canvas.drawColor(Color.WHITE)
|
||||||
|
|
||||||
// 绘制二维码
|
|
||||||
val paint = Paint(Paint.ANTI_ALIAS_FLAG)
|
val paint = Paint(Paint.ANTI_ALIAS_FLAG)
|
||||||
paint.color = Color.BLACK
|
paint.color = Color.BLACK
|
||||||
|
|
||||||
@@ -194,10 +311,8 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 在二维码中间绘制logo
|
|
||||||
val logoDrawable = ContextCompat.getDrawable(this, R.mipmap.loge)
|
val logoDrawable = ContextCompat.getDrawable(this, R.mipmap.loge)
|
||||||
if (logoDrawable != null) {
|
if (logoDrawable != null) {
|
||||||
// logo大小为二维码的1/5
|
|
||||||
val logoSize = width / 5
|
val logoSize = width / 5
|
||||||
val logoX = (width - logoSize) / 2
|
val logoX = (width - logoSize) / 2
|
||||||
val logoY = (height - logoSize) / 2
|
val logoY = (height - logoSize) / 2
|
||||||
@@ -218,51 +333,42 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun shareToWeChat() {
|
private fun shareToWeChat() {
|
||||||
// 检查二维码是否过期
|
|
||||||
if (expireTimestamp == 0L || System.currentTimeMillis() > expireTimestamp) {
|
if (expireTimestamp == 0L || System.currentTimeMillis() > expireTimestamp) {
|
||||||
ToastUtils.showError(this, getString(R.string.qr_code_expired))
|
ToastUtils.showError(this, getString(R.string.qr_code_expired))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成分享海报
|
|
||||||
val shareBitmap = generateSharePoster()
|
val shareBitmap = generateSharePoster()
|
||||||
if (shareBitmap == null) {
|
if (shareBitmap == null) {
|
||||||
ToastUtils.showError(this, getString(R.string.share_failed))
|
ToastUtils.showError(this, getString(R.string.share_failed))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存图片到本地
|
|
||||||
val imagePath = saveBitmapToFile(shareBitmap)
|
val imagePath = saveBitmapToFile(shareBitmap)
|
||||||
if (imagePath.isEmpty()) {
|
if (imagePath.isEmpty()) {
|
||||||
ToastUtils.showError(this, getString(R.string.share_failed))
|
ToastUtils.showError(this, getString(R.string.share_failed))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 使用系统分享功能
|
|
||||||
shareImage(imagePath)
|
shareImage(imagePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateSharePoster(): Bitmap? {
|
private fun generateSharePoster(): Bitmap? {
|
||||||
return try {
|
return try {
|
||||||
// 获取空海报背景图
|
|
||||||
val posterBackground = ContextCompat.getDrawable(this, R.drawable.share_poster_empty)
|
val posterBackground = ContextCompat.getDrawable(this, R.drawable.share_poster_empty)
|
||||||
?: return null
|
?: return null
|
||||||
|
|
||||||
// 创建画布
|
|
||||||
val width = posterBackground.intrinsicWidth
|
val width = posterBackground.intrinsicWidth
|
||||||
val height = posterBackground.intrinsicHeight
|
val height = posterBackground.intrinsicHeight
|
||||||
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
||||||
val canvas = Canvas(bitmap)
|
val canvas = Canvas(bitmap)
|
||||||
|
|
||||||
// 绘制背景图
|
|
||||||
posterBackground.setBounds(0, 0, width, height)
|
posterBackground.setBounds(0, 0, width, height)
|
||||||
posterBackground.draw(canvas)
|
posterBackground.draw(canvas)
|
||||||
|
|
||||||
// 使用已生成的二维码内容生成二维码
|
|
||||||
val qrCode = createQRCodeWithLogo(qrCodeContent, 300, 300)
|
val qrCode = createQRCodeWithLogo(qrCodeContent, 300, 300)
|
||||||
?: return bitmap
|
?: return bitmap
|
||||||
|
|
||||||
// 绘制二维码到海报上
|
|
||||||
val qrSize = (width * 0.38f).toInt()
|
val qrSize = (width * 0.38f).toInt()
|
||||||
val qrX = (width - qrSize) / 2
|
val qrX = (width - qrSize) / 2
|
||||||
val qrY = (height * 0.60f).toInt()
|
val qrY = (height * 0.60f).toInt()
|
||||||
@@ -270,14 +376,12 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
val scaledQr = Bitmap.createScaledBitmap(qrCode, qrSize, qrSize, true)
|
val scaledQr = Bitmap.createScaledBitmap(qrCode, qrSize, qrSize, true)
|
||||||
canvas.drawBitmap(scaledQr, qrX.toFloat(), qrY.toFloat(), null)
|
canvas.drawBitmap(scaledQr, qrX.toFloat(), qrY.toFloat(), null)
|
||||||
|
|
||||||
// 获取时效文本
|
|
||||||
val expireText = if (expireTimeInMillis == EXPIRE_24H) {
|
val expireText = if (expireTimeInMillis == EXPIRE_24H) {
|
||||||
getString(R.string.expire_24h)
|
getString(R.string.expire_24h)
|
||||||
} else {
|
} else {
|
||||||
getString(R.string.expire_7d)
|
getString(R.string.expire_7d)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绘制底部提示文字
|
|
||||||
val tipsText = getString(R.string.share_poster_tips, expireText)
|
val tipsText = getString(R.string.share_poster_tips, expireText)
|
||||||
val tipsPaint = android.text.TextPaint().apply {
|
val tipsPaint = android.text.TextPaint().apply {
|
||||||
color = Color.parseColor("#0475F3")
|
color = Color.parseColor("#0475F3")
|
||||||
@@ -297,12 +401,10 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
.setLineSpacing(0f, 1.4f)
|
.setLineSpacing(0f, 1.4f)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
// 计算文字位置:距离二维码底部有固定间距
|
|
||||||
val qrBottom = qrY + qrSize
|
val qrBottom = qrY + qrSize
|
||||||
val marginBelowQr = (height * 0.04f).toInt() // 二维码下方间距
|
val marginBelowQr = (height * 0.04f).toInt()
|
||||||
val textY = qrBottom + marginBelowQr
|
val textY = qrBottom + marginBelowQr
|
||||||
|
|
||||||
// 向右偏移
|
|
||||||
val rightOffset = (width * 0.35f).toInt()
|
val rightOffset = (width * 0.35f).toInt()
|
||||||
|
|
||||||
canvas.save()
|
canvas.save()
|
||||||
@@ -310,7 +412,6 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
staticLayout.draw(canvas)
|
staticLayout.draw(canvas)
|
||||||
canvas.restore()
|
canvas.restore()
|
||||||
|
|
||||||
|
|
||||||
bitmap
|
bitmap
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
@@ -342,7 +443,6 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 使用 FileProvider 获取内容 URI
|
|
||||||
val authority = "${packageName}.fileprovider"
|
val authority = "${packageName}.fileprovider"
|
||||||
val contentUri = androidx.core.content.FileProvider.getUriForFile(this, authority, file)
|
val contentUri = androidx.core.content.FileProvider.getUriForFile(this, authority, file)
|
||||||
|
|
||||||
@@ -350,11 +450,9 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
type = "image/*"
|
type = "image/*"
|
||||||
putExtra(Intent.EXTRA_STREAM, contentUri)
|
putExtra(Intent.EXTRA_STREAM, contentUri)
|
||||||
putExtra(Intent.EXTRA_TEXT, getString(R.string.invite_friend))
|
putExtra(Intent.EXTRA_TEXT, getString(R.string.invite_friend))
|
||||||
// 授予读取权限
|
|
||||||
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
|
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||||
}
|
}
|
||||||
|
|
||||||
// 为所有匹配的应用授予权限
|
|
||||||
val resInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
|
val resInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
|
||||||
for (resolveInfo in resInfoList) {
|
for (resolveInfo in resInfoList) {
|
||||||
val packageName = resolveInfo.activityInfo.packageName
|
val packageName = resolveInfo.activityInfo.packageName
|
||||||
@@ -369,9 +467,31 @@ class InvitationCodeActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销邀请
|
||||||
|
*/
|
||||||
|
private fun cancelInvitation() {
|
||||||
|
// 撤销邀请逻辑
|
||||||
|
hideQrCode()
|
||||||
|
generatedInviteCode = ""
|
||||||
|
qrCodeContent = ""
|
||||||
|
expireTimestamp = 0
|
||||||
|
// 显示提示
|
||||||
|
ToastUtils.showSuccess(this, getString(R.string.operation_success))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重新生成邀请码
|
||||||
|
*/
|
||||||
|
private fun regenerateInvitation() {
|
||||||
|
// 根据当前选择的时效重新生成邀请码
|
||||||
|
generateQRCode()
|
||||||
|
showQrCode()
|
||||||
|
ToastUtils.showSuccess(this, getString(R.string.operation_success))
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
// 关闭弹窗,防止内存泄漏
|
|
||||||
expireTimeDialog?.dismiss()
|
expireTimeDialog?.dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,24 @@
|
|||||||
package com.example.defenseapplication.personal
|
package com.example.defenseapplication.personal
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.enableEdgeToEdge
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.view.ViewCompat
|
import bean.LoginRequest
|
||||||
import androidx.core.view.WindowInsetsCompat
|
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
|
import com.example.defenseapplication.bean.UpdatePassword
|
||||||
|
import com.example.defenseapplication.bean.UserInfoBean
|
||||||
import com.example.defenseapplication.databinding.LoginPasswordActivityBinding
|
import com.example.defenseapplication.databinding.LoginPasswordActivityBinding
|
||||||
import com.example.defenseapplication.databinding.PasswordManagementActivityBinding
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
//登录密码
|
//登录密码修改
|
||||||
class LoginPasswordActivity : AppCompatActivity() {
|
class LoginPasswordActivity : AppCompatActivity() {
|
||||||
private lateinit var binding: LoginPasswordActivityBinding
|
private lateinit var binding: LoginPasswordActivityBinding
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = LoginPasswordActivityBinding.inflate(layoutInflater)
|
binding = LoginPasswordActivityBinding.inflate(layoutInflater)
|
||||||
@@ -26,5 +32,45 @@ class LoginPasswordActivity : AppCompatActivity() {
|
|||||||
binding.ivBack.setOnClickListener {
|
binding.ivBack.setOnClickListener {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.btnConfirm.setOnClickListener {
|
||||||
|
val oldPassword = binding.etOldPassword.text.toString().trim()
|
||||||
|
val newPassword = binding.etNewPassword.text.toString().trim()
|
||||||
|
val confirmPassword = binding.etConfirmPassword.text.toString().trim()
|
||||||
|
|
||||||
|
if (oldPassword.isEmpty()) {
|
||||||
|
Toast.makeText(this, getString(R.string.enter_old_password), Toast.LENGTH_SHORT).show()
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newPassword.isEmpty()) {
|
||||||
|
Toast.makeText(this, getString(R.string.enter_new_password), Toast.LENGTH_SHORT).show()
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newPassword != confirmPassword) {
|
||||||
|
Toast.makeText(this, getString(R.string.password_not_match), Toast.LENGTH_SHORT).show()
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val result = RetrofitNetwork.getNetworkService().updatePassword(UpdatePassword(oldPassword, newPassword))
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (result.code == 200) {
|
||||||
|
Toast.makeText(this@LoginPasswordActivity, getString(R.string.password_reset_success), Toast.LENGTH_SHORT).show()
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@LoginPasswordActivity, result.msg ?: getString(R.string.password_reset_failed), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@LoginPasswordActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,20 @@
|
|||||||
package com.example.defenseapplication.personal
|
package com.example.defenseapplication.personal
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.Editable
|
||||||
|
import android.text.TextWatcher
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.blankj.utilcode.util.SPUtils
|
import com.blankj.utilcode.util.SPUtils
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
|
import com.example.defenseapplication.bean.UpdateUserInfo
|
||||||
import com.example.defenseapplication.databinding.OperationPasswordActivityBinding
|
import com.example.defenseapplication.databinding.OperationPasswordActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
//操作密码
|
//操作密码
|
||||||
class OperationPasswordActivity : AppCompatActivity() {
|
class OperationPasswordActivity : AppCompatActivity() {
|
||||||
@@ -36,18 +44,52 @@ class OperationPasswordActivity : AppCompatActivity() {
|
|||||||
true -> {
|
true -> {
|
||||||
binding.etPassword.isEnabled = true
|
binding.etPassword.isEnabled = true
|
||||||
binding.etConfirmPassword.isEnabled = true
|
binding.etConfirmPassword.isEnabled = true
|
||||||
binding.btnConfirmReset.isEnabled = true
|
|
||||||
Toast.makeText(this, getString(R.string.operation_password_enabled), Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, getString(R.string.operation_password_enabled), Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
false -> {
|
false -> {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().updateUserInfo(UpdateUserInfo(optionPassword = ""))
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
binding.etPassword.isEnabled = false
|
binding.etPassword.isEnabled = false
|
||||||
binding.etConfirmPassword.isEnabled = false
|
binding.etConfirmPassword.isEnabled = false
|
||||||
binding.btnConfirmReset.isEnabled = false
|
|
||||||
SPUtils.getInstance().remove("operation_password")
|
SPUtils.getInstance().remove("operation_password")
|
||||||
Toast.makeText(this, getString(R.string.operation_password_disabled), Toast.LENGTH_SHORT).show()
|
Toast.makeText(this@OperationPasswordActivity, getString(R.string.operation_password_disabled), Toast.LENGTH_SHORT).show()
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
binding.swOperationPassword.isChecked = true
|
||||||
|
Toast.makeText(this@OperationPasswordActivity, response.msg ?: "操作失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.swOperationPassword.isChecked = true
|
||||||
|
Toast.makeText(this@OperationPasswordActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.etPassword.addTextChangedListener(object : TextWatcher {
|
||||||
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||||
|
|
||||||
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
||||||
|
|
||||||
|
override fun afterTextChanged(s: Editable?) {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
binding.etConfirmPassword.addTextChangedListener(object : TextWatcher {
|
||||||
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||||
|
|
||||||
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
||||||
|
|
||||||
|
override fun afterTextChanged(s: Editable?) {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
binding.btnConfirmReset.setOnClickListener {
|
binding.btnConfirmReset.setOnClickListener {
|
||||||
val password = binding.etPassword.text.toString()
|
val password = binding.etPassword.text.toString()
|
||||||
@@ -73,8 +115,28 @@ class OperationPasswordActivity : AppCompatActivity() {
|
|||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.btnConfirmReset.isEnabled = false
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().updateUserInfo(UpdateUserInfo(optionPassword = password))
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.btnConfirmReset.isEnabled = true
|
||||||
|
if (response.code == 200) {
|
||||||
SPUtils.getInstance().put("operation_password", password)
|
SPUtils.getInstance().put("operation_password", password)
|
||||||
Toast.makeText(this, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
|
Toast.makeText(this@OperationPasswordActivity, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@OperationPasswordActivity, response.msg ?: "操作失败", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.btnConfirmReset.isEnabled = true
|
||||||
|
Toast.makeText(this@OperationPasswordActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,14 @@ import android.os.Bundle
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
|
import com.example.defenseapplication.bean.VerifyOptionPasswordRequest
|
||||||
import com.example.defenseapplication.databinding.PasswordManagementActivityBinding
|
import com.example.defenseapplication.databinding.PasswordManagementActivityBinding
|
||||||
import com.example.defenseapplication.view.PasswordInputDialog
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.blankj.utilcode.util.SPUtils
|
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
//密码管理
|
//密码管理
|
||||||
class PasswordManagementActivity : AppCompatActivity() {
|
class PasswordManagementActivity : AppCompatActivity() {
|
||||||
|
|
||||||
@@ -45,20 +49,28 @@ class PasswordManagementActivity : AppCompatActivity() {
|
|||||||
private fun showPasswordDialog() {
|
private fun showPasswordDialog() {
|
||||||
passwordDialog = PasswordInputDialog(this).apply {
|
passwordDialog = PasswordInputDialog(this).apply {
|
||||||
setOnConfirmListener { inputPassword ->
|
setOnConfirmListener { inputPassword ->
|
||||||
val savedPassword = SPUtils.getInstance().getString("operation_password", "111111")
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
if (savedPassword.isEmpty()) {
|
try {
|
||||||
Toast.makeText(this@PasswordManagementActivity, getString(R.string.operation_password_not_set), Toast.LENGTH_SHORT).show()
|
val response = RetrofitNetwork.getNetworkService().verifyOptionPassword(VerifyOptionPasswordRequest(inputPassword))
|
||||||
dismiss()
|
withContext(Dispatchers.Main) {
|
||||||
return@setOnConfirmListener
|
if (response.code == 200) {
|
||||||
}
|
|
||||||
if (inputPassword == savedPassword) {
|
|
||||||
startActivity(Intent(this@PasswordManagementActivity, OperationPasswordActivity::class.java))
|
startActivity(Intent(this@PasswordManagementActivity, OperationPasswordActivity::class.java))
|
||||||
dismiss()
|
dismiss()
|
||||||
} else {
|
} else {
|
||||||
|
Toast.makeText(this@PasswordManagementActivity, response.msg ?: "校验失败", Toast.LENGTH_SHORT).show()
|
||||||
showError(getString(R.string.password_error))
|
showError(getString(R.string.password_error))
|
||||||
clearPassword()
|
clearPassword()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@PasswordManagementActivity, "网络请求失败", Toast.LENGTH_SHORT).show()
|
||||||
|
showError(getString(R.string.password_error))
|
||||||
|
clearPassword()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
setOnDismissListener {
|
setOnDismissListener {
|
||||||
// Dialog dismissed
|
// Dialog dismissed
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,31 @@
|
|||||||
package com.example.defenseapplication.personal
|
package com.example.defenseapplication.personal
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
|
import com.example.defenseapplication.bean.UpdateUserInfo
|
||||||
|
import com.example.defenseapplication.bean.UserInfoBean
|
||||||
import com.example.defenseapplication.databinding.PersonalProfileActivityBinding
|
import com.example.defenseapplication.databinding.PersonalProfileActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.example.defenseapplication.view.CustomDialogFragmentText
|
import com.example.defenseapplication.view.CustomDialogFragmentText
|
||||||
import com.example.defenseapplication.view.PhoneModifyDialogFragment
|
import com.example.defenseapplication.view.PhoneModifyDialogFragment
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
//个人信息
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
//个人资料
|
||||||
class PersonalProfileActivity : AppCompatActivity() {
|
class PersonalProfileActivity : AppCompatActivity() {
|
||||||
private lateinit var binding: PersonalProfileActivityBinding
|
private lateinit var binding: PersonalProfileActivityBinding
|
||||||
|
private var userInfo: UserInfoBean? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -25,6 +35,9 @@ class PersonalProfileActivity : AppCompatActivity() {
|
|||||||
.statusBarDarkFont(true)
|
.statusBarDarkFont(true)
|
||||||
.titleBar(binding.topBar)
|
.titleBar(binding.topBar)
|
||||||
.init()
|
.init()
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||||
|
userInfo = intent.getParcelableExtra("userInfo", UserInfoBean::class.java)
|
||||||
|
}
|
||||||
initView()
|
initView()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,13 +46,20 @@ class PersonalProfileActivity : AppCompatActivity() {
|
|||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
userInfo?.let { info ->
|
||||||
|
Log.d("头像", "头像 URL = ${info.avatar}")
|
||||||
|
val requestOptions = RequestOptions()
|
||||||
|
.placeholder(R.drawable.img) // 加载中显示
|
||||||
|
.error(R.drawable.img) // 失败时显示
|
||||||
|
|
||||||
Glide.with(this)
|
Glide.with(this)
|
||||||
.load(R.drawable.img)
|
.load(info.avatar) // 如果 avatar 为 null,Glide 会直接回调 error
|
||||||
|
.apply(requestOptions)
|
||||||
.circleCrop()
|
.circleCrop()
|
||||||
.into(binding.ivAvatar)
|
.into(binding.ivAvatar)
|
||||||
|
binding.tvNickname.text = info.nickName ?: getString(R.string.nickname_default)
|
||||||
binding.tvNickname.text = getString(R.string.nickname_default)
|
binding.tvPhone.text = info.phonenumber ?: ""
|
||||||
binding.tvPhone.text = "13589898989"
|
}
|
||||||
|
|
||||||
binding.itemNickname.setOnClickListener {
|
binding.itemNickname.setOnClickListener {
|
||||||
showNicknameDialog()
|
showNicknameDialog()
|
||||||
@@ -62,22 +82,73 @@ class PersonalProfileActivity : AppCompatActivity() {
|
|||||||
.setNegativeText("")
|
.setNegativeText("")
|
||||||
.setOnConfirmListener { newNickname ->
|
.setOnConfirmListener { newNickname ->
|
||||||
if (newNickname.isNotBlank()) {
|
if (newNickname.isNotBlank()) {
|
||||||
binding.tvNickname.text = newNickname
|
updateNickname(newNickname)
|
||||||
Toast.makeText(this, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dialog.show(supportFragmentManager, "nickname_dialog")
|
dialog.show(supportFragmentManager, "nickname_dialog")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateNickname(newNickname: String) {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val request = UpdateUserInfo(
|
||||||
|
userId = userInfo?.userId,
|
||||||
|
nickName = newNickname
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().updateUserInfo(request)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
binding.tvNickname.text = newNickname
|
||||||
|
userInfo = userInfo?.copy(nickName = newNickname)
|
||||||
|
Toast.makeText(this@PersonalProfileActivity, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@PersonalProfileActivity, getString(R.string.operation_failed), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@PersonalProfileActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun showPhoneDialog() {
|
private fun showPhoneDialog() {
|
||||||
val dialog = PhoneModifyDialogFragment()
|
val dialog = PhoneModifyDialogFragment()
|
||||||
.setTitle(getString(R.string.modify_phone))
|
.setTitle(getString(R.string.modify_phone))
|
||||||
.setNegativeText(getString(R.string.cancel))
|
.setNegativeText(getString(R.string.cancel))
|
||||||
.setPositiveText(getString(R.string.verify_and_bind))
|
.setPositiveText(getString(R.string.verify_and_bind))
|
||||||
.setOnConfirmListener { phone, code ->
|
.setOnConfirmListener { phone, code ->
|
||||||
binding.tvPhone.text = phone
|
updatePhone(phone, code)
|
||||||
Toast.makeText(this, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
}
|
||||||
dialog.show(supportFragmentManager, "phone_dialog")
|
dialog.show(supportFragmentManager, "phone_dialog")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updatePhone(phone: String, code: String) {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val request = UpdateUserInfo(
|
||||||
|
userId = userInfo?.userId,
|
||||||
|
phonenumber = phone,
|
||||||
|
smsCoode = code
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().updateUserInfo(request)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
binding.tvPhone.text = phone
|
||||||
|
userInfo = userInfo?.copy(phonenumber = phone)
|
||||||
|
Toast.makeText(this@PersonalProfileActivity, getString(R.string.operation_success), Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@PersonalProfileActivity, getString(R.string.operation_failed), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
Toast.makeText(this@PersonalProfileActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,15 @@ import android.os.Bundle
|
|||||||
import android.os.CountDownTimer
|
import android.os.CountDownTimer
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import bean.ForgotRequest
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.databinding.RetrievePasswordActivityBinding
|
import com.example.defenseapplication.databinding.RetrievePasswordActivityBinding
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
//找回密码页面
|
//找回密码页面
|
||||||
class RetrievePasswordActivity : AppCompatActivity() {
|
class RetrievePasswordActivity : AppCompatActivity() {
|
||||||
@@ -46,8 +52,27 @@ class RetrievePasswordActivity : AppCompatActivity() {
|
|||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.btnGetCode.isEnabled = false
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().getCode(phoneNumber)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
startCountdown()
|
startCountdown()
|
||||||
Toast.makeText(this, String.format(getString(R.string.code_sent_to), phoneNumber), Toast.LENGTH_SHORT).show()
|
Toast.makeText(this@RetrievePasswordActivity, String.format(getString(R.string.code_sent_to), phoneNumber), Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
binding.btnGetCode.isEnabled = true
|
||||||
|
Toast.makeText(this@RetrievePasswordActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.btnGetCode.isEnabled = true
|
||||||
|
Toast.makeText(this@RetrievePasswordActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnConfirmReset.setOnClickListener {
|
binding.btnConfirmReset.setOnClickListener {
|
||||||
@@ -96,8 +121,32 @@ class RetrievePasswordActivity : AppCompatActivity() {
|
|||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
|
|
||||||
Toast.makeText(this, getString(R.string.reset_success), Toast.LENGTH_SHORT).show()
|
binding.btnConfirmReset.isEnabled = false
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val forgotRequest = ForgotRequest(
|
||||||
|
phonenumber = phoneNumber,
|
||||||
|
smsCode = verificationCode,
|
||||||
|
password = newPassword
|
||||||
|
)
|
||||||
|
val response = RetrofitNetwork.getNetworkService().retrievePassword(forgotRequest)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.btnConfirmReset.isEnabled = true
|
||||||
|
if (response.code == 200) {
|
||||||
|
Toast.makeText(this@RetrievePasswordActivity, getString(R.string.reset_success), Toast.LENGTH_SHORT).show()
|
||||||
finish()
|
finish()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@RetrievePasswordActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.btnConfirmReset.isEnabled = true
|
||||||
|
Toast.makeText(this@RetrievePasswordActivity, getString(R.string.network_error), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -163,19 +163,17 @@ object ApiConfig {
|
|||||||
val requestBuilder = chain.request().newBuilder()
|
val requestBuilder = chain.request().newBuilder()
|
||||||
val token = authToken
|
val token = authToken
|
||||||
val langHeader = LanguageHeaderManager.getLanguageHeaderValue()
|
val langHeader = LanguageHeaderManager.getLanguageHeaderValue()
|
||||||
|
|
||||||
|
// 添加必要的请求头
|
||||||
|
requestBuilder.header("clientid", "428a8310cd442757ae699df5d894f051")
|
||||||
|
requestBuilder.header("content-language", langHeader)
|
||||||
|
|
||||||
|
// 如果有 token,添加 Authorization 头
|
||||||
if (token.isNotBlank()) {
|
if (token.isNotBlank()) {
|
||||||
Log.d("ApiConfig", buildAuthorizationValue(token))
|
Log.d("ApiConfig", buildAuthorizationValue(token))
|
||||||
requestBuilder.header("Authorization", buildAuthorizationValue(token))
|
requestBuilder.header("Authorization", buildAuthorizationValue(token))
|
||||||
requestBuilder.header("clientid", "428a8310cd442757ae699df5d894f051")
|
|
||||||
requestBuilder.header("content-language", langHeader)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
requestBuilder
|
|
||||||
// .header("Client-Toc", "Y")
|
|
||||||
// .header("Accept-Language", LanguageHelper.getLanguageServiceStr(BrightApp.getInstance()))
|
|
||||||
// .header("model", "Android")
|
|
||||||
// .header("X-App-Version", AppUtils.getAppVersionName())
|
|
||||||
|
|
||||||
chain.proceed(requestBuilder.build())
|
chain.proceed(requestBuilder.build())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,25 @@ package com.example.defenseapplication.utils
|
|||||||
|
|
||||||
import bean.ForgotRequest
|
import bean.ForgotRequest
|
||||||
import com.example.defenseapplication.bean.DeviceBean
|
import com.example.defenseapplication.bean.DeviceBean
|
||||||
|
import com.example.defenseapplication.bean.DeviceUserBean
|
||||||
import com.example.defenseapplication.bean.FamilyBean
|
import com.example.defenseapplication.bean.FamilyBean
|
||||||
import com.example.defenseapplication.bean.GetCodeBean
|
import com.example.defenseapplication.bean.GetCodeBean
|
||||||
import bean.LoginBean
|
import bean.LoginBean
|
||||||
import bean.LoginRequest
|
import bean.LoginRequest
|
||||||
import bean.RegisterRequest
|
import bean.RegisterRequest
|
||||||
|
import com.example.defenseapplication.bean.AddDeviceBean
|
||||||
|
import com.example.defenseapplication.bean.AddDeviceUserRequest
|
||||||
|
import com.example.defenseapplication.bean.DeleteBean
|
||||||
|
import com.example.defenseapplication.bean.DeleteDeviceUserRequest
|
||||||
|
import com.example.defenseapplication.bean.FamilyMembersBean
|
||||||
import com.example.defenseapplication.bean.MessageGroup
|
import com.example.defenseapplication.bean.MessageGroup
|
||||||
|
import com.example.defenseapplication.bean.ObtainInviterInformationBean
|
||||||
|
import com.example.defenseapplication.bean.ObtainInviterInformationRequest
|
||||||
import com.example.defenseapplication.bean.SwitchFamilyRequest
|
import com.example.defenseapplication.bean.SwitchFamilyRequest
|
||||||
|
import com.example.defenseapplication.bean.UpdatePassword
|
||||||
|
import com.example.defenseapplication.bean.UpdateUserInfo
|
||||||
|
import com.example.defenseapplication.bean.UserInfoBean
|
||||||
|
import com.example.defenseapplication.bean.VerifyOptionPasswordRequest
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import retrofit2.http.POST
|
import retrofit2.http.POST
|
||||||
@@ -62,6 +74,13 @@ interface ApiService {
|
|||||||
@GET("/app/appMessage/list")
|
@GET("/app/appMessage/list")
|
||||||
suspend fun getMessage(): GetCodeBean<List<MessageGroup>>
|
suspend fun getMessage(): GetCodeBean<List<MessageGroup>>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加设备并绑定家庭
|
||||||
|
*/
|
||||||
|
@POST("/app/addDevice")
|
||||||
|
suspend fun addDevice(@Body deviceBean: AddDeviceBean): GetCodeBean<AddDeviceBean>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改设备信息
|
* 修改设备信息
|
||||||
*/
|
*/
|
||||||
@@ -75,6 +94,123 @@ interface ApiService {
|
|||||||
@GET("/app/deviceInfo/{id}")
|
@GET("/app/deviceInfo/{id}")
|
||||||
suspend fun getDeviceInfo(@retrofit2.http.Path("id") id: String): GetCodeBean<DeviceBean>
|
suspend fun getDeviceInfo(@retrofit2.http.Path("id") id: String): GetCodeBean<DeviceBean>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解绑设备
|
||||||
|
*/
|
||||||
|
@POST("/app/deleteDevice")
|
||||||
|
suspend fun deleteDevice(@Body deleteBean: DeleteBean): GetCodeBean<DeleteBean>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查看设备关联用户列表
|
||||||
|
*/
|
||||||
|
@GET("/app/deviceUser/list/{deviceId}")
|
||||||
|
suspend fun getDeviceUserList(
|
||||||
|
@retrofit2.http.Path("deviceId") deviceId: String,
|
||||||
|
@Query("deviceNo") deviceNo: String? = null,
|
||||||
|
@Query("deviceName") deviceName: String? = null,
|
||||||
|
@Query("userId") userId: String? = null,
|
||||||
|
@Query("nickName") nickName: String? = null,
|
||||||
|
@Query("idCard") idCard: String? = null,
|
||||||
|
@Query("phonenumber") phonenumber: String? = null
|
||||||
|
): GetCodeBean<List<DeviceUserBean>>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除关联用户
|
||||||
|
*/
|
||||||
|
@POST("/app/deleteDeviceUser")
|
||||||
|
suspend fun deleteDeviceUser(@Body request: DeleteDeviceUserRequest): GetCodeBean<Any>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查看家庭成员表
|
||||||
|
*/
|
||||||
|
@GET("/app/familyMembers/list")
|
||||||
|
suspend fun getFamilyMembers(
|
||||||
|
@Query("createDept") createDept: Long? = null,
|
||||||
|
@Query("createBy") createBy: Long? = null,
|
||||||
|
@Query("createTime") createTime: String? = null,
|
||||||
|
@Query("updateBy") updateBy: Long? = null,
|
||||||
|
@Query("updateTime") updateTime: String? = null,
|
||||||
|
@Query("params.key.key") paramsKey: String? = null,
|
||||||
|
@Query("id") id: Long? = null,
|
||||||
|
@Query("parentId") parentId: Long? = null,
|
||||||
|
@Query("parentName") parentName: String? = null,
|
||||||
|
@Query("userId") userId: Long? = null,
|
||||||
|
@Query("status") status: String? = null
|
||||||
|
): GetCodeBean<List<FamilyMembersBean>>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加设备关联用户
|
||||||
|
*/
|
||||||
|
@POST("/app/addDeviceUser")
|
||||||
|
suspend fun addDeviceUser(@Body request: AddDeviceUserRequest): GetCodeBean<Any>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取登录用户个人信息
|
||||||
|
*/
|
||||||
|
@GET("/app/userInfo")
|
||||||
|
suspend fun getUserInfo(): GetCodeBean<UserInfoBean>
|
||||||
|
/**
|
||||||
|
* 修改个人信息
|
||||||
|
*/
|
||||||
|
@PUT("/app/updateUserInfo")
|
||||||
|
suspend fun updateUserInfo(@Body request: UpdateUserInfo): GetCodeBean<UpdateUserInfo>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录后旧密码修改密码
|
||||||
|
*/
|
||||||
|
@PUT("/app/forgotPassword")
|
||||||
|
suspend fun updatePassword(@Body request: UpdatePassword): GetCodeBean<UpdatePassword>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登陆后手机号找回密码
|
||||||
|
* */
|
||||||
|
@POST("/app/retrievePassword")
|
||||||
|
suspend fun retrievePassword(@Body request: ForgotRequest): GetCodeBean<ForgotRequest>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验操作密码
|
||||||
|
*/
|
||||||
|
@POST("/app/verifyOptionPassword")
|
||||||
|
suspend fun verifyOptionPassword(@Body request: VerifyOptionPasswordRequest): GetCodeBean<Any>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退出登录
|
||||||
|
*/
|
||||||
|
@POST("/app/logout")
|
||||||
|
suspend fun logout(): GetCodeBean<Any>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取邀请人信息
|
||||||
|
*/
|
||||||
|
@POST("/app/obtainInviterInformation")
|
||||||
|
suspend fun obtainInviterInformation(@Body request: ObtainInviterInformationRequest): GetCodeBean<ObtainInviterInformationBean>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询推荐码状态
|
||||||
|
*/
|
||||||
|
@POST("/app/selectRecommendationCode/{code}")
|
||||||
|
suspend fun selectRecommendationCode(@retrofit2.http.Path("code") code: String): GetCodeBean<Any>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成推荐码
|
||||||
|
*/
|
||||||
|
@POST("/app/generateRecommendationCode")
|
||||||
|
suspend fun generateRecommendationCode(@Body request: VerifyOptionPasswordRequest): GetCodeBean<Any>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销邀请码
|
||||||
|
*/
|
||||||
|
@POST("/app/revokeInvitation")
|
||||||
|
suspend fun revokeInvitation(@Body request: VerifyOptionPasswordRequest): GetCodeBean<Any>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改家庭用户状态
|
||||||
|
*/
|
||||||
|
//@POST("/app/updateFamilyUser")
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.example.defenseapplication.utils
|
||||||
|
|
||||||
|
object DeviceUserUpdateEvent {
|
||||||
|
private val listeners = mutableListOf<DeviceUserUpdateListener>()
|
||||||
|
|
||||||
|
interface DeviceUserUpdateListener {
|
||||||
|
fun onDeviceUserUpdated()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addListener(listener: DeviceUserUpdateListener) {
|
||||||
|
if (!listeners.contains(listener)) {
|
||||||
|
listeners.add(listener)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removeListener(listener: DeviceUserUpdateListener) {
|
||||||
|
listeners.remove(listener)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun notifyUpdate() {
|
||||||
|
listeners.forEach { it.onDeviceUserUpdated() }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
package com.example.defenseapplication.utils
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
|
|
||||||
@@ -6,7 +8,7 @@ enum class AppLanguage(val code: String) {
|
|||||||
SIMPLIFIED_CHINESE("zh_CN"),
|
SIMPLIFIED_CHINESE("zh_CN"),
|
||||||
TRADITIONAL_CHINESE("zh_TW")
|
TRADITIONAL_CHINESE("zh_TW")
|
||||||
}
|
}
|
||||||
//语言枚举与管理器
|
|
||||||
object LanguageHeaderManager {
|
object LanguageHeaderManager {
|
||||||
private const val PREF_NAME = "app_lang_pref"
|
private const val PREF_NAME = "app_lang_pref"
|
||||||
private const val KEY_LANGUAGE = "selected_language"
|
private const val KEY_LANGUAGE = "selected_language"
|
||||||
|
|||||||
@@ -25,4 +25,9 @@ object UserinfoUtil {
|
|||||||
return gson.fromJson(string, LoginBean::class.java)
|
return gson.fromJson(string, LoginBean::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun clearUserInfo() {
|
||||||
|
SPUtils.getInstance().remove(KEY_USER)
|
||||||
|
ApiConfig.updateAuthToken("")
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -81,7 +81,7 @@ class FamilySwitchDialog(
|
|||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
if (response.code == 200 && response.data != null) {
|
if (response.code == 200 && response.data != null) {
|
||||||
familyBeanList = response.data.reversed()
|
familyBeanList = response.data.reversed()
|
||||||
val familyItems = familyBeanList.map { FamilyItem(it.id, it.parentName) }
|
val familyItems = familyBeanList.map { FamilyItem(it.id, it.parentName, it.role) }
|
||||||
adapter.updateList(familyItems)
|
adapter.updateList(familyItems)
|
||||||
|
|
||||||
familyBeanList.firstOrNull()?.let {
|
familyBeanList.firstOrNull()?.let {
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ package com.example.defenseapplication.view
|
|||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.Gravity
|
||||||
import android.view.Window
|
import android.view.Window
|
||||||
|
import android.view.WindowManager
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
@@ -16,23 +17,28 @@ import com.example.defenseapplication.utils.LanguageUtil
|
|||||||
class LanguageDialog(
|
class LanguageDialog(
|
||||||
context: Context,
|
context: Context,
|
||||||
private val onLanguageSelected: (String) -> Unit
|
private val onLanguageSelected: (String) -> Unit
|
||||||
) : Dialog(context) {
|
) : Dialog(context, R.style.BottomDialogStyle) {
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
requestWindowFeature(Window.FEATURE_NO_TITLE)
|
requestWindowFeature(Window.FEATURE_NO_TITLE)
|
||||||
setContentView(R.layout.dialog_language)
|
setContentView(R.layout.dialog_language)
|
||||||
|
|
||||||
// 设置对话框宽度为屏幕宽度的80%
|
val window = window
|
||||||
window?.setLayout(
|
val params = window?.attributes
|
||||||
(context.resources.displayMetrics.widthPixels * 0.8).toInt(),
|
params?.width = WindowManager.LayoutParams.MATCH_PARENT
|
||||||
LinearLayout.LayoutParams.WRAP_CONTENT
|
params?.height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||||
)
|
params?.gravity = Gravity.BOTTOM
|
||||||
|
window?.attributes = params
|
||||||
|
window?.setBackgroundDrawableResource(android.R.color.transparent)
|
||||||
|
window?.setDimAmount(0.5f)
|
||||||
|
|
||||||
initViews()
|
initViews()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initViews() {
|
private fun initViews() {
|
||||||
|
val llChinese = findViewById<LinearLayout>(R.id.llChinese)
|
||||||
|
val llEnglish = findViewById<LinearLayout>(R.id.llEnglish)
|
||||||
val tvChinese = findViewById<TextView>(R.id.tvChinese)
|
val tvChinese = findViewById<TextView>(R.id.tvChinese)
|
||||||
val tvEnglish = findViewById<TextView>(R.id.tvEnglish)
|
val tvEnglish = findViewById<TextView>(R.id.tvEnglish)
|
||||||
val tvCancel = findViewById<TextView>(R.id.tvCancel)
|
val tvCancel = findViewById<TextView>(R.id.tvCancel)
|
||||||
@@ -46,12 +52,12 @@ class LanguageDialog(
|
|||||||
tvEnglish.setTextColor(context.getColor(R.color.green))
|
tvEnglish.setTextColor(context.getColor(R.color.green))
|
||||||
}
|
}
|
||||||
|
|
||||||
tvChinese.setOnClickListener {
|
llChinese.setOnClickListener {
|
||||||
onLanguageSelected(LanguageUtil.LANGUAGE_CHINESE)
|
onLanguageSelected(LanguageUtil.LANGUAGE_CHINESE)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
|
|
||||||
tvEnglish.setOnClickListener {
|
llEnglish.setOnClickListener {
|
||||||
onLanguageSelected(LanguageUtil.LANGUAGE_ENGLISH)
|
onLanguageSelected(LanguageUtil.LANGUAGE_ENGLISH)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,18 @@
|
|||||||
package com.example.defenseapplication.view
|
package com.example.defenseapplication.personal
|
||||||
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.drawable.ColorDrawable
|
import android.graphics.drawable.ColorDrawable
|
||||||
|
import android.text.Editable
|
||||||
|
import android.text.InputFilter
|
||||||
|
import android.text.TextWatcher
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
|
import android.view.animation.AnimationUtils
|
||||||
|
import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.databinding.DialogPasswordInputBinding
|
import com.example.defenseapplication.databinding.DialogPasswordInputBinding
|
||||||
@@ -18,6 +23,9 @@ class PasswordInputDialog(context: Context) : Dialog(context) {
|
|||||||
private var onConfirmListener: ((String) -> Unit)? = null
|
private var onConfirmListener: ((String) -> Unit)? = null
|
||||||
private var onDismissListener: (() -> Unit)? = null
|
private var onDismissListener: (() -> Unit)? = null
|
||||||
|
|
||||||
|
// 6个密码输入框数组
|
||||||
|
private lateinit var passwordEditTexts: Array<EditText>
|
||||||
|
|
||||||
init {
|
init {
|
||||||
initView()
|
initView()
|
||||||
}
|
}
|
||||||
@@ -26,68 +34,204 @@ class PasswordInputDialog(context: Context) : Dialog(context) {
|
|||||||
binding = DialogPasswordInputBinding.inflate(LayoutInflater.from(context))
|
binding = DialogPasswordInputBinding.inflate(LayoutInflater.from(context))
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
|
setCanceledOnTouchOutside(true)
|
||||||
|
|
||||||
window?.apply {
|
window?.apply {
|
||||||
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||||
val params = attributes
|
val params = attributes
|
||||||
params.gravity = Gravity.CENTER
|
params.gravity = Gravity.CENTER
|
||||||
params.width = WindowManager.LayoutParams.MATCH_PARENT
|
// 设置弹窗宽度:屏幕宽度 - 左边距37 - 右边距36
|
||||||
|
val displayMetrics = context.resources.displayMetrics
|
||||||
|
val screenWidth = displayMetrics.widthPixels
|
||||||
|
params.width = screenWidth - 73 // 37 + 36
|
||||||
params.height = WindowManager.LayoutParams.WRAP_CONTENT
|
params.height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||||
params.horizontalMargin = 40f
|
setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
|
||||||
attributes = params
|
attributes = params
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 初始化输入框数组
|
||||||
|
passwordEditTexts = arrayOf(
|
||||||
|
binding.etPwd0,
|
||||||
|
binding.etPwd1,
|
||||||
|
binding.etPwd2,
|
||||||
|
binding.etPwd3,
|
||||||
|
binding.etPwd4,
|
||||||
|
binding.etPwd5
|
||||||
|
)
|
||||||
|
|
||||||
setupPasswordInput()
|
setupPasswordInput()
|
||||||
|
|
||||||
binding.btnCancel.setOnClickListener {
|
binding.ivClose.setOnClickListener {
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnConfirm.setOnClickListener {
|
// 自动弹出键盘
|
||||||
val password = getPassword()
|
binding.root.post {
|
||||||
if (password.length == 6) {
|
passwordEditTexts[0].requestFocus()
|
||||||
onConfirmListener?.invoke(password)
|
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||||
dismiss()
|
imm.showSoftInput(passwordEditTexts[0], InputMethodManager.SHOW_IMPLICIT)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupPasswordInput() {
|
private fun setupPasswordInput() {
|
||||||
val editTexts = listOf(
|
// 为每个输入框设置监听器
|
||||||
binding.etPassword1,
|
for (i in passwordEditTexts.indices) {
|
||||||
binding.etPassword2,
|
val currentEt = passwordEditTexts[i]
|
||||||
binding.etPassword3,
|
|
||||||
binding.etPassword4,
|
|
||||||
binding.etPassword5,
|
|
||||||
binding.etPassword6
|
|
||||||
)
|
|
||||||
|
|
||||||
editTexts.forEachIndexed { index, editText ->
|
// 设置只能输入数字
|
||||||
editText.setOnKeyListener { _, _, _ ->
|
currentEt.filters = arrayOf(InputFilter.LengthFilter(1))
|
||||||
if (editText.text.isNotEmpty()) {
|
|
||||||
if (index < editTexts.size - 1) {
|
currentEt.addTextChangedListener(object : TextWatcher {
|
||||||
editTexts[index + 1].requestFocus()
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||||
|
|
||||||
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
||||||
|
// 用户手动输入或删除时清除错误
|
||||||
|
if (count > 0 || before > 0) {
|
||||||
|
clearError()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun afterTextChanged(s: Editable?) {
|
||||||
|
val text = s?.toString() ?: ""
|
||||||
|
|
||||||
|
if (text.isNotEmpty()) {
|
||||||
|
// 输入了内容,自动跳转到下一个输入框
|
||||||
|
if (i < passwordEditTexts.size - 1) {
|
||||||
|
// 检查是否按顺序输入:当前位置之前的所有输入框都必须有内容
|
||||||
|
if (isInputInOrder(i)) {
|
||||||
|
passwordEditTexts[i + 1].requestFocus()
|
||||||
} else {
|
} else {
|
||||||
editText.clearFocus()
|
// 不是按顺序输入,清空当前输入
|
||||||
|
currentEt.text?.clear()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 检查是否已输入完6位密码
|
||||||
|
checkPasswordComplete()
|
||||||
|
} else {
|
||||||
|
// 删除了内容,自动跳转到上一个有内容的输入框
|
||||||
|
if (currentEt.hasFocus()) {
|
||||||
|
// 从当前位置往前查找第一个有内容的输入框
|
||||||
|
val previousFilledIndex = findPreviousFilledIndex(i)
|
||||||
|
if (previousFilledIndex >= 0) {
|
||||||
|
passwordEditTexts[previousFilledIndex].requestFocus()
|
||||||
|
// 选中内容,方便继续删除
|
||||||
|
passwordEditTexts[previousFilledIndex].selectAll()
|
||||||
|
} else if (i > 0) {
|
||||||
|
// 如果前面都为空,保持在第一个输入框
|
||||||
|
passwordEditTexts[0].requestFocus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 设置键盘监听器,处理当前框为空时按删除键的情况
|
||||||
|
currentEt.setOnKeyListener { _, keyCode, event ->
|
||||||
|
// 只处理删除键按下事件
|
||||||
|
if (keyCode == android.view.KeyEvent.KEYCODE_DEL && event.action == android.view.KeyEvent.ACTION_DOWN) {
|
||||||
|
val currentText = currentEt.text.toString()
|
||||||
|
// 如果当前输入框为空,跳转到上一个有内容的输入框并删除
|
||||||
|
if (currentText.isEmpty() && i > 0) {
|
||||||
|
val previousFilledIndex = findPreviousFilledIndex(i)
|
||||||
|
if (previousFilledIndex >= 0) {
|
||||||
|
// 删除上一个输入框的内容
|
||||||
|
passwordEditTexts[previousFilledIndex].text?.clear()
|
||||||
|
// 继续向前查找下一个有内容的输入框
|
||||||
|
val newPreviousIndex = findPreviousFilledIndex(previousFilledIndex)
|
||||||
|
if (newPreviousIndex >= 0) {
|
||||||
|
passwordEditTexts[newPreviousIndex].requestFocus()
|
||||||
|
passwordEditTexts[newPreviousIndex].selectAll()
|
||||||
|
} else {
|
||||||
|
// 如果前面都为空,定位到第一个输入框
|
||||||
|
passwordEditTexts[0].requestFocus()
|
||||||
|
}
|
||||||
|
return@setOnKeyListener true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
editText.setOnFocusChangeListener { v, hasFocus ->
|
// 设置触摸监听器,确保按顺序输入
|
||||||
if (hasFocus) {
|
currentEt.setOnTouchListener { _, _ ->
|
||||||
(v as EditText).setSelection((v.text?.length ?: 0))
|
// 如果不是第一个输入框,检查前面的输入框是否都有内容
|
||||||
|
if (i > 0) {
|
||||||
|
val previousText = passwordEditTexts[i - 1].text.toString()
|
||||||
|
if (previousText.isEmpty()) {
|
||||||
|
// 前面的输入框为空,自动跳转到第一个空的输入框
|
||||||
|
val firstEmptyIndex = findFirstEmptyIndex()
|
||||||
|
if (firstEmptyIndex < i) {
|
||||||
|
passwordEditTexts[firstEmptyIndex].requestFocus()
|
||||||
|
return@setOnTouchListener true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查是否按顺序输入
|
||||||
|
*/
|
||||||
|
private fun isInputInOrder(currentIndex: Int): Boolean {
|
||||||
|
for (i in 0 until currentIndex) {
|
||||||
|
if (passwordEditTexts[i].text.toString().isEmpty()) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找第一个空的输入框索引
|
||||||
|
*/
|
||||||
|
private fun findFirstEmptyIndex(): Int {
|
||||||
|
for (i in passwordEditTexts.indices) {
|
||||||
|
if (passwordEditTexts[i].text.toString().isEmpty()) {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return passwordEditTexts.size
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从指定位置往前查找第一个有内容的输入框索引
|
||||||
|
* @param startIndex 开始查找的位置(不包含)
|
||||||
|
* @return 第一个有内容的输入框索引,未找到返回 -1
|
||||||
|
*/
|
||||||
|
private fun findPreviousFilledIndex(startIndex: Int): Int {
|
||||||
|
for (i in startIndex - 1 downTo 0) {
|
||||||
|
if (passwordEditTexts[i].text.toString().isNotEmpty()) {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查密码是否输入完成
|
||||||
|
*/
|
||||||
|
private fun checkPasswordComplete() {
|
||||||
|
val password = getPassword()
|
||||||
|
if (password.length == 6) {
|
||||||
|
autoVerifyPassword()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun autoVerifyPassword() {
|
||||||
|
val password = getPassword()
|
||||||
|
if (password.length == 6) {
|
||||||
|
onConfirmListener?.invoke(password)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getPassword(): String {
|
private fun getPassword(): String {
|
||||||
return binding.etPassword1.text.toString() +
|
val sb = StringBuilder()
|
||||||
binding.etPassword2.text.toString() +
|
for (et in passwordEditTexts) {
|
||||||
binding.etPassword3.text.toString() +
|
sb.append(et.text.toString())
|
||||||
binding.etPassword4.text.toString() +
|
}
|
||||||
binding.etPassword5.text.toString() +
|
return sb.toString()
|
||||||
binding.etPassword6.text.toString()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setOnConfirmListener(listener: (String) -> Unit): PasswordInputDialog {
|
fun setOnConfirmListener(listener: (String) -> Unit): PasswordInputDialog {
|
||||||
@@ -103,6 +247,15 @@ class PasswordInputDialog(context: Context) : Dialog(context) {
|
|||||||
fun showError(message: String) {
|
fun showError(message: String) {
|
||||||
binding.tvError.text = message
|
binding.tvError.text = message
|
||||||
binding.tvError.visibility = View.VISIBLE
|
binding.tvError.visibility = View.VISIBLE
|
||||||
|
shakePasswordInput()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun shakePasswordInput() {
|
||||||
|
val shakeAnimation = AnimationUtils.loadAnimation(context, R.anim.shake)
|
||||||
|
// 对每个输入框应用抖动动画
|
||||||
|
for (et in passwordEditTexts) {
|
||||||
|
et.startAnimation(shakeAnimation)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun clearError() {
|
fun clearError() {
|
||||||
@@ -111,16 +264,16 @@ class PasswordInputDialog(context: Context) : Dialog(context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun clearPassword() {
|
fun clearPassword() {
|
||||||
binding.etPassword1.text?.clear()
|
for (et in passwordEditTexts) {
|
||||||
binding.etPassword2.text?.clear()
|
et.text?.clear()
|
||||||
binding.etPassword3.text?.clear()
|
}
|
||||||
binding.etPassword4.text?.clear()
|
passwordEditTexts[0].requestFocus()
|
||||||
binding.etPassword5.text?.clear()
|
|
||||||
binding.etPassword6.text?.clear()
|
|
||||||
binding.etPassword1.requestFocus()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun dismiss() {
|
override fun dismiss() {
|
||||||
|
// 隐藏键盘
|
||||||
|
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||||
|
imm.hideSoftInputFromWindow(passwordEditTexts[0].windowToken, 0)
|
||||||
super.dismiss()
|
super.dismiss()
|
||||||
onDismissListener?.invoke()
|
onDismissListener?.invoke()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ import android.view.WindowManager
|
|||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import com.example.defenseapplication.R
|
import com.example.defenseapplication.R
|
||||||
import com.example.defenseapplication.databinding.DialogPhoneModifyBinding
|
import com.example.defenseapplication.databinding.DialogPhoneModifyBinding
|
||||||
|
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
//手机号弹窗
|
//手机号弹窗
|
||||||
class PhoneModifyDialogFragment : DialogFragment() {
|
class PhoneModifyDialogFragment : DialogFragment() {
|
||||||
@@ -86,7 +91,7 @@ class PhoneModifyDialogFragment : DialogFragment() {
|
|||||||
ToastUtils.showToast(requireContext(), getString(R.string.invalid_phone))
|
ToastUtils.showToast(requireContext(), getString(R.string.invalid_phone))
|
||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
startCountDown()
|
sendCode(phone)
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnNegative.setOnClickListener {
|
binding.btnNegative.setOnClickListener {
|
||||||
@@ -109,6 +114,27 @@ class PhoneModifyDialogFragment : DialogFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun sendCode(phone: String) {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
val response = RetrofitNetwork.getNetworkService().getCode(phone)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
if (response.code == 200) {
|
||||||
|
ToastUtils.showToast(requireContext(), getString(R.string.code_sent_success))
|
||||||
|
startCountDown()
|
||||||
|
} else {
|
||||||
|
ToastUtils.showToast(requireContext(), getString(R.string.code_send_failed))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
ToastUtils.showToast(requireContext(), getString(R.string.network_error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun startCountDown() {
|
private fun startCountDown() {
|
||||||
binding.tvSendCode.isEnabled = false
|
binding.tvSendCode.isEnabled = false
|
||||||
countDownTimer = object : CountDownTimer(60000, 1000) {
|
countDownTimer = object : CountDownTimer(60000, 1000) {
|
||||||
|
|||||||
8
app/src/main/res/anim/shake.xml
Normal file
8
app/src/main/res/anim/shake.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:duration="50"
|
||||||
|
android:fromXDelta="0"
|
||||||
|
android:toXDelta="-15"
|
||||||
|
android:repeatCount="5"
|
||||||
|
android:repeatMode="reverse"
|
||||||
|
android:interpolator="@android:anim/cycle_interpolator" />
|
||||||
9
app/src/main/res/drawable/bg_blue_border_round.xml
Normal file
9
app/src/main/res/drawable/bg_blue_border_round.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/white" />
|
||||||
|
<stroke
|
||||||
|
android:width="1dp"
|
||||||
|
android:color="@color/green" />
|
||||||
|
<corners android:radius="8dp" />
|
||||||
|
</shape>
|
||||||
6
app/src/main/res/drawable/bg_blue_round.xml
Normal file
6
app/src/main/res/drawable/bg_blue_round.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/green" />
|
||||||
|
<corners android:radius="8dp" />
|
||||||
|
</shape>
|
||||||
BIN
app/src/main/res/drawable/chahao.png
Normal file
BIN
app/src/main/res/drawable/chahao.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/drawable/chinexe.png
Normal file
BIN
app/src/main/res/drawable/chinexe.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/drawable/english.png
Normal file
BIN
app/src/main/res/drawable/english.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
6
app/src/main/res/drawable/password_single_bg.xml
Normal file
6
app/src/main/res/drawable/password_single_bg.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<solid android:color="#EDFFFE " />
|
||||||
|
<stroke android:width="1dp" android:color="#09C2BD" />
|
||||||
|
<corners android:radius="8dp" />
|
||||||
|
</shape>
|
||||||
BIN
app/src/main/res/drawable/syis.png
Normal file
BIN
app/src/main/res/drawable/syis.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
@@ -1,11 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/main"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:background="@color/bg_gray"
|
android:background="@color/bg_gray"
|
||||||
tools:context=".liveVideo.LinkedUserSearchActivity">
|
tools:context=".liveVideo.LinkedUserActivity">
|
||||||
|
|
||||||
<!-- 标题栏 -->
|
<!-- 标题栏 -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -27,22 +29,15 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/search"
|
android:text="@string/linked_user"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="16dp"
|
android:textSize="16dp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/btnSearch"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/search"
|
|
||||||
android:textColor="@color/green"
|
|
||||||
android:textSize="14sp"/>
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<!-- 搜索输入框 -->
|
<!-- 搜索区域 -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/searchLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/white"
|
android:background="@color/white"
|
||||||
@@ -66,21 +61,58 @@
|
|||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/etSearch"
|
android:id="@+id/etSearch"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="40dp"
|
||||||
|
android:background="@null"
|
||||||
android:hint="@string/search_preset_text"
|
android:hint="@string/search_preset_text"
|
||||||
android:textColor="@color/black"
|
|
||||||
android:textColorHint="@color/gray"
|
android:textColorHint="@color/gray"
|
||||||
|
android:textColor="@color/black"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
android:background="@null"/>
|
android:inputType="text"
|
||||||
|
android:imeOptions="actionSearch"
|
||||||
|
android:singleLine="true"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
<!-- 列表区域 -->
|
||||||
<!-- 搜索结果列表 -->
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
android:id="@+id/swipeRefresh"
|
||||||
android:id="@+id/rvSearchResult"
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1">
|
||||||
|
<com.yanzhenjie.recyclerview.SwipeRecyclerView
|
||||||
|
android:id="@+id/rvLinkedUser"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
android:paddingTop="8dp"/>
|
android:paddingTop="8dp"
|
||||||
|
android:paddingBottom="16dp"/>
|
||||||
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
|
<!-- 底部按钮 -->
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingHorizontal="16dp"
|
||||||
|
android:paddingBottom="60dp">
|
||||||
|
|
||||||
|
<android.widget.Button
|
||||||
|
android:id="@+id/btnAddLinkedUser"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:text="@string/add_linked_user"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="14dp"
|
||||||
|
android:background="@drawable/rounded_blue_bg" />
|
||||||
|
<!-- 悬浮加号按钮 -->
|
||||||
|
<ImageView
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:src="@drawable/add_img"
|
||||||
|
android:id="@+id/fabAdd"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
|
android:background="@color/bg_gray"
|
||||||
tools:context=".liveVideo.AddLinkedUserActivity">
|
tools:context=".liveVideo.AddLinkedUserActivity">
|
||||||
|
|
||||||
<!-- 标题栏 -->
|
<!-- 标题栏 -->
|
||||||
@@ -67,14 +68,19 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<!-- 列表区域 -->
|
<!-- 列表区域 -->
|
||||||
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
|
android:id="@+id/swipeRefresh"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1">
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/rvAddLinkedUser"
|
android:id="@+id/rvAddLinkedUser"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
android:paddingTop="8dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingBottom="16dp"/>
|
android:paddingBottom="16dp"/>
|
||||||
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
<!-- 底部按钮 -->
|
<!-- 底部按钮 -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|||||||
@@ -21,34 +21,66 @@
|
|||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:background="#EEEEEE" />
|
android:background="#EEEEEE" />
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:id="@+id/tvChinese"
|
android:id="@+id/llChinese"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="56dp"
|
android:layout_height="80dp"
|
||||||
android:gravity="center"
|
android:orientation="horizontal"
|
||||||
android:text="@string/chinese"
|
android:gravity="center_vertical"
|
||||||
android:textColor="@color/black"
|
android:paddingStart="16dp"
|
||||||
android:textSize="16sp"
|
android:paddingEnd="16dp"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true" />
|
android:focusable="true">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="50dp"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:src="@drawable/chinexe"
|
||||||
|
android:scaleType="centerInside" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvChinese"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/chinese"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:layout_marginStart="16dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:background="#EEEEEE" />
|
android:background="#EEEEEE" />
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:id="@+id/tvEnglish"
|
android:id="@+id/llEnglish"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="56dp"
|
android:layout_height="80dp"
|
||||||
android:gravity="center"
|
android:orientation="horizontal"
|
||||||
android:text="@string/english"
|
android:gravity="center_vertical"
|
||||||
android:textColor="@color/black"
|
android:paddingStart="16dp"
|
||||||
android:textSize="16sp"
|
android:paddingEnd="16dp"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true" />
|
android:focusable="true">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="50dp"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:src="@drawable/english"
|
||||||
|
android:scaleType="centerInside" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvEnglish"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/english"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:layout_marginStart="16dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/round_bg"
|
android:background="@drawable/round_bg"
|
||||||
@@ -8,25 +9,36 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingStart="24dp"
|
android:paddingStart="24dp"
|
||||||
android:paddingTop="32dp"
|
android:paddingTop="32dp"
|
||||||
android:paddingEnd="24dp"
|
android:paddingEnd="24dp"
|
||||||
android:paddingBottom="28dp">
|
android:paddingBottom="28dp">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_title"
|
android:id="@+id/tv_title"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:layout_centerHorizontal="true"
|
||||||
android:text="@string/operation_password"
|
android:text="@string/input_op_pwd"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="16dp"
|
android:textSize="16dp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_close"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:src="@drawable/chahao" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<!-- 6个独立的密码输入框 -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/ll_password_input"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="24dp"
|
android:layout_marginTop="24dp"
|
||||||
@@ -35,135 +47,112 @@
|
|||||||
android:weightSum="6">
|
android:weightSum="6">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/et_password_1"
|
android:id="@+id/et_pwd_0"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="40dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginHorizontal="4dp"
|
android:background="@drawable/password_single_bg"
|
||||||
android:background="@drawable/password_input_bg"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:inputType="numberPassword"
|
android:inputType="numberPassword"
|
||||||
android:maxLength="1"
|
android:maxLength="1"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="18sp"
|
android:textSize="24sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:fontFamily="monospace" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/et_password_2"
|
android:id="@+id/et_pwd_1"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="40dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginHorizontal="4dp"
|
android:layout_marginStart="8dp"
|
||||||
android:background="@drawable/password_input_bg"
|
android:background="@drawable/password_single_bg"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:inputType="numberPassword"
|
android:inputType="numberPassword"
|
||||||
android:maxLength="1"
|
android:maxLength="1"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="18sp"
|
android:textSize="24sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:fontFamily="monospace" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/et_password_3"
|
android:id="@+id/et_pwd_2"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="40dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginHorizontal="4dp"
|
android:layout_marginStart="8dp"
|
||||||
android:background="@drawable/password_input_bg"
|
android:background="@drawable/password_single_bg"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:inputType="numberPassword"
|
android:inputType="numberPassword"
|
||||||
android:maxLength="1"
|
android:maxLength="1"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="18sp"
|
android:textSize="24sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:fontFamily="monospace" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/et_password_4"
|
android:id="@+id/et_pwd_3"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="40dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginHorizontal="4dp"
|
android:layout_marginStart="8dp"
|
||||||
android:background="@drawable/password_input_bg"
|
android:background="@drawable/password_single_bg"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:inputType="numberPassword"
|
android:inputType="numberPassword"
|
||||||
android:maxLength="1"
|
android:maxLength="1"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="18sp"
|
android:textSize="24sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:fontFamily="monospace" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/et_password_5"
|
android:id="@+id/et_pwd_4"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="40dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginHorizontal="4dp"
|
android:layout_marginStart="8dp"
|
||||||
android:background="@drawable/password_input_bg"
|
android:background="@drawable/password_single_bg"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:inputType="numberPassword"
|
android:inputType="numberPassword"
|
||||||
android:maxLength="1"
|
android:maxLength="1"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="18sp"
|
android:textSize="24sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:fontFamily="monospace" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/et_password_6"
|
android:id="@+id/et_pwd_5"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="40dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginHorizontal="4dp"
|
android:layout_marginStart="8dp"
|
||||||
android:background="@drawable/password_input_bg"
|
android:background="@drawable/password_single_bg"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:inputType="numberPassword"
|
android:inputType="numberPassword"
|
||||||
android:maxLength="1"
|
android:maxLength="1"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="18sp"
|
android:textSize="24sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:fontFamily="monospace" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_error"
|
android:id="@+id/tv_error"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="12dp"
|
android:layout_marginTop="12dp"
|
||||||
|
android:gravity="center"
|
||||||
android:textColor="@color/red"
|
android:textColor="@color/red"
|
||||||
android:textSize="12sp"
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="@color/dialog_view" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="56dp"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/btn_cancel"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="@string/cancel"
|
|
||||||
android:textColor="@color/black"
|
|
||||||
android:textSize="16dp"
|
|
||||||
android:textStyle="bold" />
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="1dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@color/dialog_view" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/btn_confirm"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="@string/confirm"
|
|
||||||
android:textColor="@color/green"
|
|
||||||
android:textSize="16dp"
|
|
||||||
android:textStyle="bold" />
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:background="@drawable/rounded_top_corner"
|
android:background="@drawable/rounded_top_corner"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
@@ -20,11 +20,18 @@
|
|||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:background="@color/dialog_view" />
|
android:background="@color/dialog_view" />
|
||||||
|
|
||||||
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
|
android:id="@+id/swipeRefreshLayout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/rvWifiList"
|
android:id="@+id/rvWifiList"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:maxHeight="400dp"
|
|
||||||
android:overScrollMode="never" />
|
android:overScrollMode="never" />
|
||||||
|
|
||||||
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
<!-- 标题栏 -->
|
<!-- 标题栏 -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/topBar"
|
android:id="@+id/topBar"
|
||||||
android:layout_width="0dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="56dp"
|
android:layout_height="56dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/login_password"
|
android:text="@string/face_management"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="16dp"
|
android:textSize="16dp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|||||||
@@ -16,14 +16,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/statusBarPlaceholder"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="36dp"
|
|
||||||
android:background="#26000000"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/topContainer" />
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/topContainer"
|
android:id="@+id/topContainer"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
@@ -32,7 +24,7 @@
|
|||||||
android:paddingTop="8dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingEnd="16dp"
|
android:paddingEnd="16dp"
|
||||||
android:paddingBottom="8dp"
|
android:paddingBottom="8dp"
|
||||||
app:layout_constraintTop_toBottomOf="@id/statusBarPlaceholder"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent">
|
app:layout_constraintStart_toStartOf="parent">
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,28 @@
|
|||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:src="@mipmap/loge" />
|
android:src="@mipmap/loge" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
<!-- 使用智能文字和图标 -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:src="@drawable/syis" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:text="@string/use_smart_defense_app"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<!-- 说明文字 -->
|
<!-- 说明文字 -->
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvTips"
|
android:id="@+id/tvTips"
|
||||||
@@ -125,7 +147,9 @@
|
|||||||
android:text="@string/invite_code_tips"
|
android:text="@string/invite_code_tips"
|
||||||
android:textColor="@color/gray"
|
android:textColor="@color/gray"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:lineSpacingMultiplier="1.2" />
|
android:lineSpacingMultiplier="1.2"
|
||||||
|
android:padding="12dp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<!-- 其他邀请方式 -->
|
<!-- 其他邀请方式 -->
|
||||||
@@ -169,4 +193,38 @@
|
|||||||
android:src="@drawable/right_back" />
|
android:src="@drawable/right_back" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- 底部按钮区域 -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="16dp"
|
||||||
|
android:layout_marginTop="42dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="bottom">
|
||||||
|
|
||||||
|
<android.widget.Button
|
||||||
|
android:id="@+id/btnCancelInvite"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_marginEnd="12dp"
|
||||||
|
android:text="@string/cancel_invite"
|
||||||
|
android:textColor="@color/green"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:background="@drawable/bg_blue_border_round"
|
||||||
|
android:textAllCaps="false" />
|
||||||
|
|
||||||
|
<android.widget.Button
|
||||||
|
android:id="@+id/btnRegenerate"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/regenerate"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:background="@drawable/bg_blue_round"
|
||||||
|
android:textAllCaps="false" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -1,40 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<!-- 背景删除按钮 -->
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/llDelete"
|
|
||||||
android:layout_width="100dp"
|
|
||||||
android:layout_height="120dp"
|
|
||||||
android:background="@color/red"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="vertical"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tvDeleteAction"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/unlink"
|
|
||||||
android:textColor="@color/white"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:textStyle="bold"/>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<!-- 前景内容 -->
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/llContent"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="120dp"
|
android:layout_height="120dp"
|
||||||
android:background="@color/white"
|
android:background="@color/white"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="16dp"
|
android:padding="16dp">
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -62,17 +32,16 @@
|
|||||||
android:id="@+id/tvPhone"
|
android:id="@+id/tvPhone"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
android:textColor="@color/gray"
|
android:textColor="@color/gray"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp" />
|
||||||
android:layout_marginTop="8dp"/>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvIdCard"
|
android:id="@+id/tvIdCard"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
android:textColor="@color/gray"
|
android:textColor="@color/gray"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp" />
|
||||||
android:layout_marginTop="4dp"/>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</LinearLayout>
|
||||||
@@ -58,23 +58,34 @@
|
|||||||
android:src="@drawable/search"
|
android:src="@drawable/search"
|
||||||
android:layout_marginRight="8dp"/>
|
android:layout_marginRight="8dp"/>
|
||||||
|
|
||||||
<TextView
|
<EditText
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/etSearch"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:text="@string/search_preset_text"
|
android:layout_height="40dp"
|
||||||
android:textColor="@color/gray"
|
android:background="@null"
|
||||||
android:textSize="14sp"/>
|
android:hint="@string/search_preset_text"
|
||||||
|
android:textColorHint="@color/gray"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:inputType="text"
|
||||||
|
android:imeOptions="actionSearch"
|
||||||
|
android:singleLine="true"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<!-- 列表区域 -->
|
<!-- 列表区域 -->
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/rvLinkedUser"
|
android:id="@+id/swipeRefresh"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1">
|
||||||
|
<com.yanzhenjie.recyclerview.SwipeRecyclerView
|
||||||
|
android:id="@+id/rvLinkedUser"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
android:paddingTop="8dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingBottom="16dp"/>
|
android:paddingBottom="16dp"/>
|
||||||
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
<!-- 底部按钮 -->
|
<!-- 底部按钮 -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@color/message_bg"
|
android:background="@color/message_bg"
|
||||||
android:padding="16dp"
|
|
||||||
tools:context=".personal.LoginPasswordActivity">
|
tools:context=".personal.LoginPasswordActivity">
|
||||||
|
|
||||||
<!-- 标题栏 -->
|
<!-- 标题栏 -->
|
||||||
@@ -39,6 +38,7 @@
|
|||||||
|
|
||||||
<!-- 旧密码输入框 -->
|
<!-- 旧密码输入框 -->
|
||||||
<EditText
|
<EditText
|
||||||
|
android:layout_margin="16dp"
|
||||||
android:id="@+id/etOldPassword"
|
android:id="@+id/etOldPassword"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -57,6 +57,7 @@
|
|||||||
|
|
||||||
<!-- 新密码输入框 -->
|
<!-- 新密码输入框 -->
|
||||||
<EditText
|
<EditText
|
||||||
|
android:layout_margin="16dp"
|
||||||
android:id="@+id/etNewPassword"
|
android:id="@+id/etNewPassword"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -75,6 +76,7 @@
|
|||||||
|
|
||||||
<!-- 再次输入新密码输入框 -->
|
<!-- 再次输入新密码输入框 -->
|
||||||
<EditText
|
<EditText
|
||||||
|
android:layout_margin="16dp"
|
||||||
android:id="@+id/etConfirmPassword"
|
android:id="@+id/etConfirmPassword"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -93,6 +95,7 @@
|
|||||||
|
|
||||||
<!-- 确定重设密码按钮 -->
|
<!-- 确定重设密码按钮 -->
|
||||||
<android.widget.Button
|
<android.widget.Button
|
||||||
|
android:layout_margin="16dp"
|
||||||
android:id="@+id/btnConfirm"
|
android:id="@+id/btnConfirm"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
|||||||
@@ -108,7 +108,7 @@
|
|||||||
<android.widget.Button
|
<android.widget.Button
|
||||||
android:id="@+id/btnConfirmReset"
|
android:id="@+id/btnConfirmReset"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="48dp"
|
android:layout_height="40dp"
|
||||||
android:layout_marginTop="32dp"
|
android:layout_marginTop="32dp"
|
||||||
android:background="@drawable/rounded_blue_bg"
|
android:background="@drawable/rounded_blue_bg"
|
||||||
android:text="@string/confirm_reset_password_btn"
|
android:text="@string/confirm_reset_password_btn"
|
||||||
|
|||||||
@@ -22,8 +22,7 @@
|
|||||||
android:id="@+id/ivAvatar"
|
android:id="@+id/ivAvatar"
|
||||||
android:layout_width="60dp"
|
android:layout_width="60dp"
|
||||||
android:layout_height="60dp"
|
android:layout_height="60dp"
|
||||||
android:padding="2dp"
|
android:padding="2dp"/>
|
||||||
android:src="@mipmap/ic_launcher_round" />
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
|||||||
@@ -303,9 +303,9 @@
|
|||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/tvRelatedUsers"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="3"
|
|
||||||
android:textColor="@color/gray"
|
android:textColor="@color/gray"
|
||||||
android:textSize="14sp" />
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
|||||||
@@ -47,22 +47,16 @@
|
|||||||
<!-- 人体模型区域 -->
|
<!-- 人体模型区域 -->
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/bodyLayout"
|
android:id="@+id/bodyLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="16dp">
|
||||||
android:padding="16dp">
|
|
||||||
|
|
||||||
<!-- 虚线边框 android:background="@drawable/bg_scan_frame"-->
|
|
||||||
<View
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
|
|
||||||
<!-- 人体模型图片 -->
|
<!-- 人体模型图片 -->
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/ivHumanBody"
|
android:id="@+id/ivHumanBody"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="439dp"
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
android:src="@drawable/human_body" />
|
android:src="@drawable/human_body" />
|
||||||
|
|
||||||
@@ -72,7 +66,6 @@
|
|||||||
android:layout_width="100dp"
|
android:layout_width="100dp"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
android:layout_marginTop="30dp"
|
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
android:src="@drawable/dajitubiao" />
|
android:src="@drawable/dajitubiao" />
|
||||||
|
|
||||||
@@ -84,7 +77,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="16dp"
|
||||||
android:layout_marginBottom="40dp"
|
|
||||||
android:background="@drawable/rounded_blue_bg"
|
android:background="@drawable/rounded_blue_bg"
|
||||||
android:text="@string/submit"
|
android:text="@string/submit"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
android:layout_height="1px"
|
android:layout_height="1px"
|
||||||
android:background="@color/gray_divider"/>
|
android:background="@color/gray_divider"/>
|
||||||
|
|
||||||
<!-- 打击距离(电话) -->
|
<!--手机号 -->
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/strike_distance"
|
android:text="@string/phone_number"
|
||||||
android:textSize="14dp"/>
|
android:textSize="14dp"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user