Android 除了ViewModel,片段和活动之间的公共上下文相关代码应该保存在哪里?

Android 除了ViewModel,片段和活动之间的公共上下文相关代码应该保存在哪里?,android,oop,mvvm,kotlin,mvp,Android,Oop,Mvvm,Kotlin,Mvp,我正在创建这个新的android应用程序,我被困在这个思考过程中。我有一个活动,它有一个底页,你可以选择从图库或相机中选取图像,将附件添加到帖子中。所以我需要请求权限,监听权限回调,解析画廊/摄像机的结果,切换UI,这需要很多代码。问题是我有一个片段,它的作用与上传个人资料图片完全相同。如果是两个活动,我可以将代码添加到baseActivity中。但这只是一个片段和一个活动。另一方面,也不应该膨胀ViewModel,这两个组件是完全独立的 我曾想过将其放在ViewModel中,但无法将视图放在其

我正在创建这个新的android应用程序,我被困在这个思考过程中。我有一个活动,它有一个底页,你可以选择从图库或相机中选取图像,将附件添加到帖子中。所以我需要请求权限,监听权限回调,解析画廊/摄像机的结果,切换UI,这需要很多代码。问题是我有一个片段,它的作用与上传个人资料图片完全相同。如果是两个活动,我可以将代码添加到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
    }
}

您不需要对
ACTION\u GET\u CONTENT
ACTION\u IMAGE\u CAPTURE
具有运行时权限(后者只要您的清单中没有
CAMERA
权限)。运行时权限用于从存储中拾取它。无论如何,这不是我问的问题。我问的问题与OOPs和结构设计有关。如果从
ACTION\u get\u CONTENT
返回的URI具有URI权限,则不需要这些URI的存储权限。我测试了这一点,是的,如果确实使用
ACTION\u get\u CONTENT
,则不需要运行时权限。对上述问题有什么想法吗?活动和片段具有相同的视图和相同的代码来显示底部工作表?有没有办法消除冗余?您不需要对
操作\u获取\u内容
操作\u图像捕获
具有运行时权限(后者只要您的清单中没有
摄像头
权限)。运行时权限用于从存储中拾取。无论如何,这不是我问的问题。我问的问题与OOPs和结构设计有关。如果从
ACTION\u get\u CONTENT
返回的URI具有URI权限,则不需要这些URI的存储权限。我测试了这一点,是的,如果确实使用
ACTION\u get\u CONTENT
,则不需要运行时权限。对上述问题有什么想法吗?活动和片段具有相同的视图和相同的代码来显示底部工作表?有没有办法消除冗余?