Forráskód Böngészése

add(index): add index page

zhaoyadi 2 éve
szülő
commit
2bade8a9e1

+ 1 - 1
app/build.gradle.kts

@@ -49,7 +49,7 @@ dependencies {
     implementation(libs.coil.kt)
     implementation(libs.coil.kt.svg)
 
-    api("com.google.accompanist:accompanist-systemuicontroller:0.30.1")
+    implementation("com.google.accompanist:accompanist-systemuicontroller:0.30.1")
 
     testImplementation("junit:junit:4.13.2")
     androidTestImplementation("androidx.test.ext:junit:1.1.5")

+ 0 - 2
app/src/main/java/com/zaojiao/app/ui/home/HomeActivity.kt

@@ -1,6 +1,5 @@
 package com.zaojiao.app.ui.home
 
-import android.content.Intent
 import android.os.Bundle
 import androidx.navigation.findNavController
 import androidx.navigation.fragment.NavHostFragment
@@ -8,7 +7,6 @@ import androidx.navigation.ui.setupWithNavController
 import com.zaojiao.app.R
 import com.zaojiao.app.base.BaseActivity
 import com.zaojiao.app.databinding.ActivityHomeBinding
-import com.zaojiao.app.ui.login.LoginActivity
 import dagger.hilt.android.AndroidEntryPoint
 
 @AndroidEntryPoint

+ 21 - 0
app/src/main/java/com/zaojiao/app/ui/home/HomeBBSFragment.kt

@@ -1,6 +1,27 @@
 package com.zaojiao.app.ui.home
 
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.compose.ui.platform.ComposeView
 import androidx.fragment.app.Fragment
+import com.zaojiao.app.R
+import com.zaojiao.app.feat.home.bbs.HomeBBSPage
 
 class HomeBBSFragment : Fragment() {
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.fragment_compose, container, false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        if (view is ComposeView) {
+            view.setContent { HomeBBSPage() }
+        }
+    }
 }

+ 2 - 2
app/src/main/java/com/zaojiao/app/ui/home/HomePlanFragment.kt

@@ -7,7 +7,7 @@ import android.view.ViewGroup
 import androidx.compose.ui.platform.ComposeView
 import androidx.fragment.app.Fragment
 import com.zaojiao.app.R
-import com.zaojiao.app.feat.home.personal.HomePersonalPage
+import com.zaojiao.app.feat.home.plan.HomePlanPage
 
 class HomePlanFragment : Fragment() {
     override fun onCreateView(
@@ -21,7 +21,7 @@ class HomePlanFragment : Fragment() {
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         if (view is ComposeView) {
-            view.setContent { HomePersonalPage() }
+            view.setContent { HomePlanPage() }
         }
     }
 }

+ 0 - 6
app/src/main/res/layout/fragment_bbs.xml

@@ -1,6 +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.constraintlayout.widget.ConstraintLayout>

+ 1 - 20
data/model/build.gradle.kts

@@ -1,26 +1,7 @@
 plugins {
-    id("com.android.library")
-    id("org.jetbrains.kotlin.android")
+    id("d.convention.library")
 }
 
 android {
     namespace = "com.zaojiao.app.data.model"
-    compileSdk = 33
-
-    defaultConfig {
-        minSdk = 27
-    }
-
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_11
-        targetCompatibility = JavaVersion.VERSION_11
-    }
-
-    kotlinOptions {
-        jvmTarget = "11"
-    }
-}
-
-dependencies {
-    implementation("androidx.core:core-ktx:1.8.0")
 }

+ 2 - 25
data/remote/build.gradle.kts

@@ -1,35 +1,12 @@
 plugins {
-    id("com.android.library")
-    id("org.jetbrains.kotlin.android")
-    id("org.jetbrains.kotlin.kapt")
+    id("d.convention.library")
+    id("d.convention.hilt")
 }
 
 android {
     namespace = "com.zaojiao.app.data.remote"
-    compileSdk = 33
-
-    defaultConfig {
-        minSdk = 27
-    }
-
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_11
-        targetCompatibility = JavaVersion.VERSION_11
-    }
-
-    kotlinOptions {
-        jvmTarget = "11"
-    }
 }
 
 dependencies {
     implementation(project(":core:http"))
-
-    implementation("androidx.core:core-ktx:1.10.1")
-
-    implementation("com.google.dagger:dagger:2.44.2")
-    kapt("com.google.dagger:dagger-compiler:2.44.2")
-
-    implementation("com.google.dagger:hilt-android:2.44.2")
-    kapt("com.google.dagger:hilt-android-compiler:2.44.2")
 }

+ 2 - 25
data/repo/build.gradle.kts

