Browse Source

引入compose

liuxiaolong 2 years ago
parent
commit
6c695237be

+ 28 - 4
app/build.gradle

@@ -35,6 +35,13 @@ android {
         viewBinding = true
         dataBinding = true
     }
+
+    buildFeatures {
+        compose true
+    }
+    composeOptions {
+        kotlinCompilerExtensionVersion compose_version
+    }
 }
 
 
@@ -42,11 +49,28 @@ android {
 dependencies {
 
     implementation 'androidx.core:core-ktx:1.7.0'
-    implementation 'androidx.appcompat:appcompat:1.4.2'
-    implementation 'com.google.android.material:material:1.6.1'
-    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+    implementation project(':lib_common')
+
+
+    implementation "androidx.compose.ui:ui:$compose_version"
+    implementation 'androidx.compose.material3:material3:1.0.0-alpha01'
+    implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
+    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
+    implementation 'androidx.activity:activity-compose:1.3.1'
+    implementation "androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha03"
+    implementation("io.coil-kt:coil-compose:2.1.0")
     testImplementation 'junit:junit:4.13.2'
     androidTestImplementation 'androidx.test.ext:junit:1.1.3'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
-    implementation project(':lib_common')
+    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
+    debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
+    debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
+    implementation "com.google.accompanist:accompanist-systemuicontroller:0.23.1"
+    implementation "com.google.accompanist:accompanist-insets:0.23.1"
+    implementation "com.google.accompanist:accompanist-insets-ui:0.23.1"
+    implementation "com.google.accompanist:accompanist-systemuicontroller:0.23.1"
+    implementation "androidx.navigation:navigation-compose:2.5.0"
+    implementation "androidx.compose.runtime:runtime-livedata:1.1.0-beta01"
+    implementation "androidx.lifecycle:lifecycle-viewmodel-compose:1.1.0-alpha01"
+
 }

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -21,7 +21,7 @@
             android:name=".MediaSampleActivity"
             android:exported="false" />
         <activity
-            android:name="com.convenient.android.lib.MainActivity"
+            android:name="com.convenient.android.lib.ui.sample.MainActivity"
             android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />

+ 0 - 18
app/src/main/java/com/convenient/android/lib/MainActivity.kt

@@ -1,18 +0,0 @@
-package com.convenient.android.lib
-
-import android.os.Bundle
-import com.convenient.android.common.base.viewbinding.BaseBindingActivity
-import com.convenient.android.common.extension.clickWithTrigger
-import com.convenient.android.common.extension.readyGo
-import com.convenient.android.lib.databinding.ActivityMainBinding
-
-class MainActivity : BaseBindingActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        binding.apply {
-            etText.clickWithTrigger {
-                readyGo(DateUtilActivity::class.java)
-            }
-        }
-    }
-}

+ 2 - 5
app/src/main/java/com/convenient/android/lib/MediaSampleActivity.kt

@@ -10,6 +10,7 @@ import android.util.Log
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.lifecycleScope
+import com.convenient.android.common.base.viewbinding.BaseBindingActivity
 import com.convenient.android.common.config.MyPdfBaseModule
 import com.convenient.android.common.extension.*
 import com.convenient.android.common.media.MediaBean
@@ -26,10 +27,7 @@ import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import java.io.File
 
-class MediaSampleActivity : AppCompatActivity() {
-
-
-    private lateinit var binding: ActivityMediaSampleBinding
+class MediaSampleActivity : BaseBindingActivity<ActivityMediaSampleBinding>(ActivityMediaSampleBinding::inflate) {
 
     private var dir: String? = ""
 
@@ -42,7 +40,6 @@ class MediaSampleActivity : AppCompatActivity() {
         }
     }
 
-
     enum class QueryMode {
         FILE, MEDIA_STORE
     }

+ 53 - 0
app/src/main/java/com/convenient/android/lib/ui/sample/MainActivity.kt

@@ -0,0 +1,53 @@
+package com.convenient.android.lib.ui.sample
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Button
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.convenient.android.common.extension.readyGo
+import com.convenient.android.lib.DateUtilActivity
+import com.kdanmobile.jetpackcompose.sample.ui.theme.SampleTheme
+
+class MainActivity : ComponentActivity() {
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContent {
+            SampleTheme {
+                MainPage()
+            }
+        }
+    }
+}
+
+
+
+@Composable
+private fun MainPage() {
+    val context = LocalContext.current
+    Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
+        Button(modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp),onClick = {
+            context.readyGo(DateUtilActivity::class.java)
+        }) {
+            Text(text = "DateUtils 测试")
+        }
+    }
+
+}
+
+@Preview(showSystemUi = true)
+@Composable
+fun MainPagePreview() {
+    SampleTheme {
+        MainPage()
+    }
+}

