That fuck shit the fascists are using
1package org.tm.archive.scribbles
2
3import android.animation.Animator
4import android.animation.ObjectAnimator
5import android.content.DialogInterface
6import android.graphics.Color
7import android.os.Bundle
8import android.view.View
9import android.view.ViewGroup
10import android.widget.ImageView
11import androidx.appcompat.content.res.AppCompatResources
12import androidx.appcompat.widget.AppCompatSeekBar
13import androidx.fragment.app.FragmentManager
14import com.airbnb.lottie.SimpleColorFilter
15import org.signal.core.util.getParcelableCompat
16import org.signal.imageeditor.core.HiddenEditText
17import org.signal.imageeditor.core.model.EditorElement
18import org.signal.imageeditor.core.renderers.MultiLineTextRenderer
19import org.tm.archive.R
20import org.tm.archive.components.KeyboardEntryDialogFragment
21import org.tm.archive.scribbles.HSVColorSlider.getColor
22import org.tm.archive.scribbles.HSVColorSlider.setUpForColor
23import org.tm.archive.util.ViewUtil
24import org.tm.archive.util.fragments.requireListener
25
26class TextEntryDialogFragment : KeyboardEntryDialogFragment(R.layout.v2_media_image_editor_text_entry_fragment) {
27
28 private lateinit var hiddenTextEntry: HiddenEditText
29 private lateinit var controller: Controller
30
31 private var colorIndicatorAlphaAnimator: Animator? = null
32
33 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
34 controller = requireListener()
35
36 hiddenTextEntry = HiddenEditText(requireContext())
37 if (!ImageEditorFragment.CAN_RENDER_EMOJI) {
38 hiddenTextEntry.addTextFilter(RemoveEmojiTextFilter())
39 }
40 (view as ViewGroup).addView(hiddenTextEntry)
41
42 view.setOnClickListener {
43 dismissAllowingStateLoss()
44 }
45
46 val element: EditorElement = requireNotNull(requireArguments().getParcelableCompat("element", EditorElement::class.java))
47 val incognito = requireArguments().getBoolean("incognito")
48 val selectAll = requireArguments().getBoolean("selectAll")
49
50 hiddenTextEntry.setCurrentTextEditorElement(element)
51 hiddenTextEntry.setIncognitoKeyboardEnabled(incognito)
52
53 if (selectAll) {
54 hiddenTextEntry.selectAll()
55 }
56
57 hiddenTextEntry.setOnEditOrSelectionChange { editorElement, textRenderer ->
58 controller.zoomToFitText(editorElement, textRenderer)
59 }
60
61 hiddenTextEntry.setOnEndEdit {
62 dismissAllowingStateLoss()
63 }
64
65 ViewUtil.focusAndShowKeyboard(hiddenTextEntry)
66
67 val slider: AppCompatSeekBar = view.findViewById(R.id.image_editor_hud_draw_color_bar)
68 val colorIndicator: ImageView = view.findViewById(R.id.image_editor_hud_color_indicator)
69 val styleToggle: ImageView = view.findViewById(R.id.image_editor_hud_text_style_button)
70
71 colorIndicator.background = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_color_preview)
72
73 slider.setUpForColor(
74 Color.WHITE,
75 {
76 colorIndicator.drawable.colorFilter = SimpleColorFilter(slider.getColor())
77 colorIndicator.translationX = (slider.thumb.bounds.left.toFloat() + ViewUtil.dpToPx(16))
78 controller.onTextColorChange(slider.progress)
79 },
80 {
81 colorIndicatorAlphaAnimator?.end()
82 colorIndicatorAlphaAnimator = ObjectAnimator.ofFloat(colorIndicator, "alpha", colorIndicator.alpha, 1f)
83 colorIndicatorAlphaAnimator?.duration = 150L
84 colorIndicatorAlphaAnimator?.start()
85 },
86 {
87 colorIndicatorAlphaAnimator?.end()
88 colorIndicatorAlphaAnimator = ObjectAnimator.ofFloat(colorIndicator, "alpha", colorIndicator.alpha, 0f)
89 colorIndicatorAlphaAnimator?.duration = 150L
90 colorIndicatorAlphaAnimator?.start()
91 }
92 )
93
94 slider.progress = requireArguments().getInt("color_index")
95
96 styleToggle.setOnClickListener {
97 (element.renderer as MultiLineTextRenderer).nextMode()
98 }
99 }
100
101 override fun onDismiss(dialog: DialogInterface) {
102 super.onDismiss(dialog)
103 controller.onTextEntryDialogDismissed(!hiddenTextEntry.text.isNullOrEmpty())
104 }
105
106 interface Controller {
107 fun onTextEntryDialogDismissed(hasText: Boolean)
108 fun zoomToFitText(editorElement: EditorElement, textRenderer: MultiLineTextRenderer)
109 fun onTextColorChange(colorIndex: Int)
110 }
111
112 companion object {
113 fun show(
114 fragmentManager: FragmentManager,
115 editorElement: EditorElement,
116 isIncognitoEnabled: Boolean,
117 selectAll: Boolean,
118 colorIndex: Int
119 ) {
120 val args = Bundle().apply {
121 putParcelable("element", editorElement)
122 putBoolean("incognito", isIncognitoEnabled)
123 putBoolean("selectAll", selectAll)
124 putInt("color_index", colorIndex)
125 }
126
127 TextEntryDialogFragment().apply {
128 arguments = args
129 show(fragmentManager, "text_entry")
130 }
131 }
132 }
133}