@@ -1,37 +1,14 @@
 plugins {
-    id("com.android.library")
-    id("org.jetbrains.kotlin.android")
-    id("org.jetbrains.kotlin.kapt")
+    id("d.convention.library")
+    id("d.convention.hilt")
 }
 
 android {
     namespace = "com.zaojiao.app.data.repo"
-    compileSdk = 33
-
-    defaultConfig {
-        minSdk = 27
-    }
-
-    compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_11
-        targetCompatibility = JavaVersion.VERSION_11
-    }
-
-    kotlinOptions {
-        jvmTarget = "11"
-    }
 }
 
 dependencies {
     implementation(project(":data:remote"))
     implementation(project(":data:local"))
     implementation(project(":data:model"))
-
-    implementation("androidx.core:core-ktx:1.10.1")
-
-    implementation("com.google.dagger:dagger:2.44.2")
-    kapt("com.google.dagger:dagger-compiler:2.44.2")
-
-    implementation("com.google.dagger:hilt-android:2.44.2")
-    kapt("com.google.dagger:hilt-android-compiler:2.44.2")
 }

+ 1 - 1
feat/common/build.gradle.kts

@@ -10,5 +10,5 @@ android {
 dependencies {
     implementation("androidx.constraintlayout:constraintlayout-compose:1.0.1")
 
-    api(libs.coil.kt.compose)
+    implementation(libs.coil.kt.compose)
 }

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

@@ -0,0 +1,43 @@
+package com.zaojiao.component.common
+
+import androidx.annotation.DrawableRes
+import androidx.compose.foundation.Image
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.painter.ColorPainter
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
+import coil.compose.AsyncImage
+
+object Images {
+    @Composable
+    fun Network(
+        modifier: Modifier = Modifier,
+        url: String,
+        description: String? = null,
+        contentScale: ContentScale = ContentScale.Crop,
+    ) {
+        AsyncImage(
+            model = url,
+            contentDescription = description,
+            modifier = modifier,
+            contentScale = contentScale,
+            error = ColorPainter(Colors.FF999999),
+        )
+    }
+
+    @Composable
+    fun Resource(
+        modifier: Modifier = Modifier,
+        @DrawableRes id: Int,
+        description: String? = null,
+        contentScale: ContentScale = ContentScale.Crop,
+    ) {
+        Image(
+            painter = painterResource(id = id),
+            contentDescription = description,
+            modifier = modifier,
+            contentScale = contentScale,
+        )
+    }
+}

+ 4 - 6
feat/common/src/main/java/com/zaojiao/component/common/Swiper.kt

@@ -77,18 +77,16 @@ fun <T> LJGBanner(
         val item = data[actualIndex]
 
         ConstraintLayout(constraintSet = constraintSet) {
-            AsyncImage(
-                model = onImagePath(actualIndex, item),
-                contentDescription = desc?.invoke(actualIndex, item),
+            Images.Network(
+                url = onImagePath(actualIndex, item),
+                description = desc?.invoke(actualIndex, item),
+                contentScale = contentScale,
                 modifier = Modifier
                     .layoutId("image")
                     .fillMaxSize()
                     .clickable {
                         onBannerItemClick?.invoke(actualIndex, item)
                     },
-                contentScale = contentScale,
-//                placeholder = ColorPainter(Colors.FF999999),
-                error = ColorPainter(Colors.FF999999),
             )
         }
     }

+ 8 - 0
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/bbs/HomeBBSPage.kt

@@ -0,0 +1,8 @@
+package com.zaojiao.app.feat.home.bbs
+
+import androidx.compose.runtime.Composable
+
+@Composable
+fun HomeBBSPage() {
+
+}

+ 8 - 0
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/course/HomeCourseAudio.kt

@@ -0,0 +1,8 @@
+package com.zaojiao.app.feat.home.course
+
+import androidx.compose.runtime.Composable
+
+@Composable
+fun HomeCourseAudio() {
+
+}

+ 43 - 11
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/course/HomeCourseGroupBuy.kt

@@ -17,8 +17,7 @@ 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.grid.GridCells
-import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.foundation.layout.wrapContentWidth
 import androidx.compose.foundation.pager.rememberPagerState
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material3.Text
@@ -26,10 +25,17 @@ import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
+import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
 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.Expanded
+import com.zaojiao.component.common.Icons
 import com.zaojiao.component.common.LJGBanner
 import com.zaojiao.component.common.Spacer
 
@@ -63,12 +69,9 @@ private fun RowScope.HomeCourseGroupBuySwiper() {
                 "https://t7.baidu.com/it/u=4198287529,2774471735&fm=193&f=GIF",
                 "https://t7.baidu.com/it/u=1956604245,3662848045&fm=193&f=GIF",
                 "https://t7.baidu.com/it/u=2529476510,3041785782&fm=193&f=GIF",
-            ),
-            pagerState = pagerState,
-            onImagePath = { index, item ->
+            ), pagerState = pagerState, onImagePath = { index, item ->
                 item
-            },
-            modifier = Modifier
+            }, modifier = Modifier
                 .clip(RoundedCornerShape(20.dp))
                 .fillMaxSize()
         )
