That fuck shit the fascists are using
at master 133 lines 4.7 kB view raw
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}