@@ -58,7 +58,7 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
58
58
/* * The settings used for the dialog. */
59
59
override lateinit var settings: IconDialogSettings
60
60
61
- override val iconPack: IconPack
61
+ override val iconPack: IconPack ?
62
62
get() = callback.iconDialogIconPack
63
63
64
64
/* *
@@ -77,6 +77,7 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
77
77
private lateinit var searchEdt: EditText
78
78
private lateinit var searchClearBtn: ImageView
79
79
private lateinit var noResultTxv: TextView
80
+ private lateinit var progressBar: ProgressBar
80
81
private lateinit var footerDiv: View
81
82
private lateinit var selectBtn: Button
82
83
private lateinit var cancelBtn: Button
@@ -86,6 +87,9 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
86
87
private lateinit var listAdapter: IconAdapter
87
88
private lateinit var listLayout: IconLayoutManager
88
89
90
+ private lateinit var progressHandler: Handler
91
+ private var progressCallback: Runnable ? = null
92
+
89
93
private lateinit var searchHandler: Handler
90
94
private val searchCallback = Runnable {
91
95
presenter?.onSearchQueryEntered(searchEdt.text.toString())
@@ -117,6 +121,7 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
117
121
iconColorSelected = getColor(it.getResourceId(R .styleable.IconDialog_icdSelectedIconColor , 0 ))
118
122
}
119
123
124
+ progressHandler = Handler ()
120
125
searchHandler = Handler ()
121
126
122
127
// Create the dialog view
@@ -127,6 +132,7 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
127
132
searchEdt = dialogView.findViewById(R .id.icd_edt_search)
128
133
searchClearBtn = dialogView.findViewById(R .id.icd_imv_clear_search)
129
134
noResultTxv = dialogView.findViewById(R .id.icd_txv_no_result)
135
+ progressBar = dialogView.findViewById(R .id.icd_progress_bar)
130
136
131
137
// Search
132
138
searchEdt.addTextChangedListener {
@@ -235,6 +241,17 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
235
241
presenter?.onDialogCancelled()
236
242
}
237
243
244
+ override fun postDelayed (delay : Long , action : () -> Unit ) {
245
+ val callback = Runnable (action)
246
+ progressHandler.post(callback)
247
+ progressCallback = callback
248
+ }
249
+
250
+ override fun cancelCallbacks () {
251
+ progressHandler.removeCallbacks(progressCallback ? : return )
252
+ progressCallback = null
253
+ }
254
+
238
255
override fun exit () {
239
256
dismiss()
240
257
}
@@ -259,6 +276,10 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
259
276
titleTxv.isVisible = visible
260
277
}
261
278
279
+ override fun updateTitle (titleRes : Int ) {
280
+ titleTxv.text = getString(titleRes)
281
+ }
282
+
262
283
override fun setSearchBarVisible (visible : Boolean ) {
263
284
searchImv.isVisible = visible
264
285
searchEdt.isVisible = visible
@@ -277,6 +298,10 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
277
298
noResultTxv.isVisible = visible
278
299
}
279
300
301
+ override fun setProgressBarVisible (visible : Boolean ) {
302
+ progressBar.isVisible = visible
303
+ }
304
+
280
305
override fun setFooterVisible (visible : Boolean ) {
281
306
clearBtn.isVisible = visible
282
307
cancelBtn.isVisible = visible
@@ -404,8 +429,11 @@ class IconDialog : DialogFragment(), IconDialogContract.View {
404
429
/* *
405
430
* The icon pack to be displayed by the dialog.
406
431
* All icon drawables in the pack must have been loaded, or they won't be displayed.
432
+ *
433
+ * If `null` is returned, the icon dialog will periodically try to get the icon
434
+ * pack while showing a progress indicator, until it no longer returns `null`.
407
435
*/
408
- val iconDialogIconPack: IconPack
436
+ val iconDialogIconPack: IconPack ?
409
437
410
438
/* *
411
439
* Called when icons are selected and user confirms the selection.
0 commit comments