Skip to content

Commit 7b8909a

Browse files
author
Moroi
committed
- 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
1 parent 03adf09 commit 7b8909a

File tree

13 files changed

+124
-19
lines changed

13 files changed

+124
-19
lines changed

FishBun/src/main/java/com/sangcomz/fishbun/ui/album/AlbumContract.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.sangcomz.fishbun.ui.album
22

3-
import android.app.Activity
43
import android.net.Uri
4+
import androidx.annotation.StringRes
55
import com.sangcomz.fishbun.adapter.image.ImageAdapter
66
import com.sangcomz.fishbun.ui.album.model.Album
77
import com.sangcomz.fishbun.ui.album.model.AlbumMenuViewData
@@ -21,7 +21,9 @@ interface AlbumContract {
2121
fun setToolBar(albumViewData: AlbumViewData)
2222
fun changeToolbarTitle(selectedImageCount: Int, albumViewData: AlbumViewData)
2323
fun finishActivityWithResult(selectedImages: List<Uri>)
24-
fun finishActivity(code: Int = Activity.RESULT_OK)
24+
25+
/* show dialog and finish the Activity as dismiss performed */
26+
fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int)
2527
fun refreshAlbumItem(position: Int, imagePath: ArrayList<Uri>)
2628
fun scanAndRefresh()
2729
fun showNothingSelectedMessage(nothingSelectedMessage: String)