+ 24 - 0
app/src/main/java/com/convenient/android/lib/ui/theme/Color.kt

@@ -0,0 +1,24 @@
+package com.convenient.android.lib.ui.theme
+
+import androidx.compose.ui.graphics.Color
+
+val Purple80 = Color(0xFFD0BCFF)
+val PurpleGrey80 = Color(0xFFCCC2DC)
+val Pink80 = Color(0xFFEFB8C8)
+
+val Purple40 = Color(0xFF6650a4)
+val PurpleGrey40 = Color(0xFF625b71)
+val Pink40 = Color(0xFF7D5260)
+
+
+val OnPrimaryColor = Color(0xFFFF4F4F)
+
+val BackgroundColor = Color(0xFFF5F5F5)
+
+val LightSubLargeTitleTextColor = Color(0x8A000000)
+
+val LightSubTitleTextColor = Color(0x61000000)
+
+val LightLineColor = Color(0x1F000000)
+
+val LightListLineColor = Color(0xFFF5F5F5)

+ 9 - 0
app/src/main/java/com/convenient/android/lib/ui/theme/MaterialThemeColorExtension.kt

@@ -0,0 +1,9 @@
+package com.convenient.android.lib.ui.theme
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material3.ColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import com.convenient.android.lib.ui.theme.LightLineColor
+import com.convenient.android.lib.ui.theme.LightListLineColor
+

+ 62 - 0
app/src/main/java/com/convenient/android/lib/ui/theme/Theme.kt

@@ -0,0 +1,62 @@
+package com.kdanmobile.jetpackcompose.sample.ui.theme
+
+import android.app.Activity
+import android.os.Build
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.dynamicDarkColorScheme
+import androidx.compose.material3.dynamicLightColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.SideEffect
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.toArgb
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalView
+import androidx.core.view.ViewCompat
+import com.convenient.android.lib.ui.theme.*
+
+private val DarkColorScheme = darkColorScheme(
+    primary = Purple80,
+    secondary = PurpleGrey80,
+    tertiary = Pink80
+)
+
+private val LightColorScheme = lightColorScheme(
+    primary = OnPrimaryColor,
+    onPrimary = OnPrimaryColor,
+    secondary = PurpleGrey40,
+    tertiary = Pink40,
+)
+
+@Composable
+fun SampleTheme(
+    darkTheme: Boolean = isSystemInDarkTheme(),
+    // Dynamic color is available on Android 12+
+    dynamicColor: Boolean = false,
+    statusBarColor : Color = MaterialTheme.colorScheme.primary,
+    content: @Composable () -> Unit
+) {
+    val colorScheme = when {
+        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
+            val context = LocalContext.current
+            if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
+        }
+        darkTheme -> DarkColorScheme
+        else -> LightColorScheme
+    }
+    val view = LocalView.current
+    if (!view.isInEditMode) {
+        SideEffect {
+            (view.context as Activity).window.statusBarColor = statusBarColor.toArgb()
+            ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme
+        }
+    }
+
+    MaterialTheme(
+        colorScheme = colorScheme,
+        typography = Typography,
+        content = content
+    )
+}

+ 44 - 0
app/src/main/java/com/convenient/android/lib/ui/theme/Type.kt

