Skip to content

Commit

Permalink
add a compose
Browse files Browse the repository at this point in the history
  • Loading branch information
REBOOTERS committed Oct 9, 2024
1 parent ddffa42 commit 38c051f
Show file tree
Hide file tree
Showing 7 changed files with 153 additions and 172 deletions.
3 changes: 2 additions & 1 deletion imitate/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ if (imitate_isApp.toBoolean()) {
}

apply plugin: 'kotlin-android'

apply plugin: 'org.jetbrains.kotlin.plugin.compose'
apply plugin: 'kotlin-kapt'

class RoomSchemaArgProvider implements CommandLineArgumentProvider {
Expand Down Expand Up @@ -84,6 +84,7 @@ android {
}
buildFeatures {
viewBinding true
compose true
}

sourceSets {
Expand Down
2 changes: 1 addition & 1 deletion imitate/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<application>
<activity
android:name=".KotlinRootActivity"
android:label="@string/app_name"
android:label="imitate"
android:theme="@style/MyAppTheme" />

<activity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,18 @@
package com.engineer.compose.ui
package com.engineer.imitate.ui.fragments


import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.res.stringResource
import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.facade.annotation.Route
import com.engineer.compose.ui.Message
import com.engineer.compose.ui.MessageCard
import com.engineer.compose.ui.ui.theme.MiniAppTheme
import com.engineer.imitate.R

Expand All @@ -41,7 +34,6 @@ class ComposeFragment : Fragment() {
// is destroyed
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
// SimpleScreen()
MiniAppTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colorScheme.background) {
Expand All @@ -54,25 +46,3 @@ class ComposeFragment : Fragment() {
}
}

//@Composable
//private fun SimpleScreen() {
// Column(Modifier.fillMaxSize()) {
// Text(
// text = stringResource(R.string.content),
// style = MaterialTheme.typography.headlineMedium
// )
// Text(
// text = stringResource(R.string.content),
// style = MaterialTheme.typography.headlineSmall
// )
// Text(
// text = stringResource(R.string.content),
// style = MaterialTheme.typography.bodyMedium
// )
// Spacer(modifier = Modifier.weight(1f))
// Button(onClick = { /* Handle click */ }, Modifier.fillMaxWidth()) {
// Text(text = stringResource(R.string.content))
// }
// }
//}

2 changes: 1 addition & 1 deletion imitate/src/main/res/layout/activity_kotlin_root.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
android:background="@color/colorPrimary"
app:navigationIcon="?android:attr/homeAsUpIndicator"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="@string/app_name" />
app:title="imitate" />

<ImageView
android:layout_width="36dp"
Expand Down
8 changes: 8 additions & 0 deletions subs/compose/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,18 @@ plugins {
id 'org.jetbrains.kotlin.android'
id 'org.jetbrains.kotlin.plugin.compose'
}
def ext = rootProject.ext
android {
namespace 'com.engineer.compose'
compileSdk 34

defaultConfig {
minSdk ext.minSdk
targetSdk ext.targetSdk

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
Expand Down
138 changes: 138 additions & 0 deletions subs/compose/src/main/java/com/engineer/compose/ui/ComposeView.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package com.engineer.compose.ui

import android.content.Intent
import android.graphics.BitmapFactory
import android.util.Log
import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
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.shape.CircleShape
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.painter.BitmapPainter
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import com.engineer.compose.R
import com.engineer.compose.viewmodel.ImagePreviewPayload

data class Message(val author: String, val body: String)

@Composable
fun SelectImageButton() {
// var imageUris by remember { mutableStateOf<List<Uri>>(emptyList()) }
val context = LocalContext.current
val pickImagesLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.GetMultipleContents(),
onResult = { uris ->
Log.i("tag", "uris = $uris")
val intent = Intent(context, GalleryActivity::class.java)
val list = uris.map { it.toString() }
val payload = ImagePreviewPayload(2, list)
intent.putExtra("payload", payload)
context.startActivity(intent)
})
Button(
onClick = { pickImagesLauncher.launch("image/*") },
) {
Text(text = "Pick Images from Gallery")
}

}

@Composable
fun MessageCard(msg: Message) {
var text by rememberSaveable { mutableStateOf("") }
val count = remember { mutableIntStateOf(0) }
Column {
CircularProgressIndicator()
NetImage()
val context = LocalContext.current
Button(onClick = {
Toast.makeText(context, "you clicked me", Toast.LENGTH_SHORT).show()
count.intValue++
}) {
Text(text = "click me")
}
Button(onClick = {
context.startActivity(Intent(context, ChatActivity::class.java))
}) {
Text(text = "open Chat")
}
Button(onClick = {
context.startActivity(Intent(context, GalleryActivity::class.java))
}) {
Text(text = "open gallery")
}
SelectImageButton()
Text(text = "${count.intValue}")
Row(modifier = Modifier.padding(all = 8.dp)) {
Image(
painter = painterResource(R.drawable.profile_picture),
contentDescription = "null",
modifier = Modifier
.size(40.dp)
.clip(CircleShape)
)
Spacer(modifier = Modifier.width(8.dp))
Column {
Text(text = msg.author)
Spacer(modifier = Modifier.height(4.dp))
Text(text = msg.body)
}
}

OutlinedTextField(value = text,
onValueChange = { text = it },
label = { Text("输入消息") },
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)

)
}
}

@Composable
fun NetImage() {
val context = LocalContext.current
val bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.profile_picture)
val painter = BitmapPainter(bitmap.asImageBitmap(), srcSize = IntSize(100, 100))
AsyncImage(
modifier = Modifier.padding(8.dp),
placeholder = painter,
model = "https://t7.baidu.com/it/u=1102661851,2954934733&fm=193&f=GIF",
contentDescription = "net img"
)
}

@Preview
@Composable
fun Pre() {
val msg = Message("mike", "where are you from")
MessageCard(msg)
}
Loading

0 comments on commit 38c051f

Please sign in to comment.