From 7b8909a6a586f4fb71f99fc08fb0d8dd22325c96 Mon Sep 17 00:00:00 2001 From: Moroi Date: Tue, 6 Dec 2022 14:32:47 +0900 Subject: [PATCH] - 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 | 12 ++++- .../fishbun/ui/picker/PickerContract.kt | 7 ++- .../fishbun/ui/picker/PickerPresenter.kt | 6 ++- FishBun/src/main/res/values-ja/strings.xml | 17 +++++++ 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..22bf3d60 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,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 @@ -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,12 @@ class PickerActivity : BaseActivity(), finish() } + override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) { + Toast.makeText(this, resId, Toast.LENGTH_SHORT).show() + 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..c796693d --- /dev/null +++ b/FishBun/src/main/res/values-ja/strings.xml @@ -0,0 +1,17 @@ + + + アルバム + カメラ + 完了 + 全て完了 + 画像が選択されていません + 全て + 権限が却下されました + アルバムがありません + 違う画像を選択するには選択済みの画像を外してください + 読み込み中… + 画像 + 一時的なエラーが発生しました。少し経ってから試してください + %s (%d/%d) + 最低でも %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