From 86fedd51cb7d78b3e490eb8ac00ced4edc97a69e Mon Sep 17 00:00:00 2001 From: Moroi Date: Mon, 24 Oct 2022 17:55:45 +0900 Subject: [PATCH 1/5] implement a function to check if imageAdapter is null to avoid a crash due to UninitializedPropertyAccessException --- .../main/java/com/sangcomz/fishbun/Fishton.kt | 6 ++- .../fishbun/datasource/FishBunDataSource.kt | 2 +- .../ui/album/adapter/AlbumListAdapter.kt | 1 - .../album/model/repository/AlbumRepository.kt | 2 +- .../fishbun/ui/album/mvp/AlbumPresenter.kt | 51 ++++++++++--------- .../ui/detail/model/DetailImageRepository.kt | 2 +- .../ui/detail/mvp/DetailImagePresenter.kt | 9 +++- .../fishbun/ui/picker/PickerPresenter.kt | 26 +++++++--- .../ui/picker/model/PickerRepository.kt | 2 +- .../ui/picker/model/PickerRepositoryImpl.kt | 2 +- 10 files changed, 63 insertions(+), 40 deletions(-) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/Fishton.kt b/FishBun/src/main/java/com/sangcomz/fishbun/Fishton.kt index 45922218..df4cd32a 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/Fishton.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/Fishton.kt @@ -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 = emptyList() //BaseParams diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/datasource/FishBunDataSource.kt b/FishBun/src/main/java/com/sangcomz/fishbun/datasource/FishBunDataSource.kt index af21cbc6..1706da61 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/datasource/FishBunDataSource.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/datasource/FishBunDataSource.kt @@ -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) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt index 9eeef4be..b5970b9e 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt @@ -32,7 +32,6 @@ class AlbumListAdapter( } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val binding = return ViewHolder( parent, thumbnailSize, diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/model/repository/AlbumRepository.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/model/repository/AlbumRepository.kt index bfd3ae66..84f379a0 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/model/repository/AlbumRepository.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/model/repository/AlbumRepository.kt @@ -15,7 +15,7 @@ interface AlbumRepository { fun getAlbumViewData(): AlbumViewData - fun getImageAdapter(): ImageAdapter + fun getImageAdapter(): ImageAdapter? fun getSelectedImageList(): List diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt index bb5ac4b4..159e7af1 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt @@ -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, @@ -21,25 +19,11 @@ class AlbumPresenter( override fun loadAlbumList() { albumListFuture = albumRepository.getAlbumList() - - albumListFuture?.let { - it.execute(object : FutureCallback> { - override fun onSuccess(result: List) { - uiHandler.run { - if (result.isNotEmpty()) { - changeToolbarTitle() - albumView.showAlbumList( - it.get(), - albumRepository.getImageAdapter(), - albumRepository.getAlbumViewData() - ) - } else { - albumView.showEmptyView() - } - } - } - }) - } + albumListFuture?.execute(object : FutureCallback> { + override fun onSuccess(result: List) { + handleResult(result) + } + }) } override fun takePicture() { @@ -111,6 +95,27 @@ class AlbumPresenter( albumView.scanAndRefresh() } + private fun handleResult(result: List) { + 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" } diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/model/DetailImageRepository.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/model/DetailImageRepository.kt index 482511a2..8fd07c61 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/model/DetailImageRepository.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/model/DetailImageRepository.kt @@ -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 diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt index 90afa608..1637f3a2 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt @@ -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 @@ -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) { diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt index 344f00ed..2ca9eb1c 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt @@ -38,7 +38,7 @@ class PickerPresenter internal constructor( .also { it.execute(object : FutureCallback> { override fun onSuccess(result: List) { - onSuccessAllMediaThumbnailsPath(result) + handleResult(result) } }) } @@ -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() { @@ -146,7 +149,7 @@ class PickerPresenter internal constructor( } override fun onSuccessTakePicture() { - pickerView.onSuccessTakePicture() + pickerView.onSuccessTakePicture() } override fun release() { @@ -219,6 +222,7 @@ class PickerPresenter internal constructor( } private fun onSuccessAllMediaThumbnailsPath(imageUriList: List) { + val adapter = requireNotNull(pickerRepository.getImageAdapter()) pickerRepository.setCurrentPickerImageList(imageUriList) val viewData = pickerRepository.getPickerViewData() @@ -227,7 +231,6 @@ class PickerPresenter internal constructor( if (pickerRepository.hasCameraInPickerPage()) { pickerList.add(PickerListItem.Camera) } - imageUriList.map { PickerListItem.Image(it, selectedImageList.indexOf(it), viewData) }.also { @@ -235,7 +238,7 @@ class PickerPresenter internal constructor( uiHandler.run { pickerView.showImageList( pickerList, - pickerRepository.getImageAdapter(), + adapter, pickerRepository.hasCameraInPickerPage() ) setToolbarTitle() @@ -250,7 +253,7 @@ class PickerPresenter internal constructor( .also { it.execute(object : FutureCallback> { override fun onSuccess(result: List) { - onSuccessAllMediaThumbnailsPath(result) + handleResult(result) } }) } @@ -263,4 +266,13 @@ class PickerPresenter internal constructor( pickerView.finishActivity() } } -} \ No newline at end of file + + private fun handleResult(result: List) { + if (pickerRepository.getImageAdapter() != null) { + onSuccessAllMediaThumbnailsPath(result) + } else { + // imageAdapter is null, so we can not proceed anymore + finish() + } + } +} diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/model/PickerRepository.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/model/PickerRepository.kt index 858e4d44..83a3fdef 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/model/PickerRepository.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/model/PickerRepository.kt @@ -23,7 +23,7 @@ interface PickerRepository { fun getSelectedImageList(): List - fun getImageAdapter(): ImageAdapter + fun getImageAdapter(): ImageAdapter? fun hasCameraInPickerPage(): Boolean diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/model/PickerRepositoryImpl.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/model/PickerRepositoryImpl.kt index b379243c..84affd80 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/model/PickerRepositoryImpl.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/model/PickerRepositoryImpl.kt @@ -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 { From 03adf0910e552f0ef5f36e2bf90ebdf62b9c129b Mon Sep 17 00:00:00 2001 From: Moroi Date: Fri, 11 Nov 2022 12:20:25 +0900 Subject: [PATCH 2/5] - set result code as Activity.Cancel when imageAdapter is null - add finishActivity in AlubumContract to finish AlbumActivity with passed code --- .../com/sangcomz/fishbun/ui/album/AlbumContract.kt | 2 ++ .../sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt | 3 ++- .../sangcomz/fishbun/ui/album/ui/AlbumActivity.kt | 12 ++++++++---- .../fishbun/ui/detail/DetailImageContract.kt | 4 ++-- .../fishbun/ui/detail/mvp/DetailImagePresenter.kt | 3 ++- .../fishbun/ui/detail/ui/DetailImageActivity.kt | 6 ++---- .../com/sangcomz/fishbun/ui/picker/PickerActivity.kt | 4 ++-- .../com/sangcomz/fishbun/ui/picker/PickerContract.kt | 5 ++++- .../sangcomz/fishbun/ui/picker/PickerPresenter.kt | 3 ++- 9 files changed, 26 insertions(+), 16 deletions(-) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt index 7f6d0730..8a048bc4 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt @@ -1,5 +1,6 @@ package com.sangcomz.fishbun.ui.album +import android.app.Activity import android.net.Uri import com.sangcomz.fishbun.adapter.image.ImageAdapter import com.sangcomz.fishbun.ui.album.model.Album @@ -20,6 +21,7 @@ interface AlbumContract { fun setToolBar(albumViewData: AlbumViewData) fun changeToolbarTitle(selectedImageCount: Int, albumViewData: AlbumViewData) fun finishActivityWithResult(selectedImages: List) + fun finishActivity(code: Int = Activity.RESULT_OK) fun refreshAlbumItem(position: Int, imagePath: ArrayList) fun scanAndRefresh() fun showNothingSelectedMessage(nothingSelectedMessage: String) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt index 159e7af1..451ba09c 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt @@ -1,5 +1,6 @@ package com.sangcomz.fishbun.ui.album.mvp +import android.app.Activity import android.net.Uri import com.sangcomz.fishbun.ui.album.AlbumContract import com.sangcomz.fishbun.ui.album.model.Album @@ -99,7 +100,7 @@ class AlbumPresenter( val adapter = albumRepository.getImageAdapter() // imageAdapter is null, so we can not proceed anymore if (adapter == null) { - finish() + albumView.finishActivity(Activity.RESULT_CANCELED) return } uiHandler.run { diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt index e2e407a5..3ecadf4e 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt @@ -25,21 +25,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 { @@ -289,6 +288,11 @@ class AlbumActivity : BaseActivity(), finish() } + override fun finishActivity(code: Int) { + setResult(code, Intent()) + finish() + } + private fun checkPermission(): Boolean { return permissionCheck.checkStoragePermission(PERMISSION_STORAGE) } diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt index e507df0e..a9b5ec7a 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt @@ -1,7 +1,7 @@ package com.sangcomz.fishbun.ui.detail +import android.app.Activity import android.net.Uri -import android.os.Message import com.sangcomz.fishbun.adapter.image.ImageAdapter import com.sangcomz.fishbun.ui.detail.model.DetailImageViewData @@ -16,7 +16,7 @@ interface DetailImageContract { fun unselectImage() fun updateRadioButtonWithText(text: String) fun updateRadioButtonWithDrawable() - fun finishActivity() + fun finishActivity(code: Int = Activity.RESULT_OK) fun finishAndShowErrorToast() fun initViewPagerAdapter(imageAdapter: ImageAdapter) fun showImages(initPosition: Int, pickerImages: List) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt index 1637f3a2..61a2e30c 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt @@ -1,5 +1,6 @@ package com.sangcomz.fishbun.ui.detail.mvp +import android.app.Activity import android.net.Uri import com.sangcomz.fishbun.ui.detail.DetailImageContract import com.sangcomz.fishbun.ui.detail.model.DetailImageRepository @@ -68,7 +69,7 @@ class DetailImagePresenter( val adapter = detailImageRepository.getImageAdapter() // we can not proceed any more if imageAdapter is null if (adapter == null) { - detailView.finishActivity() + detailView.finishActivity(Activity.RESULT_CANCELED) return } detailView.initViewPagerAdapter(adapter) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt index 1ec95620..caae992a 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt @@ -1,13 +1,11 @@ package com.sangcomz.fishbun.ui.detail.ui -import android.app.Activity import android.content.Context import android.content.Intent 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 @@ -86,9 +84,9 @@ class DetailImageActivity : BaseActivity(), DetailImageContract.View, OnPageChan presenter.changeButtonStatus(position) } - override fun finishActivity() { + override fun finishActivity(code: Int) { val i = Intent() - setResult(Activity.RESULT_OK, i) + setResult(code, i) finish() } diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt index 60dfddfd..edfe84b5 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt @@ -371,9 +371,9 @@ class PickerActivity : BaseActivity(), return false } - override fun finishActivity() { + override fun finishActivity(code: Int) { val i = Intent() - setResult(Activity.RESULT_OK, i) + setResult(code, i) finish() } diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt index 045f373c..6389633f 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt @@ -1,5 +1,6 @@ package com.sangcomz.fishbun.ui.picker +import android.app.Activity import android.net.Uri import com.sangcomz.fishbun.adapter.image.ImageAdapter import com.sangcomz.fishbun.ui.picker.model.PickerListItem @@ -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) @@ -26,7 +29,7 @@ interface PickerContract { fun showNothingSelectedMessage(messageNotingSelected: String) fun onCheckStateChange(position: Int, image: PickerListItem.Image) fun showDetailView(position: Int) - fun finishActivity() + fun finishActivity(code: Int = Activity.RESULT_OK) fun finishActivityWithResult(selectedImages: List) fun takeANewPictureWithFinish(position: Int, addedImageList: List) fun addImage(pickerListImage: PickerListItem.Image) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt index 2ca9eb1c..381b711f 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt @@ -1,5 +1,6 @@ package com.sangcomz.fishbun.ui.picker +import android.app.Activity import android.net.Uri import com.sangcomz.fishbun.ui.picker.model.PickerListItem import com.sangcomz.fishbun.ui.picker.model.PickerMenuViewData @@ -272,7 +273,7 @@ class PickerPresenter internal constructor( onSuccessAllMediaThumbnailsPath(result) } else { // imageAdapter is null, so we can not proceed anymore - finish() + pickerView.finishActivity(Activity.RESULT_CANCELED) } } } From a8d49bca8a45338f2ff12a5ed849583c9bb921d8 Mon Sep 17 00:00:00 2001 From: Moroi Date: Tue, 6 Dec 2022 14:32:47 +0900 Subject: [PATCH 3/5] - add SimpleDialog under the common dir - display the dialog when error happens while processing image - change nullable signature of constructor of the adapter - add japanese resources --- .../fishbun/ui/album/AlbumContract.kt | 6 ++- .../ui/album/adapter/AlbumListAdapter.kt | 6 +-- .../fishbun/ui/album/mvp/AlbumPresenter.kt | 6 ++- .../fishbun/ui/album/ui/AlbumActivity.kt | 10 +++-- .../fishbun/ui/common/SimpleDialog.kt | 44 +++++++++++++++++++ .../fishbun/ui/detail/DetailImageContract.kt | 7 ++- .../ui/detail/mvp/DetailImagePresenter.kt | 6 ++- .../ui/detail/ui/DetailImageActivity.kt | 14 +++++- .../fishbun/ui/picker/PickerActivity.kt | 13 +++++- .../fishbun/ui/picker/PickerContract.kt | 7 ++- .../fishbun/ui/picker/PickerPresenter.kt | 6 ++- FishBun/src/main/res/values-ja/strings.xml | 16 +++++++ FishBun/src/main/res/values/strings.xml | 2 + 13 files changed, 124 insertions(+), 19 deletions(-) create mode 100644 FishBun/src/main/java/com/sangcomz/fishbun/ui/common/SimpleDialog.kt create mode 100644 FishBun/src/main/res/values-ja/strings.xml diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt index 8a048bc4..d6ed6401 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt @@ -1,7 +1,7 @@ package com.sangcomz.fishbun.ui.album -import android.app.Activity 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 @@ -21,7 +21,9 @@ interface AlbumContract { fun setToolBar(albumViewData: AlbumViewData) fun changeToolbarTitle(selectedImageCount: Int, albumViewData: AlbumViewData) fun finishActivityWithResult(selectedImages: List) - fun finishActivity(code: Int = Activity.RESULT_OK) + + /* show dialog and finish the Activity as dismiss performed */ + fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) fun refreshAlbumItem(position: Int, imagePath: ArrayList) fun scanAndRefresh() fun showNothingSelectedMessage(nothingSelectedMessage: String) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt index b5970b9e..f391cc72 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt @@ -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() { @@ -69,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) ) { @@ -83,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 diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt index 451ba09c..116c51c8 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt @@ -2,6 +2,7 @@ package com.sangcomz.fishbun.ui.album.mvp import android.app.Activity import android.net.Uri +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 @@ -100,7 +101,10 @@ class AlbumPresenter( val adapter = albumRepository.getImageAdapter() // imageAdapter is null, so we can not proceed anymore if (adapter == null) { - albumView.finishActivity(Activity.RESULT_CANCELED) + albumView.showErrorDialogAndFinish( + resId = R.string.msg_error, + code = Activity.RESULT_CANCELED, + ) return } uiHandler.run { diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt index 3ecadf4e..9ed6cf7b 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt @@ -13,6 +13,7 @@ import android.view.MenuItem import android.view.View import android.widget.ImageView import android.widget.TextView +import androidx.annotation.StringRes import androidx.appcompat.widget.Toolbar import androidx.constraintlayout.widget.Group import androidx.recyclerview.widget.GridLayoutManager @@ -33,6 +34,7 @@ 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.common.SimpleDialog import com.sangcomz.fishbun.ui.picker.PickerActivity import com.sangcomz.fishbun.util.MainUiHandler import com.sangcomz.fishbun.util.SingleMediaScanner @@ -288,9 +290,11 @@ class AlbumActivity : BaseActivity(), finish() } - override fun finishActivity(code: Int) { - setResult(code, Intent()) - finish() + override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) { + SimpleDialog.show(fm = supportFragmentManager, mesId = resId) { + setResult(code, Intent()) + finish() + } } private fun checkPermission(): Boolean { diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/common/SimpleDialog.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/common/SimpleDialog.kt new file mode 100644 index 00000000..c04bd260 --- /dev/null +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/common/SimpleDialog.kt @@ -0,0 +1,44 @@ +package com.sangcomz.fishbun.ui.common + +import android.app.Dialog +import android.content.DialogInterface +import android.os.Bundle +import androidx.annotation.StringRes +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.FragmentManager +import com.sangcomz.fishbun.R + +internal class SimpleDialog(private val onDismiss: (DialogInterface) -> Unit) : DialogFragment() { + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val mesId = arguments?.getInt(ARG_KEY_MESSAGE) + ?: throw IllegalArgumentException("can not access string resource.") + return androidx.appcompat.app.AlertDialog.Builder(requireContext()) + .setMessage(mesId) + .setPositiveButton(R.string.common_positive_button_label, null) + .show() + } + + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + onDismiss.invoke(dialog) + } + + internal companion object { + + private const val ARG_KEY_MESSAGE = "message" + + fun show( + fm: FragmentManager, + tag: String = "SimpleDialog", + @StringRes mesId: Int, + onDismiss: (DialogInterface) -> Unit, + ) { + SimpleDialog(onDismiss).apply { + arguments = Bundle().apply { + putInt(ARG_KEY_MESSAGE, mesId) + } + }.show(fm, tag) + } + } +} diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt index a9b5ec7a..c820bd07 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt @@ -1,7 +1,7 @@ package com.sangcomz.fishbun.ui.detail -import android.app.Activity import android.net.Uri +import androidx.annotation.StringRes import com.sangcomz.fishbun.adapter.image.ImageAdapter import com.sangcomz.fishbun.ui.detail.model.DetailImageViewData @@ -16,8 +16,11 @@ interface DetailImageContract { fun unselectImage() fun updateRadioButtonWithText(text: String) fun updateRadioButtonWithDrawable() - fun finishActivity(code: Int = Activity.RESULT_OK) + fun finishActivity() fun finishAndShowErrorToast() + + /* show dialog and finish the Activity as dismiss performed */ + fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) fun initViewPagerAdapter(imageAdapter: ImageAdapter) fun showImages(initPosition: Int, pickerImages: List) fun showSnackbar(message: String) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt index 61a2e30c..e1867f4b 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt @@ -2,6 +2,7 @@ package com.sangcomz.fishbun.ui.detail.mvp import android.app.Activity import android.net.Uri +import com.sangcomz.fishbun.R import com.sangcomz.fishbun.ui.detail.DetailImageContract import com.sangcomz.fishbun.ui.detail.model.DetailImageRepository @@ -69,7 +70,10 @@ class DetailImagePresenter( val adapter = detailImageRepository.getImageAdapter() // we can not proceed any more if imageAdapter is null if (adapter == null) { - detailView.finishActivity(Activity.RESULT_CANCELED) + detailView.showErrorDialogAndFinish( + resId = R.string.msg_error, + code = Activity.RESULT_CANCELED, + ) return } detailView.initViewPagerAdapter(adapter) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt index caae992a..f6a93a7d 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt @@ -1,5 +1,6 @@ package com.sangcomz.fishbun.ui.detail.ui +import android.app.Activity import android.content.Context import android.content.Intent import android.graphics.Color @@ -9,6 +10,7 @@ import android.os.Bundle 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 @@ -18,6 +20,7 @@ import com.sangcomz.fishbun.Fishton import com.sangcomz.fishbun.R import com.sangcomz.fishbun.adapter.image.ImageAdapter import com.sangcomz.fishbun.datasource.FishBunDataSourceImpl +import com.sangcomz.fishbun.ui.common.SimpleDialog import com.sangcomz.fishbun.ui.detail.DetailImageContract import com.sangcomz.fishbun.ui.detail.adapter.DetailViewPagerAdapter import com.sangcomz.fishbun.ui.detail.model.DetailImageRepositoryImpl @@ -84,9 +87,9 @@ class DetailImageActivity : BaseActivity(), DetailImageContract.View, OnPageChan presenter.changeButtonStatus(position) } - override fun finishActivity(code: Int) { + override fun finishActivity() { val i = Intent() - setResult(code, i) + setResult(Activity.RESULT_OK, i) finish() } @@ -127,6 +130,13 @@ class DetailImageActivity : BaseActivity(), DetailImageContract.View, OnPageChan finish() } + override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) { + SimpleDialog.show(fm = supportFragmentManager, mesId = resId) { + setResult(code, Intent()) + finish() + } + } + override fun initViewPagerAdapter(imageAdapter: ImageAdapter) { vpDetailPager?.run { adapter = DetailViewPagerAdapter(imageAdapter) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt index edfe84b5..c9b5a008 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt @@ -13,6 +13,7 @@ import android.util.Log import android.view.Menu import android.view.MenuItem import android.view.View +import androidx.annotation.StringRes import androidx.appcompat.widget.Toolbar import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -27,6 +28,7 @@ import com.sangcomz.fishbun.datasource.FishBunDataSourceImpl import com.sangcomz.fishbun.datasource.ImageDataSourceImpl import com.sangcomz.fishbun.datasource.PickerIntentDataSourceImpl import com.sangcomz.fishbun.permission.PermissionCheck +import com.sangcomz.fishbun.ui.common.SimpleDialog import com.sangcomz.fishbun.ui.detail.ui.DetailImageActivity.Companion.getDetailImageActivity import com.sangcomz.fishbun.ui.picker.listener.OnPickerActionListener import com.sangcomz.fishbun.ui.picker.model.PickerListItem @@ -371,9 +373,9 @@ class PickerActivity : BaseActivity(), return false } - override fun finishActivity(code: Int) { + override fun finishActivity() { val i = Intent() - setResult(code, i) + setResult(Activity.RESULT_OK, i) finish() } @@ -387,6 +389,13 @@ class PickerActivity : BaseActivity(), finish() } + override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) { + SimpleDialog.show(fm = supportFragmentManager, mesId = resId) { + setResult(code, Intent()) + finish() + } + } + private fun setImageList( pickerList: List, imageAdapter: ImageAdapter, diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt index 6389633f..49a4e99a 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt @@ -1,7 +1,7 @@ package com.sangcomz.fishbun.ui.picker -import android.app.Activity 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 @@ -29,7 +29,10 @@ interface PickerContract { fun showNothingSelectedMessage(messageNotingSelected: String) fun onCheckStateChange(position: Int, image: PickerListItem.Image) fun showDetailView(position: Int) - fun finishActivity(code: Int = Activity.RESULT_OK) + fun finishActivity() + + /* show dialog and finish the Activity as dismiss performed */ + fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) fun finishActivityWithResult(selectedImages: List) fun takeANewPictureWithFinish(position: Int, addedImageList: List) fun addImage(pickerListImage: PickerListItem.Image) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt index 381b711f..8bcce6e0 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt @@ -2,6 +2,7 @@ package com.sangcomz.fishbun.ui.picker import android.app.Activity import android.net.Uri +import com.sangcomz.fishbun.R import com.sangcomz.fishbun.ui.picker.model.PickerListItem import com.sangcomz.fishbun.ui.picker.model.PickerMenuViewData import com.sangcomz.fishbun.ui.picker.model.PickerRepository @@ -273,7 +274,10 @@ class PickerPresenter internal constructor( onSuccessAllMediaThumbnailsPath(result) } else { // imageAdapter is null, so we can not proceed anymore - pickerView.finishActivity(Activity.RESULT_CANCELED) + pickerView.showErrorDialogAndFinish( + resId = R.string.msg_error, + code = Activity.RESULT_CANCELED, + ) } } } diff --git a/FishBun/src/main/res/values-ja/strings.xml b/FishBun/src/main/res/values-ja/strings.xml new file mode 100644 index 00000000..9fa88e20 --- /dev/null +++ b/FishBun/src/main/res/values-ja/strings.xml @@ -0,0 +1,16 @@ + + + アルバム + カメラ + 完了 + 全て完了 + 画像が選択されていません + 全て + 権限が却下されました + アルバムがありません + 違う画像を選択するには選択済みの画像を外してください + 読み込み中… + 画像 + 一時的なエラーが発生しました。少し経ってから試してください + 最低でも %d 枚選択してください + diff --git a/FishBun/src/main/res/values/strings.xml b/FishBun/src/main/res/values/strings.xml index 44f97eb6..f5743ff6 100644 --- a/FishBun/src/main/res/values/strings.xml +++ b/FishBun/src/main/res/values/strings.xml @@ -13,4 +13,6 @@ There was a temporary error. Please try again in a few minutes. %s (%d/%d) Please select at least %d images. + + OK From b77dfa482b06a4cd62ef5208093b07a1ba3ad6e2 Mon Sep 17 00:00:00 2001 From: Moroi Date: Wed, 7 Dec 2022 16:55:39 +0900 Subject: [PATCH 4/5] display toast instead of dialog --- .../fishbun/ui/album/AlbumContract.kt | 4 +- .../fishbun/ui/album/mvp/AlbumPresenter.kt | 2 +- .../fishbun/ui/album/ui/AlbumActivity.kt | 11 ++--- .../fishbun/ui/common/SimpleDialog.kt | 44 ------------------- .../fishbun/ui/detail/DetailImageContract.kt | 4 +- .../ui/detail/mvp/DetailImagePresenter.kt | 2 +- .../ui/detail/ui/DetailImageActivity.kt | 10 ++--- .../fishbun/ui/picker/PickerActivity.kt | 11 ++--- .../fishbun/ui/picker/PickerContract.kt | 4 +- .../fishbun/ui/picker/PickerPresenter.kt | 2 +- 10 files changed, 26 insertions(+), 68 deletions(-) delete mode 100644 FishBun/src/main/java/com/sangcomz/fishbun/ui/common/SimpleDialog.kt diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt index d6ed6401..2ba05476 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt @@ -22,8 +22,8 @@ interface AlbumContract { fun changeToolbarTitle(selectedImageCount: Int, albumViewData: AlbumViewData) fun finishActivityWithResult(selectedImages: List) - /* show dialog and finish the Activity as dismiss performed */ - fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) + /* show toast and finish the Activity */ + fun showToastAndFinish(@StringRes resId: Int, code: Int) fun refreshAlbumItem(position: Int, imagePath: ArrayList) fun scanAndRefresh() fun showNothingSelectedMessage(nothingSelectedMessage: String) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt index 116c51c8..42c30f94 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt @@ -101,7 +101,7 @@ class AlbumPresenter( val adapter = albumRepository.getImageAdapter() // imageAdapter is null, so we can not proceed anymore if (adapter == null) { - albumView.showErrorDialogAndFinish( + albumView.showToastAndFinish( resId = R.string.msg_error, code = Activity.RESULT_CANCELED, ) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt index 9ed6cf7b..514d8018 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt @@ -13,6 +13,7 @@ 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 @@ -34,7 +35,6 @@ 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.common.SimpleDialog import com.sangcomz.fishbun.ui.picker.PickerActivity import com.sangcomz.fishbun.util.MainUiHandler import com.sangcomz.fishbun.util.SingleMediaScanner @@ -290,11 +290,12 @@ class AlbumActivity : BaseActivity(), finish() } - override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) { - SimpleDialog.show(fm = supportFragmentManager, mesId = resId) { - setResult(code, Intent()) - 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 { diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/common/SimpleDialog.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/common/SimpleDialog.kt deleted file mode 100644 index c04bd260..00000000 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/common/SimpleDialog.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.sangcomz.fishbun.ui.common - -import android.app.Dialog -import android.content.DialogInterface -import android.os.Bundle -import androidx.annotation.StringRes -import androidx.fragment.app.DialogFragment -import androidx.fragment.app.FragmentManager -import com.sangcomz.fishbun.R - -internal class SimpleDialog(private val onDismiss: (DialogInterface) -> Unit) : DialogFragment() { - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val mesId = arguments?.getInt(ARG_KEY_MESSAGE) - ?: throw IllegalArgumentException("can not access string resource.") - return androidx.appcompat.app.AlertDialog.Builder(requireContext()) - .setMessage(mesId) - .setPositiveButton(R.string.common_positive_button_label, null) - .show() - } - - override fun onDismiss(dialog: DialogInterface) { - super.onDismiss(dialog) - onDismiss.invoke(dialog) - } - - internal companion object { - - private const val ARG_KEY_MESSAGE = "message" - - fun show( - fm: FragmentManager, - tag: String = "SimpleDialog", - @StringRes mesId: Int, - onDismiss: (DialogInterface) -> Unit, - ) { - SimpleDialog(onDismiss).apply { - arguments = Bundle().apply { - putInt(ARG_KEY_MESSAGE, mesId) - } - }.show(fm, tag) - } - } -} diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt index c820bd07..53590cc8 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt @@ -19,8 +19,8 @@ interface DetailImageContract { fun finishActivity() fun finishAndShowErrorToast() - /* show dialog and finish the Activity as dismiss performed */ - fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) + /* show toast and finish the Activity */ + fun showToastAndFinish(@StringRes resId: Int, code: Int) fun initViewPagerAdapter(imageAdapter: ImageAdapter) fun showImages(initPosition: Int, pickerImages: List) fun showSnackbar(message: String) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt index e1867f4b..cfef19ed 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt @@ -70,7 +70,7 @@ class DetailImagePresenter( val adapter = detailImageRepository.getImageAdapter() // we can not proceed any more if imageAdapter is null if (adapter == null) { - detailView.showErrorDialogAndFinish( + detailView.showToastAndFinish( resId = R.string.msg_error, code = Activity.RESULT_CANCELED, ) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt index f6a93a7d..c3cee1a1 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt @@ -20,7 +20,6 @@ import com.sangcomz.fishbun.Fishton import com.sangcomz.fishbun.R import com.sangcomz.fishbun.adapter.image.ImageAdapter import com.sangcomz.fishbun.datasource.FishBunDataSourceImpl -import com.sangcomz.fishbun.ui.common.SimpleDialog import com.sangcomz.fishbun.ui.detail.DetailImageContract import com.sangcomz.fishbun.ui.detail.adapter.DetailViewPagerAdapter import com.sangcomz.fishbun.ui.detail.model.DetailImageRepositoryImpl @@ -130,11 +129,12 @@ class DetailImageActivity : BaseActivity(), DetailImageContract.View, OnPageChan finish() } - override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) { - SimpleDialog.show(fm = supportFragmentManager, mesId = resId) { - setResult(code, Intent()) - 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) { diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt index c9b5a008..84523765 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt @@ -13,6 +13,7 @@ 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 @@ -28,7 +29,6 @@ import com.sangcomz.fishbun.datasource.FishBunDataSourceImpl import com.sangcomz.fishbun.datasource.ImageDataSourceImpl import com.sangcomz.fishbun.datasource.PickerIntentDataSourceImpl import com.sangcomz.fishbun.permission.PermissionCheck -import com.sangcomz.fishbun.ui.common.SimpleDialog import com.sangcomz.fishbun.ui.detail.ui.DetailImageActivity.Companion.getDetailImageActivity import com.sangcomz.fishbun.ui.picker.listener.OnPickerActionListener import com.sangcomz.fishbun.ui.picker.model.PickerListItem @@ -389,11 +389,12 @@ class PickerActivity : BaseActivity(), finish() } - override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) { - SimpleDialog.show(fm = supportFragmentManager, mesId = resId) { - setResult(code, Intent()) - 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( diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt index 49a4e99a..7e2af377 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt @@ -31,8 +31,8 @@ interface PickerContract { fun showDetailView(position: Int) fun finishActivity() - /* show dialog and finish the Activity as dismiss performed */ - fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) + /* show toast and finish the Activity */ + fun showToastAndFinish(@StringRes resId: Int, code: Int) fun finishActivityWithResult(selectedImages: List) fun takeANewPictureWithFinish(position: Int, addedImageList: List) fun addImage(pickerListImage: PickerListItem.Image) diff --git a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt index 8bcce6e0..c85b55cc 100644 --- a/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt +++ b/FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt @@ -274,7 +274,7 @@ class PickerPresenter internal constructor( onSuccessAllMediaThumbnailsPath(result) } else { // imageAdapter is null, so we can not proceed anymore - pickerView.showErrorDialogAndFinish( + pickerView.showToastAndFinish( resId = R.string.msg_error, code = Activity.RESULT_CANCELED, ) From 5228e7ad59680716857a9fb6a0abbfd0c7d10454 Mon Sep 17 00:00:00 2001 From: Moroi Date: Thu, 8 Dec 2022 11:18:10 +0900 Subject: [PATCH 5/5] delete unused resource --- FishBun/src/main/res/values/strings.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/FishBun/src/main/res/values/strings.xml b/FishBun/src/main/res/values/strings.xml index f5743ff6..44f97eb6 100644 --- a/FishBun/src/main/res/values/strings.xml +++ b/FishBun/src/main/res/values/strings.xml @@ -13,6 +13,4 @@ There was a temporary error. Please try again in a few minutes. %s (%d/%d) Please select at least %d images. - - OK