FishBun/src/main/java/com/sangcomz/fishbun/ui/album/adapter/AlbumListAdapter.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import com.sangcomz.fishbun.util.SquareImageView
1717
class AlbumListAdapter(
1818
private val albumClickListener: AlbumClickListener,
1919
private val thumbnailSize: Int,
20-
private val imageAdapter: ImageAdapter?
20+
private val imageAdapter: ImageAdapter
2121
) :
2222
RecyclerView.Adapter<AlbumListAdapter.ViewHolder>() {
2323

@@ -69,7 +69,7 @@ class AlbumListAdapter(
6969
class ViewHolder(
7070
parent: ViewGroup,
7171
albumSize: Int,
72-
private val imageAdapter: ImageAdapter?
72+
private val imageAdapter: ImageAdapter
7373
) : RecyclerView.ViewHolder(
7474
LayoutInflater.from(parent.context).inflate(R.layout.album_item, parent, false)
7575
) {
@@ -83,7 +83,7 @@ class AlbumListAdapter(
8383

8484
fun setData(album: Album) {
8585
val uri: Uri = Uri.parse(album.metaData.thumbnailPath)
86-
imageAdapter?.loadImage(imgAlbumThumb, uri)
86+
imageAdapter.loadImage(imgAlbumThumb, uri)
8787

8888
itemView.tag = album
8989
txtAlbumName.text = album.displayName

FishBun/src/main/java/com/sangcomz/fishbun/ui/album/mvp/AlbumPresenter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.sangcomz.fishbun.ui.album.mvp
22

33
import android.app.Activity
44
import android.net.Uri
5+
import com.sangcomz.fishbun.R
56
import com.sangcomz.fishbun.ui.album.AlbumContract
67
import com.sangcomz.fishbun.ui.album.model.Album
78
import com.sangcomz.fishbun.ui.album.model.AlbumMenuViewData
@@ -100,7 +101,10 @@ class AlbumPresenter(
100101
val adapter = albumRepository.getImageAdapter()
101102
// imageAdapter is null, so we can not proceed anymore
102103
if (adapter == null) {
103-
albumView.finishActivity(Activity.RESULT_CANCELED)
104+
albumView.showErrorDialogAndFinish(
105+
resId = R.string.msg_error,
106+
code = Activity.RESULT_CANCELED,
107+
)
104108
return
105109
}
106110
uiHandler.run {

FishBun/src/main/java/com/sangcomz/fishbun/ui/album/ui/AlbumActivity.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.view.MenuItem
1313
import android.view.View
1414
import android.widget.ImageView
1515
import android.widget.TextView
16+
import androidx.annotation.StringRes
1617
import androidx.appcompat.widget.Toolbar
1718
import androidx.constraintlayout.widget.Group
1819
import androidx.recyclerview.widget.GridLayoutManager
@@ -33,6 +34,7 @@ import com.sangcomz.fishbun.ui.album.model.Album
3334
import com.sangcomz.fishbun.ui.album.model.AlbumViewData
3435
import com.sangcomz.fishbun.ui.album.model.repository.AlbumRepositoryImpl
3536
import com.sangcomz.fishbun.ui.album.mvp.AlbumPresenter
37+
import com.sangcomz.fishbun.ui.common.SimpleDialog
3638
import com.sangcomz.fishbun.ui.picker.PickerActivity
3739
import com.sangcomz.fishbun.util.MainUiHandler
3840
import com.sangcomz.fishbun.util.SingleMediaScanner
@@ -288,9 +290,11 @@ class AlbumActivity : BaseActivity(),
288290
finish()
289291
}
290292

291-
override fun finishActivity(code: Int) {
292-
setResult(code, Intent())
293-
finish()
293+
override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) {
294+
SimpleDialog.show(fm = supportFragmentManager, mesId = resId) {
295+
setResult(code, Intent())
296+
finish()
297+
}
294298
}
295299

296300
private fun checkPermission(): Boolean {
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.sangcomz.fishbun.ui.common
2+
3+
import android.app.Dialog
4+
import android.content.DialogInterface
5+
import android.os.Bundle
6+
import androidx.annotation.StringRes
7+
import androidx.fragment.app.DialogFragment
8+
import androidx.fragment.app.FragmentManager
9+
import com.sangcomz.fishbun.R
10+
11+
internal class SimpleDialog(private val onDismiss: (DialogInterface) -> Unit) : DialogFragment() {
12+
13+
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
14+
val mesId = arguments?.getInt(ARG_KEY_MESSAGE)
15+
?: throw IllegalArgumentException("can not access string resource.")
16+
return androidx.appcompat.app.AlertDialog.Builder(requireContext())
17+
.setMessage(mesId)
18+
.setPositiveButton(R.string.common_positive_button_label, null)
19+
.show()
20+
}
21+
22+
override fun onDismiss(dialog: DialogInterface) {
23+
super.onDismiss(dialog)
24+
onDismiss.invoke(dialog)
25+
}
26+
27+
internal companion object {
28+
29+
private const val ARG_KEY_MESSAGE = "message"
30+
31+
fun show(
32+
fm: FragmentManager,
33+
tag: String = "SimpleDialog",
34+
@StringRes mesId: Int,
35+
onDismiss: (DialogInterface) -> Unit,
36+
) {
37+
SimpleDialog(onDismiss).apply {
38+
arguments = Bundle().apply {
39+
putInt(ARG_KEY_MESSAGE, mesId)
40+
}
41+
}.show(fm, tag)
42+
}
43+
}
44+
}

FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/DetailImageContract.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.sangcomz.fishbun.ui.detail
22

3-
import android.app.Activity
43
import android.net.Uri
4+
import androidx.annotation.StringRes
55
import com.sangcomz.fishbun.adapter.image.ImageAdapter
66
import com.sangcomz.fishbun.ui.detail.model.DetailImageViewData
77

@@ -16,8 +16,11 @@ interface DetailImageContract {
1616
fun unselectImage()
1717
fun updateRadioButtonWithText(text: String)
1818
fun updateRadioButtonWithDrawable()
19-
fun finishActivity(code: Int = Activity.RESULT_OK)
19+
fun finishActivity()
2020
fun finishAndShowErrorToast()
21+
22+
/* show dialog and finish the Activity as dismiss performed */
23+
fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int)
2124
fun initViewPagerAdapter(imageAdapter: ImageAdapter)
2225
fun showImages(initPosition: Int, pickerImages: List<Uri>)
2326
fun showSnackbar(message: String)

FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/mvp/DetailImagePresenter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.sangcomz.fishbun.ui.detail.mvp
22

33
import android.app.Activity
44
import android.net.Uri
5+
import com.sangcomz.fishbun.R
56
import com.sangcomz.fishbun.ui.detail.DetailImageContract
67
import com.sangcomz.fishbun.ui.detail.model.DetailImageRepository
78

@@ -69,7 +70,10 @@ class DetailImagePresenter(
6970
val adapter = detailImageRepository.getImageAdapter()
7071
// we can not proceed any more if imageAdapter is null
7172
if (adapter == null) {
72-
detailView.finishActivity(Activity.RESULT_CANCELED)
73+
detailView.showErrorDialogAndFinish(
74+
resId = R.string.msg_error,
75+
code = Activity.RESULT_CANCELED,
76+
)
7377
return
7478
}
7579
detailView.initViewPagerAdapter(adapter)

FishBun/src/main/java/com/sangcomz/fishbun/ui/detail/ui/DetailImageActivity.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.sangcomz.fishbun.ui.detail.ui
22

3+
import android.app.Activity
34
import android.content.Context
45
import android.content.Intent
56
import android.graphics.Color
@@ -9,6 +10,7 @@ import android.os.Bundle
910
import android.view.Window
1011
import android.widget.ImageButton
1112
import android.widget.Toast
13+
import androidx.annotation.StringRes
1214
import androidx.core.content.ContextCompat
1315
import androidx.viewpager.widget.ViewPager
1416
import androidx.viewpager.widget.ViewPager.OnPageChangeListener
@@ -18,6 +20,7 @@ import com.sangcomz.fishbun.Fishton
1820
import com.sangcomz.fishbun.R
1921
import com.sangcomz.fishbun.adapter.image.ImageAdapter
2022
import com.sangcomz.fishbun.datasource.FishBunDataSourceImpl
23+
import com.sangcomz.fishbun.ui.common.SimpleDialog
2124
import com.sangcomz.fishbun.ui.detail.DetailImageContract
2225
import com.sangcomz.fishbun.ui.detail.adapter.DetailViewPagerAdapter
2326
import com.sangcomz.fishbun.ui.detail.model.DetailImageRepositoryImpl
@@ -84,9 +87,9 @@ class DetailImageActivity : BaseActivity(), DetailImageContract.View, OnPageChan
8487
presenter.changeButtonStatus(position)
8588
}
8689

87-
override fun finishActivity(code: Int) {
90+
override fun finishActivity() {
8891
val i = Intent()
89-
setResult(code, i)
92+
setResult(Activity.RESULT_OK, i)
9093
finish()
9194
}
9295

@@ -127,6 +130,13 @@ class DetailImageActivity : BaseActivity(), DetailImageContract.View, OnPageChan
127130
finish()
128131
}
129132

133+
override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) {
134+
SimpleDialog.show(fm = supportFragmentManager, mesId = resId) {
135+
setResult(code, Intent())
136+
finish()
137+
}
138+
}
139+
130140
override fun initViewPagerAdapter(imageAdapter: ImageAdapter) {
131141
vpDetailPager?.run {
132142
adapter = DetailViewPagerAdapter(imageAdapter)

FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerActivity.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import android.util.Log
1313
import android.view.Menu
1414
import android.view.MenuItem
1515
import android.view.View
16+
import android.widget.Toast
17+
import androidx.annotation.StringRes
1618
import androidx.appcompat.widget.Toolbar
1719
import androidx.recyclerview.widget.GridLayoutManager
1820
import androidx.recyclerview.widget.RecyclerView
@@ -371,9 +373,9 @@ class PickerActivity : BaseActivity(),
371373
return false
372374
}
373375

374-
override fun finishActivity(code: Int) {
376+
override fun finishActivity() {
375377
val i = Intent()
376-
setResult(code, i)
378+
setResult(Activity.RESULT_OK, i)
377379
finish()
378380
}
379381

@@ -387,6 +389,12 @@ class PickerActivity : BaseActivity(),
387389
finish()
388390
}
389391

392+
override fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int) {
393+
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show()
394+
setResult(code, Intent())
395+
finish()
396+
}
397+
390398
private fun setImageList(
391399
pickerList: List<PickerListItem>,
392400
imageAdapter: ImageAdapter,

FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerContract.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.sangcomz.fishbun.ui.picker
22

3-
import android.app.Activity
43
import android.net.Uri
4+
import androidx.annotation.StringRes
55
import com.sangcomz.fishbun.adapter.image.ImageAdapter
66
import com.sangcomz.fishbun.ui.picker.model.PickerListItem
77
import com.sangcomz.fishbun.ui.picker.model.PickerMenuViewData
@@ -29,7 +29,10 @@ interface PickerContract {
2929
fun showNothingSelectedMessage(messageNotingSelected: String)
3030
fun onCheckStateChange(position: Int, image: PickerListItem.Image)
3131
fun showDetailView(position: Int)
32-
fun finishActivity(code: Int = Activity.RESULT_OK)
32+
fun finishActivity()
33+
34+
/* show dialog and finish the Activity as dismiss performed */
35+
fun showErrorDialogAndFinish(@StringRes resId: Int, code: Int)
3336
fun finishActivityWithResult(selectedImages: List<Uri>)
3437
fun takeANewPictureWithFinish(position: Int, addedImageList: List<Uri>)
3538
fun addImage(pickerListImage: PickerListItem.Image)

FishBun/src/main/java/com/sangcomz/fishbun/ui/picker/PickerPresenter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.sangcomz.fishbun.ui.picker
22

33
import android.app.Activity
44
import android.net.Uri
5+
import com.sangcomz.fishbun.R
56
import com.sangcomz.fishbun.ui.picker.model.PickerListItem
67
import com.sangcomz.fishbun.ui.picker.model.PickerMenuViewData
78
import com.sangcomz.fishbun.ui.picker.model.PickerRepository
@@ -273,7 +274,10 @@ class PickerPresenter internal constructor(
273274
onSuccessAllMediaThumbnailsPath(result)
274275
} else {
275276
// imageAdapter is null, so we can not proceed anymore
276-
pickerView.finishActivity(Activity.RESULT_CANCELED)
277+
pickerView.showErrorDialogAndFinish(
278+
resId = R.string.msg_error,
279+
code = Activity.RESULT_CANCELED,
280+
)
277281
}
278282
}
279283
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<string name="album">アルバム</string>
4+
<string name="camera">カメラ</string>
5+
<string name="done">完了</string>
6+
<string name="done_all">全て完了</string>
7+
<string name="msg_no_selected">画像が選択されていません</string>
8+
<string name="str_all_view">全て</string>
9+
<string name="msg_permission">権限が却下されました</string>
10+
<string name="msg_no_image">アルバムがありません</string>
11+
<string name="msg_full_image">違う画像を選択するには選択済みの画像を外してください</string>
12+
<string name="msg_loading_image">読み込み中…</string>
13+
<string name="image">画像</string>
14+
<string name="msg_error">一時的なエラーが発生しました。少し経ってから試してください</string>
15+
<string name="title_toolbar" formatted="false" translatable="false">%s (%d/%d)</string>
16+
<string name="msg_minimum_image">最低でも <b>%d</b> 枚選択してください</string>
17+
</resources>

FishBun/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@
1313
<string name="msg_error">There was a temporary error. Please try again in a few minutes.</string>
1414
<string name="title_toolbar" formatted="false" translatable="false">%s (%d/%d)</string>
1515
<string name="msg_minimum_image">Please select at least <b>%d</b> images.</string>
16+
17+
<string name="common_positive_button_label" translatable="false">OK</string>
1618
</resources>

0 commit comments

Comments
 (0)