Guest User

Untitled

a guest
Jul 14th, 2020
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 3.89 KB | None | 0 0
  1. package com.krnventures.abcvideos.ui.uploadVideo
  2.  
  3. import android.content.pm.PackageManager
  4. import android.os.Bundle
  5. import android.view.LayoutInflater
  6. import android.view.TextureView
  7. import android.view.View
  8. import android.view.ViewGroup
  9. import android.widget.ImageButton
  10. import android.widget.TextView
  11. import android.widget.Toast
  12. import androidx.camera.core.CameraX
  13. import androidx.camera.core.Preview
  14. import androidx.camera.core.VideoCapture
  15. import androidx.camera.core.impl.PreviewConfig
  16. import androidx.core.app.ActivityCompat
  17. import androidx.core.content.ContextCompat
  18. import androidx.fragment.app.Fragment
  19. import androidx.lifecycle.LifecycleOwner
  20. import androidx.lifecycle.Observer
  21. import androidx.lifecycle.ViewModelProviders
  22. import com.krnventures.abcvideos.MainActivity
  23. import com.krnventures.abcvideos.R
  24.  
  25. /*
  26.     LifecycleOwner is an interface that is used by any class that has an Android lifecycle. Practically,
  27.     it means that the class has a Lifecycle object that represents its lifecycle.
  28. */
  29. class UploadVideoFragment : Fragment(), LifecycleOwner {
  30.  
  31.  
  32.     private lateinit var uploadVideoViewModel: UploadVideoViewModel
  33.     private val REQUEST_CODE_PERMISSIONS = 1
  34.     private val TAG = MainActivity::class.java.simpleName
  35.     private val REQUIRED_PERMISSIONS =
  36.             arrayOf(android.Manifest.permission.CAMERA, android.Manifest.permission.RECORD_AUDIO)
  37.  
  38.     private lateinit var viewFinder: TextureView
  39.     private lateinit var captureButton: ImageButton
  40.     private lateinit var videoCapture: VideoCapture
  41.  
  42.     override fun onCreateView(
  43.             inflater: LayoutInflater,
  44.             container: ViewGroup?,
  45.             savedInstanceState: Bundle?
  46.     ): View? {
  47.         uploadVideoViewModel =
  48.                 ViewModelProviders.of(this).get(UploadVideoViewModel::class.java)
  49.         val root = inflater.inflate(R.layout.fragment_upload_video, container, false)
  50.         val textView: TextView = root.findViewById(R.id.text_notifications)
  51.  
  52.         // Request camera permissions
  53.         if (allPermissionsGranted()) {
  54.             viewFinder.post { startCamera() }
  55.         } else {
  56.             activity?.let {
  57.                 ActivityCompat.requestPermissions(
  58.                         it, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS
  59.                 )
  60.             }
  61.         }
  62.  
  63.         uploadVideoViewModel.text.observe(viewLifecycleOwner, Observer {
  64.             textView.text = it
  65.         })
  66.         return root
  67.     }
  68.  
  69.     override fun onRequestPermissionsResult(
  70.             requestCode: Int, permissions: Array<String>, grantResults: IntArray
  71.     ) {
  72.         if (requestCode == REQUEST_CODE_PERMISSIONS) {
  73.             if (allPermissionsGranted()) {
  74.                 viewFinder.post { startCamera() }
  75.             } else {
  76.                 Toast.makeText(
  77.                         activity,
  78.                         "Permissions not granted by the user.",
  79.                         Toast.LENGTH_SHORT
  80.                 ).show()
  81.                 //finish()
  82.             }
  83.         }
  84.     }
  85.  
  86.     private fun allPermissionsGranted(): Boolean {
  87.         for (permission in REQUIRED_PERMISSIONS) {
  88.             if (activity?.let {
  89.                         ContextCompat.checkSelfPermission(
  90.                                 it, permission
  91.                         )
  92.                     } != PackageManager.PERMISSION_GRANTED
  93.             ) {
  94.                 return false
  95.             }
  96.         }
  97.         return true
  98.     }
  99.  
  100.     private fun startCamera() {
  101.         // Create configuration object for the viewfinder use case
  102.         val previewConfig = PreviewConfig.Builder().build()
  103. // Build the viewfinder use case
  104.         val preview = Preview(previewConfig)
  105.  
  106.         preview.setOnPreviewOutputUpdateListener {
  107.             viewFinder.surfaceTexture = it.surfaceTexture
  108.         }
  109.  
  110. // Bind use cases to lifecycle
  111.         CameraX.bindToLifecycle(this, preview)
  112.     }
  113. }
Add Comment
Please, Sign In to add comment