Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix UninitializedPropertyAccessException caused by accessing imageAdapter #254

Open
wants to merge 5 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
@@ -1,6 +1,7 @@
package com.sangcomz.fishbun.ui.album

import android.net.Uri
import androidx.annotation.StringRes
import com.sangcomz.fishbun.adapter.image.ImageAdapter
import com.sangcomz.fishbun.ui.album.model.Album
import com.sangcomz.fishbun.ui.album.model.AlbumMenuViewData
Expand All @@ -20,6 +21,9 @@ interface AlbumContract {
fun setToolBar(albumViewData: AlbumViewData)
fun changeToolbarTitle(selectedImageCount: Int, albumViewData: AlbumViewData)
fun finishActivityWithResult(selectedImages: List<Uri>)

/* show toast and finish the Activity */
fun showToastAndFinish(@StringRes resId: Int, code: Int)
fun refreshAlbumItem(position: Int, imagePath: ArrayList<Uri>)
fun scanAndRefresh()
fun showNothingSelectedMessage(nothingSelectedMessage: String)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import com.sangcomz.fishbun.util.SquareImageView
class AlbumListAdapter(
private val albumClickListener: AlbumClickListener,
private val thumbnailSize: Int,
private val imageAdapter: ImageAdapter?
private val imageAdapter: ImageAdapter
) :
RecyclerView.Adapter<AlbumListAdapter.ViewHolder>() {

Expand All @@ -32,7 +32,6 @@ class AlbumListAdapter(
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding =
return ViewHolder(
parent,
thumbnailSize,
Expand Down Expand Up @@ -70,7 +69,7 @@ class AlbumListAdapter(
class ViewHolder(
parent: ViewGroup,
albumSize: Int,
private val imageAdapter: ImageAdapter?
private val imageAdapter: ImageAdapter
) : RecyclerView.ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.album_item, parent, false)
) {
Expand All @@ -84,7 +83,7 @@ class AlbumListAdapter(

fun setData(album: Album) {
val uri: Uri = Uri.parse(album.metaData.thumbnailPath)
imageAdapter?.loadImage(imgAlbumThumb, uri)
imageAdapter.loadImage(imgAlbumThumb, uri)

itemView.tag = album
txtAlbumName.text = album.displayName
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,15 @@
package com.sangcomz.fishbun.ui.album.mvp

import android.app.Activity
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.R
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 +21,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 +97,30 @@ 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) {
albumView.showToastAndFinish(
resId = R.string.msg_error,
code = Activity.RESULT_CANCELED,
)
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 @@ -13,6 +13,8 @@ import android.view.MenuItem
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.StringRes
import androidx.appcompat.widget.Toolbar
import androidx.constraintlayout.widget.Group
import androidx.recyclerview.widget.GridLayoutManager
Expand All @@ -25,21 +27,20 @@ import com.sangcomz.fishbun.R
import com.sangcomz.fishbun.adapter.image.ImageAdapter
import com.sangcomz.fishbun.datasource.CameraDataSourceImpl
import com.sangcomz.fishbun.datasource.FishBunDataSourceImpl
import com.sangcomz.fishbun.ui.album.model.Album
import com.sangcomz.fishbun.ui.album.model.repository.AlbumRepositoryImpl
import com.sangcomz.fishbun.datasource.ImageDataSourceImpl
import com.sangcomz.fishbun.ui.album.AlbumContract
import com.sangcomz.fishbun.ui.album.mvp.AlbumPresenter
import com.sangcomz.fishbun.ui.album.adapter.AlbumListAdapter
import com.sangcomz.fishbun.ui.album.listener.AlbumClickListener
import com.sangcomz.fishbun.ui.album.model.Album
import com.sangcomz.fishbun.ui.album.model.AlbumViewData
import com.sangcomz.fishbun.ui.album.model.repository.AlbumRepositoryImpl
import com.sangcomz.fishbun.ui.album.mvp.AlbumPresenter
import com.sangcomz.fishbun.ui.picker.PickerActivity
import com.sangcomz.fishbun.util.MainUiHandler
import com.sangcomz.fishbun.util.SingleMediaScanner
import com.sangcomz.fishbun.util.isLandscape
import com.sangcomz.fishbun.util.setStatusBarColor
import java.io.File
import kotlin.collections.ArrayList

class AlbumActivity : BaseActivity(),
AlbumContract.View, AlbumClickListener {
Expand Down Expand Up @@ -289,6 +290,14 @@ class AlbumActivity : BaseActivity(),
finish()
}

override fun showToastAndFinish(@StringRes resId: Int, code: Int) {
runOnUiThread {
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show()
}
setResult(code, Intent())
finish()
}

private fun checkPermission(): Boolean {
return permissionCheck.checkStoragePermission(PERMISSION_STORAGE)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.sangcomz.fishbun.ui.detail

import android.net.Uri
import android.os.Message
import androidx.annotation.StringRes
import com.sangcomz.fishbun.adapter.image.ImageAdapter
import com.sangcomz.fishbun.ui.detail.model.DetailImageViewData

Expand All @@ -18,6 +18,9 @@ interface DetailImageContract {
fun updateRadioButtonWithDrawable()
fun finishActivity()
fun finishAndShowErrorToast()

/* show toast and finish the Activity */
fun showToastAndFinish(@StringRes resId: Int, code: Int)
fun initViewPagerAdapter(imageAdapter: ImageAdapter)
fun showImages(initPosition: Int, pickerImages: List<Uri>)
fun showSnackbar(message: String)
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,8 @@
package com.sangcomz.fishbun.ui.detail.mvp

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

Expand Down Expand Up @@ -66,7 +67,16 @@ 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.showToastAndFinish(
resId = R.string.msg_error,
code = Activity.RESULT_CANCELED,
)
return
}
detailView.initViewPagerAdapter(adapter)
}

private fun changeButtonStatusInternal(imageUri: Uri) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.Window
import android.widget.ImageButton
import android.widget.Toast
import androidx.annotation.StringRes
import androidx.core.content.ContextCompat
import androidx.viewpager.widget.ViewPager
import androidx.viewpager.widget.ViewPager.OnPageChangeListener
Expand Down Expand Up @@ -129,6 +129,14 @@ class DetailImageActivity : BaseActivity(), DetailImageContract.View, OnPageChan
finish()
}

override fun showToastAndFinish(@StringRes resId: Int, code: Int) {
runOnUiThread {
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show()
}
setResult(code, Intent())
finish()
}

override fun initViewPagerAdapter(imageAdapter: ImageAdapter) {
vpDetailPager?.run {
adapter = DetailViewPagerAdapter(imageAdapter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.Toast
import androidx.annotation.StringRes
import androidx.appcompat.widget.Toolbar
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
Expand Down Expand Up @@ -387,6 +389,14 @@ class PickerActivity : BaseActivity(),
finish()
}

override fun showToastAndFinish(@StringRes resId: Int, code: Int) {
runOnUiThread {
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show()
}
setResult(code, Intent())
finish()
}

private fun setImageList(
pickerList: List<PickerListItem>,
imageAdapter: ImageAdapter,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.sangcomz.fishbun.ui.picker

import android.net.Uri
import androidx.annotation.StringRes
import com.sangcomz.fishbun.adapter.image.ImageAdapter
import com.sangcomz.fishbun.ui.picker.model.PickerListItem
import com.sangcomz.fishbun.ui.picker.model.PickerMenuViewData
Expand All @@ -13,12 +14,14 @@ interface PickerContract {
adapter: ImageAdapter,
hasCameraInPickerPage: Boolean
)

fun takePicture(saveDir: String)
fun setToolbarTitle(
pickerViewData: PickerViewData,
selectedCount: Int,
albumName: String
)

fun initToolBar(pickerViewData: PickerViewData)
fun initRecyclerView(pickerViewData: PickerViewData)
fun showLimitReachedMessage(messageLimitReached: String)
Expand All @@ -27,6 +30,9 @@ interface PickerContract {
fun onCheckStateChange(position: Int, image: PickerListItem.Image)
fun showDetailView(position: Int)
fun finishActivity()

/* show toast and finish the Activity */
fun showToastAndFinish(@StringRes resId: Int, code: Int)
fun finishActivityWithResult(selectedImages: List<Uri>)
fun takeANewPictureWithFinish(position: Int, addedImageList: List<Uri>)
fun addImage(pickerListImage: PickerListItem.Image)
Expand Down
Loading