@@ -0,0 +1,44 @@
+package com.convenient.android.lib.ui.theme
+
+import androidx.compose.material3.Typography
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+import com.convenient.android.lib.ui.theme.LightSubLargeTitleTextColor
+import com.convenient.android.lib.ui.theme.LightSubTitleTextColor
+
+// Set of Material typography styles to start with
+val Typography = Typography(
+    bodyLarge = TextStyle(
+        fontFamily = FontFamily.Default,
+        fontWeight = FontWeight.Normal,
+        fontSize = 16.sp,
+        lineHeight = 24.sp,
+        letterSpacing = 0.5.sp,
+        color = LightSubLargeTitleTextColor
+    ),
+    labelMedium = TextStyle(
+        color = LightSubTitleTextColor,
+        fontSize = 12.sp,
+        fontFamily = FontFamily.Default,
+        fontWeight = FontWeight.Normal
+    )
+
+    /* Other default text styles to override
+    titleLarge = TextStyle(
+        fontFamily = FontFamily.Default,
+        fontWeight = FontWeight.Normal,
+        fontSize = 22.sp,
+        lineHeight = 28.sp,
+        letterSpacing = 0.sp
+    ),
+    labelSmall = TextStyle(
+        fontFamily = FontFamily.Default,
+        fontWeight = FontWeight.Medium,
+        fontSize = 11.sp,
+        lineHeight = 16.sp,
+        letterSpacing = 0.5.sp
+    )
+    */
+)

+ 24 - 0
app/src/main/res/drawable/ic_icons8_file.xml

@@ -0,0 +1,24 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="48dp"
+    android:height="48dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:pathData="M39,16v25c0,1.105 -0.895,2 -2,2H11c-1.105,0 -2,-0.895 -2,-2V7c0,-1.105 0.895,-2 2,-2h17L39,16z"
+      android:fillColor="#50e6ff"/>
+  <path
+      android:pathData="M28,5v9c0,1.105 0.895,2 2,2h9L28,5z">
+    <aapt:attr name="android:fillColor">
+      <gradient 
+          android:startX="28.529"
+          android:startY="15.472"
+          android:endX="33.6"
+          android:endY="10.4"
+          android:type="linear">
+        <item android:offset="0" android:color="#FF3079D6"/>
+        <item android:offset="1" android:color="#FF297CD2"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+</vector>

+ 96 - 0
app/src/main/res/drawable/ic_icons8_folder.xml

