mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-26 11:51:10 +01:00
Add defaults for script/text font pairings and guessing of script based on body contents.
Co-authored-by: Alex Hart <alex@signal.org>
This commit is contained in:
@@ -41,7 +41,7 @@ public final class ImageEditorModelRenderMediaTransform implements MediaTransfor
|
||||
public @NonNull Media transform(@NonNull Context context, @NonNull Media media) {
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
|
||||
Bitmap bitmap = modelToRender.render(context, size, FontTypefaceProvider.INSTANCE);
|
||||
Bitmap bitmap = modelToRender.render(context, size, new FontTypefaceProvider());
|
||||
try {
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outputStream);
|
||||
|
||||
|
||||
@@ -16,15 +16,16 @@ import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import org.thoughtcrime.securesms.fonts.Fonts
|
||||
import org.thoughtcrime.securesms.fonts.TextFont
|
||||
import org.thoughtcrime.securesms.fonts.TextToScript
|
||||
import org.thoughtcrime.securesms.util.FutureTaskListener
|
||||
import org.thoughtcrime.securesms.util.livedata.Store
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.ExecutionException
|
||||
|
||||
class TextStoryPostCreationViewModel : ViewModel() {
|
||||
|
||||
private val store = Store(TextStoryPostCreationState())
|
||||
private val textFontSubject: Subject<TextFont> = BehaviorSubject.create()
|
||||
private val temporaryBodySubject: Subject<String> = BehaviorSubject.createDefault("")
|
||||
private val disposables = CompositeDisposable()
|
||||
|
||||
private val internalThumbnail = MutableLiveData<Bitmap>()
|
||||
@@ -38,14 +39,16 @@ class TextStoryPostCreationViewModel : ViewModel() {
|
||||
init {
|
||||
textFontSubject.onNext(store.state.textFont)
|
||||
|
||||
textFontSubject
|
||||
val scriptGuess = temporaryBodySubject.observeOn(Schedulers.io()).map { TextToScript.guessScript(it) }
|
||||
|
||||
Observable.combineLatest(textFontSubject, scriptGuess, ::Pair)
|
||||
.observeOn(Schedulers.io())
|
||||
.distinctUntilChanged()
|
||||
.map { Fonts.resolveFont(ApplicationDependencies.getApplication(), Locale.getDefault(), it) }
|
||||
.switchMap {
|
||||
when (it) {
|
||||
is Fonts.FontResult.Async -> asyncFontEmitter(it)
|
||||
is Fonts.FontResult.Immediate -> Observable.just(it.typeface)
|
||||
.map { (textFont, script) -> Fonts.resolveFont(ApplicationDependencies.getApplication(), textFont, script) }
|
||||
.switchMap { result ->
|
||||
when (result) {
|
||||
is Fonts.FontResult.Async -> asyncFontEmitter(result)
|
||||
is Fonts.FontResult.Immediate -> Observable.just(result.typeface)
|
||||
}
|
||||
}
|
||||
.subscribeOn(Schedulers.io())
|
||||
@@ -142,6 +145,10 @@ class TextStoryPostCreationViewModel : ViewModel() {
|
||||
store.update { it.copy(linkPreviewUri = url) }
|
||||
}
|
||||
|
||||
fun setTemporaryBody(temporaryBody: String) {
|
||||
temporaryBodySubject.onNext(temporaryBody)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = Log.tag(TextStoryPostCreationViewModel::class.java)
|
||||
private const val TEXT_STORY_INSTANCE_STATE = "text.story.instance.state"
|
||||
|
||||
@@ -20,6 +20,7 @@ import androidx.appcompat.widget.AppCompatSeekBar
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.widget.doAfterTextChanged
|
||||
import androidx.core.widget.doOnTextChanged
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.transition.TransitionManager
|
||||
@@ -112,6 +113,9 @@ class TextStoryPostTextEntryFragment : KeyboardEntryDialogFragment(
|
||||
input.doOnTextChanged { _, _, _, _ ->
|
||||
presentHint()
|
||||
}
|
||||
input.doAfterTextChanged { text ->
|
||||
viewModel.setTemporaryBody(text?.toString() ?: "")
|
||||
}
|
||||
input.setText(viewModel.getBody())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user