@@ -127,16 +130,45 @@ private fun RowScope.HomeCourseGroupBuyRecommend() {
 private fun ColumnScope.HomeCourseGroupBuyRecommendTitle() {
     Row(
         modifier = Modifier
-            .background(color = Color.Red)
             .weight(1f)
-            .fillMaxWidth()
+            .fillMaxWidth(),
+        verticalAlignment = Alignment.CenterVertically,
     ) {
-
+        Spacer(width = 11.dp)
+        Image(
+            painter = painterResource(id = R.mipmap.course_group_buy_text),
+            contentDescription = null,
+        )
+        Expanded()
+        Row(
+            modifier = Modifier
+                .background(color = Color.White, shape = RoundedCornerShape(100.dp))
+                .padding(horizontal = 6.dp, vertical = 4.dp)
+                .wrapContentWidth(),
+            verticalAlignment = Alignment.CenterVertically,
+        ) {
+            Text(
+                text = "22款上线",
+                style = TextStyle(
+                    fontSize = 10.sp,
+                    lineHeight = 11.sp,
+                    fontWeight = FontWeight.SemiBold,
+                    color = Colors.from("#FFFB6C07"),
+                ),
+            )
+            Spacer(width = 2.dp)
+            Icons.Forward(
+                size = Size(4f, 6f),
+                color = Colors.from("#FFFB6C07"),
+                width = 0.5.dp,
+            )
+        }
+        Spacer(width = 11.dp)
     }
 }
 
 @Composable
-private fun ColumnScope.HomeCourseGroupBuyRecommendBody() {
+private fun HomeCourseGroupBuyRecommendBody() {
     Column(
         modifier = Modifier
             .padding(horizontal = 11.dp)

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

@@ -48,6 +48,10 @@ fun HomeCoursePage() {
                     HomeCourseGroupBuy()
                 }
 
+                item {
+                    HomeCourseRecommend()
+                }
+
                 grid(
                     count = 100,
                     span = 2,
@@ -56,14 +60,7 @@ fun HomeCoursePage() {
                     padding = 16.dp,
                     isVertical = true,
                 ) {
-                    Column(
-                        modifier = Modifier
-                            .background(color = Color.Red)
-                            .wrapContentHeight()
-                            .fillMaxWidth()
-                    ) {
-                        Spacer(height = 200.dp)
-                    }
+                    HomeCourseRecommendItem()
                 }
             }
         }

+ 172 - 21
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/course/HomeCourseRecommend.kt

@@ -1,37 +1,188 @@
 package com.zaojiao.app.feat.home.course
 
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.aspectRatio
+import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.layout.wrapContentHeight
-import androidx.compose.foundation.lazy.grid.GridCells
-import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.foundation.lazy.LazyRow
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.painter.ColorPainter
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
+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
+import com.zaojiao.component.common.Images
 import com.zaojiao.component.common.Spacer
+import com.zaojiao.component.common.list
 
 @Composable
 internal fun HomeCourseRecommend() {
-    LazyVerticalGrid(
-        columns = GridCells.Fixed(2),
-        horizontalArrangement = Arrangement.spacedBy(12.dp),
-        verticalArrangement = Arrangement.spacedBy(20.dp),
-        contentPadding = PaddingValues(horizontal = 16.dp),
-        userScrollEnabled = false,
+    Column(
+        modifier = Modifier
+            .padding(horizontal = 16.dp, vertical = 20.dp)
+            .wrapContentHeight()
+            .fillMaxWidth()
     ) {
-        items(100) { index ->
-            Column(
-                modifier = Modifier
-                    .background(color = Color.Red)
-                    .wrapContentHeight()
-                    .fillMaxWidth()
-            ) {
-                Spacer(height = 200.dp)
-            }
+        HomeCourserRecommendTitle()
+    }
+}
+
+@Composable
+fun HomeCourserRecommendTitle() {
+    Row(
+        modifier = Modifier.wrapContentHeight(),
+        verticalAlignment = Alignment.CenterVertically,
+    ) {
+
+        Text(
+            text = "逻辑狗推荐官",
+            style = TextStyle(
+                fontSize = 18.sp,
+                lineHeight = 18.sp,
+                fontWeight = FontWeight.SemiBold,
+                color = Colors.FF333333,
+            ),
+        )
+
+        Expanded()
+
+        Text(
+            text = "查看全部",
+            style = TextStyle(
+                fontSize = 12.sp,
+                lineHeight = 16.sp,
+                fontWeight = FontWeight.Normal,
+                color = Colors.FF999999,
+            ),
+        )
+        Spacer(width = 4.dp)
+
+        Icons.Forward(
+            size = Size(3.6f, 6f),
+            color = Colors.FF999999,
+            width = 0.5.dp,
+        )
+    }
+}
+
+@Composable
+fun HomeCourseRecommendItem() {
+    Column(
+        modifier = Modifier
+            .wrapContentHeight()
+            .fillMaxWidth()
+    ) {
+        Images.Network(
+            url = "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF",
+            description = "人文地理学家",
+            modifier = Modifier
+                .clip(RoundedCornerShape(20.dp))
+                .aspectRatio(1f)
+                .fillMaxSize(),
+            contentScale = ContentScale.Crop,
+        )
+        Spacer(height = 13.dp)
+
+        Text(
+            text = "人文地理学家人文地理学家人文地理学家人文地理学家",
+            style = TextStyle(
+                fontSize = 15.sp,
+                lineHeight = 16.sp,
+                fontWeight = FontWeight.SemiBold,
+                color = Colors.FF333333,
+            ),
+            maxLines = 1,
+            overflow = TextOverflow.Ellipsis,
+        )
+        Spacer(height = 9.dp)
+        LazyRow() {
+            list(count = 4,
+                itemContent = { index ->
+                    HomeCourseRecommendItemTag()
+                },
+                itemSeparation = { index ->
+                    Box(modifier = Modifier.width(4.dp))
+                }
+            )
+        }
+        Spacer(height = 12.dp)
+        Row(
+            modifier = Modifier.wrapContentHeight(),
+            verticalAlignment = Alignment.Bottom,
+        ) {
+            Text(
+                text = "¥",
+                style = TextStyle(
+                    fontSize = 10.sp,
+                    lineHeight = 14.sp,
+                    fontWeight = FontWeight.Normal,
+                    color = Colors.from("#FFFF5749"),
+                ),
+                modifier = Modifier.padding(bottom = 2.dp)
+            )
+            Text(
+                text = "30.0",
+                style = TextStyle(
+                    fontSize = 18.sp,
+                    lineHeight = 18.sp,
+                    fontWeight = FontWeight.SemiBold,
+                    color = Colors.from("#FFFF5749"),
+                ),
+                modifier = Modifier.padding(top = 1.dp)
+            )
+            Spacer(width = 3.dp)
+            Text(
+                text = "¥158.0",
+                style = TextStyle(
+                    fontSize = 10.sp,
+                    lineHeight = 14.sp,
+                    fontWeight = FontWeight.Normal,
+                    color = Colors.FF999999,
+                    textDecoration = TextDecoration.LineThrough,
+                ),
+                modifier = Modifier.padding(bottom = 2.dp),
+
+            )
         }
     }
+}
+
+@Composable
+fun HomeCourseRecommendItemTag() {
+    Text(
+        text = "0-3岁",
+        style = TextStyle(
+            fontSize = 10.sp,
+            lineHeight = 14.sp,
+            fontWeight = FontWeight.Normal,
+            color = Colors.from("#FF0B57C7"),
+        ),
+
+        modifier = Modifier
+            .border(
+                width = 0.5.dp,
+                color = Colors.from("#FF0B57C7"),
+                shape = RoundedCornerShape(20.dp)
+            )
+            .padding(vertical = 1.dp, horizontal = 6.dp),
+    )
 }

+ 3 - 2
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/index/HomeIndexTopic.kt

@@ -136,8 +136,9 @@ fun HomeIndexTopicRecommendItem() {
         Column(
             modifier = Modifier
                 .align(Alignment.BottomCenter)
-                .clip(RoundedCornerShape(20.dp))
-                .background(color = Colors.from("#CCFFFFFF"))
+                .clip(shape = RoundedCornerShape(20.dp))
+                .blur(radius = 20.dp)
+                .background(color = Colors.from("#EEFFFFFF"))
                 .height(102.dp)
                 .fillMaxWidth()
         ) {

+ 8 - 0
feat/home/src/main/kotlin/com/zaojiao/app/feat/home/plan/HomePlanPage.kt

@@ -0,0 +1,8 @@
+package com.zaojiao.app.feat.home.plan
+
+import androidx.compose.runtime.Composable
+
+@Composable
+fun HomePlanPage() {
+
+}

BIN
feat/home/src/main/res/mipmap-xhdpi/course_group_buy_text.png


BIN
feat/home/src/main/res/mipmap-xxhdpi/course_group_buy_text.png


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