@@ -0,0 +1,96 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="48dp"
+    android:height="48dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:pathData="M44.5,41h-41C2.119,41 1,39.881 1,38.5v-31C1,6.119 2.119,5 3.5,5h11.597c1.519,0 2.955,0.69 3.904,1.877L21.5,10h23c1.381,0 2.5,1.119 2.5,2.5v26C47,39.881 45.881,41 44.5,41z">
+    <aapt:attr name="android:fillColor">
+      <gradient 
+          android:startX="-7.018"
+          android:startY="9.308"
+          android:endX="39.387"
+          android:endY="33.533"
+          android:type="linear">
+        <item android:offset="0" android:color="#FFFAC017"/>
+        <item android:offset="0.909" android:color="#FFE1AB2D"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M2,25h20V11H4c-1.105,0 -2,0.895 -2,2V25z">
+    <aapt:attr name="android:fillColor">
+      <gradient 
+          android:startX="5.851"
+          android:startY="9.254"
+          android:endX="18.601"
+          android:endY="27.39"
+          android:type="linear">
+        <item android:offset="0" android:color="#FFFBFEF3"/>
+        <item android:offset="0.909" android:color="#FFE2E4E3"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M2,26h20V12H4c-1.105,0 -2,0.895 -2,2V26z">
+    <aapt:attr name="android:fillColor">
+      <gradient 
+          android:startX="2"
+          android:startY="19"
+          android:endX="22"
+          android:endY="19"
+          android:type="linear">
+        <item android:offset="0" android:color="#FFFBFEF3"/>
+        <item android:offset="0.909" android:color="#FFE2E4E3"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M1,37.875V38.5C1,39.881 2.119,41 3.5,41h41c1.381,0 2.5,-1.119 2.5,-2.5v-0.625H1z">
+    <aapt:attr name="android:fillColor">
+      <gradient 
+          android:startX="16.865"
+          android:startY="39.287"
+          android:endX="44.965"
+          android:endY="39.792"
+          android:type="linear">
+        <item android:offset="0" android:color="#FFE3A917"/>
+        <item android:offset="0.464" android:color="#FFD79C1E"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M44.5,11h-23l-1.237,0.824C19.114,12.591 17.763,13 16.381,13H3.5C2.119,13 1,14.119 1,15.5v22C1,38.881 2.119,40 3.5,40h41c1.381,0 2.5,-1.119 2.5,-2.5v-24C47,12.119 45.881,11 44.5,11z">
+    <aapt:attr name="android:fillColor">
+      <gradient 
+          android:startX="-4.879"
+          android:startY="12.764"
+          android:endX="35.968"
+          android:endY="30.778"
+          android:type="linear">
+        <item android:offset="0.34" android:color="#FFFFEFB2"/>
+        <item android:offset="0.485" android:color="#FFFFEDAD"/>
+        <item android:offset="0.652" android:color="#FFFFE99F"/>
+        <item android:offset="0.828" android:color="#FFFEE289"/>
+        <item android:offset="1" android:color="#FFFED86B"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M44.5,40h-41C2.119,40 1,38.881 1,37.5v-21C1,15.119 2.119,14 3.5,14h13.256c1.382,0 2.733,-0.409 3.883,-1.176L21.875,12H44.5c1.381,0 2.5,1.119 2.5,2.5v23C47,38.881 45.881,40 44.5,40z">
+    <aapt:attr name="android:fillColor">
+      <gradient 
+          android:centerX="37.836"
+          android:centerY="49.317"
+          android:gradientRadius="53.875"
+          android:type="radial">
+        <item android:offset="0.199" android:color="#FFFEC832"/>
+        <item android:offset="0.601" android:color="#FFFCD667"/>
+        <item android:offset="0.68" android:color="#FFFDDA75"/>
+        <item android:offset="0.886" android:color="#FFFEE496"/>
+        <item android:offset="1" android:color="#FFFFE8A2"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+</vector>

+ 3 - 1
app/src/main/res/layout/activity_main.xml

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".MainActivity">
+    tools:context=".ui.sample.MainActivity">
 
     <androidx.appcompat.widget.AppCompatButton
         android:id="@+id/et_text"
@@ -14,4 +14,6 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
+
+
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 46 - 17
app/src/main/res/layout/activity_media_sample.xml

@@ -6,34 +6,39 @@
     android:layout_height="match_parent"
     tools:context=".MediaSampleActivity">
 
+
     <androidx.appcompat.widget.AppCompatButton
-        android:id="@+id/btn_query_from_files"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:text="选择文件夹"
+        app:layout_constraintStart_toStartOf="parent"
+        android:id="@+id/btn_choose_dir"
+        app:layout_constraintTop_toTopOf="parent"
+        />
+
+    <androidx.appcompat.widget.AppCompatButton
+        android:id="@+id/btn_query_from_files"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
         android:text="从FileMedia获取"
-        app:layout_constraintEnd_toEndOf="parent"
+        android:textAllCaps="false"
+        app:layout_constraintEnd_toStartOf="@id/btn_query_from_media_store"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:layout_constraintTop_toBottomOf="@id/btn_choose_dir"/>
 
 
     <androidx.appcompat.widget.AppCompatButton
         android:id="@+id/btn_query_from_media_store"
-        android:layout_width="match_parent"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:text="从MediaStore获取"
+        android:textAllCaps="false"
+        app:layout_constraintTop_toTopOf="@id/btn_query_from_files"
+        app:layout_constraintStart_toEndOf="@id/btn_query_from_files"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/btn_query_from_files" />
-
-    <androidx.appcompat.widget.AppCompatButton
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="选择文件夹"
-        app:layout_constraintTop_toBottomOf="@id/btn_query_from_media_store"
-        app:layout_constraintStart_toStartOf="parent"
-        android:id="@+id/btn_choose_dir"
         />
 
+
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/id_tv_query_dir"
         android:layout_width="wrap_content"
