|
|
|
package com.gyf.csams.association.ui
|
|
|
|
|
|
|
|
import android.Manifest
|
|
|
|
import android.app.Activity
|
|
|
|
import android.content.Intent
|
|
|
|
import android.content.pm.PackageManager
|
|
|
|
import android.graphics.BitmapFactory
|
|
|
|
import android.net.Uri
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.provider.MediaStore
|
|
|
|
import androidx.activity.ComponentActivity
|
|
|
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
|
|
|
import androidx.activity.compose.setContent
|
|
|
|
import androidx.activity.result.contract.ActivityResultContracts
|
|
|
|
import androidx.compose.foundation.Image
|
|
|
|
import androidx.compose.foundation.background
|
|
|
|
import androidx.compose.foundation.border
|
|
|
|
import androidx.compose.foundation.layout.*
|
|
|
|
import androidx.compose.material.IconButton
|
|
|
|
import androidx.compose.material.MaterialTheme
|
|
|
|
import androidx.compose.material.OutlinedButton
|
|
|
|
import androidx.compose.material.Text
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
import androidx.compose.runtime.getValue
|
|
|
|
import androidx.compose.runtime.livedata.observeAsState
|
|
|
|
import androidx.compose.ui.Alignment
|
|
|
|
import androidx.compose.ui.Modifier
|
|
|
|
import androidx.compose.ui.graphics.Color
|
|
|
|
import androidx.compose.ui.graphics.asImageBitmap
|
|
|
|
import androidx.compose.ui.platform.LocalContext
|
|
|
|
import androidx.compose.ui.res.painterResource
|
|
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
import androidx.core.content.ContextCompat
|
|
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
|
|
import com.gyf.csams.R
|
|
|
|
import com.gyf.csams.association.model.RegAssociationViewModel
|
|
|
|
import com.gyf.csams.uikit.*
|
|
|
|
import com.gyf.csams.uikit.theme.CSAMSTheme
|
|
|
|
import com.orhanobut.logger.Logger
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 注册社团
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
class RegAssociationActivity: ComponentActivity(){
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
setContent {
|
|
|
|
CSAMSTheme {
|
|
|
|
Body {
|
|
|
|
scaffoldState ->
|
|
|
|
MainFrame(background = { Background(BackgroundImage.reg_association,alpha = 0.5F) }) {
|
|
|
|
Spacer(
|
|
|
|
modifier = Modifier
|
|
|
|
.weight(0.1F)
|
|
|
|
)
|
|
|
|
Title()
|
|
|
|
Name()
|
|
|
|
Desc(
|
|
|
|
modifier = Modifier
|
|
|
|
.weight(0.1F)
|
|
|
|
.fillMaxWidth()
|
|
|
|
)
|
|
|
|
Spacer(modifier = Modifier.weight(0.05F))
|
|
|
|
Logo(
|
|
|
|
modifier = Modifier
|
|
|
|
.weight(0.2F)
|
|
|
|
.fillMaxWidth()
|
|
|
|
)
|
|
|
|
Spacer(modifier = Modifier.weight(0.05F))
|
|
|
|
BottomButton(modifier = Modifier.fillMaxWidth())
|
|
|
|
Spacer(modifier = Modifier.weight(0.05F))
|
|
|
|
|
|
|
|
ShowSnackbar(scaffoldState = scaffoldState)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 社团Logo
|
|
|
|
*
|
|
|
|
* @param modifier
|
|
|
|
*/
|
|
|
|
@Composable
|
|
|
|
private fun Logo(model:RegAssociationViewModel= viewModel(),modifier: Modifier) {
|
|
|
|
val photoIntent=Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
|
|
|
|
photoIntent.type = "image/*"
|
|
|
|
val uri:Uri? by model.picture.observeAsState()
|
|
|
|
|
|
|
|
val resultLauncher=rememberLauncherForActivityResult(contract = ActivityResultContracts.StartActivityForResult()) {
|
|
|
|
when(it.resultCode){
|
|
|
|
Activity.RESULT_OK->{
|
|
|
|
Logger.i("uri=${it.data?.data}")
|
|
|
|
it.data?.data?.let { it1 -> model.setPicture(it1) }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
val loadPicture={
|
|
|
|
//model.loadPicture(context)
|
|
|
|
resultLauncher.launch(photoIntent)
|
|
|
|
}
|
|
|
|
|
|
|
|
val launcher = rememberLauncherForActivityResult(
|
|
|
|
ActivityResultContracts.RequestPermission()
|
|
|
|
) { isGranted: Boolean ->
|
|
|
|
if (isGranted) {
|
|
|
|
// Permission Accepted: Do something
|
|
|
|
loadPicture()
|
|
|
|
} else {
|
|
|
|
// Permission Denied: Do something
|
|
|
|
Logger.w(model.deninedPermission)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val context= LocalContext.current
|
|
|
|
|
|
|
|
Box(contentAlignment = Alignment.Center,modifier = modifier) {
|
|
|
|
Row(verticalAlignment = Alignment.CenterVertically,
|
|
|
|
horizontalArrangement = Arrangement.Center,modifier = Modifier
|
|
|
|
.fillMaxSize()
|
|
|
|
.border(width = 1.dp, color = Color.Black)) {
|
|
|
|
|
|
|
|
if (uri == null) {
|
|
|
|
OutlinedButton(onClick = {
|
|
|
|
when (PackageManager.PERMISSION_GRANTED) {
|
|
|
|
ContextCompat.checkSelfPermission(
|
|
|
|
context,
|
|
|
|
Manifest.permission.READ_EXTERNAL_STORAGE
|
|
|
|
) -> {
|
|
|
|
// Some works that require permission
|
|
|
|
loadPicture()
|
|
|
|
}
|
|
|
|
else -> {
|
|
|
|
// Asking for permission
|
|
|
|
launcher.launch(Manifest.permission.READ_EXTERNAL_STORAGE)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}) {
|
|
|
|
Text(text = model.piciurePlaceHolder)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
uri.let {
|
|
|
|
if(it!=null){
|
|
|
|
Row {
|
|
|
|
Image(bitmap = BitmapFactory.decodeStream(context.contentResolver.openInputStream(it))
|
|
|
|
.asImageBitmap(), contentDescription = null)
|
|
|
|
IconButton(onClick = {
|
|
|
|
loadPicture()
|
|
|
|
}) {
|
|
|
|
Image(painter = painterResource(id = R.drawable.ic_exchange_rate), contentDescription = null)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
Text(text = model.errorPicture)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
private fun BottomButton(modifier: Modifier=Modifier,scaffoldModel: ScaffoldModel= viewModel(),model:RegAssociationViewModel= viewModel()){
|
|
|
|
val context= LocalContext.current as RegAssociationActivity
|
|
|
|
Row(modifier = modifier,horizontalArrangement = Arrangement.Center) {
|
|
|
|
OutlinedButton(onClick = {
|
|
|
|
model.register { scaffoldModel.update(message=it) }
|
|
|
|
},modifier = Modifier.background(color = MaterialTheme.colors.primary)) {
|
|
|
|
Text(text = model.register)
|
|
|
|
}
|
|
|
|
Spacer(modifier = Modifier.width(10.dp))
|
|
|
|
OutlinedButton(onClick = {
|
|
|
|
context.onBackPressed()
|
|
|
|
},modifier = Modifier.background(color = MaterialTheme.colors.secondary)) {
|
|
|
|
Text(text = model.back)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 菜单标题
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
@Composable
|
|
|
|
private fun Title(model:RegAssociationViewModel= viewModel()){
|
|
|
|
Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.Center) {
|
|
|
|
Text(text = model.frameDesc,style = MaterialTheme.typography.h4)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 社团名称
|
|
|
|
* @param model
|
|
|
|
*/
|
|
|
|
@Composable
|
|
|
|
private fun Name(model:RegAssociationViewModel= viewModel()){
|
|
|
|
BaseTextField(form = model.name,singeLine = true,modifier = Modifier.fillMaxWidth())
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 社团简介
|
|
|
|
* @param model
|
|
|
|
*/
|
|
|
|
@Composable
|
|
|
|
private fun Desc(model:RegAssociationViewModel= viewModel(),modifier:Modifier){
|
|
|
|
BaseTextField(form = model.desc,modifier = modifier)
|
|
|
|
}
|