Skip to content

Commit

Permalink
implement a function to check if imageAdapter is null to avoid a cras…
Browse files Browse the repository at this point in the history
…h due to UninitializedPropertyAccessException
  • Loading branch information
Moroi committed Oct 24, 2022
1 parent c4ec2a2 commit 86fedd5
Show file tree
Hide file tree
Showing 10 changed files with 63 additions and 40 deletions.
6 changes: 4 additions & 2 deletions FishBun/src/main/java/com/sangcomz/fishbun/Fishton.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ import android.graphics.drawable.Drawable
import android.net.Uri
import com.sangcomz.fishbun.adapter.image.ImageAdapter
import com.sangcomz.fishbun.util.getDimension
import java.util.ArrayList

/**
* Created by seokwon.jeong on 04/01/2018.
*/
object Fishton {
lateinit var imageAdapter: ImageAdapter
// System may destroy Activity due to system constraints
// such as configuration change or memory pressure.
// That's why this should be belonged to callsite's lifecycle.
var imageAdapter: ImageAdapter? = null
var currentPickerImageList: List<Uri> = emptyList()

//BaseParams
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ interface FishBunDataSource {
fun getAllViewTitle(): String
fun getDetailViewData(): DetailImageViewData
fun getAlbumViewData(): AlbumViewData
fun getImageAdapter(): ImageAdapter
fun getImageAdapter(): ImageAdapter?
fun gatAlbumMenuViewData(): AlbumMenuViewData
fun getPickerViewData(): PickerViewData
fun setCurrentPickerImageList(pickerImageList: List<Uri>)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ class AlbumListAdapter(
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding =
return ViewHolder(
parent,
thumbnailSize,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ interface AlbumRepository {

fun getAlbumViewData(): AlbumViewData

fun getImageAdapter(): ImageAdapter
fun getImageAdapter(): ImageAdapter?

fun getSelectedImageList(): List<Uri>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.sangcomz.fishbun.ui.album.mvp

import android.net.Uri
import android.os.Environment
import com.sangcomz.fishbun.ui.album.model.Album
import com.sangcomz.fishbun.ui.album.model.repository.AlbumRepository
import com.sangcomz.fishbun.ui.album.AlbumContract
import com.sangcomz.fishbun.ui.album.model.Album
import com.sangcomz.fishbun.ui.album.model.AlbumMenuViewData
import com.sangcomz.fishbun.ui.album.model.repository.AlbumRepository
import com.sangcomz.fishbun.util.UiHandler
import com.sangcomz.fishbun.util.future.CallableFutureTask
import com.sangcomz.fishbun.util.future.FutureCallback
import java.util.ArrayList

class AlbumPresenter(
private val albumView: AlbumContract.View,
Expand All @@ -21,25 +19,11 @@ class AlbumPresenter(

override fun loadAlbumList() {
albumListFuture = albumRepository.getAlbumList()

albumListFuture?.let {
it.execute(object : FutureCallback<List<Album>> {
override fun onSuccess(result: List<Album>) {
uiHandler.run {
if (result.isNotEmpty()) {
changeToolbarTitle()
albumView.showAlbumList(
it.get(),
albumRepository.getImageAdapter(),
albumRepository.getAlbumViewData()
)
} else {
albumView.showEmptyView()
}
}
}
})
}
albumListFuture?.execute(object : FutureCallback<List<Album>> {
override fun onSuccess(result: List<Album>) {
handleResult(result)
}
})
}

override fun takePicture() {
Expand Down Expand Up @@ -111,6 +95,27 @@ class AlbumPresenter(
albumView.scanAndRefresh()
}

private fun handleResult(result: List<Album>) {
val adapter = albumRepository.getImageAdapter()
// imageAdapter is null, so we can not proceed anymore
if (adapter == null) {
finish()
return
}
uiHandler.run {
if (result.isNotEmpty()) {
changeToolbarTitle()
albumView.showAlbumList(
result,
adapter,
albumRepository.getAlbumViewData()
)
} else {
albumView.showEmptyView()
}
}
}

companion object {
private const val defaultDir = "/Camera"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ interface DetailImageRepository {
fun getImageIndex(imageUri: Uri): Int
fun selectImage(imageUri: Uri)
fun unselectImage(imageUri: Uri)
fun getImageAdapter(): ImageAdapter
fun getImageAdapter(): ImageAdapter?
fun isFullSelected(): Boolean
fun checkForFinish(): Boolean
fun getMessageLimitReached(): String
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.sangcomz.fishbun.ui.detail.mvp

import android.net.Uri
import androidx.annotation.VisibleForTesting
import com.sangcomz.fishbun.ui.detail.DetailImageContract
import com.sangcomz.fishbun.ui.detail.model.DetailImageRepository

Expand Down Expand Up @@ -66,7 +65,13 @@ class DetailImagePresenter(
}

private fun initViewPagerAdapter() {
detailView.initViewPagerAdapter(detailImageRepository.getImageAdapter())
val adapter = detailImageRepository.getImageAdapter()
// we can not proceed any more if imageAdapter is null
if (adapter == null) {
detailView.finishActivity()
return
}
detailView.initViewPagerAdapter(adapter)
}

private fun changeButtonStatusInternal(imageUri: Uri) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class PickerPresenter internal constructor(
.also {
it.execute(object : FutureCallback<List<Uri>> {
override fun onSuccess(result: List<Uri>) {
onSuccessAllMediaThumbnailsPath(result)
handleResult(result)
}
})
}
Expand All @@ -47,7 +47,10 @@ class PickerPresenter internal constructor(
override fun transImageFinish() {
val albumData = pickerRepository.getPickerAlbumData() ?: return

pickerView.takeANewPictureWithFinish(albumData.albumPosition, pickerRepository.getAddedPathList())
pickerView.takeANewPictureWithFinish(
albumData.albumPosition,
pickerRepository.getAddedPathList()
)
}

override fun takePicture() {
Expand Down Expand Up @@ -146,7 +149,7 @@ class PickerPresenter internal constructor(
}

override fun onSuccessTakePicture() {
pickerView.onSuccessTakePicture()
pickerView.onSuccessTakePicture()
}

override fun release() {
Expand Down Expand Up @@ -219,6 +222,7 @@ class PickerPresenter internal constructor(
}

private fun onSuccessAllMediaThumbnailsPath(imageUriList: List<Uri>) {
val adapter = requireNotNull(pickerRepository.getImageAdapter())
pickerRepository.setCurrentPickerImageList(imageUriList)

val viewData = pickerRepository.getPickerViewData()
Expand All @@ -227,15 +231,14 @@ class PickerPresenter internal constructor(
if (pickerRepository.hasCameraInPickerPage()) {
pickerList.add(PickerListItem.Camera)
}

imageUriList.map {
PickerListItem.Image(it, selectedImageList.indexOf(it), viewData)
}.also {
pickerList.addAll(it)
uiHandler.run {
pickerView.showImageList(
pickerList,
pickerRepository.getImageAdapter(),
adapter,
pickerRepository.hasCameraInPickerPage()
)
setToolbarTitle()
Expand All @@ -250,7 +253,7 @@ class PickerPresenter internal constructor(
.also {
it.execute(object : FutureCallback<List<Uri>> {
override fun onSuccess(result: List<Uri>) {
onSuccessAllMediaThumbnailsPath(result)
handleResult(result)
}
})
}
Expand All @@ -263,4 +266,13 @@ class PickerPresenter internal constructor(
pickerView.finishActivity()
}
}
}

private fun handleResult(result: List<Uri>) {
if (pickerRepository.getImageAdapter() != null) {
onSuccessAllMediaThumbnailsPath(result)
} else {
// imageAdapter is null, so we can not proceed anymore
finish()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ interface PickerRepository {

fun getSelectedImageList(): List<Uri>

fun getImageAdapter(): ImageAdapter
fun getImageAdapter(): ImageAdapter?

fun hasCameraInPickerPage(): Boolean

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class PickerRepositoryImpl(

override fun getSelectedImageList() = fishBunDataSource.getSelectedImageList()

override fun getImageAdapter(): ImageAdapter = fishBunDataSource.getImageAdapter()
override fun getImageAdapter(): ImageAdapter? = fishBunDataSource.getImageAdapter()

override fun hasCameraInPickerPage(): Boolean {
return when {
Expand Down

0 comments on commit 86fedd5

Please sign in to comment.