Ver código fonte

add(course): add course page

zhaoyadi 2 anos atrás
pai
commit
01192d0537

+ 0 - 11
app/src/main/res/layout/fragment_plan.xml

@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <androidx.compose.ui.platform.ComposeView
-        android:id="@+id/compose_stage"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 29 - 1
built/convention/src/main/kotlin/ApplicationConventionPlugin.kt

@@ -1,9 +1,9 @@
 import com.android.build.api.dsl.ApplicationExtension
-import com.android.build.api.variant.ApplicationAndroidComponentsExtension
 import com.zaojiao.app.built.convention.configureKotlinAndroid
 import org.gradle.api.Plugin
 import org.gradle.api.Project
 import org.gradle.kotlin.dsl.configure
+import java.io.File
 
 class ApplicationConventionPlugin : Plugin<Project> {
     override fun apply(target: Project) {
@@ -16,6 +16,34 @@ class ApplicationConventionPlugin : Plugin<Project> {
             extensions.configure<ApplicationExtension> {
                 configureKotlinAndroid(this)
                 defaultConfig.targetSdk = 33
+
+                signingConfigs {
+                    create("release") {
+                        storeFile = File(target.rootDir.absolutePath, "keys/zaojiao.jks")
+                        storePassword = "asdfg12345"
+                        keyAlias = "key0"
+                        keyPassword = "asdfg12345"
+
+                        enableV1Signing = true
+                        enableV2Signing = true
+                        enableV3Signing = true
+                    }
+                }
+
+                buildTypes {
+                    release {
+                        isShrinkResources = false
+                        isMinifyEnabled = false
+
+                        proguardFiles("proguard-rules.pro")
+
+                        signingConfig = signingConfigs.getByName("release")
+                    }
+
+                    debug {
+
+                    }
+                }
             }
         }
     }

+ 0 - 0
feat/common/src/main/java/com/zaojiao/component/common/Colors.kt → feat/common/src/main/kotlin/com/zaojiao/component/common/Colors.kt


+ 0 - 0
feat/common/src/main/java/com/zaojiao/component/common/Icons.kt → feat/common/src/main/kotlin/com/zaojiao/component/common/Icons.kt


+ 0 - 0
feat/common/src/main/java/com/zaojiao/component/common/Images.kt → feat/common/src/main/kotlin/com/zaojiao/component/common/Images.kt


+ 0 - 0
feat/common/src/main/java/com/zaojiao/component/common/Lazys.kt → feat/common/src/main/kotlin/com/zaojiao/component/common/Lazys.kt


+ 20 - 0
feat/common/src/main/kotlin/com/zaojiao/component/common/Screen.kt

@@ -0,0 +1,20 @@
+package com.zaojiao.component.common
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.platform.LocalConfiguration
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+
+object Screen {
+    @Composable
+    fun width(): Dp {
+        val configuration = LocalConfiguration.current
+        return configuration.screenWidthDp.dp
+    }
+
+    @Composable
+    fun height(): Dp {
+        val configuration = LocalConfiguration.current
+        return configuration.screenHeightDp.dp
+    }
+}

+ 0 - 0
feat/common/src/main/java/com/zaojiao/component/common/Shadow.kt → feat/common/src/main/kotlin/com/zaojiao/component/common/Shadow.kt


+ 0 - 0
feat/common/src/main/java/com/zaojiao/component/common/Spacer.kt → feat/common/src/main/kotlin/com/zaojiao/component/common/Spacer.kt


+ 0 - 0
feat/common/src/main/java/com/zaojiao/component/common/StatePage.kt → feat/common/src/main/kotlin/com/zaojiao/component/common/StatePage.kt


+ 0 - 0
feat/common/src/main/java/com/zaojiao/component/common/Swiper.kt → feat/common/src/main/kotlin/com/zaojiao/component/common/Swiper.kt


+ 106 - 18
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/course/HomeCourseCategory.kt

@@ -1,40 +1,128 @@
 package com.zaojiao.app.feat.home.course
 
 import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.wrapContentHeight
 import androidx.compose.foundation.lazy.LazyRow
+import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.BiasAlignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import com.zaojiao.app.feat.home.R
+import com.zaojiao.component.common.Colors
+import com.zaojiao.component.common.Images
+import com.zaojiao.component.common.Spacer
+import com.zaojiao.component.common.list
 
 @Composable
-fun HomeCourseCategory() {
-    LazyRow(
+fun HomeCourseCategory(
+    itemWidth: Dp
+) {
+    val state = rememberLazyListState()
+
+    Column(
         modifier = Modifier
             .padding(vertical = 14.dp)
-            .height(64.dp)
-            .fillMaxWidth(),
-        contentPadding = PaddingValues(horizontal = 16.dp)
+            .fillMaxWidth()
+            .wrapContentHeight(),
+        horizontalAlignment = Alignment.CenterHorizontally,
     ) {
-        items(100) { index ->
-            Text(
-                text = "$index",
+
+        LazyRow(
+            state = state,
+            modifier = Modifier
+                .wrapContentHeight()
+                .fillMaxWidth(),
+            contentPadding = PaddingValues(horizontal = 16.dp)
+        ) {
+            list(
+                10,
+                itemContent = { index ->
+                    Column(
+                        modifier = Modifier
+                            .width(itemWidth)
+                            .wrapContentHeight(),
+                        horizontalAlignment = Alignment.CenterHorizontally,
+                    ) {
+                        Images.Resource(
+                            id = R.mipmap.default_avatar,
+                            modifier = Modifier.size(42.dp),
+                            contentScale = ContentScale.Fit,
+                        )
+                        Spacer(height = 3.dp)
+                        Text(
+                            text = "$index", style = TextStyle(
+                                fontSize = 13.sp,
+                                lineHeight = 18.sp,
+                                color = Colors.FF333333,
+                            )
+                        )
+                    }
+                },
+                itemSeparation = {
+                    Box(modifier = Modifier.width(20.dp))
+                },
+            )
+        }
+
+        val percent by remember {
+            derivedStateOf {
+                if (state.layoutInfo.viewportEndOffset == 0) {
+                    0f
+                } else {
+                    var before = 0f
+
+                    val items = state.layoutInfo.visibleItemsInfo
+                    for (i in 0 until state.firstVisibleItemIndex) {
+                        before += items[i].size.toFloat()
+                    }
+
+                    before += state.firstVisibleItemScrollOffset.toFloat()
+                    before / state.layoutInfo.viewportEndOffset.toFloat()
+                }
+            }
+        }
+
+        if (5 >= 5) {
+            Spacer(height = 8.dp)
+
+            Box(
                 modifier = Modifier
-                    .background(color = Color.Red)
-                    .fillMaxWidth()
-                    .height(48.dp),
-                style = TextStyle(
-                    fontSize = 16.sp,
-                    color = Color.Yellow,
+                    .background(
+                        color = Colors.from("#FFC4DCFF"),
+                        shape = RoundedCornerShape(2.dp),
+                    )
+                    .size(width = 23.dp, height = 4.dp)
+            ) {
+                Box(
+                    modifier = Modifier
+                        .align(
+                            BiasAlignment(-1f + percent * 2, 0f)
+                        )
+                        .background(
+                            color = Colors.from("#FF2975E5"),
+                            shape = RoundedCornerShape(2.dp),
+                        )
+                        .size(width = 11.5.dp, height = 4.dp)
                 )
-            )
+            }
         }
     }
-}
+}

+ 5 - 5
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/course/HomeCoursePage.kt

@@ -1,11 +1,8 @@
 package com.zaojiao.app.feat.home.course
 
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.wrapContentHeight
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.material3.Surface
 import androidx.compose.runtime.Composable
@@ -13,7 +10,7 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.unit.dp
 import com.zaojiao.component.common.PageState
-import com.zaojiao.component.common.Spacer
+import com.zaojiao.component.common.Screen
 import com.zaojiao.component.common.StatePage
 import com.zaojiao.component.common.grid
 
@@ -24,6 +21,8 @@ fun HomeCoursePage() {
         color = Color.White,
         modifier = Modifier.fillMaxSize(),
     ) {
+        val width = Screen.width()
+
         StatePage(state = PageState.Success) {
             LazyColumn(
                 modifier = Modifier.fillMaxWidth()
@@ -37,7 +36,8 @@ fun HomeCoursePage() {
                 }
 
                 item {
-                    HomeCourseCategory()
+                    val itemWidth = (width - 112.dp) / 5
+                    HomeCourseCategory(itemWidth)
                 }
 
                 item {

+ 0 - 1
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/course/HomeCourseRecommend.kt

@@ -26,7 +26,6 @@ import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
-import coil.compose.AsyncImage
 import com.zaojiao.component.common.Colors
 import com.zaojiao.component.common.Expanded
 import com.zaojiao.component.common.Icons

BIN
feat/home/src/main/res/mipmap-xxxhdpi/personal_baby.png


+ 4 - 0
keys/key.txt

@@ -0,0 +1,4 @@
+jarsigner -verbose -keystore zaojiao.jks -signedjar signed.apk app-release-unsigned.apk key0
+
+
+asdfg12345

BIN
keys/zaojiao.jks