Я новичок в Android MVVM, поэтому мне нужно выполнить обрезку изображения и запросить разрешение на доступ к галерее изображений, и я не понимаю, должны ли они выполняться в моем фрагменте или в моей модели представления.
чтобы начать обрезку для предварительно полученного изображения, сохраненного на устройстве, я использую этот код
CropImage.activity(selectedImagePosterFromGalleryUri)
.setGuidelines(CropImageView.Guidelines.ON)
.setRequestedSize(posterMaxWidthSize, posterMaxHeightSize, CropImageView.RequestSizeOptions.RESIZE_INSIDE)
.start(mContext, this)
результат (обрезанное изображение) из этого кода может быть доступен в onActivityResult
в моем фрагменте, когда requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE
Я сбит с толку, если он рассматривается как пользовательский ввод, поэтому я могу поместить этот код в свой фрагмент или он рассматривается как logi c / process, так что его следует поместить в viewmodel?
и Также мне нужно спросить разрешение на доступ к галерее, попросить разрешения я использую библиотеку, и код будет таким. я должен вставить фрагмент или модель представления?
@AfterPermissionGranted(PERMISSION_READ_EXTERNAL_STORAGE)
private fun checkPermission() {
if (EasyPermissions.hasPermissions(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)) {
chooseImageFromGallery()
} else {
EasyPermissions.requestPermissions(
this,
"we need your permission to access your gallery",
PERMISSION_READ_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE)
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
// showing app setting, so the user eventually can switch the permission manually in the setting section
AppSettingsDialog.Builder(this).build().show()
}
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
}
то, что меня смущает, это предложение отсюда https://developer.android.com/jetpack/docs/guide, сказано:
Распространенной ошибкой является написание всего кода в Деятельности или Фрагменте. Эти основанные на пользовательском интерфейсе классы должны содержать только logi c, который обрабатывает пользовательский интерфейс и взаимодействие с операционной системой.
Я запутался, если обрезка изображения и доступ к галерее рассматриваются как logi c для ручек пользовательского интерфейса и работы системные взаимодействия или нет
Я не очень понимаю, чтобы выбрать код должен быть в viewmodel или в представлении (фрагмент / деятельность). для бизнес-логики c ясно, что она должна быть в viewmodel, но как насчет таких кодов? пожалуйста помогите