アプリ設定に「アプリ名を可能なら表示する」を追加。
This commit is contained in:
parent
bd94fcc075
commit
ec6ae97060
|
@ -12,8 +12,8 @@ android {
|
|||
minSdkVersion 21
|
||||
targetSdkVersion 27
|
||||
|
||||
versionCode 204
|
||||
versionName "2.0.4"
|
||||
versionCode 205
|
||||
versionName "2.0.5"
|
||||
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
|
||||
|
|
|
@ -459,8 +459,8 @@ class ActAccountSetting : AppCompatActivity(), View.OnClickListener, CompoundBut
|
|||
account.delete()
|
||||
|
||||
val pref = Pref.pref(this@ActAccountSetting)
|
||||
if(account.db_id == pref.getLong(Pref.KEY_TABLET_TOOT_DEFAULT_ACCOUNT, - 1L)) {
|
||||
pref.edit().putLong(Pref.KEY_TABLET_TOOT_DEFAULT_ACCOUNT, - 1L).apply()
|
||||
if(account.db_id == Pref.lpTabletTootDefaultAccount(pref) ) {
|
||||
pref.edit().put(Pref.lpTabletTootDefaultAccount, - 1L).apply()
|
||||
}
|
||||
|
||||
finish()
|
||||
|
@ -528,7 +528,7 @@ class ActAccountSetting : AppCompatActivity(), View.OnClickListener, CompoundBut
|
|||
|
||||
TootTaskRunner(this@ActAccountSetting).run(account, object : TootTask {
|
||||
override fun background(client : TootApiClient) : TootApiResult? {
|
||||
return client.authentication1(Pref.pref(this@ActAccountSetting).getString(Pref.KEY_CLIENT_NAME, ""))
|
||||
return client.authentication1(Pref.spClientName(this@ActAccountSetting))
|
||||
}
|
||||
|
||||
override fun handleResult(result : TootApiResult?) {
|
||||
|
|
|
@ -21,12 +21,10 @@ import android.view.ViewGroup
|
|||
import android.widget.AdapterView
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.BaseAdapter
|
||||
import android.widget.CheckBox
|
||||
import android.widget.CompoundButton
|
||||
import android.widget.EditText
|
||||
import android.widget.ImageView
|
||||
import android.widget.Spinner
|
||||
import android.widget.Switch
|
||||
import android.widget.TextView
|
||||
|
||||
import com.jrummyapps.android.colorpicker.ColorPickerDialog
|
||||
|
@ -86,30 +84,14 @@ class ActAppSetting : AppCompatActivity()
|
|||
|
||||
internal lateinit var pref : SharedPreferences
|
||||
|
||||
private lateinit var swDontConfirmBeforeCloseColumn : Switch
|
||||
private lateinit var swPriorLocalURL : Switch
|
||||
private lateinit var swDisableFastScroller : Switch
|
||||
private lateinit var swSimpleList : Switch
|
||||
private lateinit var swExitAppWhenCloseProtectedColumn : Switch
|
||||
private lateinit var swShowFollowButtonInButtonBar : Switch
|
||||
private lateinit var swDontRound : Switch
|
||||
private lateinit var swDontUseStreaming : Switch
|
||||
private lateinit var swDontRefreshOnResume : Switch
|
||||
private lateinit var swDontScreenOff : Switch
|
||||
private lateinit var swDisableTabletMode : Switch
|
||||
private lateinit var swDontCropMediaThumb : Switch
|
||||
private lateinit var swPriorChrome : Switch
|
||||
private lateinit var swPostButtonBarTop : Switch
|
||||
private lateinit var swDontDuplicationCheck : Switch
|
||||
private lateinit var swQuickTootBar : Switch
|
||||
private lateinit var swEnableGifAnimation : Switch
|
||||
private lateinit var swMentionFullAcct : Switch
|
||||
private lateinit var swRelativeTimestamp : Switch
|
||||
private lateinit var swDontUseActionButtonWithQuickTootBar : Switch
|
||||
private lateinit var swShortAcctLocalUser : Switch
|
||||
private lateinit var swDisableEmojiAnimation : Switch
|
||||
private lateinit var swAllowNonSpaceBeforeEmojiShortcode : Switch
|
||||
private lateinit var swUseInternalMediaViewer : Switch
|
||||
class BooleanViewInfo(
|
||||
val info : Pref.BooleanPref,
|
||||
val view : CompoundButton
|
||||
)
|
||||
|
||||
private val booleanViewList = ArrayList<BooleanViewInfo>()
|
||||
|
||||
|
||||
|
||||
private lateinit var spBackButtonAction : Spinner
|
||||
private lateinit var spUITheme : Spinner
|
||||
|
@ -117,10 +99,6 @@ class ActAppSetting : AppCompatActivity()
|
|||
private lateinit var spRefreshAfterToot : Spinner
|
||||
private lateinit var spDefaultAccount : Spinner
|
||||
|
||||
private lateinit var cbNotificationSound : CheckBox
|
||||
private lateinit var cbNotificationVibration : CheckBox
|
||||
private lateinit var cbNotificationLED : CheckBox
|
||||
|
||||
private var footer_button_bg_color : Int = 0
|
||||
private var footer_button_fg_color : Int = 0
|
||||
private var footer_tab_bg_color : Int = 0
|
||||
|
@ -175,89 +153,23 @@ class ActAppSetting : AppCompatActivity()
|
|||
|
||||
Styler.fixHorizontalPadding(findViewById(R.id.svContent))
|
||||
|
||||
swDontConfirmBeforeCloseColumn = findViewById(R.id.swDontConfirmBeforeCloseColumn)
|
||||
swDontConfirmBeforeCloseColumn.setOnCheckedChangeListener(this)
|
||||
|
||||
swPriorLocalURL = findViewById(R.id.swPriorLocalURL)
|
||||
swPriorLocalURL.setOnCheckedChangeListener(this)
|
||||
|
||||
swDisableFastScroller = findViewById(R.id.swDisableFastScroller)
|
||||
swDisableFastScroller.setOnCheckedChangeListener(this)
|
||||
|
||||
swSimpleList = findViewById(R.id.swSimpleList)
|
||||
swSimpleList.setOnCheckedChangeListener(this)
|
||||
|
||||
swExitAppWhenCloseProtectedColumn = findViewById(R.id.swExitAppWhenCloseProtectedColumn)
|
||||
swExitAppWhenCloseProtectedColumn.setOnCheckedChangeListener(this)
|
||||
|
||||
swShowFollowButtonInButtonBar = findViewById(R.id.swShowFollowButtonInButtonBar)
|
||||
swShowFollowButtonInButtonBar.setOnCheckedChangeListener(this)
|
||||
|
||||
swDontRound = findViewById(R.id.swDontRound)
|
||||
swDontRound.setOnCheckedChangeListener(this)
|
||||
|
||||
swDontUseStreaming = findViewById(R.id.swDontUseStreaming)
|
||||
swDontUseStreaming.setOnCheckedChangeListener(this)
|
||||
|
||||
swDontRefreshOnResume = findViewById(R.id.swDontRefreshOnResume)
|
||||
swDontRefreshOnResume.setOnCheckedChangeListener(this)
|
||||
|
||||
swDontScreenOff = findViewById(R.id.swDontScreenOff)
|
||||
swDontScreenOff.setOnCheckedChangeListener(this)
|
||||
|
||||
swDisableTabletMode = findViewById(R.id.swDisableTabletMode)
|
||||
swDisableTabletMode.setOnCheckedChangeListener(this)
|
||||
|
||||
swDontCropMediaThumb = findViewById(R.id.swDontCropMediaThumb)
|
||||
swDontCropMediaThumb.setOnCheckedChangeListener(this)
|
||||
|
||||
swPriorChrome = findViewById(R.id.swPriorChrome)
|
||||
swPriorChrome.setOnCheckedChangeListener(this)
|
||||
|
||||
swPostButtonBarTop = findViewById(R.id.swPostButtonBarTop)
|
||||
swPostButtonBarTop.setOnCheckedChangeListener(this)
|
||||
|
||||
swDontDuplicationCheck = findViewById(R.id.swDontDuplicationCheck)
|
||||
swDontDuplicationCheck.setOnCheckedChangeListener(this)
|
||||
|
||||
swQuickTootBar = findViewById(R.id.swQuickTootBar)
|
||||
swQuickTootBar.setOnCheckedChangeListener(this)
|
||||
|
||||
swEnableGifAnimation = findViewById(R.id.swEnableGifAnimation)
|
||||
swEnableGifAnimation.setOnCheckedChangeListener(this)
|
||||
|
||||
swMentionFullAcct = findViewById(R.id.swMentionFullAcct)
|
||||
swMentionFullAcct.setOnCheckedChangeListener(this)
|
||||
|
||||
swRelativeTimestamp = findViewById(R.id.swRelativeTimestamp)
|
||||
swRelativeTimestamp.setOnCheckedChangeListener(this)
|
||||
|
||||
swDontUseActionButtonWithQuickTootBar = findViewById(R.id.swDontUseActionButtonWithQuickTootBar)
|
||||
swDontUseActionButtonWithQuickTootBar.setOnCheckedChangeListener(this)
|
||||
|
||||
swShortAcctLocalUser = findViewById(R.id.swShortAcctLocalUser)
|
||||
swShortAcctLocalUser.setOnCheckedChangeListener(this)
|
||||
|
||||
swDisableEmojiAnimation = findViewById(R.id.swDisableEmojiAnimation)
|
||||
swDisableEmojiAnimation.setOnCheckedChangeListener(this)
|
||||
|
||||
swAllowNonSpaceBeforeEmojiShortcode = findViewById(R.id.swAllowNonSpaceBeforeEmojiShortcode)
|
||||
swAllowNonSpaceBeforeEmojiShortcode.setOnCheckedChangeListener(this)
|
||||
|
||||
swUseInternalMediaViewer = findViewById(R.id.swUseInternalMediaViewer)
|
||||
swUseInternalMediaViewer.setOnCheckedChangeListener(this)
|
||||
|
||||
cbNotificationSound = findViewById(R.id.cbNotificationSound)
|
||||
cbNotificationVibration = findViewById(R.id.cbNotificationVibration)
|
||||
cbNotificationLED = findViewById(R.id.cbNotificationLED)
|
||||
cbNotificationSound.setOnCheckedChangeListener(this)
|
||||
cbNotificationVibration.setOnCheckedChangeListener(this)
|
||||
cbNotificationLED.setOnCheckedChangeListener(this)
|
||||
// initialize Switch and CheckBox
|
||||
for(info in Pref.map.values) {
|
||||
if( info is Pref.BooleanPref) {
|
||||
val view = findViewById<CompoundButton>(info.id)
|
||||
view.setOnCheckedChangeListener(this)
|
||||
booleanViewList.add(BooleanViewInfo(info, view))
|
||||
}
|
||||
}
|
||||
|
||||
val bBefore8 = Build.VERSION.SDK_INT < 26
|
||||
cbNotificationSound.isEnabled = bBefore8
|
||||
cbNotificationVibration.isEnabled = bBefore8
|
||||
cbNotificationLED.isEnabled = bBefore8
|
||||
for(si in booleanViewList) {
|
||||
when(si.info) {
|
||||
Pref.bpNotificationLED,
|
||||
Pref.bpNotificationVibration,
|
||||
Pref.bpNotificationSound -> si.view.isEnabled = bBefore8
|
||||
}
|
||||
}
|
||||
|
||||
run {
|
||||
val caption_list = arrayOf(getString(R.string.ask_always), getString(R.string.close_column), getString(R.string.open_column_list), getString(R.string.app_exit))
|
||||
|
@ -368,65 +280,40 @@ class ActAppSetting : AppCompatActivity()
|
|||
private fun loadUIFromData() {
|
||||
load_busy = true
|
||||
|
||||
swDontConfirmBeforeCloseColumn.isChecked = pref.getBoolean(Pref.KEY_DONT_CONFIRM_BEFORE_CLOSE_COLUMN, false)
|
||||
swPriorLocalURL.isChecked = pref.getBoolean(Pref.KEY_PRIOR_LOCAL_URL, false)
|
||||
swSimpleList.isChecked = pref.getBoolean(Pref.KEY_SIMPLE_LIST, true)
|
||||
swExitAppWhenCloseProtectedColumn.isChecked = pref.getBoolean(Pref.KEY_EXIT_APP_WHEN_CLOSE_PROTECTED_COLUMN, false)
|
||||
swShowFollowButtonInButtonBar.isChecked = pref.getBoolean(Pref.KEY_SHOW_FOLLOW_BUTTON_IN_BUTTON_BAR, false)
|
||||
swDontRound.isChecked = pref.getBoolean(Pref.KEY_DONT_ROUND, false)
|
||||
swDontUseStreaming.isChecked = pref.getBoolean(Pref.KEY_DONT_USE_STREAMING, false)
|
||||
swDontRefreshOnResume.isChecked = pref.getBoolean(Pref.KEY_DONT_REFRESH_ON_RESUME, false)
|
||||
swDontScreenOff.isChecked = pref.getBoolean(Pref.KEY_DONT_SCREEN_OFF, false)
|
||||
swDisableTabletMode.isChecked = pref.getBoolean(Pref.KEY_DISABLE_TABLET_MODE, false)
|
||||
swDontCropMediaThumb.isChecked = pref.getBoolean(Pref.KEY_DONT_CROP_MEDIA_THUMBNAIL, false)
|
||||
swPostButtonBarTop.isChecked = pref.getBoolean(Pref.KEY_POST_BUTTON_BAR_AT_TOP, false)
|
||||
swDontDuplicationCheck.isChecked = pref.getBoolean(Pref.KEY_DONT_DUPLICATION_CHECK, false)
|
||||
swQuickTootBar.isChecked = pref.getBoolean(Pref.KEY_QUICK_TOOT_BAR, false)
|
||||
swEnableGifAnimation.isChecked = pref.getBoolean(Pref.KEY_ENABLE_GIF_ANIMATION, false)
|
||||
swMentionFullAcct.isChecked = pref.getBoolean(Pref.KEY_MENTION_FULL_ACCT, false)
|
||||
swRelativeTimestamp.isChecked = pref.getBoolean(Pref.KEY_RELATIVE_TIMESTAMP, false)
|
||||
swDontUseActionButtonWithQuickTootBar.isChecked = pref.getBoolean(Pref.KEY_DONT_USE_ACTION_BUTTON, false)
|
||||
swShortAcctLocalUser.isChecked = pref.getBoolean(Pref.KEY_SHORT_ACCT_LOCAL_USER, false)
|
||||
swDisableEmojiAnimation.isChecked = pref.getBoolean(Pref.KEY_DISABLE_EMOJI_ANIMATION, false)
|
||||
swAllowNonSpaceBeforeEmojiShortcode.isChecked = pref.getBoolean(Pref.KEY_ALLOW_NON_SPACE_BEFORE_EMOJI_SHORTCODE, false)
|
||||
swUseInternalMediaViewer.isChecked = pref.getBoolean(Pref.KEY_USE_INTERNAL_MEDIA_VIEWER, true)
|
||||
// Switch with default true
|
||||
swDisableFastScroller.isChecked = pref.getBoolean(Pref.KEY_DISABLE_FAST_SCROLLER, true)
|
||||
swPriorChrome.isChecked = pref.getBoolean(Pref.KEY_PRIOR_CHROME, true)
|
||||
for(si in booleanViewList) {
|
||||
si.view.isChecked = si.info(pref)
|
||||
}
|
||||
|
||||
cbNotificationSound.isChecked = pref.getBoolean(Pref.KEY_NOTIFICATION_SOUND, true)
|
||||
cbNotificationVibration.isChecked = pref.getBoolean(Pref.KEY_NOTIFICATION_VIBRATION, true)
|
||||
cbNotificationLED.isChecked = pref.getBoolean(Pref.KEY_NOTIFICATION_LED, true)
|
||||
|
||||
spBackButtonAction.setSelection(pref.getInt(Pref.KEY_BACK_BUTTON_ACTION, 0))
|
||||
spUITheme.setSelection(pref.getInt(Pref.KEY_UI_THEME, 0))
|
||||
spResizeImage.setSelection(pref.getInt(Pref.KEY_RESIZE_IMAGE, 4))
|
||||
spRefreshAfterToot.setSelection(pref.getInt(Pref.KEY_REFRESH_AFTER_TOOT, 0))
|
||||
spBackButtonAction.setSelection(Pref.ipBackButtonAction(pref))
|
||||
spUITheme.setSelection(Pref.ipUiTheme(pref))
|
||||
spResizeImage.setSelection(Pref.ipResizeImage(pref))
|
||||
spRefreshAfterToot.setSelection(Pref.ipRefreshAfterToot(pref))
|
||||
|
||||
spDefaultAccount.setSelection(
|
||||
(spDefaultAccount.adapter as AccountAdapter).getIndexFromId(pref.getLong(Pref.KEY_TABLET_TOOT_DEFAULT_ACCOUNT, - 1L))
|
||||
(spDefaultAccount.adapter as AccountAdapter).getIndexFromId( Pref.lpTabletTootDefaultAccount(pref))
|
||||
)
|
||||
|
||||
footer_button_bg_color = pref.getInt(Pref.KEY_FOOTER_BUTTON_BG_COLOR, 0)
|
||||
footer_button_fg_color = pref.getInt(Pref.KEY_FOOTER_BUTTON_FG_COLOR, 0)
|
||||
footer_tab_bg_color = pref.getInt(Pref.KEY_FOOTER_TAB_BG_COLOR, 0)
|
||||
footer_tab_divider_color = pref.getInt(Pref.KEY_FOOTER_TAB_DIVIDER_COLOR, 0)
|
||||
footer_tab_indicator_color = pref.getInt(Pref.KEY_FOOTER_TAB_INDICATOR_COLOR, 0)
|
||||
footer_button_bg_color = Pref.ipFooterButtonBgColor(pref)
|
||||
footer_button_fg_color = Pref.ipFooterButtonFgColor(pref)
|
||||
footer_tab_bg_color = Pref.ipFooterTabBgColor(pref)
|
||||
footer_tab_divider_color = Pref.ipFooterTabDividerColor(pref)
|
||||
footer_tab_indicator_color = Pref.ipFooterTabIndicatorColor(pref)
|
||||
|
||||
etColumnWidth.setText(pref.getString(Pref.KEY_COLUMN_WIDTH, ""))
|
||||
etMediaThumbHeight.setText(pref.getString(Pref.KEY_MEDIA_THUMB_HEIGHT, ""))
|
||||
etClientName.setText(pref.getString(Pref.KEY_CLIENT_NAME, ""))
|
||||
etQuoteNameFormat.setText(pref.getString(Pref.KEY_QUOTE_NAME_FORMAT, ""))
|
||||
etAutoCWLines.setText(pref.getString(Pref.KEY_AUTO_CW_LINES, "0"))
|
||||
etAvatarIconSize.setText(pref.getString(Pref.KEY_AVATAR_ICON_SIZE, "48"))
|
||||
etColumnWidth.setText(Pref.spColumnWidth(pref))
|
||||
etMediaThumbHeight.setText(Pref.spMediaThumbHeight(pref))
|
||||
etClientName.setText(Pref.spClientName(pref))
|
||||
etQuoteNameFormat.setText(Pref.spQuoteNameFormat(pref))
|
||||
etAutoCWLines.setText(Pref.spAutoCWLines(pref))
|
||||
etAvatarIconSize.setText(Pref.spAvatarIconSize(pref))
|
||||
|
||||
etMediaSizeMax.setText(pref.getString(Pref.KEY_MEDIA_SIZE_MAX, "8"))
|
||||
etMediaSizeMax.setText(Pref.spMediaSizeMax(pref))
|
||||
|
||||
etTimelineFontSize.setText(formatFontSize(pref.getFloat(Pref.KEY_TIMELINE_FONT_SIZE, Float.NaN)))
|
||||
etAcctFontSize.setText(formatFontSize(pref.getFloat(Pref.KEY_ACCT_FONT_SIZE, Float.NaN)))
|
||||
timeline_font = Pref.spTimelineFont(pref)
|
||||
timeline_font_bold = Pref.spTimelineFontBold(pref)
|
||||
|
||||
etTimelineFontSize.setText(formatFontSize(Pref.fpTimelineFontSize(pref)))
|
||||
etAcctFontSize.setText(formatFontSize(Pref.fpAcctFontSize(pref)))
|
||||
|
||||
timeline_font = pref.getString(Pref.KEY_TIMELINE_FONT, "")
|
||||
timeline_font_bold = pref.getString(Pref.KEY_TIMELINE_FONT_BOLD, "")
|
||||
|
||||
load_busy = false
|
||||
|
||||
|
@ -440,65 +327,43 @@ class ActAppSetting : AppCompatActivity()
|
|||
|
||||
private fun saveUIToData() {
|
||||
if(load_busy) return
|
||||
pref.edit()
|
||||
.putBoolean(Pref.KEY_DONT_CONFIRM_BEFORE_CLOSE_COLUMN, swDontConfirmBeforeCloseColumn.isChecked)
|
||||
.putBoolean(Pref.KEY_PRIOR_LOCAL_URL, swPriorLocalURL.isChecked)
|
||||
.putBoolean(Pref.KEY_DISABLE_FAST_SCROLLER, swDisableFastScroller.isChecked)
|
||||
.putBoolean(Pref.KEY_SIMPLE_LIST, swSimpleList.isChecked)
|
||||
.putBoolean(Pref.KEY_EXIT_APP_WHEN_CLOSE_PROTECTED_COLUMN, swExitAppWhenCloseProtectedColumn.isChecked)
|
||||
.putBoolean(Pref.KEY_SHOW_FOLLOW_BUTTON_IN_BUTTON_BAR, swShowFollowButtonInButtonBar.isChecked)
|
||||
.putBoolean(Pref.KEY_DONT_ROUND, swDontRound.isChecked)
|
||||
.putBoolean(Pref.KEY_DONT_USE_STREAMING, swDontUseStreaming.isChecked)
|
||||
.putBoolean(Pref.KEY_DONT_REFRESH_ON_RESUME, swDontRefreshOnResume.isChecked)
|
||||
.putBoolean(Pref.KEY_DONT_SCREEN_OFF, swDontScreenOff.isChecked)
|
||||
.putBoolean(Pref.KEY_DISABLE_TABLET_MODE, swDisableTabletMode.isChecked)
|
||||
.putBoolean(Pref.KEY_DONT_CROP_MEDIA_THUMBNAIL, swDontCropMediaThumb.isChecked)
|
||||
.putBoolean(Pref.KEY_PRIOR_CHROME, swPriorChrome.isChecked)
|
||||
.putBoolean(Pref.KEY_POST_BUTTON_BAR_AT_TOP, swPostButtonBarTop.isChecked)
|
||||
.putBoolean(Pref.KEY_DONT_DUPLICATION_CHECK, swDontDuplicationCheck.isChecked)
|
||||
.putBoolean(Pref.KEY_QUICK_TOOT_BAR, swQuickTootBar.isChecked)
|
||||
.putBoolean(Pref.KEY_ENABLE_GIF_ANIMATION, swEnableGifAnimation.isChecked)
|
||||
.putBoolean(Pref.KEY_MENTION_FULL_ACCT, swMentionFullAcct.isChecked)
|
||||
.putBoolean(Pref.KEY_RELATIVE_TIMESTAMP, swRelativeTimestamp.isChecked)
|
||||
.putBoolean(Pref.KEY_DONT_USE_ACTION_BUTTON, swDontUseActionButtonWithQuickTootBar.isChecked)
|
||||
.putBoolean(Pref.KEY_SHORT_ACCT_LOCAL_USER, swShortAcctLocalUser.isChecked)
|
||||
.putBoolean(Pref.KEY_DISABLE_EMOJI_ANIMATION, swDisableEmojiAnimation.isChecked)
|
||||
.putBoolean(Pref.KEY_ALLOW_NON_SPACE_BEFORE_EMOJI_SHORTCODE, swAllowNonSpaceBeforeEmojiShortcode.isChecked)
|
||||
.putBoolean(Pref.KEY_USE_INTERNAL_MEDIA_VIEWER, swUseInternalMediaViewer.isChecked)
|
||||
|
||||
.putBoolean(Pref.KEY_NOTIFICATION_SOUND, cbNotificationSound.isChecked)
|
||||
.putBoolean(Pref.KEY_NOTIFICATION_VIBRATION, cbNotificationVibration.isChecked)
|
||||
.putBoolean(Pref.KEY_NOTIFICATION_LED, cbNotificationLED.isChecked)
|
||||
val e = pref.edit()
|
||||
|
||||
.putInt(Pref.KEY_BACK_BUTTON_ACTION, spBackButtonAction.selectedItemPosition)
|
||||
.putInt(Pref.KEY_UI_THEME, spUITheme.selectedItemPosition)
|
||||
.putInt(Pref.KEY_RESIZE_IMAGE, spResizeImage.selectedItemPosition)
|
||||
.putInt(Pref.KEY_REFRESH_AFTER_TOOT, spRefreshAfterToot.selectedItemPosition)
|
||||
for(si in booleanViewList) {
|
||||
e.putBoolean(si.info.key, si.view.isChecked)
|
||||
}
|
||||
|
||||
.putInt(Pref.KEY_FOOTER_BUTTON_BG_COLOR, footer_button_bg_color)
|
||||
.putInt(Pref.KEY_FOOTER_BUTTON_FG_COLOR, footer_button_fg_color)
|
||||
.putInt(Pref.KEY_FOOTER_TAB_BG_COLOR, footer_tab_bg_color)
|
||||
.putInt(Pref.KEY_FOOTER_TAB_DIVIDER_COLOR, footer_tab_divider_color)
|
||||
.putInt(Pref.KEY_FOOTER_TAB_INDICATOR_COLOR, footer_tab_indicator_color)
|
||||
e
|
||||
.put(Pref.lpTabletTootDefaultAccount,
|
||||
(spDefaultAccount.adapter as AccountAdapter)
|
||||
.getIdFromIndex(spDefaultAccount.selectedItemPosition)
|
||||
)
|
||||
|
||||
.putLong(Pref.KEY_TABLET_TOOT_DEFAULT_ACCOUNT, (spDefaultAccount.adapter as AccountAdapter)
|
||||
.getIdFromIndex(spDefaultAccount.selectedItemPosition))
|
||||
.put(Pref.fpTimelineFontSize, parseFontSize(etTimelineFontSize.text.toString().trim { it <= ' ' }))
|
||||
.put(Pref.fpAcctFontSize, parseFontSize(etAcctFontSize.text.toString().trim { it <= ' ' }))
|
||||
|
||||
.putString(Pref.KEY_TIMELINE_FONT, timeline_font)
|
||||
.putString(Pref.KEY_TIMELINE_FONT_BOLD, timeline_font_bold)
|
||||
.putString(Pref.KEY_COLUMN_WIDTH, etColumnWidth.text.toString().trim { it <= ' ' })
|
||||
.putString(Pref.KEY_MEDIA_THUMB_HEIGHT, etMediaThumbHeight.text.toString().trim { it <= ' ' })
|
||||
.putString(Pref.KEY_CLIENT_NAME, etClientName.text.toString().trim { it <= ' ' })
|
||||
.putString(Pref.KEY_QUOTE_NAME_FORMAT, etQuoteNameFormat.text.toString()) // not trimmed
|
||||
.putString(Pref.KEY_AUTO_CW_LINES, etAutoCWLines.text.toString()) // not trimmed
|
||||
.putString(Pref.KEY_AVATAR_ICON_SIZE, etAvatarIconSize.text.toString().trim { it <= ' ' })
|
||||
.putString(Pref.KEY_MEDIA_SIZE_MAX, etMediaSizeMax.text.toString()) // not trimmed
|
||||
.put(Pref.spColumnWidth, etColumnWidth.text.toString().trim { it <= ' ' })
|
||||
.put(Pref.spMediaThumbHeight, etMediaThumbHeight.text.toString().trim { it <= ' ' })
|
||||
.put(Pref.spClientName, etClientName.text.toString().trim { it <= ' ' })
|
||||
.put(Pref.spQuoteNameFormat, etQuoteNameFormat.text.toString()) // not trimmed
|
||||
.put(Pref.spAutoCWLines, etAutoCWLines.text.toString().trim { it <= ' ' })
|
||||
.put(Pref.spAvatarIconSize, etAvatarIconSize.text.toString().trim { it <= ' ' })
|
||||
.put(Pref.spMediaSizeMax, etMediaSizeMax.text.toString().trim { it <= ' ' })
|
||||
.put(Pref.spTimelineFont, timeline_font ?:"")
|
||||
.put(Pref.spTimelineFontBold, timeline_font_bold?:"")
|
||||
|
||||
.putFloat(Pref.KEY_TIMELINE_FONT_SIZE, parseFontSize(etTimelineFontSize.text.toString().trim { it <= ' ' }))
|
||||
.putFloat(Pref.KEY_ACCT_FONT_SIZE, parseFontSize(etAcctFontSize.text.toString().trim { it <= ' ' }))
|
||||
.put(Pref.ipBackButtonAction, spBackButtonAction.selectedItemPosition)
|
||||
.put(Pref.ipUiTheme, spUITheme.selectedItemPosition)
|
||||
.put(Pref.ipResizeImage, spResizeImage.selectedItemPosition)
|
||||
.put(Pref.ipRefreshAfterToot, spRefreshAfterToot.selectedItemPosition)
|
||||
.put(Pref.ipFooterButtonBgColor, footer_button_bg_color)
|
||||
.put(Pref.ipFooterButtonFgColor, footer_button_fg_color)
|
||||
.put(Pref.ipFooterTabBgColor, footer_tab_bg_color)
|
||||
.put(Pref.ipFooterTabDividerColor, footer_tab_divider_color)
|
||||
.put(Pref.ipFooterTabIndicatorColor, footer_tab_indicator_color)
|
||||
|
||||
.apply()
|
||||
|
||||
}
|
||||
|
||||
override fun onCheckedChanged(buttonView : CompoundButton, isChecked : Boolean) {
|
||||
|
@ -591,11 +456,10 @@ class ActAppSetting : AppCompatActivity()
|
|||
R.id.btnCustomStreamListenerEdit -> ActCustomStreamListener.open(this)
|
||||
|
||||
R.id.btnCustomStreamListenerReset -> {
|
||||
pref
|
||||
.edit()
|
||||
.remove(Pref.KEY_STREAM_LISTENER_CONFIG_URL)
|
||||
.remove(Pref.KEY_STREAM_LISTENER_SECRET)
|
||||
.remove(Pref.KEY_STREAM_LISTENER_CONFIG_DATA)
|
||||
pref.edit()
|
||||
.remove(Pref.spStreamListenerConfigUrl)
|
||||
.remove(Pref.spStreamListenerSecret)
|
||||
.remove(Pref.spStreamListenerConfigData)
|
||||
.apply()
|
||||
SavedAccount.clearRegistrationCache()
|
||||
PollingWorker.queueUpdateListener(this)
|
||||
|
|
|
@ -90,8 +90,8 @@ class ActCustomStreamListener : AppCompatActivity(), View.OnClickListener, TextW
|
|||
|
||||
val pref = Pref.pref(this)
|
||||
|
||||
etStreamListenerConfigurationUrl.setText(pref.getString(Pref.KEY_STREAM_LISTENER_CONFIG_URL, ""))
|
||||
etStreamListenerSecret.setText(pref.getString(Pref.KEY_STREAM_LISTENER_SECRET, ""))
|
||||
etStreamListenerConfigurationUrl.setText(Pref.spStreamListenerConfigUrl(pref))
|
||||
etStreamListenerSecret.setText(Pref.spStreamListenerSecret(pref))
|
||||
stream_config_json = null
|
||||
tvLog.text = getString(R.string.input_url_and_secret_then_test)
|
||||
|
||||
|
@ -123,10 +123,12 @@ class ActCustomStreamListener : AppCompatActivity(), View.OnClickListener, TextW
|
|||
Utils.hideKeyboard(this, etStreamListenerConfigurationUrl)
|
||||
finish()
|
||||
}
|
||||
|
||||
R.id.btnTest -> {
|
||||
Utils.hideKeyboard(this, etStreamListenerConfigurationUrl)
|
||||
startTest()
|
||||
}
|
||||
|
||||
R.id.btnSave -> {
|
||||
Utils.hideKeyboard(this, etStreamListenerConfigurationUrl)
|
||||
if(save()) {
|
||||
|
@ -145,9 +147,9 @@ class ActCustomStreamListener : AppCompatActivity(), View.OnClickListener, TextW
|
|||
}
|
||||
|
||||
Pref.pref(this).edit()
|
||||
.putString(Pref.KEY_STREAM_LISTENER_CONFIG_URL, etStreamListenerConfigurationUrl.text.toString().trim { it <= ' ' })
|
||||
.putString(Pref.KEY_STREAM_LISTENER_SECRET, etStreamListenerSecret.text.toString().trim { it <= ' ' })
|
||||
.putString(Pref.KEY_STREAM_LISTENER_CONFIG_DATA, stream_config_json)
|
||||
.put(Pref.spStreamListenerConfigUrl, etStreamListenerConfigurationUrl.text.toString().trim { it <= ' ' })
|
||||
.put(Pref.spStreamListenerSecret, etStreamListenerSecret.text.toString().trim { it <= ' ' })
|
||||
.put(Pref.spStreamListenerConfigData, stream_config_json ?: "")
|
||||
.apply()
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -162,12 +162,14 @@ class ActMain : AppCompatActivity()
|
|||
internal lateinit var pager : ViewPager
|
||||
internal lateinit var pager_adapter : ColumnPagerAdapter
|
||||
}
|
||||
|
||||
class TabletEnv {
|
||||
internal lateinit var tablet_pager : RecyclerView
|
||||
internal lateinit var tablet_pager_adapter : TabletColumnPagerAdapter
|
||||
internal lateinit var tablet_layout_manager : LinearLayoutManager
|
||||
internal lateinit var tablet_snap_helper : GravitySnapHelper
|
||||
}
|
||||
|
||||
private var phoneEnv : PhoneEnv? = null
|
||||
private var tabletEnv : TabletEnv? = null
|
||||
|
||||
|
@ -279,7 +281,6 @@ class ActMain : AppCompatActivity()
|
|||
Utils.showToast(this@ActMain, false, R.string.unboost_succeeded)
|
||||
}
|
||||
|
||||
|
||||
private var nScreenColumn : Int = 0
|
||||
private var nColumnWidth : Int = 0
|
||||
|
||||
|
@ -291,7 +292,7 @@ class ActMain : AppCompatActivity()
|
|||
for(c in app_state.column_list) {
|
||||
c.fireShowContent()
|
||||
}
|
||||
if(pref.getBoolean(Pref.KEY_RELATIVE_TIMESTAMP, false)) {
|
||||
if(Pref.bpRelativeTimestamp(pref)) {
|
||||
handler.postDelayed(this, 10000L)
|
||||
}
|
||||
}
|
||||
|
@ -315,7 +316,7 @@ class ActMain : AppCompatActivity()
|
|||
return - 1L
|
||||
},
|
||||
{ _ ->
|
||||
val db_id = App1.pref.getLong(Pref.KEY_TABLET_TOOT_DEFAULT_ACCOUNT, - 1L)
|
||||
val db_id = Pref.lpTabletTootDefaultAccount(App1.pref)
|
||||
val a = SavedAccount.loadAccount(this@ActMain, db_id)
|
||||
return a?.db_id ?: - 1L
|
||||
}
|
||||
|
@ -353,8 +354,8 @@ class ActMain : AppCompatActivity()
|
|||
this.density = app_state.density
|
||||
this.acct_pad_lr = (0.5f + 4f * density).toInt()
|
||||
|
||||
timeline_font_size_sp = validateFloat(pref.getFloat(Pref.KEY_TIMELINE_FONT_SIZE, Float.NaN))
|
||||
acct_font_size_sp = validateFloat(pref.getFloat(Pref.KEY_ACCT_FONT_SIZE, Float.NaN))
|
||||
timeline_font_size_sp = validateFloat( Pref.fpTimelineFontSize(pref))
|
||||
acct_font_size_sp = validateFloat( Pref.fpAcctFontSize(pref))
|
||||
|
||||
initUI()
|
||||
|
||||
|
@ -363,7 +364,7 @@ class ActMain : AppCompatActivity()
|
|||
if(! app_state.column_list.isEmpty()) {
|
||||
|
||||
// 前回最後に表示していたカラムの位置にスクロールする
|
||||
val column_pos = pref.getInt(Pref.KEY_LAST_COLUMN_POS, - 1)
|
||||
val column_pos = Pref.ipLastColumnPos(pref)
|
||||
if(column_pos >= 0 && column_pos < app_state.column_list.size) {
|
||||
scrollToColumn(column_pos, true)
|
||||
}
|
||||
|
@ -415,8 +416,10 @@ class ActMain : AppCompatActivity()
|
|||
if(pos > 0 && pos < app_state.column_list.size) {
|
||||
phoneTab(
|
||||
{ env -> env.pager.currentItem = pos },
|
||||
{ env -> env.tablet_layout_manager
|
||||
.smoothScrollToPosition(env.tablet_pager, null, pos) }
|
||||
{ env ->
|
||||
env.tablet_layout_manager
|
||||
.smoothScrollToPosition(env.tablet_pager, null, pos)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -498,7 +501,7 @@ class ActMain : AppCompatActivity()
|
|||
|
||||
MyClickableSpan.link_callback = WeakReference(link_click_listener)
|
||||
|
||||
if(pref.getBoolean(Pref.KEY_DONT_SCREEN_OFF, false)) {
|
||||
if(Pref.bpDontScreenOff(pref)) {
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
} else {
|
||||
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
|
@ -526,14 +529,14 @@ class ActMain : AppCompatActivity()
|
|||
{ env -> env.pager.currentItem },
|
||||
{ env -> env.tablet_layout_manager.findFirstVisibleItemPosition() })
|
||||
|
||||
pref.edit().putInt(Pref.KEY_LAST_COLUMN_POS, last_pos).apply()
|
||||
pref.edit().put(Pref.ipLastColumnPos,last_pos).apply()
|
||||
|
||||
super.onPause()
|
||||
}
|
||||
|
||||
private fun refreshAfterPost() {
|
||||
if(posted_acct?.isNotEmpty() == true) {
|
||||
val refresh_after_toot = pref.getInt(Pref.KEY_REFRESH_AFTER_TOOT, 0)
|
||||
val refresh_after_toot = Pref.ipRefreshAfterToot(pref)
|
||||
if(refresh_after_toot != Pref.RAT_DONT_REFRESH) {
|
||||
for(column in app_state.column_list) {
|
||||
val a = column.access_info
|
||||
|
@ -772,7 +775,7 @@ class ActMain : AppCompatActivity()
|
|||
}
|
||||
|
||||
// カラムが1個以上ある場合は設定に合わせて挙動を変える
|
||||
when(pref.getInt(Pref.KEY_BACK_BUTTON_ACTION, 0)) {
|
||||
when( Pref.ipBackButtonAction(pref)) {
|
||||
ActAppSetting.BACK_ASK_ALWAYS -> {
|
||||
val dialog = ActionsDialog()
|
||||
|
||||
|
@ -802,8 +805,8 @@ class ActMain : AppCompatActivity()
|
|||
|
||||
val closer = { column : Column ->
|
||||
if(column.dont_close
|
||||
&& pref.getBoolean(Pref.KEY_EXIT_APP_WHEN_CLOSE_PROTECTED_COLUMN, false)
|
||||
&& pref.getBoolean(Pref.KEY_DONT_CONFIRM_BEFORE_CLOSE_COLUMN, false)
|
||||
&& Pref.bpExitAppWhenCloseProtectedColumn(pref)
|
||||
&& Pref.bpDontConfirmBeforeCloseColumn(pref)
|
||||
) {
|
||||
this@ActMain.finish()
|
||||
} else {
|
||||
|
@ -917,10 +920,10 @@ class ActMain : AppCompatActivity()
|
|||
internal fun initUI() {
|
||||
setContentView(R.layout.act_main)
|
||||
|
||||
dont_crop_media_thumbnail = pref.getBoolean(Pref.KEY_DONT_CROP_MEDIA_THUMBNAIL, false)
|
||||
dont_crop_media_thumbnail = Pref.bpDontCropMediaThumb(pref)
|
||||
|
||||
var sv = pref.getString(Pref.KEY_TIMELINE_FONT, null)
|
||||
if(sv?.isNotEmpty() == true) {
|
||||
var sv = Pref.spTimelineFont(pref)
|
||||
if( sv.isNotEmpty() ) {
|
||||
try {
|
||||
timeline_font = Typeface.createFromFile(sv)
|
||||
} catch(ex : Throwable) {
|
||||
|
@ -929,8 +932,8 @@ class ActMain : AppCompatActivity()
|
|||
|
||||
}
|
||||
|
||||
sv = pref.getString(Pref.KEY_TIMELINE_FONT_BOLD, null)
|
||||
if(sv?.isNotEmpty() == true) {
|
||||
sv = Pref.spTimelineFontBold(pref)
|
||||
if(sv.isNotEmpty() ) {
|
||||
try {
|
||||
timeline_font_bold = Typeface.createFromFile(sv)
|
||||
} catch(ex : Throwable) {
|
||||
|
@ -946,13 +949,13 @@ class ActMain : AppCompatActivity()
|
|||
|
||||
}
|
||||
|
||||
shortAcctLocalUser = pref.getBoolean(Pref.KEY_SHORT_ACCT_LOCAL_USER, false)
|
||||
shortAcctLocalUser = Pref.bpShortAcctLocalUser(pref)
|
||||
|
||||
run {
|
||||
var icon_size_dp = 48f
|
||||
try {
|
||||
sv = pref.getString(Pref.KEY_AVATAR_ICON_SIZE, null)
|
||||
val fv = if(sv == null || sv.isEmpty()) Float.NaN else sv.toFloat()
|
||||
sv = Pref.spAvatarIconSize(pref)
|
||||
val fv = if( sv.isEmpty()) Float.NaN else sv.toFloat()
|
||||
if(fv.isNaN() || fv.isInfinite() || fv < 1f) {
|
||||
// error or bad range
|
||||
} else {
|
||||
|
@ -991,7 +994,7 @@ class ActMain : AppCompatActivity()
|
|||
etQuickToot = findViewById(R.id.etQuickToot)
|
||||
btnQuickToot = findViewById(R.id.btnQuickToot)
|
||||
|
||||
if(! pref.getBoolean(Pref.KEY_QUICK_TOOT_BAR, false)) {
|
||||
if(! Pref.bpQuickTootBar(pref)) {
|
||||
llQuickTootBar.visibility = View.GONE
|
||||
}
|
||||
|
||||
|
@ -999,7 +1002,7 @@ class ActMain : AppCompatActivity()
|
|||
btnMenu.setOnClickListener(this)
|
||||
btnQuickToot.setOnClickListener(this)
|
||||
|
||||
if(pref.getBoolean(Pref.KEY_DONT_USE_ACTION_BUTTON, false)) {
|
||||
if(Pref.bpDontUseActionButtonWithQuickTootBar(pref)) {
|
||||
etQuickToot.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE
|
||||
etQuickToot.imeOptions = EditorInfo.IME_ACTION_NONE
|
||||
// 最後に指定する必要がある?
|
||||
|
@ -1029,7 +1032,7 @@ class ActMain : AppCompatActivity()
|
|||
val density = dm.density
|
||||
|
||||
var media_thumb_height = 64
|
||||
sv = pref.getString(Pref.KEY_MEDIA_THUMB_HEIGHT, "")
|
||||
sv = Pref.spMediaThumbHeight(pref)
|
||||
if(sv?.isNotEmpty() == true) {
|
||||
try {
|
||||
val iv = Integer.parseInt(sv)
|
||||
|
@ -1044,8 +1047,8 @@ class ActMain : AppCompatActivity()
|
|||
app_state.media_thumb_height = (0.5f + media_thumb_height * density).toInt()
|
||||
|
||||
var column_w_min_dp = COLUMN_WIDTH_MIN_DP
|
||||
sv = pref.getString(Pref.KEY_COLUMN_WIDTH, "")
|
||||
if(sv?.isNotEmpty() == true) {
|
||||
sv = Pref.spColumnWidth(pref)
|
||||
if(sv.isNotEmpty()) {
|
||||
try {
|
||||
val iv = Integer.parseInt(sv)
|
||||
if(iv >= 100) {
|
||||
|
@ -1060,7 +1063,7 @@ class ActMain : AppCompatActivity()
|
|||
|
||||
val sw = dm.widthPixels
|
||||
|
||||
if(pref.getBoolean(Pref.KEY_DISABLE_TABLET_MODE, false) || sw < column_w_min * 2) {
|
||||
if(Pref.bpDisableTabletMode(pref) || sw < column_w_min * 2) {
|
||||
// SmartPhone mode
|
||||
findViewById<View>(R.id.rvPager).visibility = View.GONE
|
||||
phoneEnv = PhoneEnv()
|
||||
|
@ -1423,7 +1426,7 @@ class ActMain : AppCompatActivity()
|
|||
}
|
||||
|
||||
this.host = client.instance
|
||||
val client_name = Pref.pref(this@ActMain).getString(Pref.KEY_CLIENT_NAME, "")
|
||||
val client_name = Pref.spClientName(this@ActMain)
|
||||
|
||||
val result = client.authentication2(client_name, code)
|
||||
val obj = result?.jsonObject
|
||||
|
@ -1628,7 +1631,7 @@ class ActMain : AppCompatActivity()
|
|||
return
|
||||
}
|
||||
|
||||
if(! bConfirm && ! pref.getBoolean(Pref.KEY_DONT_CONFIRM_BEFORE_CLOSE_COLUMN, false)) {
|
||||
if(! bConfirm && ! Pref.bpDontConfirmBeforeCloseColumn(pref)) {
|
||||
AlertDialog.Builder(this)
|
||||
.setMessage(R.string.confirm_close_column)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
|
@ -1762,11 +1765,11 @@ class ActMain : AppCompatActivity()
|
|||
}
|
||||
|
||||
private fun showFooterColor() {
|
||||
val footer_button_bg_color = pref.getInt(Pref.KEY_FOOTER_BUTTON_BG_COLOR, 0)
|
||||
val footer_button_fg_color = pref.getInt(Pref.KEY_FOOTER_BUTTON_FG_COLOR, 0)
|
||||
val footer_tab_bg_color = pref.getInt(Pref.KEY_FOOTER_TAB_BG_COLOR, 0)
|
||||
val footer_tab_divider_color = pref.getInt(Pref.KEY_FOOTER_TAB_DIVIDER_COLOR, 0)
|
||||
val footer_tab_indicator_color = pref.getInt(Pref.KEY_FOOTER_TAB_INDICATOR_COLOR, 0)
|
||||
val footer_button_bg_color = Pref.ipFooterButtonBgColor(pref)
|
||||
val footer_button_fg_color = Pref.ipFooterButtonFgColor(pref)
|
||||
val footer_tab_bg_color = Pref.ipFooterTabBgColor(pref)
|
||||
val footer_tab_divider_color = Pref.ipFooterTabDividerColor(pref)
|
||||
val footer_tab_indicator_color = Pref.ipFooterTabIndicatorColor(pref)
|
||||
var c = footer_button_bg_color
|
||||
if(c == 0) {
|
||||
btnMenu.setBackgroundResource(R.drawable.btn_bg_ddd)
|
||||
|
@ -1919,8 +1922,8 @@ class ActMain : AppCompatActivity()
|
|||
private fun resizeColumnWidth(env : TabletEnv) {
|
||||
|
||||
var column_w_min_dp = COLUMN_WIDTH_MIN_DP
|
||||
val sv = pref.getString(Pref.KEY_COLUMN_WIDTH, "")
|
||||
if(sv?.isNotEmpty() == true) {
|
||||
val sv = Pref.spColumnWidth(pref)
|
||||
if(sv.isNotEmpty() ) {
|
||||
try {
|
||||
val iv = Integer.parseInt(sv)
|
||||
if(iv >= 100) {
|
||||
|
@ -2140,7 +2143,7 @@ class ActMain : AppCompatActivity()
|
|||
}
|
||||
|
||||
private fun resizeAutoCW(column_w : Int) {
|
||||
val sv = pref.getString(Pref.KEY_AUTO_CW_LINES, "")
|
||||
val sv = Pref.spAutoCWLines(pref)
|
||||
nAutoCwLines = Utils.parse_int(sv, - 1)
|
||||
if(nAutoCwLines > 0) {
|
||||
val lv_pad = (0.5f + 12 * density).toInt()
|
||||
|
|
|
@ -698,7 +698,7 @@ class ActPost : AppCompatActivity(), View.OnClickListener, PostAttachment.Callba
|
|||
|
||||
setContentView(R.layout.act_post)
|
||||
|
||||
if(Pref.pref(this).getBoolean(Pref.KEY_POST_BUTTON_BAR_AT_TOP, false)) {
|
||||
if(Pref.bpPostButtonBarTop(this)) {
|
||||
val bar = findViewById<View>(R.id.llFooterBar)
|
||||
val parent = bar.parent as ViewGroup
|
||||
parent.removeView(bar)
|
||||
|
@ -1189,7 +1189,7 @@ class ActPost : AppCompatActivity(), View.OnClickListener, PostAttachment.Callba
|
|||
}
|
||||
|
||||
// 設定からリサイズ指定を読む
|
||||
val resize_to = list_resize_max[pref.getInt(Pref.KEY_RESIZE_IMAGE, 4)]
|
||||
val resize_to = list_resize_max[Pref.ipResizeImage(pref)]
|
||||
|
||||
val bitmap = Utils.createResizedBitmap(log, this, uri, true, resize_to)
|
||||
if(bitmap != null) {
|
||||
|
@ -1292,7 +1292,7 @@ class ActPost : AppCompatActivity(), View.OnClickListener, PostAttachment.Callba
|
|||
try {
|
||||
val opener = createOpener(uri, mime_type)
|
||||
|
||||
val sv = pref.getString(Pref.KEY_MEDIA_SIZE_MAX, "8")
|
||||
val sv = Pref.spMediaSizeMax(pref)
|
||||
var media_size_max = 1000000 * Utils.parse_int(sv, 8)
|
||||
if(media_size_max < 1000000) media_size_max = 1000000
|
||||
|
||||
|
|
|
@ -424,7 +424,7 @@ class App1 : Application() {
|
|||
|
||||
prepare(activity.applicationContext)
|
||||
|
||||
var theme_idx = pref.getInt(Pref.KEY_UI_THEME, 0)
|
||||
var theme_idx = Pref.ipUiTheme(pref)
|
||||
|
||||
if(forceDark) theme_idx = 1
|
||||
|
||||
|
@ -508,14 +508,14 @@ class App1 : Application() {
|
|||
var allow_non_space_before_emoji_shortcode : Boolean = false
|
||||
|
||||
private fun reloadConfig() {
|
||||
disable_emoji_animation = pref.getBoolean(Pref.KEY_DISABLE_EMOJI_ANIMATION, false)
|
||||
allow_non_space_before_emoji_shortcode = pref.getBoolean(Pref.KEY_ALLOW_NON_SPACE_BEFORE_EMOJI_SHORTCODE, false)
|
||||
disable_emoji_animation = Pref.bpDisableEmojiAnimation(pref)
|
||||
allow_non_space_before_emoji_shortcode = Pref.bpAllowNonSpaceBeforeEmojiShortcode(pref)
|
||||
}
|
||||
|
||||
// Chrome Custom Tab を開く
|
||||
fun openCustomTab(activity : Activity, url : String) {
|
||||
try {
|
||||
if(pref.getBoolean(Pref.KEY_PRIOR_CHROME, true)) {
|
||||
if( Pref.bpPriorChrome(pref)) {
|
||||
try {
|
||||
// 初回はChrome指定で試す
|
||||
val builder = CustomTabsIntent.Builder()
|
||||
|
|
|
@ -263,111 +263,34 @@ object AppDataExporter {
|
|||
reader.beginObject()
|
||||
while(reader.hasNext()) {
|
||||
val k = reader.nextName() ?: throw RuntimeException("importPref: name is null")
|
||||
|
||||
val token = reader.peek()
|
||||
if(token == JsonToken.NULL) {
|
||||
reader.nextNull()
|
||||
e.remove(k)
|
||||
continue
|
||||
}
|
||||
when(k) {
|
||||
// boolean
|
||||
Pref.KEY_DONT_CONFIRM_BEFORE_CLOSE_COLUMN,
|
||||
Pref.KEY_PRIOR_LOCAL_URL,
|
||||
Pref.KEY_DISABLE_FAST_SCROLLER,
|
||||
Pref.KEY_SIMPLE_LIST,
|
||||
Pref.KEY_NOTIFICATION_SOUND,
|
||||
Pref.KEY_NOTIFICATION_VIBRATION,
|
||||
Pref.KEY_NOTIFICATION_LED,
|
||||
Pref.KEY_EXIT_APP_WHEN_CLOSE_PROTECTED_COLUMN,
|
||||
Pref.KEY_SHOW_FOLLOW_BUTTON_IN_BUTTON_BAR,
|
||||
Pref.KEY_DONT_ROUND,
|
||||
Pref.KEY_DONT_USE_STREAMING,
|
||||
Pref.KEY_DONT_REFRESH_ON_RESUME,
|
||||
Pref.KEY_DONT_SCREEN_OFF,
|
||||
Pref.KEY_DISABLE_TABLET_MODE,
|
||||
Pref.KEY_DONT_CROP_MEDIA_THUMBNAIL,
|
||||
Pref.KEY_PRIOR_CHROME,
|
||||
Pref.KEY_POST_BUTTON_BAR_AT_TOP,
|
||||
Pref.KEY_DONT_DUPLICATION_CHECK,
|
||||
Pref.KEY_QUICK_TOOT_BAR,
|
||||
Pref.KEY_ENABLE_GIF_ANIMATION,
|
||||
Pref.KEY_MENTION_FULL_ACCT,
|
||||
Pref.KEY_RELATIVE_TIMESTAMP,
|
||||
Pref.KEY_DONT_USE_ACTION_BUTTON,
|
||||
Pref.KEY_SHORT_ACCT_LOCAL_USER,
|
||||
Pref.KEY_DISABLE_EMOJI_ANIMATION,
|
||||
Pref.KEY_ALLOW_NON_SPACE_BEFORE_EMOJI_SHORTCODE,
|
||||
Pref.KEY_USE_INTERNAL_MEDIA_VIEWER -> {
|
||||
val bv = reader.nextBoolean()
|
||||
e.putBoolean(k, bv)
|
||||
}
|
||||
|
||||
// int
|
||||
Pref.KEY_BACK_BUTTON_ACTION,
|
||||
Pref.KEY_UI_THEME,
|
||||
Pref.KEY_RESIZE_IMAGE,
|
||||
Pref.KEY_REFRESH_AFTER_TOOT,
|
||||
Pref.KEY_FOOTER_BUTTON_BG_COLOR,
|
||||
Pref.KEY_FOOTER_BUTTON_FG_COLOR,
|
||||
Pref.KEY_FOOTER_TAB_BG_COLOR,
|
||||
Pref.KEY_FOOTER_TAB_DIVIDER_COLOR,
|
||||
Pref.KEY_FOOTER_TAB_INDICATOR_COLOR,
|
||||
Pref.KEY_LAST_COLUMN_POS -> {
|
||||
val iv = reader.nextInt()
|
||||
e.putInt(k, iv)
|
||||
}
|
||||
val prefItem = Pref.map.get(k)
|
||||
when(prefItem) {
|
||||
is Pref.BooleanPref -> e.putBoolean(k, reader.nextBoolean())
|
||||
is Pref.IntPref -> e.putInt(k, reader.nextInt())
|
||||
is Pref.LongPref -> e.putLong(k, reader.nextLong())
|
||||
|
||||
// long
|
||||
Pref.KEY_TABLET_TOOT_DEFAULT_ACCOUNT -> {
|
||||
val lv = reader.nextLong()
|
||||
e.putLong(k, lv)
|
||||
}
|
||||
|
||||
// string
|
||||
Pref.KEY_COLUMN_WIDTH,
|
||||
Pref.KEY_MEDIA_THUMB_HEIGHT,
|
||||
Pref.KEY_STREAM_LISTENER_CONFIG_URL,
|
||||
Pref.KEY_STREAM_LISTENER_SECRET,
|
||||
Pref.KEY_STREAM_LISTENER_CONFIG_DATA,
|
||||
Pref.KEY_CLIENT_NAME,
|
||||
Pref.KEY_MASTODON_SEARCH_PORTAL_USER_TOKEN,
|
||||
Pref.KEY_QUOTE_NAME_FORMAT,
|
||||
Pref.KEY_AUTO_CW_LINES,
|
||||
Pref.KEY_AVATAR_ICON_SIZE,
|
||||
Pref.KEY_EMOJI_PICKER_RECENT,
|
||||
Pref.KEY_MEDIA_SIZE_MAX -> {
|
||||
|
||||
val sv = reader.nextString()
|
||||
e.putString(k, sv)
|
||||
}
|
||||
|
||||
// double
|
||||
Pref.KEY_TIMELINE_FONT_SIZE,
|
||||
Pref.KEY_ACCT_FONT_SIZE -> {
|
||||
val dv = reader.nextDouble()
|
||||
if(dv <= MAGIC_NAN) {
|
||||
e.putFloat(k, Float.NaN)
|
||||
is Pref.StringPref -> if(prefItem.skipImport) {
|
||||
reader.skipValue()
|
||||
e.remove(k)
|
||||
} else {
|
||||
e.putFloat(k, dv.toFloat())
|
||||
}
|
||||
e.putString(k, reader.nextString())
|
||||
}
|
||||
|
||||
Pref.KEY_TIMELINE_FONT,
|
||||
Pref.KEY_TIMELINE_FONT_BOLD -> {
|
||||
reader.skipValue()
|
||||
e.remove(k)
|
||||
is Pref.FloatPref -> {
|
||||
val dv = reader.nextDouble()
|
||||
e.putFloat(k, if(dv <= MAGIC_NAN) Float.NaN else dv.toFloat())
|
||||
}
|
||||
|
||||
// just ignore
|
||||
"device_token",
|
||||
"install_id",
|
||||
"disable_gif_animation" -> {
|
||||
reader.skipValue()
|
||||
e.remove(k)
|
||||
}
|
||||
|
||||
// force reset
|
||||
else -> {
|
||||
// ignore or force reset
|
||||
reader.skipValue()
|
||||
e.remove(k)
|
||||
}
|
||||
|
@ -475,10 +398,10 @@ object AppDataExporter {
|
|||
}
|
||||
|
||||
run {
|
||||
val old_id = app_state.pref.getLong(Pref.KEY_TABLET_TOOT_DEFAULT_ACCOUNT, - 1L)
|
||||
val old_id = Pref.lpTabletTootDefaultAccount(app_state.pref)
|
||||
if(old_id != - 1L) {
|
||||
val new_id = account_id_map[old_id]
|
||||
app_state.pref.edit().putLong(Pref.KEY_TABLET_TOOT_DEFAULT_ACCOUNT, new_id ?: - 1L).apply()
|
||||
app_state.pref.edit().put(Pref.lpTabletTootDefaultAccount, new_id ?: - 1L).apply()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2942,8 +2942,9 @@ class Column(
|
|||
|
||||
if(! bRefreshLoading
|
||||
&& canAutoRefresh()
|
||||
&& ! App1.getAppState(context).pref.getBoolean(Pref.KEY_DONT_REFRESH_ON_RESUME, false)
|
||||
&& ! dont_auto_refresh) {
|
||||
&& ! Pref.bpDontRefreshOnResume(App1.getAppState(context).pref)
|
||||
&& ! dont_auto_refresh
|
||||
) {
|
||||
|
||||
// リフレッシュしてからストリーミング開始
|
||||
log.d("onStart: start auto refresh.")
|
||||
|
@ -3042,7 +3043,7 @@ class Column(
|
|||
return
|
||||
}
|
||||
|
||||
if(App1.getAppState(context).pref.getBoolean(Pref.KEY_DONT_USE_STREAMING, false)) {
|
||||
if( Pref.bpDontUseStreaming(context) ) {
|
||||
log.d("resumeStreaming: disabled in app setting.")
|
||||
return
|
||||
}
|
||||
|
|
|
@ -29,7 +29,6 @@ import jp.juggler.subwaytooter.util.LogCategory
|
|||
import jp.juggler.subwaytooter.view.MyListView
|
||||
import jp.juggler.subwaytooter.util.ScrollPosition
|
||||
import jp.juggler.subwaytooter.util.Utils
|
||||
import java.util.regex.Matcher
|
||||
|
||||
internal class ColumnViewHolder(val activity : ActMain, root : View) : View.OnClickListener, SwipyRefreshLayout.OnRefreshListener, CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
|
@ -345,7 +344,7 @@ internal class ColumnViewHolder(val activity : ActMain, root : View) : View.OnCl
|
|||
|
||||
log.d("onPageCreate [%d] %s", page_idx, column.getColumnName(true))
|
||||
|
||||
val bSimpleList = column.column_type != Column.TYPE_CONVERSATION && activity.pref.getBoolean(Pref.KEY_SIMPLE_LIST, true)
|
||||
val bSimpleList = column.column_type != Column.TYPE_CONVERSATION && Pref.bpSimpleList(activity.pref)
|
||||
|
||||
tvColumnIndex.text = activity.getString(R.string.column_index, page_idx + 1, page_count)
|
||||
|
||||
|
@ -427,7 +426,7 @@ internal class ColumnViewHolder(val activity : ActMain, root : View) : View.OnCl
|
|||
|
||||
//
|
||||
listView.adapter = status_adapter
|
||||
listView.isFastScrollEnabled = ! Pref.pref(activity).getBoolean(Pref.KEY_DISABLE_FAST_SCROLLER, true)
|
||||
listView.isFastScrollEnabled = ! Pref.bpDisableFastScroller(Pref.pref(activity))
|
||||
listView.onItemClickListener = status_adapter
|
||||
|
||||
column.addColumnViewHolder(this)
|
||||
|
|
|
@ -537,8 +537,8 @@ internal class DlgContextMenu(
|
|||
R.id.btnQuoteName -> who?.let { who ->
|
||||
var sv = who.display_name
|
||||
try {
|
||||
val fmt = activity.pref.getString(Pref.KEY_QUOTE_NAME_FORMAT, null)
|
||||
if(fmt != null && fmt.contains("%1\$s")) {
|
||||
val fmt = Pref.spQuoteNameFormat( activity.pref)
|
||||
if( fmt.contains("%1\$s")) {
|
||||
sv = String.format(fmt, sv)
|
||||
}
|
||||
} catch(ex : Throwable) {
|
||||
|
|
|
@ -543,15 +543,13 @@ internal class ItemViewHolder(
|
|||
buttons_for_status?.bind(status, (item as? TootNotification))
|
||||
|
||||
val application = status.application
|
||||
when(column.column_type) {
|
||||
|
||||
Column.TYPE_CONVERSATION -> if(application == null) {
|
||||
tvApplication.visibility = View.GONE
|
||||
} else {
|
||||
if(application != null
|
||||
&&( column.column_type == Column.TYPE_CONVERSATION || Pref.bpShowAppName(activity.pref) )
|
||||
) {
|
||||
tvApplication.visibility = View.VISIBLE
|
||||
tvApplication.text = activity.getString(R.string.application_is, application.name ?: "")
|
||||
}
|
||||
else -> tvApplication.visibility = View.GONE
|
||||
tvApplication.text = activity.getString(R.string.application_is, application?.name ?: "")
|
||||
}else{
|
||||
tvApplication.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -852,7 +850,7 @@ internal class ItemViewHolder(
|
|||
}
|
||||
|
||||
is TootAttachment -> {
|
||||
if(App1.pref.getBoolean(Pref.KEY_USE_INTERNAL_MEDIA_VIEWER, true)) {
|
||||
if(Pref.bpUseInternalMediaViewer(App1.pref)) {
|
||||
// 内蔵メディアビューア
|
||||
ActMediaViewer.open(activity, media_attachments, i)
|
||||
|
||||
|
|
|
@ -972,12 +972,12 @@ class PollingWorker private constructor(c : Context) {
|
|||
private fun loadCustomStreamListenerSetting() {
|
||||
mCustomStreamListenerSetting = null
|
||||
mCustomStreamListenerSecret = null
|
||||
val jsonString = pref.getString(Pref.KEY_STREAM_LISTENER_CONFIG_DATA, null)
|
||||
val jsonString = Pref.spStreamListenerConfigData(pref)
|
||||
mCustomStreamListenerSettingString = jsonString
|
||||
if(jsonString != null && jsonString.isNotEmpty()) {
|
||||
if(jsonString.isNotEmpty() ){
|
||||
try {
|
||||
mCustomStreamListenerSetting = JsonValue.readHjson(jsonString).asObject()
|
||||
mCustomStreamListenerSecret = pref.getString(Pref.KEY_STREAM_LISTENER_SECRET, null)
|
||||
mCustomStreamListenerSecret = Pref.spStreamListenerSecret(pref)
|
||||
} catch(ex : Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
|
@ -1448,7 +1448,7 @@ class PollingWorker private constructor(c : Context) {
|
|||
|
||||
var iv = 0
|
||||
|
||||
if(pref.getBoolean(Pref.KEY_NOTIFICATION_SOUND, true)) {
|
||||
if( Pref.bpNotificationSound(pref) ) {
|
||||
|
||||
var sound_uri : Uri? = null
|
||||
|
||||
|
@ -1487,13 +1487,13 @@ class PollingWorker private constructor(c : Context) {
|
|||
|
||||
log.d("showNotification[%s] creating notification(4)", account.acct)
|
||||
|
||||
if(pref.getBoolean(Pref.KEY_NOTIFICATION_VIBRATION, true)) {
|
||||
if(Pref.bpNotificationVibration(pref)) {
|
||||
iv = iv or NotificationCompat.DEFAULT_VIBRATE
|
||||
}
|
||||
|
||||
log.d("showNotification[%s] creating notification(5)", account.acct)
|
||||
|
||||
if(pref.getBoolean(Pref.KEY_NOTIFICATION_LED, true)) {
|
||||
if(Pref.bpNotificationLED(pref)) {
|
||||
iv = iv or NotificationCompat.DEFAULT_LIGHTS
|
||||
}
|
||||
|
||||
|
|
|
@ -5,97 +5,215 @@ import android.content.SharedPreferences
|
|||
import android.preference.PreferenceManager
|
||||
|
||||
object Pref {
|
||||
|
||||
fun pref(context : Context) : SharedPreferences {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context)
|
||||
}
|
||||
|
||||
const val KEY_BACK_TO_COLUMN_LIST = "BackToColumnList" // 使わなくなった
|
||||
@Suppress("EqualsOrHashCode")
|
||||
abstract class BasePref<in T>(val key : String) {
|
||||
|
||||
override fun equals(other : Any?) : Boolean {
|
||||
return this === other
|
||||
}
|
||||
|
||||
fun remove(e : SharedPreferences.Editor) {
|
||||
e.remove(key)
|
||||
}
|
||||
|
||||
abstract fun put(editor : SharedPreferences.Editor, v : T)
|
||||
}
|
||||
|
||||
class BooleanPref(
|
||||
key : String,
|
||||
private val defVal : Boolean,
|
||||
val id : Int
|
||||
) : BasePref<Boolean>(key) {
|
||||
|
||||
operator fun invoke(pref : SharedPreferences) : Boolean {
|
||||
return pref.getBoolean(key, defVal)
|
||||
}
|
||||
|
||||
operator fun invoke(context : Context) : Boolean {
|
||||
return pref(context).getBoolean(key, defVal)
|
||||
}
|
||||
|
||||
override fun put(editor : SharedPreferences.Editor, v : Boolean) {
|
||||
editor.putBoolean(key, v)
|
||||
}
|
||||
}
|
||||
|
||||
class IntPref(
|
||||
key : String,
|
||||
private val defVal : Int
|
||||
) : BasePref<Int>(key) {
|
||||
|
||||
operator fun invoke(pref : SharedPreferences) : Int {
|
||||
return pref.getInt(key, defVal)
|
||||
}
|
||||
|
||||
operator fun invoke(context : Context) : Int {
|
||||
return pref(context).getInt(key, defVal)
|
||||
}
|
||||
|
||||
override fun put(editor : SharedPreferences.Editor, v : Int) {
|
||||
editor.putInt(key, v)
|
||||
}
|
||||
}
|
||||
|
||||
class LongPref(
|
||||
key : String,
|
||||
private val defVal : Long
|
||||
) : BasePref<Long>(key) {
|
||||
|
||||
operator fun invoke(pref : SharedPreferences) : Long {
|
||||
return pref.getLong(key, defVal)
|
||||
}
|
||||
|
||||
operator fun invoke(context : Context) : Long {
|
||||
return pref(context).getLong(key, defVal)
|
||||
}
|
||||
|
||||
override fun put(editor : SharedPreferences.Editor, v : Long) {
|
||||
editor.putLong(key, v)
|
||||
}
|
||||
}
|
||||
|
||||
class FloatPref(
|
||||
key : String,
|
||||
private val defVal : Float
|
||||
) : BasePref<Float>(key) {
|
||||
|
||||
operator fun invoke(pref : SharedPreferences) : Float {
|
||||
return pref.getFloat(key, defVal)
|
||||
}
|
||||
|
||||
operator fun invoke(context : Context) : Float {
|
||||
return pref(context).getFloat(key, defVal)
|
||||
}
|
||||
|
||||
override fun put(editor : SharedPreferences.Editor, v : Float) {
|
||||
editor.putFloat(key, v)
|
||||
}
|
||||
}
|
||||
|
||||
class StringPref(
|
||||
key : String,
|
||||
private val defVal : String,
|
||||
val skipImport : Boolean = false
|
||||
) : BasePref<String>(key) {
|
||||
|
||||
operator fun invoke(pref : SharedPreferences) : String {
|
||||
return pref.getString(key, defVal)
|
||||
}
|
||||
|
||||
operator fun invoke(context : Context) : String {
|
||||
return pref(context).getString(key, defVal)
|
||||
}
|
||||
|
||||
override fun put(editor : SharedPreferences.Editor, v : String) {
|
||||
editor.putString(key, v)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// インポート時に使う。キー名に対応した設定項目を返す
|
||||
val map = HashMap<String, BasePref<*>>()
|
||||
|
||||
private fun <T : BasePref<*>> register(item : T) : T {
|
||||
map.put(item.key, item)
|
||||
return item
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// boolean
|
||||
|
||||
val bpAllowNonSpaceBeforeEmojiShortcode = register(BooleanPref("allow_non_space_before_emoji_shortcode", false, R.id.swAllowNonSpaceBeforeEmojiShortcode))
|
||||
val bpDisableEmojiAnimation = register(BooleanPref("disable_emoji_animation", false, R.id.swDisableEmojiAnimation))
|
||||
val bpDisableFastScroller = register(BooleanPref("disable_fast_scroller", true, R.id.swDisableFastScroller))
|
||||
val bpDisableTabletMode = register(BooleanPref("disable_tablet_mode", false, R.id.swDisableTabletMode))
|
||||
val bpDontConfirmBeforeCloseColumn = register(BooleanPref("DontConfirmBeforeCloseColumn", false, R.id.swDontConfirmBeforeCloseColumn))
|
||||
val bpDontCropMediaThumb = register(BooleanPref("DontCropMediaThumb", false, R.id.swDontCropMediaThumb))
|
||||
val bpDontDuplicationCheck = register(BooleanPref("dont_duplication_check", false, R.id.swDontDuplicationCheck))
|
||||
val bpDontRefreshOnResume = register(BooleanPref("dont_refresh_on_resume", false, R.id.swDontRefreshOnResume))
|
||||
val bpDontRound = register(BooleanPref("dont_round", false, R.id.swDontRound))
|
||||
val bpDontScreenOff = register(BooleanPref("dont_screen_off", false, R.id.swDontScreenOff))
|
||||
val bpDontUseActionButtonWithQuickTootBar = register(BooleanPref("dont_use_action_button", false, R.id.swDontUseActionButtonWithQuickTootBar))
|
||||
val bpDontUseStreaming = register(BooleanPref("dont_use_streaming", false, R.id.swDontUseStreaming))
|
||||
val bpEnableGifAnimation = register(BooleanPref("enable_gif_animation", false, R.id.swEnableGifAnimation))
|
||||
val bpExitAppWhenCloseProtectedColumn = register(BooleanPref("ExitAppWhenCloseProtectedColumn", false, R.id.swExitAppWhenCloseProtectedColumn))
|
||||
val bpMentionFullAcct = register(BooleanPref("mention_full_acct", false, R.id.swMentionFullAcct))
|
||||
val bpPostButtonBarTop = register(BooleanPref("post_button_bar_at_top", false, R.id.swPostButtonBarTop))
|
||||
val bpPriorChrome = register(BooleanPref("prior_chrome", true, R.id.swPriorChrome))
|
||||
val bpPriorLocalURL = register(BooleanPref("prior_local_url", false, R.id.swPriorLocalURL))
|
||||
val bpQuickTootBar = register(BooleanPref("quick_toot_bar", false, R.id.swQuickTootBar))
|
||||
val bpRelativeTimestamp = register(BooleanPref("relative_timestamp", true, R.id.swRelativeTimestamp))
|
||||
val bpShortAcctLocalUser = register(BooleanPref("short_acct_local_user", true, R.id.swShortAcctLocalUser))
|
||||
val bpShowFollowButtonInButtonBar = register(BooleanPref("ShowFollowButtonInButtonBar", false, R.id.swShowFollowButtonInButtonBar))
|
||||
val bpSimpleList = register(BooleanPref("simple_list", true, R.id.swSimpleList))
|
||||
val bpUseInternalMediaViewer = register(BooleanPref("use_internal_media_viewer", true, R.id.swUseInternalMediaViewer))
|
||||
val bpShowAppName = register(BooleanPref("show_app_name", false, R.id.swShowAppName))
|
||||
val bpNotificationSound = register(BooleanPref("notification_sound", true, R.id.cbNotificationSound))
|
||||
val bpNotificationVibration = register(BooleanPref("notification_vibration", true, R.id.cbNotificationVibration))
|
||||
val bpNotificationLED = register(BooleanPref("notification_led", true, R.id.cbNotificationLED))
|
||||
|
||||
// int
|
||||
|
||||
val ipBackButtonAction = register(IntPref("back_button_action", 0))
|
||||
val ipUiTheme = register(IntPref("ui_theme", 0))
|
||||
val ipResizeImage = register(IntPref("resize_image", 4))
|
||||
|
||||
val ipRefreshAfterToot = register(IntPref("refresh_after_toot", 0))
|
||||
|
||||
val ipFooterButtonBgColor = register(IntPref("footer_button_bg_color", 0))
|
||||
val ipFooterButtonFgColor = register(IntPref("footer_button_fg_color", 0))
|
||||
val ipFooterTabBgColor = register(IntPref("footer_tab_bg_color", 0))
|
||||
val ipFooterTabDividerColor = register(IntPref("footer_tab_divider_color", 0))
|
||||
val ipFooterTabIndicatorColor = register(IntPref("footer_tab_indicator_color", 0))
|
||||
val ipLastColumnPos = register(IntPref("last_column_pos", - 1))
|
||||
|
||||
// ipRefreshAfterToot の値
|
||||
const val RAT_REFRESH_SCROLL = 0
|
||||
const val RAT_REFRESH_DONT_SCROLL = 1
|
||||
const val RAT_DONT_REFRESH = 2
|
||||
|
||||
const val KEY_DONT_CONFIRM_BEFORE_CLOSE_COLUMN = "DontConfirmBeforeCloseColumn"
|
||||
// string
|
||||
|
||||
const val KEY_BACK_BUTTON_ACTION = "back_button_action"
|
||||
const val KEY_PRIOR_LOCAL_URL = "prior_local_url"
|
||||
const val KEY_DISABLE_FAST_SCROLLER = "disable_fast_scroller"
|
||||
const val KEY_UI_THEME = "ui_theme"
|
||||
const val KEY_SIMPLE_LIST = "simple_list"
|
||||
const val KEY_NOTIFICATION_SOUND = "notification_sound"
|
||||
const val KEY_NOTIFICATION_VIBRATION = "notification_vibration"
|
||||
const val KEY_NOTIFICATION_LED = "notification_led"
|
||||
const val KEY_EXIT_APP_WHEN_CLOSE_PROTECTED_COLUMN = "ExitAppWhenCloseProtectedColumn"
|
||||
const val KEY_RESIZE_IMAGE = "resize_image"
|
||||
const val KEY_SHOW_FOLLOW_BUTTON_IN_BUTTON_BAR = "ShowFollowButtonInButtonBar"
|
||||
const val KEY_REFRESH_AFTER_TOOT = "refresh_after_toot"
|
||||
const val KEY_DONT_ROUND = "dont_round"
|
||||
val spColumnWidth = register(StringPref("ColumnWidth", ""))
|
||||
val spMediaThumbHeight = register(StringPref("MediaThumbHeight", ""))
|
||||
val spClientName = register(StringPref("client_name", ""))
|
||||
val spQuoteNameFormat = register(StringPref("quote_name_format", ""))
|
||||
val spAutoCWLines = register(StringPref("auto_cw_lines", "0"))
|
||||
val spAvatarIconSize = register(StringPref("avatar_icon_size", "48"))
|
||||
val spMediaSizeMax = register(StringPref("max_media_size", "8"))
|
||||
val spTimelineFont = register(StringPref("timeline_font", "", skipImport = true))
|
||||
val spTimelineFontBold = register(StringPref("timeline_font_bold", "", skipImport = true))
|
||||
val spStreamListenerSecret = register(StringPref("stream_listener_secret", ""))
|
||||
val spStreamListenerConfigUrl = register(StringPref("stream_listener_config_url", ""))
|
||||
val spStreamListenerConfigData = register(StringPref("stream_listener_config_data", ""))
|
||||
val spMspUserToken = register(StringPref("mastodon_search_portal_user_token", ""))
|
||||
val spEmojiPickerRecent = register(StringPref("emoji_picker_recent", ""))
|
||||
|
||||
const val KEY_FOOTER_BUTTON_BG_COLOR = "footer_button_bg_color"
|
||||
const val KEY_FOOTER_BUTTON_FG_COLOR = "footer_button_fg_color"
|
||||
const val KEY_FOOTER_TAB_BG_COLOR = "footer_tab_bg_color"
|
||||
const val KEY_FOOTER_TAB_DIVIDER_COLOR = "footer_tab_divider_color"
|
||||
const val KEY_FOOTER_TAB_INDICATOR_COLOR = "footer_tab_indicator_color"
|
||||
// long
|
||||
|
||||
const val KEY_DONT_USE_STREAMING = "dont_use_streaming"
|
||||
const val KEY_DONT_REFRESH_ON_RESUME = "dont_refresh_on_resume"
|
||||
const val KEY_DONT_SCREEN_OFF = "dont_screen_off"
|
||||
const val KEY_DISABLE_TABLET_MODE = "disable_tablet_mode"
|
||||
val lpTabletTootDefaultAccount = register(LongPref("tablet_toot_default_account", - 1L))
|
||||
|
||||
const val KEY_COLUMN_WIDTH = "ColumnWidth"
|
||||
const val KEY_MEDIA_THUMB_HEIGHT = "MediaThumbHeight"
|
||||
const val KEY_TIMELINE_FONT = "timeline_font"
|
||||
const val KEY_TIMELINE_FONT_BOLD = "timeline_font_bold"
|
||||
// float
|
||||
|
||||
const val KEY_DONT_CROP_MEDIA_THUMBNAIL = "DontCropMediaThumb"
|
||||
|
||||
const val KEY_STREAM_LISTENER_SECRET = "stream_listener_secret"
|
||||
const val KEY_STREAM_LISTENER_CONFIG_URL = "stream_listener_config_url"
|
||||
const val KEY_STREAM_LISTENER_CONFIG_DATA = "stream_listener_config_data"
|
||||
const val KEY_TABLET_TOOT_DEFAULT_ACCOUNT = "tablet_toot_default_account"
|
||||
|
||||
const val KEY_PRIOR_CHROME = "prior_chrome"
|
||||
|
||||
internal const val KEY_POST_BUTTON_BAR_AT_TOP = "post_button_bar_at_top"
|
||||
|
||||
const val KEY_CLIENT_NAME = "client_name"
|
||||
|
||||
const val KEY_MASTODON_SEARCH_PORTAL_USER_TOKEN = "mastodon_search_portal_user_token"
|
||||
|
||||
const val KEY_LAST_COLUMN_POS = "last_column_pos"
|
||||
|
||||
const val KEY_TIMELINE_FONT_SIZE = "timeline_font_size"
|
||||
const val KEY_ACCT_FONT_SIZE = "acct_font_size"
|
||||
|
||||
const val KEY_DONT_DUPLICATION_CHECK = "dont_duplication_check"
|
||||
const val KEY_QUICK_TOOT_BAR = "quick_toot_bar"
|
||||
|
||||
const val KEY_QUOTE_NAME_FORMAT = "quote_name_format"
|
||||
|
||||
const val KEY_ENABLE_GIF_ANIMATION = "enable_gif_animation"
|
||||
|
||||
const val KEY_MENTION_FULL_ACCT = "mention_full_acct"
|
||||
|
||||
const val KEY_RELATIVE_TIMESTAMP = "relative_timestamp"
|
||||
|
||||
const val KEY_DONT_USE_ACTION_BUTTON = "dont_use_action_button"
|
||||
|
||||
const val KEY_AUTO_CW_LINES = "auto_cw_lines"
|
||||
|
||||
const val KEY_SHORT_ACCT_LOCAL_USER = "short_acct_local_user"
|
||||
|
||||
const val KEY_AVATAR_ICON_SIZE = "avatar_icon_size"
|
||||
|
||||
const val KEY_EMOJI_PICKER_RECENT = "emoji_picker_recent"
|
||||
|
||||
const val KEY_DISABLE_EMOJI_ANIMATION = "disable_emoji_animation"
|
||||
|
||||
const val KEY_ALLOW_NON_SPACE_BEFORE_EMOJI_SHORTCODE = "allow_non_space_before_emoji_shortcode"
|
||||
|
||||
const val KEY_MEDIA_SIZE_MAX = "max_media_size"
|
||||
|
||||
const val KEY_USE_INTERNAL_MEDIA_VIEWER = "use_internal_media_viewer"
|
||||
|
||||
// 項目を追加したらAppDataExporter#importPref のswitch文も更新すること
|
||||
val fpTimelineFontSize = register(FloatPref("timeline_font_size", Float.NaN))
|
||||
val fpAcctFontSize = register(FloatPref("acct_font_size", Float.NaN))
|
||||
|
||||
}
|
||||
|
||||
fun <T> SharedPreferences.Editor.put(item : Pref.BasePref<T>, v : T) : SharedPreferences.Editor {
|
||||
item.put(this, v)
|
||||
return this
|
||||
}
|
||||
|
||||
fun SharedPreferences.Editor.remove(item : Pref.BasePref<*>) : SharedPreferences.Editor {
|
||||
item.remove(this)
|
||||
return this
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ internal class StatusButtons(
|
|||
|
||||
val account = status.account
|
||||
|
||||
this.relation = if( ! activity.pref.getBoolean(Pref.KEY_SHOW_FOLLOW_BUTTON_IN_BUTTON_BAR, false)) {
|
||||
this.relation = if( ! Pref.bpShowFollowButtonInButtonBar(activity.pref)) {
|
||||
llFollow2.visibility = View.GONE
|
||||
null
|
||||
} else {
|
||||
|
|
|
@ -39,7 +39,7 @@ object Action_Account {
|
|||
return if(bPseudoAccount || bInputAccessToken) {
|
||||
client.getInstanceInformation()
|
||||
} else {
|
||||
val client_name = Pref.pref(activity).getString(Pref.KEY_CLIENT_NAME, "")
|
||||
val client_name = Pref.spClientName(activity)
|
||||
client.authentication1(client_name)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import jp.juggler.subwaytooter.Pref
|
|||
import jp.juggler.subwaytooter.table.ClientInfo
|
||||
import jp.juggler.subwaytooter.table.SavedAccount
|
||||
import jp.juggler.subwaytooter.R
|
||||
import jp.juggler.subwaytooter.put
|
||||
import jp.juggler.subwaytooter.util.*
|
||||
import okhttp3.*
|
||||
import org.json.JSONArray
|
||||
|
@ -558,7 +559,7 @@ class TootApiClient(
|
|||
fun searchMsp(query : String, max_id : String) : TootApiResult? {
|
||||
|
||||
// ユーザトークンを読む
|
||||
var user_token = pref.getString(Pref.KEY_MASTODON_SEARCH_PORTAL_USER_TOKEN, null)
|
||||
var user_token :String? = Pref.spMspUserToken(pref)
|
||||
|
||||
for(nTry in 0 until 3) {
|
||||
if(callback.isApiCancelled) return null
|
||||
|
@ -590,9 +591,10 @@ class TootApiClient(
|
|||
user_token = jsonObject.optJSONObject("result")?.optString("token")
|
||||
if(user_token?.isEmpty() != false) {
|
||||
return result.setError("Can't get MSP user token. response=${result.bodyString}")
|
||||
}else{
|
||||
pref.edit().put( Pref.spMspUserToken,user_token).apply()
|
||||
}
|
||||
|
||||
pref.edit().putString(Pref.KEY_MASTODON_SEARCH_PORTAL_USER_TOKEN, user_token).apply()
|
||||
}
|
||||
|
||||
// ユーザトークンを使って検索APIを呼び出す
|
||||
|
|
|
@ -57,7 +57,7 @@ class TootAttachment(src : JSONObject) : TootAttachmentLike {
|
|||
}
|
||||
|
||||
fun getLargeUrl(pref : SharedPreferences) : String? {
|
||||
return if( pref.getBoolean(Pref.KEY_PRIOR_LOCAL_URL, false) ){
|
||||
return if( Pref.bpPriorLocalURL(pref) ){
|
||||
if( url?.isNotEmpty() ==true) url else remote_url
|
||||
} else {
|
||||
if( remote_url?.isNotEmpty() == true ) remote_url else url
|
||||
|
@ -65,7 +65,7 @@ class TootAttachment(src : JSONObject) : TootAttachmentLike {
|
|||
}
|
||||
fun getLargeUrlList(pref : SharedPreferences) : ArrayList<String> {
|
||||
val result = ArrayList<String>()
|
||||
if( pref.getBoolean(Pref.KEY_PRIOR_LOCAL_URL, false) ){
|
||||
if( Pref.bpPriorLocalURL(pref) ){
|
||||
if( url?.isNotEmpty() ==true) result.add(url)
|
||||
if( remote_url?.isNotEmpty()==true) result.add( remote_url)
|
||||
} else {
|
||||
|
|
|
@ -474,7 +474,7 @@ class TootStatus(parser : TootParser, src : JSONObject, serviceType : ServiceTyp
|
|||
private val date_format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
|
||||
|
||||
fun formatTime(context : Context, t : Long, bAllowRelative : Boolean) : String {
|
||||
if(bAllowRelative && App1.pref.getBoolean(Pref.KEY_RELATIVE_TIMESTAMP, false)) {
|
||||
if(bAllowRelative && Pref.bpRelativeTimestamp(App1.pref)) {
|
||||
val now = System.currentTimeMillis()
|
||||
var delta = now - t
|
||||
val sign = context.getString(if(delta > 0) R.string.ago else R.string.later)
|
||||
|
|
|
@ -25,6 +25,7 @@ import jp.juggler.subwaytooter.App1
|
|||
import jp.juggler.subwaytooter.Pref
|
||||
import jp.juggler.subwaytooter.R
|
||||
import jp.juggler.subwaytooter.api.entity.CustomEmoji
|
||||
import jp.juggler.subwaytooter.put
|
||||
import jp.juggler.subwaytooter.util.*
|
||||
import jp.juggler.subwaytooter.view.NetworkEmojiView
|
||||
|
||||
|
@ -92,8 +93,8 @@ class EmojiPicker(
|
|||
|
||||
// recentをロードする
|
||||
val pref = App1.pref
|
||||
val sv = pref.getString(Pref.KEY_EMOJI_PICKER_RECENT, null)
|
||||
if( sv != null && sv.isNotEmpty() ) {
|
||||
val sv = Pref.spEmojiPickerRecent(pref)
|
||||
if( sv.isNotEmpty() ) {
|
||||
try {
|
||||
val array = JSONArray(sv)
|
||||
for( i in 0 until array.length() ){
|
||||
|
@ -353,8 +354,8 @@ class EmojiPicker(
|
|||
// Recentをロード(他インスタンスの絵文字を含む)
|
||||
val pref = App1.pref
|
||||
val list = ArrayList<JSONObject>()
|
||||
val sv = pref.getString(Pref.KEY_EMOJI_PICKER_RECENT, null)
|
||||
if( sv != null && sv.isNotEmpty() ) {
|
||||
val sv = Pref.spEmojiPickerRecent(pref)
|
||||
if( sv.isNotEmpty() ) {
|
||||
try {
|
||||
val array = JSONArray(sv)
|
||||
var i = 0
|
||||
|
@ -401,7 +402,7 @@ class EmojiPicker(
|
|||
for(item in list) {
|
||||
array.put(item)
|
||||
}
|
||||
App1.pref.edit().putString(Pref.KEY_EMOJI_PICKER_RECENT, array.toString()).apply()
|
||||
App1.pref.edit().put(Pref.spEmojiPickerRecent, array.toString()).apply()
|
||||
} catch(ignored : Throwable) {
|
||||
|
||||
}
|
||||
|
|
|
@ -363,7 +363,7 @@ object HTMLDecoder {
|
|||
bShort : Boolean, context : Context, display_url : String, href : String?, list_attachment :ArrayList<TootAttachmentLike>?
|
||||
) : CharSequence {
|
||||
if(! display_url.startsWith("http")) {
|
||||
if(display_url.startsWith("@") && href != null && App1.pref.getBoolean(Pref.KEY_MENTION_FULL_ACCT, false)) {
|
||||
if(display_url.startsWith("@") && href != null && Pref.bpMentionFullAcct(App1.pref)) {
|
||||
// メンションをfull acct にする
|
||||
val m = TootAccount.reAccountUrl.matcher(href)
|
||||
if(m.find()) {
|
||||
|
@ -452,7 +452,7 @@ object HTMLDecoder {
|
|||
if(sb.isNotEmpty()) sb.append(" ")
|
||||
val start = sb.length
|
||||
sb.append('@')
|
||||
if(App1.pref.getBoolean(Pref.KEY_MENTION_FULL_ACCT, false)) {
|
||||
if( Pref.bpMentionFullAcct(App1.pref)) {
|
||||
sb.append(access_info.getFullAcct(item.acct))
|
||||
} else {
|
||||
sb.append(item.acct)
|
||||
|
|
|
@ -277,7 +277,7 @@ class PostHelper(
|
|||
.post(request_body)
|
||||
val digest = Utils.digestSHA256(body_string + account.acct)
|
||||
|
||||
if(digest != null && ! pref.getBoolean(Pref.KEY_DONT_DUPLICATION_CHECK, false)) {
|
||||
if(digest != null && ! Pref.bpDontDuplicationCheck(pref) ) {
|
||||
request_builder.header("Idempotency-Key", digest)
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@ class MyNetworkImageView @JvmOverloads constructor(
|
|||
) : AppCompatImageView(context, attrs, defStyle) {
|
||||
|
||||
|
||||
|
||||
companion object {
|
||||
|
||||
internal val log = LogCategory("MyNetworkImageView")
|
||||
|
@ -92,9 +91,9 @@ class MyNetworkImageView @JvmOverloads constructor(
|
|||
}
|
||||
|
||||
|
||||
mCornerRadius = if(pref.getBoolean(Pref.KEY_DONT_ROUND, false)) 0f else r
|
||||
mCornerRadius = if(Pref.bpDontRound(pref)) 0f else r
|
||||
|
||||
val gif_url = if(! pref.getBoolean(Pref.KEY_ENABLE_GIF_ANIMATION, false)) null else gifUrlArg
|
||||
val gif_url = if(Pref.bpEnableGifAnimation(pref)) gifUrlArg else null
|
||||
|
||||
if(gif_url != null && gif_url.isNotEmpty()) {
|
||||
mUrl = gif_url
|
||||
|
|
|
@ -712,6 +712,23 @@
|
|||
|
||||
<View style="@style/setting_divider"/>
|
||||
|
||||
<TextView
|
||||
style="@style/setting_row_label"
|
||||
android:text="@string/always_show_application"
|
||||
/>
|
||||
|
||||
<LinearLayout style="@style/setting_row_form">
|
||||
|
||||
<Switch
|
||||
android:id="@+id/swShowAppName"
|
||||
style="@style/setting_horizontal_stretch"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View style="@style/setting_divider"/>
|
||||
|
||||
|
||||
<TextView
|
||||
style="@style/setting_row_label"
|
||||
|
|
|
@ -599,6 +599,7 @@
|
|||
<string name="keyword">Keyword</string>
|
||||
<string name="domain_block_from_pseudo">Can\'t use domain block from pseudo account.</string>
|
||||
<string name="domain_block_from_local">Can\'t use domain block for local instance.</string>
|
||||
<string name="always_show_application">Show (via) application name if possible</string>
|
||||
|
||||
<!--<string name="abc_action_bar_home_description">Revenir à l\'accueil</string>-->
|
||||
<!--<string name="abc_action_bar_home_description_format">%1$s, %2$s</string>-->
|
||||
|
|
|
@ -883,5 +883,6 @@
|
|||
<string name="keyword">キーワード</string>
|
||||
<string name="domain_block_from_pseudo">疑似アカウントではドメインブロックできません</string>
|
||||
<string name="domain_block_from_local">自分のタンスにはドメインブロックできません</string>
|
||||
<string name="always_show_application">アプリ名(via)を可能なら表示する</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -588,5 +588,6 @@
|
|||
<string name="keyword">Keyword</string>
|
||||
<string name="domain_block_from_pseudo">Can\'t use domain block from pseudo account.</string>
|
||||
<string name="domain_block_from_local">Can\'t use domain block for local instance.</string>
|
||||
<string name="always_show_application">Show (via) application name if possible</string>
|
||||
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue