Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ import com.kazumaproject.core.data.floating_candidate.CandidateItem
import com.kazumaproject.core.data.popup.FlickPopupViewStyleSet
import com.kazumaproject.core.data.popup.PopupViewStyle
import com.kazumaproject.core.data.popup.QwertyPopupViewStyleSet
import com.kazumaproject.core.data.popup.TfbiPopupPresentationMode
import com.kazumaproject.core.domain.extensions.dpToPx
import com.kazumaproject.core.domain.extensions.getThemeColorOrFallback
import com.kazumaproject.core.domain.extensions.hiraganaToKatakana
Expand Down Expand Up @@ -794,7 +795,9 @@ class IMEService : InputMethodService(), LifecycleOwner, InputConnection,
AppPreference.VIBRATION_KEY,
AppPreference.VIBRATION_TIMING_KEY,
AppPreference.KEY_SOUND_KEY,
AppPreference.KEY_SOUND_VOLUME_PERCENT_KEY
AppPreference.KEY_SOUND_VOLUME_PERCENT_KEY,
AppPreference.FLICK_TFBI_POPUP_PRESENTATION_KEY,
AppPreference.FLICK_TFBI_FLICK_START_POSITION_KEY
)
private val runtimeInputPreferenceListener =
SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
Expand Down Expand Up @@ -2454,6 +2457,8 @@ class IMEService : InputMethodService(), LifecycleOwner, InputConnection,
)
val longPressTimeout =
(appPreference.long_press_timeout_preference ?: 300).coerceIn(100, 2000)
val tfbiPopupPresentationMode = appPreference.flick_tfbi_popup_presentation
val tfbiFlickStartPositionMode = appPreference.flick_tfbi_flick_start_position

flickSensitivityPreferenceValue = sensitivity
flickThresholdShapePreferenceValue = thresholdShape
Expand Down Expand Up @@ -2501,6 +2506,8 @@ class IMEService : InputMethodService(), LifecycleOwner, InputConnection,
qwertyView.setFlickThresholdShape(thresholdShape)
qwertyView.setLongPressTimeout(longPressTimeout.toLong())
applyCurrentFlickGuidePreference(customLayoutDefault)
customLayoutDefault.setTfbiPopupPresentationMode(tfbiPopupPresentationMode)
customLayoutDefault.setTfbiFlickStartPositionMode(tfbiFlickStartPositionMode)
}
floatingKeyboardBinding?.apply {
keyboardViewFloating.setFlickSensitivityValue(sensitivity)
Expand All @@ -2515,6 +2522,8 @@ class IMEService : InputMethodService(), LifecycleOwner, InputConnection,
qwertyViewFloating.setFlickThresholdShape(thresholdShape)
qwertyViewFloating.setLongPressTimeout(longPressTimeout.toLong())
applyCurrentFlickGuidePreference(customLayoutFloating)
customLayoutFloating.setTfbiPopupPresentationMode(tfbiPopupPresentationMode)
customLayoutFloating.setTfbiFlickStartPositionMode(tfbiFlickStartPositionMode)
}
}

