Sfoglia il codice sorgente

忘了都是什么了

zhaoyadi 4 mesi fa
parent
commit
c94fff149d
35 ha cambiato i file con 392 aggiunte e 8 eliminazioni
  1. 10 0
      .idea/deploymentTargetSelector.xml
  2. 6 0
      .idea/google-java-format.xml
  3. 4 3
      .idea/gradle.xml
  4. 1 0
      app/build.gradle.kts
  5. 5 0
      built/convention/src/main/kotlin/NavigationConventionPlugin.kt
  6. 0 1
      core/navx/src/main/java/com/zaojiao/app/core/navx/NavXUtils.kt
  7. 1 1
      data/local/src/main/kotlin/com/zaojiao/app/data/local/di/LocalDataModule.kt
  8. 22 0
      feat/audio/build.gradle.kts
  9. 27 0
      feat/audio/src/main/AndroidManifest.xml
  10. 14 0
      feat/audio/src/main/java/com/zaojiao/app/feat/audio/detail/AudioDetailPage.kt
  11. 73 0
      feat/audio/src/main/java/com/zaojiao/app/feat/audio/player/AudioPlayerActivity.kt
  12. 7 0
      feat/audio/src/main/java/com/zaojiao/app/feat/audio/service/LJGAudioBinder.kt
  13. 11 0
      feat/audio/src/main/java/com/zaojiao/app/feat/audio/service/LJGAudioService.kt
  14. 47 0
      feat/audio/src/main/res/layout-land/layout_player.xml
  15. 58 0
      feat/audio/src/main/res/layout/control_player.xml
  16. 47 0
      feat/audio/src/main/res/layout/layout_player.xml
  17. BIN
      feat/audio/src/main/res/mipmap-xhdpi/player_list.png
  18. BIN
      feat/audio/src/main/res/mipmap-xhdpi/player_loop.png
  19. BIN
      feat/audio/src/main/res/mipmap-xhdpi/player_pause.png
  20. BIN
      feat/audio/src/main/res/mipmap-xhdpi/player_prev.png
  21. BIN
      feat/audio/src/main/res/mipmap-xxhdpi/player_list.png
  22. BIN
      feat/audio/src/main/res/mipmap-xxhdpi/player_loop.png
  23. BIN
      feat/audio/src/main/res/mipmap-xxhdpi/player_pause.png
  24. BIN
      feat/audio/src/main/res/mipmap-xxhdpi/player_prev.png
  25. BIN
      feat/audio/src/main/res/mipmap-xxxhdpi/player_list.png
  26. BIN
      feat/audio/src/main/res/mipmap-xxxhdpi/player_loop.png
  27. BIN
      feat/audio/src/main/res/mipmap-xxxhdpi/player_pause.png
  28. BIN
      feat/audio/src/main/res/mipmap-xxxhdpi/player_prev.png
  29. 13 0
      feat/audio/src/main/res/values/styles.xml
  30. 24 0
      feat/code/build.gradle.kts
  31. 4 0
      feat/code/src/main/AndroidManifest.xml
  32. 5 0
      feat/code/src/main/java/com/zaojiao/app/feat/code/data/QRCodeModel.kt
  33. 10 0
      feat/code/src/main/java/com/zaojiao/app/feat/code/data/QRCodeViewModel.kt
  34. 1 3
      feat/design/src/main/kotlin/com/zaojiao/app/feat/design/Swiper.kt
  35. 2 0
      settings.gradle.kts

+ 10 - 0
.idea/deploymentTargetSelector.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="deploymentTargetSelector">
+    <selectionStates>
+      <SelectionState runConfigName="app">
+        <option name="selectionMode" value="DROPDOWN" />
+      </SelectionState>
+    </selectionStates>
+  </component>
+</project>

+ 6 - 0
.idea/google-java-format.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GoogleJavaFormatSettings">
+    <option name="enabled" value="false" />
+  </component>
+</project>

+ 4 - 3
.idea/gradle.xml

@@ -16,10 +16,8 @@
             </builds>
           </compositeBuild>
         </compositeConfiguration>
-        <option name="testRunner" value="GRADLE" />
-        <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleJvm" value="Embedded JDK" />
+        <option name="gradleJvm" value="jbr-17" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
@@ -42,13 +40,16 @@
             <option value="$PROJECT_DIR$/data/remote" />
             <option value="$PROJECT_DIR$/data/repo" />
             <option value="$PROJECT_DIR$/feat" />
+            <option value="$PROJECT_DIR$/feat/audio" />
             <option value="$PROJECT_DIR$/feat/baby" />