@@ -43,7 +48,7 @@
         android:textColor="@color/black"
         android:textStyle="bold"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/btn_choose_dir" />
+        app:layout_constraintTop_toBottomOf="@id/btn_query_from_files" />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_query_dir"
@@ -90,13 +95,16 @@
         android:layout_marginStart="8dp"
         app:layout_constraintBaseline_toBaselineOf="@id/tv_file_type_title"
         app:layout_constraintStart_toEndOf="@id/info_barrier"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constrainedWidth="true"
         tools:text="pdf,png,jpg" />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_query_ignore_child_dir_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="否包含文件夹:"
+        android:text="结果是否包含文件夹:"
         android:textColor="@color/black"
         android:textStyle="bold"
         app:layout_constraintStart_toStartOf="parent"
@@ -134,12 +142,20 @@
         android:id="@+id/tv_query_ignore_child_files_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="忽略的文件集合:"
+        android:text="忽略的文件:"
         android:textColor="@color/black"
         android:textStyle="bold"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/tv_query_recursively_title" />
 
+    <androidx.appcompat.widget.AppCompatTextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_query_ignore_child_files_title"
+        android:text="(可忽略文件夹及文件)"
+        app:layout_constraintStart_toEndOf="@id/tv_query_ignore_child_files_title"
+        />
+
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_query_ignore_child_files"
         android:layout_width="wrap_content"
@@ -208,6 +224,8 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/tv_result_count_title" />
 
+
+
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_result_file_types"
         android:layout_width="wrap_content"
@@ -221,5 +239,16 @@
         tools:text="png jpg" />
 
 
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/recycler_view"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintTop_toBottomOf="@id/tv_result_file_types_title"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+
+        />
+
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 53 - 0
app/src/main/res/layout/view_rv_media_sample_item.xml

@@ -0,0 +1,53 @@
+<?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"
+    xmlns:tools="http://schemas.android.com/tools">
+
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/iv_media_item_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginVertical="8dp"
+        android:layout_marginStart="8dp"
+        android:src="@drawable/ic_icons8_folder"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_media_item_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:text="三体.epub"
+        android:textColor="@color/black"
+        android:textStyle="bold"
+        app:layout_constraintStart_toEndOf="@id/iv_media_item_icon"
+        app:layout_constraintBottom_toTopOf="@id/tv_media_item_date"
+        app:layout_constraintTop_toTopOf="@id/iv_media_item_icon" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_media_item_date"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        tools:text="@tools:sample/date/hhmmss"
+        android:textSize="12sp"
+        app:layout_constraintStart_toStartOf="@id/tv_media_item_title"
+        app:layout_constraintTop_toBottomOf="@id/tv_media_item_title"
+        app:layout_constraintBottom_toBottomOf="@id/iv_media_item_icon"
+        />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="12sp"
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_media_item_date"
+        app:layout_constraintStart_toEndOf="@id/tv_media_item_date"
+        tools:text="1.25MB"
+        android:layout_marginStart="16dp"
+        />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 5 - 0
app/src/main/res/values/themes.xml

@@ -13,4 +13,9 @@
         <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
         <!-- Customize your theme here. -->
     </style>
+
+<!--    <style name="Theme.Lib" parent="android:Theme.Material.Light.NoActionBar" >-->
+<!---->
+<!--        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>-->
+<!--    </style>-->
 </resources>

+ 7 - 1
build.gradle

@@ -1,8 +1,14 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+    ext {
+        compose_version = '1.1.0-beta01'
+    }
+}
+
 plugins {
     id 'com.android.application' version '7.2.0' apply false
     id 'com.android.library' version '7.2.0' apply false
-    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
+    id 'org.jetbrains.kotlin.android' version '1.5.31' apply false
 }
 
 

+ 1 - 1
lib_common/build.gradle

@@ -45,7 +45,7 @@ dependencies {
     androidTestImplementation 'androidx.test.ext:junit:1.1.3'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
 
-    def kotlin_version = '1.7.10'
+    def kotlin_version = '1.5.31'
     def lifecycle_version = '2.5.0'
     api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"