Expand Down Expand Up @@ -11374,6 +11383,10 @@ class IMEService : InputMethodService(), LifecycleOwner, InputConnection,
) {
flickView.setOnFlickTextPreviewListener(sumireFlickTextPreviewListener)
flickView.bindRuntimeGestureSettings(runtimeGestureSettingsSource)
val tfbiPopupPresentationMode = appPreference.flick_tfbi_popup_presentation
val tfbiFlickStartPositionMode = appPreference.flick_tfbi_flick_start_position
flickView.setTfbiPopupPresentationMode(tfbiPopupPresentationMode)
flickView.setTfbiFlickStartPositionMode(tfbiFlickStartPositionMode)
if (isFloatingView) {
Timber.d("Configuring floating FlickKeyboardView mirror surface")
// Floating ON のときだけ、popup の window anchor を IME decorView (or floating root)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.kazumaproject.core.data.clicked_symbol.SymbolMode
import com.kazumaproject.core.domain.flick.FlickThresholdShape
import com.kazumaproject.core.data.popup.TfbiFlickStartPositionMode
import com.kazumaproject.core.data.popup.TfbiPopupPresentationMode
import com.kazumaproject.custom_keyboard.data.CircularFlickDirection
import com.kazumaproject.custom_keyboard.data.KeyboardInputMode
import com.kazumaproject.custom_keyboard.data.buildEvenCircularRanges
Expand Down Expand Up @@ -67,6 +69,9 @@ object AppPreference {
"gemma_handwriting_pen_color_preference"
const val FLICK_SENSITIVITY_KEY = "flick_sensitivity_preference"
const val FLICK_THRESHOLD_SHAPE_KEY = "flick_threshold_shape_preference"
const val FLICK_TFBI_POPUP_PRESENTATION_KEY = "flick_tfbi_popup_presentation_preference"
const val FLICK_TFBI_FLICK_START_POSITION_KEY =
"flick_tfbi_flick_start_position_preference"
const val FLICK_EDITOR_PREVIEW_KEY = "flick_editor_preview_preference"
const val TENKEY_KEYMAP_GUIDE_JAPANESE_KEY = "tenkey_keymap_guide"
const val TENKEY_KEYMAP_GUIDE_ENGLISH_KEY = "tenkey_keymap_guide_english"
Expand Down Expand Up @@ -524,6 +529,13 @@ object AppPreference {
Pair("flick_tfbi_popup_size_scale_percent_preference", 100)
private val FLICK_TFBI_POPUP_TEXT_SIZE_SP =
Pair("flick_tfbi_popup_text_size_sp_preference", 20.0f)
private val FLICK_TFBI_POPUP_PRESENTATION =
Pair(FLICK_TFBI_POPUP_PRESENTATION_KEY, TfbiPopupPresentationMode.LEGACY_GRID.preferenceValue)
private val FLICK_TFBI_FLICK_START_POSITION =
Pair(
FLICK_TFBI_FLICK_START_POSITION_KEY,
TfbiFlickStartPositionMode.TOUCH_POINT.preferenceValue
)

private val CANDIDATE_LETTER_SIZE = Pair("candidate_letter_size_preference", 14.0f)

Expand Down Expand Up @@ -3080,6 +3092,28 @@ object AppPreference {
)
}

var flick_tfbi_popup_presentation: TfbiPopupPresentationMode
get() = TfbiPopupPresentationMode.fromPreference(
preferences.getString(
FLICK_TFBI_POPUP_PRESENTATION.first,
FLICK_TFBI_POPUP_PRESENTATION.second
)
)
set(value) = preferences.edit {
it.putString(FLICK_TFBI_POPUP_PRESENTATION.first, value.preferenceValue)
}

var flick_tfbi_flick_start_position: TfbiFlickStartPositionMode
get() = TfbiFlickStartPositionMode.fromPreference(
preferences.getString(
FLICK_TFBI_FLICK_START_POSITION.first,
FLICK_TFBI_FLICK_START_POSITION.second
)
)
set(value) = preferences.edit {
it.putString(FLICK_TFBI_FLICK_START_POSITION.first, value.preferenceValue)
}

var clipboard_preview_preference: Boolean
get() = preferences.getBoolean(
CLIP_BOARD_PREVIEW_PREFERENCE.first,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.LinearLayout
import android.widget.RadioButton
import android.widget.RadioGroup
import android.widget.ScrollView
import android.widget.SeekBar
import android.widget.TextView
Expand All @@ -19,6 +21,8 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.navigation.fragment.findNavController
import com.kazumaproject.core.data.popup.PopupViewStyle
import com.kazumaproject.core.data.popup.TfbiFlickStartPositionMode
import com.kazumaproject.core.data.popup.TfbiPopupPresentationMode
import com.kazumaproject.markdownhelperkeyboard.R
import com.kazumaproject.markdownhelperkeyboard.setting_activity.AppPreference

Expand Down Expand Up @@ -385,6 +389,72 @@ private fun Fragment.styleEditorSection(
ViewGroup.LayoutParams.WRAP_CONTENT
)
root.addView(preview)
if (flickTarget == FlickTarget.TFBI && preview is FlickPopupStylePreviewView) {
preview.setTfbiGuideBackgroundColor(
AppPreference.key_popup_background_color.takeIf {
AppPreference.key_popup_use_custom_color
}
)
root.addView(sectionTitle(getString(R.string.tfbi_popup_presentation_title)))
val modeGroup = RadioGroup(context).apply {
orientation = RadioGroup.VERTICAL
}
val legacyId = View.generateViewId()
val guideId = View.generateViewId()
modeGroup.addView(RadioButton(context).apply {
id = legacyId
text = getString(R.string.tfbi_popup_presentation_legacy)
})
modeGroup.addView(RadioButton(context).apply {
id = guideId
text = getString(R.string.tfbi_popup_presentation_guide)
})
val initialMode = AppPreference.flick_tfbi_popup_presentation
modeGroup.check(if (initialMode == TfbiPopupPresentationMode.GUIDE_ABOVE_KEY) guideId else legacyId)
modeGroup.setOnCheckedChangeListener { _, checkedId ->
val mode = if (checkedId == guideId) {
TfbiPopupPresentationMode.GUIDE_ABOVE_KEY
} else {
TfbiPopupPresentationMode.LEGACY_GRID
}
AppPreference.flick_tfbi_popup_presentation = mode
preview.setTfbiPopupPresentationMode(mode)
}
preview.setTfbiPopupPresentationMode(initialMode)
root.addView(modeGroup)

root.addView(sectionTitle(getString(R.string.tfbi_flick_start_position_title)))
val startPositionGroup = RadioGroup(context).apply {
orientation = RadioGroup.VERTICAL
}
val touchPointId = View.generateViewId()
val keyCenterId = View.generateViewId()
startPositionGroup.addView(RadioButton(context).apply {
id = touchPointId
text = getString(R.string.tfbi_flick_start_position_touch_point)
})
startPositionGroup.addView(RadioButton(context).apply {
id = keyCenterId
text = getString(R.string.tfbi_flick_start_position_key_center)
})
val initialStartPosition = AppPreference.flick_tfbi_flick_start_position
startPositionGroup.check(
if (initialStartPosition == TfbiFlickStartPositionMode.KEY_CENTER) {
keyCenterId
} else {
touchPointId
}
)
startPositionGroup.setOnCheckedChangeListener { _, checkedId ->
AppPreference.flick_tfbi_flick_start_position =
if (checkedId == keyCenterId) {
TfbiFlickStartPositionMode.KEY_CENTER
} else {
TfbiFlickStartPositionMode.TOUCH_POINT
}
}
root.addView(startPositionGroup)
}
root.addView(sizeLabel.first)
root.addView(sizeSeek)
root.addView(textLabel.first)
Expand Down
Loading
Loading