Skip to content

Commit f644fb8

Browse files
empratyushthestinger
authored andcommitted
replace !! operator with null safe ?
1 parent 737b7e9 commit f644fb8

File tree

4 files changed

+52
-45
lines changed

4 files changed

+52
-45
lines changed

app/src/main/java/app/grapheneos/camera/CamConfig.kt

+27-22
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ class CamConfig(private val mActivity: MainActivity) {
231231

232232
var latestUri: Uri? = null
233233

234-
val mPlayer: TunePlayer = TunePlayer(mActivity)
234+
val mPlayer: TunePlayer by lazy { TunePlayer(mActivity.applicationContext) }
235235

236236
private val commonPref = when (mActivity) {
237237
is SecureMainActivity -> {
@@ -271,7 +271,7 @@ class CamConfig(private val mActivity: MainActivity) {
271271
private set
272272

273273
val isFlashAvailable: Boolean
274-
get() = camera!!.cameraInfo.hasFlashUnit()
274+
get() = camera?.cameraInfo?.hasFlashUnit() ?: false
275275

276276
var isTorchOn: Boolean = false
277277
get() {
@@ -1027,10 +1027,8 @@ class CamConfig(private val mActivity: MainActivity) {
10271027
}
10281028

10291029
fun updatePreview() {
1030-
1031-
if (latestUri == null) return
1032-
1033-
if (isVideo(latestUri!!)) {
1030+
val uri = latestUri ?: return
1031+
if (isVideo(uri)) {
10341032
try {
10351033
mActivity.imagePreview.setImageBitmap(
10361034
getVideoThumbnail(mActivity, latestUri)
@@ -1161,7 +1159,7 @@ class CamConfig(private val mActivity: MainActivity) {
11611159
.requireLensFacing(lensFacing)
11621160
.build()
11631161

1164-
return cameraProvider!!.hasCamera(tCameraSelector)
1162+
return cameraProvider?.hasCamera(tCameraSelector) ?: false
11651163
}
11661164

11671165
// Start the camera with latest hard configuration
@@ -1197,7 +1195,7 @@ class CamConfig(private val mActivity: MainActivity) {
11971195
mActivity.updateLastFrame()
11981196

11991197
// Unbind/close all other camera(s) [if any]
1200-
cameraProvider!!.unbindAll()
1198+
cameraProvider?.unbindAll()
12011199

12021200
if (extensionsManager.isExtensionAvailable(cameraSelector, extensionMode)) {
12031201
cameraSelector = extensionsManager.getExtensionEnabledCameraSelector(
@@ -1210,18 +1208,19 @@ class CamConfig(private val mActivity: MainActivity) {
12101208
val useCaseGroupBuilder = UseCaseGroup.Builder()
12111209

12121210
if (isQRMode) {
1213-
qrAnalyzer = QRAnalyzer(mActivity)
1211+
val analyzer = QRAnalyzer(mActivity)
1212+
val mIAnalyzer = ImageAnalysis.Builder()
1213+
.setTargetResolution(Size(960, 960))
1214+
.setOutputImageRotationEnabled(true)
1215+
.build()
1216+
qrAnalyzer = analyzer
12141217
mActivity.startFocusTimer()
1215-
iAnalyzer =
1216-
ImageAnalysis.Builder()
1217-
.setTargetResolution(Size(960, 960))
1218-
.setOutputImageRotationEnabled(true)
1219-
.build()
1220-
iAnalyzer!!.setAnalyzer(cameraExecutor, qrAnalyzer!!)
1218+
iAnalyzer = mIAnalyzer
1219+
mIAnalyzer.setAnalyzer(cameraExecutor, analyzer)
12211220
cameraSelector = CameraSelector.Builder()
12221221
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
12231222
.build()
1224-
useCaseGroupBuilder.addUseCase(iAnalyzer!!)
1223+
useCaseGroupBuilder.addUseCase(mIAnalyzer)
12251224

12261225
} else {
12271226
if (isVideoMode) {
@@ -1281,9 +1280,11 @@ class CamConfig(private val mActivity: MainActivity) {
12811280
.setTargetAspectRatio(aspectRatio)
12821281
.build()
12831282

1284-
useCaseGroupBuilder.addUseCase(preview!!)
1283+
preview?.let {
1284+
useCaseGroupBuilder.addUseCase(it)
1285+
}
12851286

1286-
preview!!.setSurfaceProvider(mActivity.previewView.surfaceProvider)
1287+
preview?.setSurfaceProvider(mActivity.previewView.surfaceProvider)
12871288

12881289
mActivity.forceUpdateOrientationSensor()
12891290

@@ -1295,8 +1296,12 @@ class CamConfig(private val mActivity: MainActivity) {
12951296
} catch (exception : IllegalArgumentException) {
12961297
if (isVideoMode) {
12971298
val newUseCaseGroupBuilder = UseCaseGroup.Builder()
1298-
newUseCaseGroupBuilder.addUseCase(videoCapture!!)
1299-
newUseCaseGroupBuilder.addUseCase(preview!!)
1299+
videoCapture?.let {
1300+
newUseCaseGroupBuilder.addUseCase(it)
1301+
}
1302+
preview?.let {
1303+
newUseCaseGroupBuilder.addUseCase(it)
1304+
}
13001305
imageCapture = null
13011306

13021307
camera = cameraProvider!!.bindToLifecycle(
@@ -1311,15 +1316,15 @@ class CamConfig(private val mActivity: MainActivity) {
13111316

13121317
loadTabs()
13131318

1314-
camera!!.cameraInfo.zoomState.observe(mActivity) {
1319+
camera?.cameraInfo?.zoomState?.observe(mActivity) {
13151320
if (it.linearZoom != 0f) {
13161321
mActivity.zoomBar.updateThumb()
13171322
}
13181323
}
13191324

13201325
mActivity.zoomBar.updateThumb(false)
13211326

1322-
mActivity.exposureBar.setExposureConfig(camera!!.cameraInfo.exposureState)
1327+
camera?.cameraInfo?.exposureState?.let { mActivity.exposureBar.setExposureConfig(it) }
13231328

13241329
mActivity.settingsDialog.torchToggle.isChecked = false
13251330

app/src/main/java/app/grapheneos/camera/TunePlayer.kt

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package app.grapheneos.camera
22

3+
import android.content.Context
34
import android.media.MediaPlayer
4-
import app.grapheneos.camera.ui.activities.MainActivity
55
import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
66

7-
class TunePlayer(mActivity: MainActivity) {
7+
class TunePlayer(context: Context) {
88

9-
private val shutterPlayer: MediaPlayer = MediaPlayer.create(mActivity, R.raw.image_shot)
9+
private val shutterPlayer: MediaPlayer = MediaPlayer.create(context, R.raw.image_shot)
1010

11-
private val fSPlayer: MediaPlayer = MediaPlayer.create(mActivity, R.raw.focus_start)
11+
private val fSPlayer: MediaPlayer = MediaPlayer.create(context, R.raw.focus_start)
1212

13-
private val tIPlayer: MediaPlayer = MediaPlayer.create(mActivity, R.raw.timer_increment)
14-
private val tCPlayer: MediaPlayer = MediaPlayer.create(mActivity, R.raw.timer_final_second)
13+
private val tIPlayer: MediaPlayer = MediaPlayer.create(context, R.raw.timer_increment)
14+
private val tCPlayer: MediaPlayer = MediaPlayer.create(context, R.raw.timer_final_second)
1515

16-
private val vRecPlayer: MediaPlayer = MediaPlayer.create(mActivity, R.raw.video_start)
17-
private val vStopPlayer: MediaPlayer = MediaPlayer.create(mActivity, R.raw.video_stop)
16+
private val vRecPlayer: MediaPlayer = MediaPlayer.create(context, R.raw.video_start)
17+
private val vStopPlayer: MediaPlayer = MediaPlayer.create(context, R.raw.video_stop)
1818

1919
private fun shouldNotPlayTune(): Boolean {
2020
return !camConfig.enableCameraSounds

app/src/main/java/app/grapheneos/camera/capturer/ImageCapturer.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,10 @@ class ImageCapturer(private val mActivity: MainActivity) {
200200
mActivity.capturedFilePaths.add(0, camConfig.latestUri.toString())
201201
}
202202

203-
fixExif(mActivity, camConfig.latestUri!!)
204-
205-
clearExif(mActivity, camConfig.latestUri!!)
203+
camConfig.latestUri?.let {
204+
fixExif(mActivity, it)
205+
clearExif(mActivity, it)
206+
}
206207

207208
mActivity.previewLoader.visibility = View.GONE
208209
camConfig.updatePreview()

app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt

+13-12
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import android.os.Looper
1111
import android.provider.MediaStore
1212
import android.view.View
1313
import android.webkit.MimeTypeMap
14-
import androidx.camera.video.Recording
1514
import androidx.camera.video.FileDescriptorOutputOptions
1615
import androidx.camera.video.MediaStoreOutputOptions
1716
import androidx.camera.video.PendingRecording
17+
import androidx.camera.video.Recording
1818
import androidx.camera.video.VideoRecordEvent
1919
import androidx.core.app.ActivityCompat
2020
import androidx.core.content.ContextCompat
@@ -25,10 +25,10 @@ import app.grapheneos.camera.ui.activities.MainActivity
2525
import app.grapheneos.camera.ui.activities.MainActivity.Companion.camConfig
2626
import app.grapheneos.camera.ui.activities.SecureMainActivity
2727
import app.grapheneos.camera.ui.activities.VideoCaptureActivity
28+
import java.io.FileNotFoundException
2829
import java.text.SimpleDateFormat
2930
import java.util.Date
3031
import java.util.Locale
31-
import java.io.FileNotFoundException
3232

3333
class VideoCapturer(private val mActivity: MainActivity) {
3434

@@ -88,7 +88,7 @@ class VideoCapturer(private val mActivity: MainActivity) {
8888
handler.removeCallbacks(runnable)
8989
}
9090

91-
private fun genPendingRecording(): PendingRecording {
91+
private fun genPendingRecording(): PendingRecording? {
9292
var fileName: String
9393
val sdf = SimpleDateFormat(
9494
"yyyyMMdd_HHmmss",
@@ -112,15 +112,16 @@ class VideoCapturer(private val mActivity: MainActivity) {
112112
&& mActivity.isOutputUriAvailable()
113113
) {
114114

115-
return camConfig.videoCapture!!.output.prepareRecording(
115+
val fd = mActivity.contentResolver.openFileDescriptor(
116+
mActivity.outputUri,
117+
"w"
118+
) ?: return null
119+
120+
return camConfig.videoCapture?.output?.prepareRecording(
116121
mActivity,
117122
FileDescriptorOutputOptions
118-
.Builder(
119-
mActivity.contentResolver.openFileDescriptor(
120-
mActivity.outputUri,
121-
"w"
122-
)!!
123-
).build()
123+
.Builder(fd)
124+
.build()
124125
)
125126

126127
} else {
@@ -185,7 +186,7 @@ class VideoCapturer(private val mActivity: MainActivity) {
185186
)
186187
== PackageManager.PERMISSION_GRANTED
187188
) {
188-
pendingRecording.withAudioEnabled()
189+
pendingRecording?.withAudioEnabled()
189190
} else {
190191
mActivity.requestAudioPermission()
191192
return
@@ -194,7 +195,7 @@ class VideoCapturer(private val mActivity: MainActivity) {
194195

195196
beforeRecordingStarts()
196197

197-
recording = pendingRecording.start(
198+
recording = pendingRecording?.start(
198199
ContextCompat.getMainExecutor(mActivity)
199200
) {
200201
if (it is VideoRecordEvent.Finalize) {

0 commit comments

Comments
 (0)