+            <option value="$PROJECT_DIR$/feat/code" />
             <option value="$PROJECT_DIR$/feat/design" />
             <option value="$PROJECT_DIR$/feat/home" />
             <option value="$PROJECT_DIR$/feat/settings" />
             <option value="$PROJECT_DIR$/feat/webview" />
           </set>
         </option>
+        <option name="resolveExternalAnnotations" value="false" />
       </GradleProjectSettings>
     </option>
   </component>

+ 1 - 0
app/build.gradle.kts

@@ -33,6 +33,7 @@ dependencies {
 
     implementation(project(":data:domain"))
 
+    implementation(project(":feat:audio"))
     implementation(project(":feat:design"))
     implementation(project(":feat:home"))
     implementation(project(":feat:baby"))

+ 5 - 0
built/convention/src/main/kotlin/NavigationConventionPlugin.kt

@@ -1,3 +1,4 @@
+import com.zaojiao.app.built.convention.libs
 import org.gradle.api.Plugin
 import org.gradle.api.Project
 import org.gradle.kotlin.dsl.dependencies
@@ -8,6 +9,7 @@ class NavigationConventionPlugin : Plugin<Project> {
             with(pluginManager) {
                 apply("org.jetbrains.kotlin.kapt")
                 apply("androidx.navigation.safeargs.kotlin")
+                apply("com.google.devtools.ksp")
             }
 
             dependencies {
@@ -15,6 +17,9 @@ class NavigationConventionPlugin : Plugin<Project> {
                 add("implementation", "androidx.navigation:navigation-compose:2.6.0")
                 add("implementation", "androidx.hilt:hilt-navigation-compose:1.0.0")
                 add("kapt", "androidx.hilt:hilt-compiler:1.0.0")
+
+                add("implementation", libs.findLibrary("destinations-core").get())
+                add("ksp", libs.findLibrary("destinations-core").get())
             }
         }
     }

+ 0 - 1
core/navx/src/main/java/com/zaojiao/app/core/navx/NavXUtils.kt

@@ -24,6 +24,5 @@ object NavXUtils {
         } else {
             callback()
         }
-
     }
 }

+ 1 - 1
data/local/src/main/kotlin/com/zaojiao/app/data/local/di/LocalDataModule.kt

@@ -24,7 +24,7 @@ import javax.inject.Singleton
 
 @Module
 @InstallIn(SingletonComponent::class)
-class aLocalDataModule {
+class LocalDataModule {
     /**
      *  用户信息 的本地存储
      */

+ 22 - 0
feat/audio/build.gradle.kts

@@ -0,0 +1,22 @@
+plugins {
+    id("d.convention.library")
+    id("d.convention.compose")
+    id("d.convention.hilt")
+    id("d.convention.lifecycle")
+    id("d.convention.navigation")
+}
+
+android {
+    namespace = "com.zaojiao.app.feat.audio"
+}
+
+dependencies {
+    implementation(project(":core:common"))
+    implementation(project(":core:auth"))
+    implementation(project(":core:nav"))
+
+    implementation(project(":feat:design"))
+
+    implementation(project(":data:repo"))
+    implementation(project(":data:model"))
+}

+ 27 - 0
feat/audio/src/main/AndroidManifest.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <uses-permission android:name="android.permission.VIBRATE" />
+
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
+
+    <application>
+        <activity
+            android:name=".player.AudioPlayerActivity"
+            android:exported="true"
+            android:launchMode="singleTask"
+            android:theme="@style/Theme.App.Audio.Player">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <service
+            android:name=".service.LJGAudioService"
+            android:foregroundServiceType="mediaPlayback"
+            >
+
+        </service>
+    </application>
+</manifest>

+ 14 - 0
feat/audio/src/main/java/com/zaojiao/app/feat/audio/detail/AudioDetailPage.kt

@@ -0,0 +1,14 @@
+package com.zaojiao.app.feat.audio.detail
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.runtime.Composable
+
+@Composable
+fun AudioDetailPage() {
+    Box {
+        Column() {
+
+        }
+    }
+}

+ 73 - 0
feat/audio/src/main/java/com/zaojiao/app/feat/audio/player/AudioPlayerActivity.kt

@@ -0,0 +1,73 @@
+package com.zaojiao.app.feat.audio.player
+
+import android.app.Service
+import android.content.Context
+import android.hardware.display.DisplayManager
+import android.os.Build
+import android.os.Bundle
+import android.os.CombinedVibration
+import android.os.VibrationEffect
+import android.os.VibratorManager
+import android.util.Log
+import android.view.View
+import android.widget.Toast
+import androidx.annotation.RequiresApi
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.WindowCompat
+import com.zaojiao.app.feat.audio.R
+
+class AudioPlayerActivity : AppCompatActivity() {
+    private var count = 0
+
+    private var toast: Toast? = null
+
+    @RequiresApi(Build.VERSION_CODES.S)
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.layout_player)
+        WindowCompat.setDecorFitsSystemWindows(window, false)
+
+        val button = findViewById<View>(R.id.player_control_button)
+
+        val effect = CombinedVibration.createParallel(
+            VibrationEffect.createOneShot(300, -1)
+        )
+
+        button.setOnClickListener {
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+                val vibratorManager =
+                    getSystemService(Service.VIBRATOR_MANAGER_SERVICE) as VibratorManager
+
+
+                vibratorManager.vibrate(effect)
+            }
+            count++
+            toast?.cancel()
+            toast = Toast.makeText(this, "点击了${count}次", Toast.LENGTH_SHORT).apply {
+                show()
+            }
+
+        }
+
+        val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
+        val mainDisplay = displayManager.displays[0]
+
+        val displayMetrics = resources.displayMetrics
+        displayMetrics.density
+
+        window.let {
+            val lp = it.attributes
+            lp.preferredRefreshRate = 120f
+            it.attributes = lp
+        }
+        mainDisplay.supportedModes.forEachIndexed { index, mode ->
+            Log.d(
+                "AudioPlayerActivity",
+                "supportedModes $index: ${mode.physicalWidth}, ${mode.physicalHeight}"
+            )
+            mode.alternativeRefreshRates.forEach { refresh ->
+                Log.d("AudioPlayerActivity", "supportedModes $index refresh: ${refresh}")
+            }
+        }
+    }
+}

+ 7 - 0
feat/audio/src/main/java/com/zaojiao/app/feat/audio/service/LJGAudioBinder.kt

@@ -0,0 +1,7 @@
+package com.zaojiao.app.feat.audio.service
+
+import android.os.Binder
+
+class LJGAudioBinder : Binder() {
+
+}

+ 11 - 0
feat/audio/src/main/java/com/zaojiao/app/feat/audio/service/LJGAudioService.kt

@@ -0,0 +1,11 @@
+package com.zaojiao.app.feat.audio.service
+
+import android.app.Service
+import android.content.Intent
+import android.os.IBinder
+
+class LJGAudioService : Service() {
+    override fun onBind(intent: Intent?): IBinder {
+        return LJGAudioBinder()
+    }
+}

+ 47 - 0
feat/audio/src/main/res/layout-land/layout_player.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
+    android:background="@android:color/holo_red_light"
+    android:fitsSystemWindows="false">
+
+    <ImageView
+        android:id="@+id/player_cover"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:src="@android:color/white"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toLeftOf="@id/guide_control"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.constraintlayout.widget.Guideline
+        android:id="@+id/guide_control"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintGuide_percent="0.5"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toRightOf="@id/guide_control"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:src="@android:color/holo_red_dark" />
+
+        <include layout="@layout/control_player" />
+
+    </LinearLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 58 - 0
feat/audio/src/main/res/layout/control_player.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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">
+
+    <ImageView
+        android:id="@+id/player_control_type"
+        android:layout_width="17dp"
+        android:layout_height="17dp"
+        android:src="@mipmap/player_loop"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toLeftOf="@id/player_control_prev"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/player_control_prev"
+        android:layout_width="17dp"
+        android:layout_height="17dp"
+        android:src="@mipmap/player_prev"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toRightOf="@id/player_control_type"
+        app:layout_constraintRight_toLeftOf="@id/player_control_button"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/player_control_button"
+        android:layout_width="62dp"
+        android:layout_height="62dp"
+        android:src="@mipmap/player_pause"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toRightOf="@id/player_control_prev"
+        app:layout_constraintRight_toLeftOf="@id/player_control_next"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/player_control_next"
+        android:layout_width="17dp"
+        android:layout_height="17dp"
+        android:src="@mipmap/player_loop"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toRightOf="@id/player_control_button"
+        app:layout_constraintRight_toLeftOf="@id/player_control_list"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/player_control_list"
+        android:layout_width="17dp"
+        android:layout_height="17dp"
+        android:src="@mipmap/player_list"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toRightOf="@id/player_control_next"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 47 - 0
feat/audio/src/main/res/layout/layout_player.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
+    android:background="@android:color/holo_red_light"
+    android:fitsSystemWindows="false">
+
+    <ImageView
+        android:id="@+id/player_cover"
+        android:layout_width="280dp"
+        android:layout_height="280dp"
+        android:src="@android:color/white"
+        app:layout_constraintBottom_toTopOf="@id/guide_control"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.constraintlayout.widget.Guideline
+        android:id="@+id/guide_control"
+        android:layout_width="1dp"
+        android:layout_height="match_parent"
+        android:orientation="horizontal"
+        app:layout_constraintGuide_end="200dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent" />
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:fitsSystemWindows="true"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/guide_control">
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:src="@android:color/holo_red_dark" />
+
+        <include layout="@layout/control_player" />
+
+    </LinearLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

BIN
feat/audio/src/main/res/mipmap-xhdpi/player_list.png


BIN
feat/audio/src/main/res/mipmap-xhdpi/player_loop.png


BIN
feat/audio/src/main/res/mipmap-xhdpi/player_pause.png


BIN
feat/audio/src/main/res/mipmap-xhdpi/player_prev.png


BIN
feat/audio/src/main/res/mipmap-xxhdpi/player_list.png


BIN
feat/audio/src/main/res/mipmap-xxhdpi/player_loop.png


BIN
feat/audio/src/main/res/mipmap-xxhdpi/player_pause.png


BIN
feat/audio/src/main/res/mipmap-xxhdpi/player_prev.png


BIN
feat/audio/src/main/res/mipmap-xxxhdpi/player_list.png


BIN
feat/audio/src/main/res/mipmap-xxxhdpi/player_loop.png


BIN
feat/audio/src/main/res/mipmap-xxxhdpi/player_pause.png


BIN
feat/audio/src/main/res/mipmap-xxxhdpi/player_prev.png


+ 13 - 0
feat/audio/src/main/res/values/styles.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <style name="Theme.App.Audio.Player" parent="Theme.Material3.Light.NoActionBar">
+        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
+        <item name="android:windowLightStatusBar">true</item>
+        <item name="android:statusBarColor">@android:color/transparent</item>
+        <item name="android:navigationBarColor">@android:color/transparent</item>
+        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
+        <item name="android:keepScreenOn">true</item>
+        <item name="android:hapticFeedbackEnabled">true</item>
+    </style>
+</resources>

+ 24 - 0
feat/code/build.gradle.kts

@@ -0,0 +1,24 @@
+plugins {
+    id("d.convention.library")
+    id("d.convention.compose")
+    id("d.convention.hilt")
+    id("d.convention.lifecycle")
+    id("d.convention.navigation")
+}
+
+android {
+    namespace = "com.zaojiao.app.feat.code"
+}
+
+dependencies {
+    implementation(project(":core:common"))
+    implementation(project(":core:auth"))
+    implementation(project(":core:nav"))
+
+    implementation(project(":feat:design"))
+
+    implementation(libs.coil.kt.compose)
+
+    implementation("com.airbnb.android:mavericks:3.0.7")
+    implementation("com.google.mlkit:barcode-scanning:17.2.0")
+}

+ 4 - 0
feat/code/src/main/AndroidManifest.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+</manifest>

+ 5 - 0
feat/code/src/main/java/com/zaojiao/app/feat/code/data/QRCodeModel.kt

@@ -0,0 +1,5 @@
+package com.zaojiao.app.feat.code.data
+
+data class QRCodeModel(
+    val jumpPath: String,
+)

+ 10 - 0
feat/code/src/main/java/com/zaojiao/app/feat/code/data/QRCodeViewModel.kt

@@ -0,0 +1,10 @@
+package com.zaojiao.app.feat.code.data
+
+import com.airbnb.mvrx.MavericksState
+
+data class QRCodeState(
+    val data: String,
+) : MavericksState
+
+class QRCodeViewModel {
+}

+ 1 - 3
feat/design/src/main/kotlin/com/zaojiao/app/feat/design/Swiper.kt

@@ -47,9 +47,7 @@ fun <T> LJGBanner(
                     }
                 }
             }, loopDelay, loopPeriod)
-            onDispose {
-                timer.cancel()
-            }
+            onDispose { timer.cancel() }
         }
     }
     val constraintSet = ConstraintSet {

+ 2 - 0
settings.gradle.kts

@@ -40,3 +40,5 @@ include(":feat:home")
 include(":feat:baby")
 include(":feat:settings")
 include(":feat:webview")
+include(":feat:audio")
+include(":feat:code")