Advertisement
ZelimkhanMezhidov

Untitled

May 4th, 2022
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.69 KB | None | 0 0
  1. private lateinit var systemPhotoPickManager: SystemPhotoPickManager
  2.  
  3. class MainActivity : ComponentActivity() {
  4.  
  5.     override fun onCreate(savedInstanceState: Bundle?) {
  6.         super.onCreate(savedInstanceState)
  7.         setContent {
  8.            ContentView()
  9.         }
  10.     }
  11. }
  12.  
  13. @OptIn(ExperimentalMaterialApi::class)
  14. @Composable
  15. fun ContentView () {
  16.  
  17.     val contentImage = remember { mutableStateOf("") }
  18.     val state = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)
  19.     val scope = rememberCoroutineScope()
  20.  
  21.     Box(modifier = Modifier
  22.         .fillMaxSize()
  23.         .background(Color.DarkGray))
  24.     {
  25.         BottomActionSheet(
  26.             state = state,
  27.             scope = scope,
  28.             onTakeImage = {
  29.                 if (it) {
  30.                     //camera
  31.                     takePhoto {
  32.                         contentImage.value = it
  33.                     }
  34.                 } else {
  35.                     //gallery
  36.                     selectPhoto {
  37.                         contentImage.value = it
  38.                     }
  39.                 }
  40.             }
  41.         )
  42.         {
  43.             PhotoView(imagePath = contentImage.value, scope = scope, state = state)
  44.         }
  45.     }
  46. }
  47.  
  48. @OptIn(ExperimentalMaterialApi::class)
  49. @Composable
  50. fun PhotoView(
  51.     modifier: Modifier = Modifier,
  52.     imagePath:String,
  53.     scope: CoroutineScope,
  54.     state: ModalBottomSheetState) {
  55.  
  56.     Image(painter = if (imagePath == "") {
  57.         painterResource(R.drawable.ic_videocam_black_24dp)
  58.     } else  {
  59.         rememberAsyncImagePainter(model = ImageRequest.Builder(context = LocalContext.current)
  60.             .crossfade(true).data(imagePath).build(),
  61.             filterQuality = FilterQuality.High
  62.         )
  63.     },
  64.         contentDescription = null,
  65.         modifier = modifier
  66.             .fillMaxWidth()
  67.             .padding(40.dp)
  68.             .defaultMinSize(minHeight = 100.dp)
  69.             .clickable {
  70.                 scope.launch {
  71.                     state.show()
  72.                 }
  73.             }
  74.             .background(Color.Transparent)
  75.             .clip(RoundedCornerShape(16.dp))
  76.             .border(1.dp, Color.Blue, RoundedCornerShape(16.dp)),
  77.         contentScale = if (imagePath =="") {
  78.             ContentScale.Inside
  79.         } else {
  80.             ContentScale.FillWidth
  81.         }
  82.     )
  83. }
  84.  
  85. @OptIn(ExperimentalMaterialApi::class)
  86. @Composable
  87. fun BottomActionSheet(
  88.     state:ModalBottomSheetState,
  89.     scope:CoroutineScope,
  90.     onTakeImage: (isCamera: Boolean) -> Unit,
  91.     modalBottomSheetLayoutScope: @Composable () -> Unit)
  92. {
  93.     ModalBottomSheetLayout(
  94.         sheetState = state,
  95.  
  96.         sheetContent = {
  97.             Column {
  98.  
  99.                 BottomActionItem(
  100.                     title = "camera",
  101.                     resource = R.drawable.ic_videocam_black_24dp,
  102.                     isCamera = true) { isCamera ->
  103.                     scope.launch {
  104.                         state.hide()
  105.                     }
  106.                     onTakeImage(isCamera)
  107.                 }
  108.  
  109.                 BottomActionItem(
  110.                     title = "gallery",
  111.                     resource = R.drawable.ic_videocam_black_24dp,
  112.                     isCamera = false) { isCamera ->
  113.                     scope.launch {
  114.                         state.hide()
  115.                     }
  116.                     onTakeImage(isCamera)
  117.                 }
  118.             }
  119.         }
  120.     )
  121.     {
  122.         modalBottomSheetLayoutScope()
  123.     }
  124.  
  125.  
  126. }
  127.  
  128. @Composable
  129. fun BottomActionItem(
  130.     modifier:Modifier = Modifier,
  131.     title: String,
  132.     resource:Int,
  133.     isCamera:Boolean,
  134.     onTakeImage:(isCamera:Boolean) -> Unit
  135. ) {
  136.     Row(modifier = modifier
  137.         .fillMaxWidth()
  138.         .height(50.dp)
  139.         .clickable { onTakeImage(isCamera) })
  140.     {
  141.         Image(
  142.             painter = painterResource(resource),
  143.             contentDescription = null,
  144.             modifier = modifier
  145.                 .size(40.dp)
  146.                 .align(CenterVertically),
  147.             contentScale = ContentScale.Inside)
  148.  
  149.         Spacer(modifier = modifier.width(10.dp))
  150.  
  151.         Text(
  152.             text = title,
  153.             color = Color.Black,
  154.             fontSize = 15.sp,
  155.             modifier = modifier.align(CenterVertically))
  156.  
  157.     }
  158. }
  159.  
  160. private  fun takePhoto(onResult:(result:String) ->Unit) {
  161.     systemPhotoPickManager.requestPermission {
  162.         it.takePictureWithFilePath(true) { imagePath ->
  163.             onResult(imagePath)
  164.         }
  165.     }
  166. }
  167.  
  168. private fun selectPhoto(onResult:(result:String) ->Unit) {
  169.     systemPhotoPickManager.requestPermission {
  170.         it.selectPathPicture(true) { imagePath ->
  171.             onResult(imagePath)
  172.         }
  173.     }
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement