リファクタ
This commit is contained in:
parent
34118e78a6
commit
1f92d3cdef
|
@ -1444,7 +1444,7 @@ class ActAccountSetting
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPostExecute(opener : InputStreamOpener?) {
|
override fun onPostExecute(opener : InputStreamOpener?) {
|
||||||
progress.dismiss()
|
progress.dismissSafe()
|
||||||
if(opener != null) {
|
if(opener != null) {
|
||||||
updateCredential(
|
updateCredential(
|
||||||
when(request_code) {
|
when(request_code) {
|
||||||
|
|
|
@ -230,7 +230,7 @@ class ActAppSetting : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPostExecute(result : File?) {
|
override fun onPostExecute(result : File?) {
|
||||||
progress.dismiss()
|
progress.dismissSafe()
|
||||||
|
|
||||||
if(isCancelled || result == null) {
|
if(isCancelled || result == null) {
|
||||||
// cancelled.
|
// cancelled.
|
||||||
|
|
|
@ -242,12 +242,7 @@ class ActHighlightWordList : AppCompatActivity(), View.OnClickListener {
|
||||||
}
|
}
|
||||||
edit(item)
|
edit(item)
|
||||||
|
|
||||||
try {
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -2052,18 +2052,8 @@ class ActMain : AppCompatActivity()
|
||||||
override fun handleResult(result : TootApiResult?) {
|
override fun handleResult(result : TootApiResult?) {
|
||||||
|
|
||||||
if(afterAccountVerify(result, ta, sa, host)) {
|
if(afterAccountVerify(result, ta, sa, host)) {
|
||||||
try {
|
dialog_host?.dismissSafe()
|
||||||
dialog_host?.dismiss()
|
dialog_token?.dismissSafe()
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
dialog_token?.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -2750,7 +2740,7 @@ class ActMain : AppCompatActivity()
|
||||||
|
|
||||||
override fun onPostExecute(result : ArrayList<Column>?) {
|
override fun onPostExecute(result : ArrayList<Column>?) {
|
||||||
|
|
||||||
progress.dismiss()
|
progress.dismissSafe()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||||
|
|
|
@ -1500,10 +1500,7 @@ class ActPost : AppCompatActivity(),
|
||||||
pa.attachment = new_attachment
|
pa.attachment = new_attachment
|
||||||
showMediaAttachment()
|
showMediaAttachment()
|
||||||
|
|
||||||
try {
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
showToast(this@ActPost, true, result.error)
|
showToast(this@ActPost, true, result.error)
|
||||||
|
@ -2439,7 +2436,7 @@ class ActPost : AppCompatActivity(),
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPostExecute(result : String?) {
|
override fun onPostExecute(result : String?) {
|
||||||
progress.dismiss()
|
progress.dismissSafe()
|
||||||
|
|
||||||
if(isCancelled || result == null) {
|
if(isCancelled || result == null) {
|
||||||
// cancelled.
|
// cancelled.
|
||||||
|
|
|
@ -218,11 +218,7 @@ internal class DlgContextMenu(
|
||||||
b.text = caption
|
b.text = caption
|
||||||
b.allCaps = false
|
b.allCaps = false
|
||||||
b.setOnClickListener {
|
b.setOnClickListener {
|
||||||
try {
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
span.onClick(contentTextView)
|
span.onClick(contentTextView)
|
||||||
}
|
}
|
||||||
llLinks.addView(b, insPos ++)
|
llLinks.addView(b, insPos ++)
|
||||||
|
@ -445,12 +441,7 @@ internal class DlgContextMenu(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(v : View) {
|
override fun onClick(v : View) {
|
||||||
|
dialog.dismissSafe()
|
||||||
try {
|
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
|
|
||||||
val pos = activity.nextPosition(column)
|
val pos = activity.nextPosition(column)
|
||||||
|
|
||||||
|
@ -870,11 +861,7 @@ internal class DlgContextMenu(
|
||||||
|
|
||||||
when(v.id) {
|
when(v.id) {
|
||||||
R.id.btnFollow -> {
|
R.id.btnFollow -> {
|
||||||
try {
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
Action_Follow.followFromAnotherAccount(
|
Action_Follow.followFromAnotherAccount(
|
||||||
activity,
|
activity,
|
||||||
activity.nextPosition(column),
|
activity.nextPosition(column),
|
||||||
|
|
|
@ -46,14 +46,10 @@ object Action_Account {
|
||||||
val data = result.data
|
val data = result.data
|
||||||
if(data is String) {
|
if(data is String) {
|
||||||
// ブラウザ用URLが生成された
|
// ブラウザ用URLが生成された
|
||||||
try {
|
val intent = Intent()
|
||||||
val intent = Intent()
|
intent.data = data.toUri()
|
||||||
intent.data = data.toUri()
|
activity.startAccessTokenUpdate(intent)
|
||||||
activity.startAccessTokenUpdate(intent)
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
} else if(data is JSONObject) {
|
} else if(data is JSONObject) {
|
||||||
// インスタンスを確認できた
|
// インスタンスを確認できた
|
||||||
when(action) {
|
when(action) {
|
||||||
|
@ -94,9 +90,9 @@ object Action_Account {
|
||||||
showToast(activity, false, R.string.server_confirmed)
|
showToast(activity, false, R.string.server_confirmed)
|
||||||
val pos = App1.getAppState(activity).column_list.size
|
val pos = App1.getAppState(activity).column_list.size
|
||||||
activity.addColumn(pos, a, Column.TYPE_LOCAL)
|
activity.addColumn(pos, a, Column.TYPE_LOCAL)
|
||||||
|
dialog.dismissSafe()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
} catch(ignored : Throwable) {
|
||||||
// IllegalArgumentException がたまに出る
|
// IllegalArgumentException がたまに出る
|
||||||
}
|
}
|
||||||
|
@ -189,16 +185,8 @@ object Action_Account {
|
||||||
override fun handleResult(result : TootApiResult?) {
|
override fun handleResult(result : TootApiResult?) {
|
||||||
val sa : SavedAccount? = null
|
val sa : SavedAccount? = null
|
||||||
if(activity.afterAccountVerify(result, ta, sa, instance)) {
|
if(activity.afterAccountVerify(result, ta, sa, instance)) {
|
||||||
try {
|
dialog_host.dismissSafe()
|
||||||
dialog_host.dismiss()
|
dialog_create.dismissSafe()
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
dialog_create.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -9,6 +9,7 @@ import jp.juggler.subwaytooter.api.entity.parseItem
|
||||||
import jp.juggler.subwaytooter.dialog.DlgConfirm
|
import jp.juggler.subwaytooter.dialog.DlgConfirm
|
||||||
import jp.juggler.subwaytooter.dialog.DlgTextInput
|
import jp.juggler.subwaytooter.dialog.DlgTextInput
|
||||||
import jp.juggler.subwaytooter.table.SavedAccount
|
import jp.juggler.subwaytooter.table.SavedAccount
|
||||||
|
import jp.juggler.util.dismissSafe
|
||||||
import jp.juggler.util.showToast
|
import jp.juggler.util.showToast
|
||||||
import jp.juggler.util.toPostRequestBuilder
|
import jp.juggler.util.toPostRequestBuilder
|
||||||
import jp.juggler.util.toPutRequestBuilder
|
import jp.juggler.util.toPutRequestBuilder
|
||||||
|
@ -176,11 +177,7 @@ object Action_List {
|
||||||
for(column in activity.app_state.column_list) {
|
for(column in activity.app_state.column_list) {
|
||||||
column.onListNameUpdated(access_info, list)
|
column.onListNameUpdated(access_info, list)
|
||||||
}
|
}
|
||||||
try {
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
showToast(activity, false, result.error)
|
showToast(activity, false, result.error)
|
||||||
}
|
}
|
||||||
|
|
|
@ -443,11 +443,7 @@ object Action_User {
|
||||||
ReportForm.showReportForm(activity, access_info, who, status) { dialog, comment, forward ->
|
ReportForm.showReportForm(activity, access_info, who, status) { dialog, comment, forward ->
|
||||||
report(activity, access_info, who, status, comment, forward) {
|
report(activity, access_info, who, status, comment, forward) {
|
||||||
// 成功したらダイアログを閉じる
|
// 成功したらダイアログを閉じる
|
||||||
try {
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// IllegalArgumentException がたまに出る
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import java.text.NumberFormat
|
||||||
import jp.juggler.subwaytooter.App1
|
import jp.juggler.subwaytooter.App1
|
||||||
import jp.juggler.subwaytooter.dialog.ProgressDialogEx
|
import jp.juggler.subwaytooter.dialog.ProgressDialogEx
|
||||||
import jp.juggler.subwaytooter.table.SavedAccount
|
import jp.juggler.subwaytooter.table.SavedAccount
|
||||||
|
import jp.juggler.util.dismissSafe
|
||||||
|
|
||||||
/*
|
/*
|
||||||
非同期タスク(TootTask)を実行します。
|
非同期タスク(TootTask)を実行します。
|
||||||
|
@ -180,7 +181,7 @@ class TootTaskRunner(
|
||||||
|
|
||||||
// ダイアログを閉じる
|
// ダイアログを閉じる
|
||||||
private fun dismissProgress() {
|
private fun dismissProgress() {
|
||||||
progress?.dismiss()
|
progress?.dismissSafe()
|
||||||
progress = null
|
progress = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import jp.juggler.subwaytooter.table.AcctColor
|
||||||
import jp.juggler.subwaytooter.table.SavedAccount
|
import jp.juggler.subwaytooter.table.SavedAccount
|
||||||
import jp.juggler.subwaytooter.util.DialogInterfaceCallback
|
import jp.juggler.subwaytooter.util.DialogInterfaceCallback
|
||||||
import jp.juggler.subwaytooter.util.SavedAccountCallback
|
import jp.juggler.subwaytooter.util.SavedAccountCallback
|
||||||
|
import jp.juggler.util.dismissSafe
|
||||||
import jp.juggler.util.showToast
|
import jp.juggler.util.showToast
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.atomic.AtomicBoolean
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
@ -144,7 +145,7 @@ object AccountPicker {
|
||||||
b.setOnClickListener {
|
b.setOnClickListener {
|
||||||
isDialogClosed.set(true)
|
isDialogClosed.set(true)
|
||||||
callback(a)
|
callback(a)
|
||||||
dialog.dismiss()
|
dialog.dismissSafe()
|
||||||
}
|
}
|
||||||
llAccounts.addView(b)
|
llAccounts.addView(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import android.widget.TimePicker
|
||||||
import jp.juggler.subwaytooter.R
|
import jp.juggler.subwaytooter.R
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import android.provider.Settings.System.TIME_12_24
|
import android.provider.Settings.System.TIME_12_24
|
||||||
|
import jp.juggler.util.dismissSafe
|
||||||
|
|
||||||
class DlgDateTime(
|
class DlgDateTime(
|
||||||
val activity : Activity
|
val activity : Activity
|
||||||
|
@ -84,7 +85,7 @@ class DlgDateTime(
|
||||||
R.id.btnCancel -> dialog.cancel()
|
R.id.btnCancel -> dialog.cancel()
|
||||||
|
|
||||||
R.id.btnOk -> {
|
R.id.btnOk -> {
|
||||||
dialog.dismiss()
|
dialog.dismissSafe()
|
||||||
callback(getTime())
|
callback(getTime())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import jp.juggler.subwaytooter.App1
|
||||||
import jp.juggler.subwaytooter.R
|
import jp.juggler.subwaytooter.R
|
||||||
import jp.juggler.subwaytooter.api.entity.TootStatus
|
import jp.juggler.subwaytooter.api.entity.TootStatus
|
||||||
import jp.juggler.subwaytooter.table.PostDraft
|
import jp.juggler.subwaytooter.table.PostDraft
|
||||||
|
import jp.juggler.util.dismissSafe
|
||||||
import jp.juggler.util.showToast
|
import jp.juggler.util.showToast
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
|
@ -36,7 +37,7 @@ class DlgDraftPicker : AdapterView.OnItemClickListener, AdapterView.OnItemLongCl
|
||||||
val json = getPostDraft(position)?.json
|
val json = getPostDraft(position)?.json
|
||||||
if(json != null) {
|
if(json != null) {
|
||||||
callback(json)
|
callback(json)
|
||||||
dialog.dismiss()
|
dialog.dismissSafe()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ import jp.juggler.subwaytooter.api.TootTaskRunner
|
||||||
import jp.juggler.subwaytooter.api.entity.TootAttachment
|
import jp.juggler.subwaytooter.api.entity.TootAttachment
|
||||||
import jp.juggler.subwaytooter.view.FocusPointView
|
import jp.juggler.subwaytooter.view.FocusPointView
|
||||||
import jp.juggler.util.LogCategory
|
import jp.juggler.util.LogCategory
|
||||||
|
import jp.juggler.util.dismissSafe
|
||||||
import jp.juggler.util.showToast
|
import jp.juggler.util.showToast
|
||||||
import jp.juggler.util.withCaption
|
import jp.juggler.util.withCaption
|
||||||
|
|
||||||
|
@ -44,7 +45,7 @@ class DlgFocusPoint(val activity : Activity, val attachment : TootAttachment) :
|
||||||
|
|
||||||
override fun onClick(v : View) {
|
override fun onClick(v : View) {
|
||||||
when(v.id) {
|
when(v.id) {
|
||||||
R.id.btnClose -> dialog.dismiss()
|
R.id.btnClose -> dialog.dismissSafe()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,21 +106,13 @@ class DlgFocusPoint(val activity : Activity, val attachment : TootAttachment) :
|
||||||
val bitmap = this.bitmap
|
val bitmap = this.bitmap
|
||||||
if(bitmap == null) {
|
if(bitmap == null) {
|
||||||
showToast(activity, true, result?.error ?: "?")
|
showToast(activity, true, result?.error ?: "?")
|
||||||
try {
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if(activity.isFinishing) {
|
if(activity.isFinishing) {
|
||||||
bitmap.recycle()
|
bitmap.recycle()
|
||||||
try {
|
dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,16 +15,19 @@ import jp.juggler.subwaytooter.action.Action_List
|
||||||
import jp.juggler.subwaytooter.action.Action_ListMember
|
import jp.juggler.subwaytooter.action.Action_ListMember
|
||||||
import jp.juggler.subwaytooter.action.makeAccountListNonPseudo
|
import jp.juggler.subwaytooter.action.makeAccountListNonPseudo
|
||||||
import jp.juggler.subwaytooter.api.*
|
import jp.juggler.subwaytooter.api.*
|
||||||
import jp.juggler.subwaytooter.api.entity.*
|
import jp.juggler.subwaytooter.api.entity.EntityId
|
||||||
|
import jp.juggler.subwaytooter.api.entity.TootAccount
|
||||||
|
import jp.juggler.subwaytooter.api.entity.TootList
|
||||||
|
import jp.juggler.subwaytooter.api.entity.parseList
|
||||||
import jp.juggler.subwaytooter.table.AcctColor
|
import jp.juggler.subwaytooter.table.AcctColor
|
||||||
import jp.juggler.subwaytooter.table.SavedAccount
|
import jp.juggler.subwaytooter.table.SavedAccount
|
||||||
import jp.juggler.subwaytooter.util.NetworkEmojiInvalidator
|
import jp.juggler.subwaytooter.util.NetworkEmojiInvalidator
|
||||||
import jp.juggler.subwaytooter.view.MyListView
|
import jp.juggler.subwaytooter.view.MyListView
|
||||||
import jp.juggler.subwaytooter.view.MyNetworkImageView
|
import jp.juggler.subwaytooter.view.MyNetworkImageView
|
||||||
|
import jp.juggler.util.dismissSafe
|
||||||
import jp.juggler.util.getAttributeColor
|
import jp.juggler.util.getAttributeColor
|
||||||
import jp.juggler.util.showToast
|
import jp.juggler.util.showToast
|
||||||
import jp.juggler.util.toPostRequestBuilder
|
import jp.juggler.util.toPostRequestBuilder
|
||||||
import org.json.JSONObject
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@SuppressLint("InflateParams")
|
@SuppressLint("InflateParams")
|
||||||
|
@ -51,10 +54,10 @@ class DlgListMember(
|
||||||
this.account_list = makeAccountListNonPseudo(activity, null)
|
this.account_list = makeAccountListNonPseudo(activity, null)
|
||||||
this.target_user_full_acct = _list_owner.getFullAcct(who)
|
this.target_user_full_acct = _list_owner.getFullAcct(who)
|
||||||
|
|
||||||
if(_list_owner.isPseudo) {
|
this.list_owner = if(_list_owner.isPseudo) {
|
||||||
this.list_owner = null
|
null
|
||||||
} else {
|
} else {
|
||||||
this.list_owner = _list_owner
|
_list_owner
|
||||||
}
|
}
|
||||||
|
|
||||||
val view = activity.layoutInflater.inflate(R.layout.dlg_list_member, null, false)
|
val view = activity.layoutInflater.inflate(R.layout.dlg_list_member, null, false)
|
||||||
|
@ -73,7 +76,12 @@ class DlgListMember(
|
||||||
btnListOwner.setOnClickListener(this)
|
btnListOwner.setOnClickListener(this)
|
||||||
view.findViewById<View>(R.id.btnClose).setOnClickListener(this)
|
view.findViewById<View>(R.id.btnClose).setOnClickListener(this)
|
||||||
|
|
||||||
ivUser.setImageUrl(App1.pref, Styler.calcIconRound(ivUser.layoutParams), who.avatar_static, who.avatar)
|
ivUser.setImageUrl(
|
||||||
|
App1.pref,
|
||||||
|
Styler.calcIconRound(ivUser.layoutParams),
|
||||||
|
who.avatar_static,
|
||||||
|
who.avatar
|
||||||
|
)
|
||||||
val user_name_invalidator = NetworkEmojiInvalidator(activity.handler, tvUserName)
|
val user_name_invalidator = NetworkEmojiInvalidator(activity.handler, tvUserName)
|
||||||
val name = who.decodeDisplayName(activity)
|
val name = who.decodeDisplayName(activity)
|
||||||
tvUserName.text = name
|
tvUserName.text = name
|
||||||
|
@ -82,35 +90,32 @@ class DlgListMember(
|
||||||
|
|
||||||
setListOwner(list_owner)
|
setListOwner(list_owner)
|
||||||
|
|
||||||
this.dialog = Dialog(activity)
|
dialog = Dialog(activity).apply{
|
||||||
|
window?.apply{
|
||||||
val w = dialog.window
|
setFlags(0, Window.FEATURE_NO_TITLE)
|
||||||
if(w != null) {
|
setLayout(
|
||||||
w.setFlags(0, Window.FEATURE_NO_TITLE)
|
WindowManager.LayoutParams.MATCH_PARENT,
|
||||||
w.setLayout(
|
WindowManager.LayoutParams.MATCH_PARENT
|
||||||
WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT
|
)
|
||||||
)
|
}
|
||||||
|
setTitle(R.string.your_lists)
|
||||||
|
setContentView(view)
|
||||||
}
|
}
|
||||||
|
|
||||||
dialog.setTitle(R.string.your_lists)
|
|
||||||
dialog.setContentView(view)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun show() {
|
fun show() = dialog.apply{
|
||||||
val w = dialog.window
|
window?.setLayout(
|
||||||
w?.setLayout(
|
WindowManager.LayoutParams.MATCH_PARENT,
|
||||||
WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT
|
WindowManager.LayoutParams.MATCH_PARENT
|
||||||
)
|
)
|
||||||
dialog.show()
|
show()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(v : View) {
|
override fun onClick(v : View) {
|
||||||
when(v.id) {
|
when(v.id) {
|
||||||
|
|
||||||
R.id.btnClose -> try {
|
R.id.btnClose -> dialog.dismissSafe()
|
||||||
dialog.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
}
|
|
||||||
|
|
||||||
R.id.btnListOwner -> {
|
R.id.btnListOwner -> {
|
||||||
AccountPicker.pick(
|
AccountPicker.pick(
|
||||||
|
@ -152,7 +157,12 @@ class DlgListMember(
|
||||||
if(AcctColor.hasColorForeground(ac)) {
|
if(AcctColor.hasColorForeground(ac)) {
|
||||||
btnListOwner.setTextColor(ac.color_fg)
|
btnListOwner.setTextColor(ac.color_fg)
|
||||||
} else {
|
} else {
|
||||||
btnListOwner.setTextColor(getAttributeColor(activity, android.R.attr.textColorPrimary))
|
btnListOwner.setTextColor(
|
||||||
|
getAttributeColor(
|
||||||
|
activity,
|
||||||
|
android.R.attr.textColorPrimary
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,54 +178,71 @@ class DlgListMember(
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
TootTaskRunner(activity).run(list_owner , object : TootTask {
|
TootTaskRunner(activity).run(list_owner, object : TootTask {
|
||||||
|
|
||||||
var new_list : ArrayList<TootList>? = null
|
var new_list : ArrayList<TootList>? = null
|
||||||
|
|
||||||
override fun background(client : TootApiClient) : TootApiResult? {
|
override fun background(client : TootApiClient) : TootApiResult? {
|
||||||
|
|
||||||
// リストに追加したいアカウントの自タンスでのアカウントIDを取得する
|
// リストに追加したいアカウントの自タンスでのアカウントIDを取得する
|
||||||
var (result,ar) = client.syncAccountByAcct(list_owner,target_user_full_acct)
|
val (r1, ar) = client.syncAccountByAcct(list_owner, target_user_full_acct)
|
||||||
val local_who = ar?.get() ?: return result
|
val local_who = ar?.get() ?: return r1
|
||||||
|
|
||||||
this@DlgListMember.local_who = local_who
|
this@DlgListMember.local_who = local_who
|
||||||
|
|
||||||
if(list_owner.isMisskey){
|
return if(list_owner.isMisskey) {
|
||||||
// 今のmisskeyではリスト全スキャンしないとユーザの登録状況が分からない
|
// 今のmisskeyではリスト全スキャンしないとユーザの登録状況が分からない
|
||||||
val params = list_owner.putMisskeyApiToken(JSONObject())
|
client.request(
|
||||||
result = client.request("/api/users/lists/list",params.toPostRequestBuilder())
|
"/api/users/lists/list",
|
||||||
val jsonArray = result?.jsonArray ?:return result
|
list_owner
|
||||||
this.new_list = parseList(::TootList,TootParser(activity,list_owner),jsonArray)
|
.putMisskeyApiToken()
|
||||||
this.new_list?.forEach { list->
|
.toPostRequestBuilder()
|
||||||
list.isRegistered = null != list.userIds?.find { it == local_who.id }
|
)?.also { result ->
|
||||||
|
this.new_list = parseList(
|
||||||
|
::TootList,
|
||||||
|
TootParser(activity, list_owner),
|
||||||
|
result.jsonArray ?: return@also
|
||||||
|
).apply {
|
||||||
|
forEach { list ->
|
||||||
|
list.isRegistered =
|
||||||
|
null != list.userIds?.find { it == local_who.id }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
// リスト登録状況を取得
|
|
||||||
result = client.request("/api/v1/accounts/" + local_who .id + "/lists")
|
|
||||||
var jsonArray = result?.jsonArray ?:return result
|
|
||||||
|
|
||||||
// 結果を解釈する
|
|
||||||
val set_registered = HashSet<EntityId>()
|
val set_registered = HashSet<EntityId>()
|
||||||
for(a in parseList(::TootList,TootParser(activity,list_owner),jsonArray)) {
|
|
||||||
set_registered.add(a.id)
|
// メンバーを指定してリスト登録状況を取得
|
||||||
|
client.request(
|
||||||
|
"/api/v1/accounts/${local_who.id}/lists"
|
||||||
|
)?.also { result ->
|
||||||
|
val jsonArray = result.jsonArray ?: return result
|
||||||
|
parseList(
|
||||||
|
::TootList,
|
||||||
|
TootParser(activity, list_owner),
|
||||||
|
jsonArray
|
||||||
|
).forEach {
|
||||||
|
set_registered.add(it.id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// リスト一覧を取得
|
// リスト一覧を取得
|
||||||
result = client.request("/api/v1/lists")
|
client.request("/api/v1/lists")?.also { result ->
|
||||||
jsonArray = result?.jsonArray ?: return result
|
this.new_list = parseList(
|
||||||
|
::TootList,
|
||||||
val new_list = parseList(::TootList,TootParser(activity,list_owner),jsonArray)
|
TootParser(activity, list_owner),
|
||||||
new_list.sort()
|
result.jsonArray ?: return@also
|
||||||
|
).apply {
|
||||||
this.new_list = new_list
|
|
||||||
|
sort()
|
||||||
// isRegistered を設定する
|
|
||||||
for(a in new_list) {
|
forEach {
|
||||||
if(set_registered.contains(a.id)) a.isRegistered = true
|
it.isRegistered = set_registered.contains(it.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleResult(result : TootApiResult?) {
|
override fun handleResult(result : TootApiResult?) {
|
||||||
|
@ -224,7 +251,7 @@ class DlgListMember(
|
||||||
result ?: return // cancelled.
|
result ?: return // cancelled.
|
||||||
|
|
||||||
val error = result.error
|
val error = result.error
|
||||||
if( error?.isNotEmpty() == true && result.response?.code() == 404 ) {
|
if(error?.isNotEmpty() == true && result.response?.code() == 404) {
|
||||||
showToast(activity, true, result.error)
|
showToast(activity, true, result.error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,34 +272,37 @@ class DlgListMember(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun openListCreator() {
|
private fun openListCreator() {
|
||||||
DlgTextInput.show(activity, activity.getString(R.string.list_create), null, object : DlgTextInput.Callback {
|
DlgTextInput.show(
|
||||||
|
activity,
|
||||||
override fun onEmptyError() {
|
activity.getString(R.string.list_create),
|
||||||
showToast(activity, false, R.string.list_name_empty)
|
null,
|
||||||
}
|
object : DlgTextInput.Callback {
|
||||||
|
|
||||||
override fun onOK(dialog : Dialog, text : String) {
|
override fun onEmptyError() {
|
||||||
val list_owner = this@DlgListMember.list_owner
|
showToast(activity, false, R.string.list_name_empty)
|
||||||
|
|
||||||
if(list_owner == null) {
|
|
||||||
showToast(activity, false, "list owner is not selected.")
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Action_List.create(activity, list_owner , text, object : Action_List.CreateCallback {
|
override fun onOK(dialog : Dialog, text : String) {
|
||||||
override fun onCreated(list : TootList) {
|
val list_owner = this@DlgListMember.list_owner
|
||||||
try {
|
|
||||||
dialog.dismiss()
|
if(list_owner == null) {
|
||||||
} catch(ignored : Throwable) {
|
showToast(activity, false, "list owner is not selected.")
|
||||||
}
|
return
|
||||||
|
|
||||||
loadLists()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
Action_List.create(
|
||||||
|
activity,
|
||||||
})
|
list_owner,
|
||||||
|
text,
|
||||||
|
object : Action_List.CreateCallback {
|
||||||
|
override fun onCreated(list : TootList) {
|
||||||
|
dialog.dismissSafe()
|
||||||
|
loadLists()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class ErrorItem(val message : String)
|
internal class ErrorItem(val message : String)
|
||||||
|
@ -302,7 +332,7 @@ class DlgListMember(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getView(position : Int, viewOld : View?, parent : ViewGroup) : View {
|
override fun getView(position : Int, viewOld : View?, parent : ViewGroup) : View {
|
||||||
val view:View
|
val view : View
|
||||||
val o = getItem(position)
|
val o = getItem(position)
|
||||||
when(o) {
|
when(o) {
|
||||||
is TootList -> {
|
is TootList -> {
|
||||||
|
@ -311,31 +341,44 @@ class DlgListMember(
|
||||||
view = viewOld
|
view = viewOld
|
||||||
holder = view.tag as VH_List
|
holder = view.tag as VH_List
|
||||||
} else {
|
} else {
|
||||||
view = activity.layoutInflater.inflate(R.layout.lv_list_member_list, parent, false)
|
view = activity.layoutInflater.inflate(
|
||||||
|
R.layout.lv_list_member_list,
|
||||||
|
parent,
|
||||||
|
false
|
||||||
|
)
|
||||||
holder = VH_List(view)
|
holder = VH_List(view)
|
||||||
view .tag = holder
|
view.tag = holder
|
||||||
}
|
}
|
||||||
holder.bind(o)
|
holder.bind(o)
|
||||||
}
|
}
|
||||||
|
|
||||||
is ErrorItem -> {
|
is ErrorItem -> {
|
||||||
val holder : VH_Error
|
val holder : VH_Error
|
||||||
if(viewOld != null) {
|
if(viewOld != null) {
|
||||||
view = viewOld
|
view = viewOld
|
||||||
holder = view.tag as VH_Error
|
holder = view.tag as VH_Error
|
||||||
} else {
|
} else {
|
||||||
view = activity.layoutInflater.inflate(R.layout.lv_list_member_error, parent, false)
|
view = activity.layoutInflater.inflate(
|
||||||
|
R.layout.lv_list_member_error,
|
||||||
|
parent,
|
||||||
|
false
|
||||||
|
)
|
||||||
holder = VH_Error(view)
|
holder = VH_Error(view)
|
||||||
view .tag = holder
|
view.tag = holder
|
||||||
}
|
}
|
||||||
holder.bind(o)
|
holder.bind(o)
|
||||||
}
|
}
|
||||||
else -> view = activity.layoutInflater.inflate(R.layout.lv_list_member_error, parent, false)
|
|
||||||
|
else -> view =
|
||||||
|
activity.layoutInflater.inflate(R.layout.lv_list_member_error, parent, false)
|
||||||
}
|
}
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal inner class VH_List(view : View) : CompoundButton.OnCheckedChangeListener, Action_ListMember.Callback {
|
internal inner class VH_List(view : View) : CompoundButton.OnCheckedChangeListener,
|
||||||
|
Action_ListMember.Callback {
|
||||||
|
|
||||||
private val cbItem : CheckBox
|
private val cbItem : CheckBox
|
||||||
private var bBusy : Boolean = false
|
private var bBusy : Boolean = false
|
||||||
var item : TootList? = null
|
var item : TootList? = null
|
||||||
|
@ -347,11 +390,11 @@ class DlgListMember(
|
||||||
|
|
||||||
fun bind(item : TootList) {
|
fun bind(item : TootList) {
|
||||||
bBusy = true
|
bBusy = true
|
||||||
|
|
||||||
this.item = item
|
this.item = item
|
||||||
cbItem.text = item.title
|
cbItem.text = item.title
|
||||||
cbItem.isChecked = item.isRegistered
|
cbItem.isChecked = item.isRegistered
|
||||||
|
|
||||||
bBusy = false
|
bBusy = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,7 +403,7 @@ class DlgListMember(
|
||||||
// ユーザ操作以外で変更されたなら何もしない
|
// ユーザ操作以外で変更されたなら何もしない
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val list_owner = this@DlgListMember.list_owner
|
val list_owner = this@DlgListMember.list_owner
|
||||||
if(list_owner == null) {
|
if(list_owner == null) {
|
||||||
showToast(activity, false, "list owner is not selected")
|
showToast(activity, false, "list owner is not selected")
|
||||||
|
@ -372,14 +415,14 @@ class DlgListMember(
|
||||||
showToast(activity, false, "target user is not synchronized")
|
showToast(activity, false, "target user is not synchronized")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val item = this.item ?:return
|
val item = this.item ?: return
|
||||||
|
|
||||||
// 状態をサーバに伝える
|
// 状態をサーバに伝える
|
||||||
if(isChecked) {
|
if(isChecked) {
|
||||||
Action_ListMember.add(activity, list_owner , item.id, local_who , callback = this)
|
Action_ListMember.add(activity, list_owner, item.id, local_who, callback = this)
|
||||||
} else {
|
} else {
|
||||||
Action_ListMember.delete(activity, list_owner , item.id, local_who , this)
|
Action_ListMember.delete(activity, list_owner, item.id, local_who, this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,11 +435,7 @@ class DlgListMember(
|
||||||
}
|
}
|
||||||
|
|
||||||
internal inner class VH_Error(view : View) {
|
internal inner class VH_Error(view : View) {
|
||||||
private val tvError : TextView
|
private val tvError : TextView = view.findViewById(R.id.tvError)
|
||||||
|
|
||||||
init {
|
|
||||||
this.tvError = view.findViewById(R.id.tvError)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun bind(o : ErrorItem) {
|
fun bind(o : ErrorItem) {
|
||||||
this.tvError.text = o.message
|
this.tvError.text = o.message
|
||||||
|
|
|
@ -11,6 +11,7 @@ import jp.juggler.subwaytooter.ActMain
|
||||||
import jp.juggler.subwaytooter.App1
|
import jp.juggler.subwaytooter.App1
|
||||||
import jp.juggler.subwaytooter.R
|
import jp.juggler.subwaytooter.R
|
||||||
import jp.juggler.util.LogCategory
|
import jp.juggler.util.LogCategory
|
||||||
|
import jp.juggler.util.dismissSafe
|
||||||
import jp.juggler.util.showToast
|
import jp.juggler.util.showToast
|
||||||
import net.glxn.qrgen.android.QRCode
|
import net.glxn.qrgen.android.QRCode
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ object DlgQRCode {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPostExecute(result : Bitmap?) {
|
override fun onPostExecute(result : Bitmap?) {
|
||||||
progress.dismiss()
|
progress.dismissSafe()
|
||||||
if(result != null) {
|
if(result != null) {
|
||||||
callback.onQrCode(result)
|
callback.onQrCode(result)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,16 +11,8 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
|
|
||||||
import com.astuetz.PagerSlidingTabStrip
|
import com.astuetz.PagerSlidingTabStrip
|
||||||
import jp.juggler.emoji.EmojiMap201709
|
import jp.juggler.emoji.EmojiMap201709
|
||||||
|
|
||||||
import org.json.JSONArray
|
|
||||||
import org.json.JSONObject
|
|
||||||
|
|
||||||
import java.util.ArrayList
|
|
||||||
import java.util.HashMap
|
|
||||||
|
|
||||||
import jp.juggler.subwaytooter.App1
|
import jp.juggler.subwaytooter.App1
|
||||||
import jp.juggler.subwaytooter.Pref
|
import jp.juggler.subwaytooter.Pref
|
||||||
import jp.juggler.subwaytooter.R
|
import jp.juggler.subwaytooter.R
|
||||||
|
@ -28,9 +20,9 @@ import jp.juggler.subwaytooter.api.entity.CustomEmoji
|
||||||
import jp.juggler.subwaytooter.put
|
import jp.juggler.subwaytooter.put
|
||||||
import jp.juggler.subwaytooter.view.MyViewPager
|
import jp.juggler.subwaytooter.view.MyViewPager
|
||||||
import jp.juggler.subwaytooter.view.NetworkEmojiView
|
import jp.juggler.subwaytooter.view.NetworkEmojiView
|
||||||
import jp.juggler.util.LogCategory
|
import jp.juggler.util.*
|
||||||
import jp.juggler.util.parseString
|
import org.json.JSONObject
|
||||||
import jp.juggler.util.toJsonArray
|
import java.util.*
|
||||||
|
|
||||||
@SuppressLint("InflateParams")
|
@SuppressLint("InflateParams")
|
||||||
class EmojiPicker(
|
class EmojiPicker(
|
||||||
|
@ -201,9 +193,9 @@ class EmojiPicker(
|
||||||
onPageSelected(0)
|
onPageSelected(0)
|
||||||
|
|
||||||
// カスタム絵文字をロードする
|
// カスタム絵文字をロードする
|
||||||
if( instance != null && instance.isNotEmpty()) {
|
if(instance != null && instance.isNotEmpty()) {
|
||||||
setCustomEmojiList(
|
setCustomEmojiList(
|
||||||
App1.custom_emoji_lister.getList(instance,isMisskey=isMisskey) {
|
App1.custom_emoji_lister.getList(instance, isMisskey = isMisskey) {
|
||||||
setCustomEmojiList(it) // ロード完了時に呼ばれる
|
setCustomEmojiList(it) // ロード完了時に呼ばれる
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -246,11 +238,11 @@ class EmojiPicker(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPageSelected(position : Int) {
|
override fun onPageSelected(position : Int) {
|
||||||
try{
|
try {
|
||||||
val hasSkinTone =page_list[position].hasSkinTone
|
val hasSkinTone = page_list[position].hasSkinTone
|
||||||
val visibility = if(hasSkinTone) View.VISIBLE else View.INVISIBLE
|
val visibility = if(hasSkinTone) View.VISIBLE else View.INVISIBLE
|
||||||
ibSkinTone.forEach { it.visibility = visibility }
|
ibSkinTone.forEach { it.visibility = visibility }
|
||||||
}catch(ex:Throwable){
|
} catch(ex : Throwable) {
|
||||||
log.trace(ex)
|
log.trace(ex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -339,7 +331,7 @@ class EmojiPicker(
|
||||||
inner class EmojiPickerPageViewHolder(activity : Activity, root : View) : BaseAdapter(),
|
inner class EmojiPickerPageViewHolder(activity : Activity, root : View) : BaseAdapter(),
|
||||||
AdapterView.OnItemClickListener {
|
AdapterView.OnItemClickListener {
|
||||||
|
|
||||||
val gridView : GridView
|
private val gridView : GridView
|
||||||
private val wh : Int
|
private val wh : Int
|
||||||
|
|
||||||
private var page : EmojiPickerPage? = null
|
private var page : EmojiPickerPage? = null
|
||||||
|
@ -398,9 +390,9 @@ class EmojiPicker(
|
||||||
}
|
}
|
||||||
view.tag = item
|
view.tag = item
|
||||||
if(view is ImageView) {
|
if(view is ImageView) {
|
||||||
val name = if( page.hasSkinTone ){
|
val name = if(page.hasSkinTone) {
|
||||||
applySkinTone(item.name)
|
applySkinTone(item.name)
|
||||||
}else{
|
} else {
|
||||||
item.name
|
item.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,14 +430,14 @@ class EmojiPicker(
|
||||||
} else {
|
} else {
|
||||||
// 普通の絵文字
|
// 普通の絵文字
|
||||||
EmojiMap201709.sShortNameToImageId[name] ?: return
|
EmojiMap201709.sShortNameToImageId[name] ?: return
|
||||||
|
|
||||||
if( page.hasSkinTone ){
|
if(page.hasSkinTone) {
|
||||||
val sv = applySkinTone(name)
|
val sv = applySkinTone(name)
|
||||||
if(EmojiMap201709.sShortNameToImageId[sv]!=null){
|
if(EmojiMap201709.sShortNameToImageId[sv] != null) {
|
||||||
name=sv
|
name = sv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selected(name, null)
|
selected(name, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -455,32 +447,22 @@ class EmojiPicker(
|
||||||
// name はスキントーン適用済みであること
|
// name はスキントーン適用済みであること
|
||||||
internal fun selected(name : String, instance : String?) {
|
internal fun selected(name : String, instance : String?) {
|
||||||
|
|
||||||
dialog.dismiss()
|
dialog.dismissSafe()
|
||||||
|
|
||||||
|
val pref = App1.pref
|
||||||
|
|
||||||
// Recentをロード(他インスタンスの絵文字を含む)
|
// Recentをロード(他インスタンスの絵文字を含む)
|
||||||
val pref = App1.pref
|
val list = try {
|
||||||
val list = ArrayList<JSONObject>()
|
Pref.spEmojiPickerRecent(pref).toJsonArray().toObjectList()
|
||||||
val sv = Pref.spEmojiPickerRecent(pref)
|
} catch(ignored : Throwable) {
|
||||||
if(sv.isNotEmpty()) {
|
ArrayList<JSONObject>()
|
||||||
try {
|
|
||||||
val array = sv.toJsonArray()
|
|
||||||
var i = 0
|
|
||||||
val ie = array.length()
|
|
||||||
while(i < ie) {
|
|
||||||
val item = array.optJSONObject(i)
|
|
||||||
if(item != null) list.add(item)
|
|
||||||
++ i
|
|
||||||
}
|
|
||||||
} catch(ex : Throwable) {
|
|
||||||
log.trace(ex)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 選択された絵文字と同じ項目を除去
|
// 選択された絵文字と同じ項目を除去
|
||||||
// 項目が増えすぎたら減らす
|
// 項目が増えすぎたら減らす
|
||||||
run {
|
run {
|
||||||
val it = list.iterator()
|
|
||||||
var nCount = 0
|
var nCount = 0
|
||||||
|
val it = list.iterator()
|
||||||
while(it.hasNext()) {
|
while(it.hasNext()) {
|
||||||
val item = it.next()
|
val item = it.next()
|
||||||
if(name == item.parseString("name")
|
if(name == item.parseString("name")
|
||||||
|
@ -494,21 +476,15 @@ class EmojiPicker(
|
||||||
}
|
}
|
||||||
|
|
||||||
// 先頭に項目を追加
|
// 先頭に項目を追加
|
||||||
try {
|
list.add(0, JSONObject().apply {
|
||||||
val item = JSONObject()
|
put("name", name)
|
||||||
item.put("name", name)
|
if(instance != null) put("instance", instance)
|
||||||
if(instance != null) item.put("instance", instance)
|
})
|
||||||
list.add(0, item)
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
}
|
|
||||||
|
|
||||||
// 保存する
|
// 保存する
|
||||||
try {
|
try {
|
||||||
val array = JSONArray()
|
val sv = list.toJsonArray().toString()
|
||||||
for(item in list) {
|
App1.pref.edit().put(Pref.spEmojiPickerRecent, sv).apply()
|
||||||
array.put(item)
|
|
||||||
}
|
|
||||||
App1.pref.edit().put(Pref.spEmojiPickerRecent, array.toString()).apply()
|
|
||||||
} catch(ignored : Throwable) {
|
} catch(ignored : Throwable) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -532,15 +508,15 @@ class EmojiPicker(
|
||||||
private fun Int.validPage() = this >= 0 && this < page_list.size
|
private fun Int.validPage() = this >= 0 && this < page_list.size
|
||||||
|
|
||||||
private fun getPage(idx : Int) : EmojiPickerPage? {
|
private fun getPage(idx : Int) : EmojiPickerPage? {
|
||||||
return if(idx.validPage() ) page_list[idx] else null
|
return if(idx.validPage()) page_list[idx] else null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getPageViewHolder(idx : Int) : EmojiPickerPageViewHolder? {
|
fun getPageViewHolder(idx : Int) : EmojiPickerPageViewHolder? {
|
||||||
return if(idx.validPage() ) holder_list.get(idx) else null
|
return if(idx.validPage()) holder_list.get(idx) else null
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun eachViewHolder(block : (Int, EmojiPickerPageViewHolder) -> Unit) {
|
inline fun eachViewHolder(block : (Int, EmojiPickerPageViewHolder) -> Unit) {
|
||||||
for(i in 0 until page_list.size ){
|
for(i in 0 until page_list.size) {
|
||||||
val vh = holder_list.get(i) ?: continue
|
val vh = holder_list.get(i) ?: continue
|
||||||
block(i, vh)
|
block(i, vh)
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,18 +10,4 @@ class ProgressDialogEx(context : Context) : ProgressDialog(context) {
|
||||||
const val STYLE_SPINNER = ProgressDialog.STYLE_SPINNER
|
const val STYLE_SPINNER = ProgressDialog.STYLE_SPINNER
|
||||||
const val STYLE_HORIZONTAL = ProgressDialog.STYLE_HORIZONTAL
|
const val STYLE_HORIZONTAL = ProgressDialog.STYLE_HORIZONTAL
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun dismiss() {
|
|
||||||
try {
|
|
||||||
super.dismiss()
|
|
||||||
} catch(ignored : Throwable) {
|
|
||||||
// java.lang.IllegalArgumentException:
|
|
||||||
// at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:396)
|
|
||||||
// at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:322)
|
|
||||||
// at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:116)
|
|
||||||
// at android.app.Dialog.dismissDialog(Dialog.java:341)
|
|
||||||
// at android.app.Dialog.dismiss(Dialog.java:324)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package jp.juggler.util
|
package jp.juggler.util
|
||||||
|
|
||||||
|
import android.app.Dialog
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.DialogInterface
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.ColorFilter
|
import android.graphics.ColorFilter
|
||||||
|
@ -272,3 +274,11 @@ fun CharSequence.copyToClipboard(context:Context) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun DialogInterface.dismissSafe(){
|
||||||
|
try {
|
||||||
|
dismiss()
|
||||||
|
} catch(ignored : Throwable) {
|
||||||
|
// 非同期処理の後などではDialogがWindowTokenを失っている場合があり、IllegalArgumentException がたまに出る
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue