Я создаю это новое приложение для Android, и я застрял в этом мыслительном процессе. У меня есть активность, у которой есть нижний лист, в котором вы можете выбрать изображение из галереи или камеры, чтобы добавить вложение в сообщение. Поэтому мне нужно запросить разрешения, прослушать обратный вызов разрешений, проанализировать результаты галереи / камеры и переключить интерфейс, в котором много кода. И дело в том, что у меня есть фрагмент, который делает то же самое, чтобы загрузить фотографию профиля. Если бы это было два действия, я мог бы просто добавить код в baseActivity. Но это фрагмент и активность. С другой стороны, вы также не должны раздувать вашу ViewModel, и эти два компонента полностью независимы.
Я думал поместить его в ViewModel, но не могу поместить в него представления.
Кроме того, я почему-то знаю, что это требование является общим.
Я знаю о шаблоне презентатора, но вы все равно не можете поместить в него представления.
// starting gallery
private fun startGallery(type: String, title: String, requestCode: Int){
val intent = Intent()
intent.type = type
intent.action = Intent.ACTION_PICK
startActivityForResult(Intent.createChooser(intent, title),
requestCode)
}
// starting camera intent
private fun startCameraFor(action: String, requestCode: Int) {
val takeVideoIntent = Intent(action)
if (takeVideoIntent.resolveActivity(context?.packageManager) != null)
{
startActivityForResult(takeVideoIntent, requestCode)
}
}
// Handling image results
override fun onActivityResult(requestCode: Int, resultCode: Int, data:
Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode == Activity.RESULT_OK) {
postViewModel.uploadImageResults(data = data, requestCode =
requestCode, userId = "c7c2352b-5449-43bf-a099-688843025130")
}
toggleBottomSheet()
}
// Check for permission
private fun permissionAction(permission: String =
Manifest.permission.READ_EXTERNAL_STORAGE, callback: () -> Unit){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
val checkPermission = ContextCompat.checkSelfPermission(context!!,
permission)
if (checkPermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity!!,
arrayOf(permission), Constants.REQUEST_CODE_STORAGE_PICK)
} else {
callback()
}
}
}
// Toggles bottom sheet
private fun toggleBottomSheet() {
if(bottomSheet.state == BottomSheetBehavior.STATE_COLLAPSED) {
bottomSheet.state = BottomSheetBehavior.STATE_EXPANDED
} else {
bottomSheet.state = BottomSheetBehavior.STATE_COLLAPSED
}
}