Skip to content

Instantly share code, notes, and snippets.

View ktvipin27's full-sized avatar
🏠
Working from home

Vipin K T ktvipin27

🏠
Working from home
View GitHub Profile
@ktvipin27
ktvipin27 / PermissionFragment.kt
Last active June 27, 2020 07:34
PermissionFragment for cameraX sample
class PermissionFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!hasPermissions(requireContext())) {
requestPermissions( REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS )
} else {
findNavController().popBackStack()
}
}
@ktvipin27
ktvipin27 / AndroidManifest.xml
Last active June 26, 2020 10:37
Manifest file for cameraX sample
<manifest ...>
<uses-feature android:name="android.hardware.camera.any" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application .../>
@ktvipin27
ktvipin27 / CameraFragment.kt
Created June 24, 2020 17:20
CameraFragment for cameraX sample
private val videoSavedCallback = object : VideoCapture.OnVideoSavedCallback {
override fun onVideoSaved(file: File) {
val savedUri = Uri.fromFile(file)
FileUtils.scanFile(requireContext(), savedUri)
findNavController().navigate( CameraFragmentDirections.actionCameraFragmentToMediaViewerFragment( savedUri ) )
}
override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) {
toast("Video capture failed: ${cause?.message}")
@ktvipin27
ktvipin27 / CameraFragment.kt
Last active June 24, 2020 17:16
CameraFragment for cameraX sample
private val outputDirectory: File by lazy { FileUtils.getOutputDirectory(requireContext()) }
inner class ImageSavedCallback(private val photoFile: File) :
ImageCapture.OnImageSavedCallback {
override fun onImageSaved(output: ImageCapture.OutputFileResults) {
val savedUri = output.savedUri ?: Uri.fromFile(photoFile)
FileUtils.scanFile(requireContext(), savedUri)
findNavController().navigate( CameraFragmentDirections.actionCameraFragmentToMediaViewerFragment( savedUri ) )
}
@ktvipin27
ktvipin27 / CameraFragment.kt
Created June 24, 2020 17:08
CameraFragment for cameraX sample
override fun toggleCamera() {
cameraView.toggleCamera()
}
override fun toggleFlash(flashMode: ControlView.FlashMode) {
cameraView.flash = when (controlView.getFlashMode()) {
ControlView.FlashMode.FLASH_MODE_AUTO -> ImageCapture.FLASH_MODE_AUTO
ControlView.FlashMode.FLASH_MODE_ON -> ImageCapture.FLASH_MODE_ON
ControlView.FlashMode.FLASH_MODE_OFF -> ImageCapture.FLASH_MODE_OFF
}
@ktvipin27
ktvipin27 / CameraFragment.kt
Last active June 27, 2020 08:02
CameraFragment for cameraX sample
class CameraFragment : Fragment(R.layout.fragment_camera), ControlView.Listener {
private lateinit var cameraExecutor: ExecutorService
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
cameraExecutor = Executors.newSingleThreadExecutor()
cameraView.bindToLifecycle(viewLifecycleOwner)
cameraView.captureMode = CameraView.CaptureMode.MIXED
controlView.setListener(this)
@ktvipin27
ktvipin27 / FileUtils.kt
Created June 24, 2020 16:33
FileUtils class for cameraX sample
object FileUtils {
fun getOutputDirectory(context: Context): File {
val appContext = context.applicationContext
val mediaDir = context.externalMediaDirs.firstOrNull()?.let {
File(it, appContext.resources.getString(R.string.app_name)).apply { mkdirs() }
}
return if (mediaDir != null && mediaDir.exists())
mediaDir else appContext.filesDir
}
@ktvipin27
ktvipin27 / fragment_camera.xml
Created June 24, 2020 16:24
layout xml file for cameraX sample
<androidx.constraintlayout.widget.ConstraintLayout ...>
<androidx.camera.view.CameraView
android:id="@+id/cameraView"
android:layout_width="0dp"
android:layout_height="0dp"
android:keepScreenOn="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@ktvipin27
ktvipin27 / build.gradle
Last active June 27, 2020 05:38
app level build.gradle file for cameraX sample
//...
apply plugin: "androidx.navigation.safeargs"
//...
dependencies {
//...
//navigation
implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2'
@ktvipin27
ktvipin27 / ControlView.kt
Last active June 24, 2020 11:37
Code for setting up the capture button in cameraX sample application
private fun setupCaptureButtonListener() {
var initialTouchX = 0f
var initialTouchY = 0f
val mHandler = Handler()
val mLongPressed = Runnable {
isLongPressed = true
ivCapture.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
timerView.startTimer()
listener?.startVideoCapturing()
}