ComposeActivity refactor (#1541)
* Convert ComposeActivity to Kotlin * More ComposeActivity cleanups * Move ComposeActivity to it's own package * Remove ComposeActivity.IntentBuilder * Re-do part of the media downsizing/uploading * Add sending of status to ViewModel, draft media descriptions * Allow uploading video, update description after uploading * Enable camera, enable upload cancelling * Cleanup of ComposeActivity * Extract CaptionDialog, extract ComposeActivity methods * Fix handling of redrafted media * Add initial state and media uploading out of Activity * Change ComposeOptions.mentionedUsernames to be Set rather than List We probably don't want repeated usernames when we are writing a post and Set provides such guarantee for free plus it tells it to the callers. The only disadvantage is lack of order but it shouldn't be a problem. * Add combineOptionalLiveData. Add docs. It it useful for nullable LiveData's. I think we cannot differentiate between value not being set and value being null so I just added the variant without null check. * Add poll support to Compose. * cleanup code * move more classes into compose package * cleanup code * fix button behavior * add error handling for media upload * add caching for instance data again * merge develop * fix scheduled toots * delete unused string * cleanup ComposeActivity * fix restoring media from drafts * make media upload code a little bit clearer * cleanup autocomplete search code * avoid duplicate object creation in SavedTootActivity * perf: avoid unnecessary work when initializing ComposeActivity * add license header to new files * use small toot button on bigger displays * fix ComposeActivityTest * fix bad merge * use Singles.zip instead of Single.zip
This commit is contained in:
parent
9457aa73b2
commit
8770fbe986
68 changed files with 3162 additions and 2666 deletions
|
|
@ -2,7 +2,7 @@
|
|||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/activity_compose"
|
||||
android:id="@+id/activityCompose"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
|
@ -30,10 +30,9 @@
|
|||
android:layout_gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/at_symbol"
|
||||
android:textStyle="bold"
|
||||
android:textColor="?android:textColorTertiary"
|
||||
android:textSize="?attr/status_text_large"
|
||||
/>
|
||||
android:textStyle="bold" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/hashButton"
|
||||
|
|
@ -43,10 +42,9 @@
|
|||
android:layout_gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/hash_symbol"
|
||||
android:textStyle="bold"
|
||||
android:textColor="?android:textColorTertiary"
|
||||
android:textSize="?attr/status_text_large"
|
||||
/>
|
||||
android:textStyle="bold" />
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
|
|
@ -119,7 +117,7 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<com.keylesspalace.tusky.view.EditTextTyped
|
||||
<com.keylesspalace.tusky.components.compose.view.EditTextTyped
|
||||
android:id="@+id/composeEditField"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -136,25 +134,19 @@
|
|||
android:textColorHint="?android:attr/textColorTertiary"
|
||||
android:textSize="?attr/status_text_large" />
|
||||
|
||||
<HorizontalScrollView
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/composeMediaPreviewBar"
|
||||
android:visibility="gone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:scrollbars="none">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/compose_media_preview_bar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp">
|
||||
|
||||
<!--This is filled at runtime with ImageView's for each preview in the upload queue.-->
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</HorizontalScrollView>
|
||||
android:scrollbars="none" />
|
||||
|
||||
<com.keylesspalace.tusky.components.compose.view.PollPreviewView
|
||||
android:id="@+id/pollPreview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
|
|
@ -174,7 +166,7 @@
|
|||
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/action_photo_take"
|
||||
android:id="@+id/actionPhotoTake"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="8dp"
|
||||
|
|
@ -183,7 +175,7 @@
|
|||
android:textSize="?attr/status_text_medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/action_photo_pick"
|
||||
android:id="@+id/actionPhotoPick"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="8dp"
|
||||
|
|
@ -192,7 +184,7 @@
|
|||
android:textSize="?attr/status_text_medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/action_add_poll"
|
||||
android:id="@+id/addPollTextActionTextView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="8dp"
|
||||
|
|
@ -217,7 +209,7 @@
|
|||
app:behavior_peekHeight="0dp"
|
||||
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" />
|
||||
|
||||
<com.keylesspalace.tusky.view.ComposeOptionsView
|
||||
<com.keylesspalace.tusky.components.compose.view.ComposeOptionsView
|
||||
android:id="@+id/composeOptionsBottomSheet"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -231,7 +223,7 @@
|
|||
app:behavior_peekHeight="0dp"
|
||||
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" />
|
||||
|
||||
<com.keylesspalace.tusky.view.ComposeScheduleView
|
||||
<com.keylesspalace.tusky.components.compose.view.ComposeScheduleView
|
||||
android:id="@+id/composeScheduleView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -300,7 +292,7 @@
|
|||
android:contentDescription="@string/action_content_warning"
|
||||
android:padding="4dp"
|
||||
android:tooltipText="@string/action_content_warning"
|
||||
app:srcCompat="@drawable/ic_cw_24dp"/>
|
||||
app:srcCompat="@drawable/ic_cw_24dp" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/composeEmojiButton"
|
||||
|
|
@ -337,7 +329,7 @@
|
|||
android:textSize="?attr/status_text_medium"
|
||||
tools:text="500" />
|
||||
|
||||
<com.keylesspalace.tusky.view.TootButton
|
||||
<com.keylesspalace.tusky.components.compose.view.TootButton
|
||||
android:id="@+id/composeTootButton"
|
||||
style="@style/TuskyButton"
|
||||
android:layout_width="@dimen/toot_button_width"
|
||||
|
|
|
|||
|
|
@ -5,27 +5,28 @@
|
|||
|
||||
<Button
|
||||
android:id="@+id/resetScheduleButton"
|
||||
style="@style/TuskyButton.Outlined"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:text="@string/action_reset_schedule"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent" />
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/scheduledDateTime"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="16dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:drawablePadding="4dp"
|
||||
android:paddingStart="4dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingBottom="16dp"
|
||||
android:textColor="?android:textColorTertiary"
|
||||
android:textSize="?attr/status_text_medium"
|
||||
android:drawablePadding="4dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="1"
|
||||
app:layout_constraintStart_toEndOf="@id/resetScheduleButton"
|
||||
tools:text="2020/01/01 00:00:00" />
|
||||
|
||||
</merge>
|
||||
|
|
@ -487,7 +487,6 @@
|
|||
<string name="action_access_scheduled_toot">التبويقات المبَرمَجة</string>
|
||||
<string name="action_schedule_toot">برمجة تبويق</string>
|
||||
<string name="action_reset_schedule">صفّر</string>
|
||||
<string name="hint_configure_scheduled_toot">اضغط هنا لضبط برمجة التبويق.</string>
|
||||
<string name="post_lookup_error_format">خطأ أثناء البحث عن منشور %s</string>
|
||||
|
||||
<string name="title_bookmarks">الفواصل المرجعية</string>
|
||||
|
|
|
|||
|
|
@ -508,7 +508,6 @@
|
|||
<string name="action_access_scheduled_toot">নির্ধারিত টুটগুলি</string>
|
||||
<string name="action_schedule_toot">নির্ধারিত টুট</string>
|
||||
<string name="action_reset_schedule">রিসেট</string>
|
||||
<string name="hint_configure_scheduled_toot">নির্ধারিত টুট কনফিগার করতে এখানে আলতো চাপুন।</string>
|
||||
<string name="about_powered_by_tusky">টাস্কি দ্বারা চালিত</string>
|
||||
<string name="post_lookup_error_format">%s পোস্ট অনুসন্ধানে ত্রুটি</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -526,7 +526,6 @@
|
|||
<string name="action_access_scheduled_toot">Toots programats</string>
|
||||
<string name="action_schedule_toot">Programar el toot</string>
|
||||
<string name="action_reset_schedule">Reiniciar</string>
|
||||
<string name="hint_configure_scheduled_toot">Clica aquí per configurar el toot programat.</string>
|
||||
<string name="about_powered_by_tusky">Desenvolupat per Tusky</string>
|
||||
<string name="description_status_bookmarked">Afegit a les adreces d\'interès</string>
|
||||
<string name="select_list_title">Seleccionar la llista</string>
|
||||
|
|
|
|||
|
|
@ -470,7 +470,6 @@
|
|||
<string name="action_access_scheduled_toot">Plánované tooty</string>
|
||||
<string name="action_schedule_toot">Naplánovat toot</string>
|
||||
<string name="action_reset_schedule">Obnovit</string>
|
||||
<string name="hint_configure_scheduled_toot">Klepnutím sem nastavíte plánovaný toot.</string>
|
||||
<string name="pref_title_alway_open_spoiler">Vždy rozbalovat tooty označené varováními o obsahu</string>
|
||||
<string name="filter_dialog_whole_word">Celé slovo</string>
|
||||
<string name="filter_dialog_whole_word_description">Je-li klíčové slovo nebo fráze pouze alfanumerická, bude použita pouze, pokud odpovídá celému slovu</string>
|
||||
|
|
|
|||
|
|
@ -451,6 +451,5 @@
|
|||
<string name="action_access_scheduled_toot">Geplante Beiträge</string>
|
||||
<string name="action_schedule_toot">Plane Beitrag</string>
|
||||
<string name="action_reset_schedule">Zurücksetzen</string>
|
||||
<string name="hint_configure_scheduled_toot">Drücke hier, um den geplanten Beitrag zu konfigurieren.</string>
|
||||
<string name="abbreviated_in_years">Dies sind Zeitstempel für Status. Beispiele: \"16s\" oder \"2t\".</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -464,7 +464,6 @@
|
|||
<string name="action_access_scheduled_toot">Planitaj mesaĝoj</string>
|
||||
<string name="action_schedule_toot">Plani mesaĝon</string>
|
||||
<string name="action_reset_schedule">Restarigi</string>
|
||||
<string name="hint_configure_scheduled_toot">Frapetu ĉi-tie por agordi la planitan mesaĝon.</string>
|
||||
<string name="about_powered_by_tusky">Funkciigita de Tusky</string>
|
||||
<string name="description_status_bookmarked">Aldonita al la legosignoj</string>
|
||||
<string name="select_list_title">Elekti la liston</string>
|
||||
|
|
|
|||
|
|
@ -465,7 +465,6 @@
|
|||
<string name="action_access_scheduled_toot">Estados programados</string>
|
||||
<string name="action_schedule_toot">Programar estado</string>
|
||||
<string name="action_reset_schedule">Reiniciar</string>
|
||||
<string name="hint_configure_scheduled_toot">Pulsa aquí para configurar un estado programado.</string>
|
||||
<string name="post_lookup_error_format">Error al buscar el post %s</string>
|
||||
|
||||
<string name="about_powered_by_tusky">Potenciado por Tusky</string>
|
||||
|
|
|
|||
|
|
@ -311,7 +311,6 @@
|
|||
|
||||
<string name="confirmation_domain_unmuted">%s ez dago ezkutatua</string>
|
||||
|
||||
<string name="hint_configure_scheduled_toot">Sakatu hemen programatutako tuta konfiguratzeko.</string>
|
||||
<string name="dialog_redraft_toot_warning">Tut hau ezabatu eta zirriborro berria egin\?</string>
|
||||
<string name="mute_domain_warning">Ziur al zaude %s ezabatu nahi duzula\? Domeinu horretatik datorren edukia ez duzu denbora-lerro publikoetan edo jakinarazpenentan ikusiko. Domeinu horretan dituzun jarraitzaileak ezabatuko dira.</string>
|
||||
<string name="mute_domain_warning_dialog_ok">Domeinu osoa ezkutatu</string>
|
||||
|
|
|
|||
|
|
@ -460,7 +460,6 @@
|
|||
<string name="action_access_scheduled_toot">بوقهای زمانبندیشده</string>
|
||||
<string name="action_schedule_toot">زمانبندی بوق</string>
|
||||
<string name="action_reset_schedule">بازنشانی</string>
|
||||
<string name="hint_configure_scheduled_toot">برای پیکربندی بوق زمانبندیشده، اینجا را بزنید.</string>
|
||||
<string name="mute_domain_warning">مطمئنید میخواهید تمام %s را مسدود کنید؟ محتوای آن دامنه را در هیچیک از خط زمانیها یا در آگاهیهایتان نخواهید دید. پیروانتان از آن دامنه، برداشته خواهند شد.</string>
|
||||
<string name="filter_dialog_whole_word_description">هنگامی که کلیدواژه یا عبارت، فقط حروفعددی باشد، فقط اگر با تمام واژه مطابق باشد، اعمال خواهد شد</string>
|
||||
<string name="filter_add_description">عبارت پالایش</string>
|
||||
|
|
|
|||
|
|
@ -472,7 +472,6 @@
|
|||
<string name="action_access_scheduled_toot">Pouets planifiés</string>
|
||||
<string name="action_schedule_toot">Planifier le pouet</string>
|
||||
<string name="action_reset_schedule">Réinitialiser</string>
|
||||
<string name="hint_configure_scheduled_toot">Appuyez ici pour configurer le pouet planifié.</string>
|
||||
<string name="post_lookup_error_format">Erreur lors de la récupération du message %s</string>
|
||||
|
||||
<string name="about_powered_by_tusky">Propulsé par Tusky</string>
|
||||
|
|
|
|||
|
|
@ -470,7 +470,6 @@
|
|||
<string name="action_access_scheduled_toot">Időzített tülkök</string>
|
||||
<string name="action_schedule_toot">Tülk Időzítése</string>
|
||||
<string name="action_reset_schedule">Visszaállítás</string>
|
||||
<string name="hint_configure_scheduled_toot">Ide nyúlj az időzített tülkök beállításához.</string>
|
||||
<string name="post_lookup_error_format">Nem találjuk ezt a posztot %s</string>
|
||||
|
||||
<string name="title_bookmarks">Könyvjelzők</string>
|
||||
|
|
|
|||
|
|
@ -476,6 +476,5 @@
|
|||
<string name="action_access_scheduled_toot">Toot programmati</string>
|
||||
<string name="action_schedule_toot">Programma un toot</string>
|
||||
<string name="action_reset_schedule">RIpristina</string>
|
||||
<string name="hint_configure_scheduled_toot">Tocca qui configurare i toot programmati.</string>
|
||||
<string name="poll_info_format"> <!-- 15 votes • 1 hour left --> %1$s • %2$s</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -81,7 +81,6 @@
|
|||
</style>
|
||||
|
||||
<style name="TuskyImageButton.Dark" parent="@style/Widget.MaterialComponents.Button.UnelevatedButton">
|
||||
<item name="android:tint">@color/text_color_tertiary_dark</item>
|
||||
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
|
||||
</style>
|
||||
|
||||
|
|
|
|||
|
|
@ -507,7 +507,6 @@
|
|||
<string name="action_access_scheduled_toot">Planlagte toots</string>
|
||||
<string name="action_schedule_toot">Planlegg toot</string>
|
||||
<string name="action_reset_schedule">Tilbakestill</string>
|
||||
<string name="hint_configure_scheduled_toot">Klikk her for å konfigurere planlagt toot.</string>
|
||||
<string name="post_lookup_error_format">Det oppsto en feil under henting av %s</string>
|
||||
|
||||
<string name="about_powered_by_tusky">Drevet av Tusky</string>
|
||||
|
|
|
|||
|
|
@ -477,7 +477,6 @@
|
|||
<string name="action_access_scheduled_toot">Tuts planificats</string>
|
||||
<string name="action_schedule_toot">Planificar de tuts</string>
|
||||
<string name="action_reset_schedule">Escafar</string>
|
||||
<string name="hint_configure_scheduled_toot">Tocatz aquí per configurar los tuts planificats.</string>
|
||||
<string name="post_lookup_error_format">Error en cercant la publicacion %s</string>
|
||||
|
||||
<string name="about_powered_by_tusky">Propulsat per Tusky</string>
|
||||
|
|
|
|||
|
|
@ -484,7 +484,6 @@
|
|||
<string name="action_access_scheduled_toot">Zaplanowane wpisy</string>
|
||||
<string name="action_schedule_toot">Zaplanuj wpis</string>
|
||||
<string name="action_reset_schedule">Resetuj</string>
|
||||
<string name="hint_configure_scheduled_toot">Dotknij tutaj, żeby skonfigurować zaplanowany wpis.</string>
|
||||
<string name="about_powered_by_tusky">Napędzane przez Tusky</string>
|
||||
<string name="post_lookup_error_format">Błąd przy wyszukiwaniu wpisu %s</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -472,7 +472,6 @@
|
|||
<string name="action_access_scheduled_toot">Agendados</string>
|
||||
<string name="action_schedule_toot">Agendar toot</string>
|
||||
<string name="action_reset_schedule">Cancelar</string>
|
||||
<string name="hint_configure_scheduled_toot">Toque aqui para agendar</string>
|
||||
<string name="post_lookup_error_format">Erro ao pesquisar %s</string>
|
||||
|
||||
<string name="title_bookmarks">Salvos</string>
|
||||
|
|
|
|||
|
|
@ -540,7 +540,6 @@
|
|||
<string name="action_access_scheduled_toot">Отложенные записи</string>
|
||||
<string name="action_schedule_toot">Отложить запись</string>
|
||||
<string name="action_reset_schedule">Сброс</string>
|
||||
<string name="hint_configure_scheduled_toot">Нажмите для выбора времени отправки.</string>
|
||||
<string name="post_lookup_error_format">Ошибка при поиске сообщения / ний</string>
|
||||
|
||||
<string name="title_bookmarks">Закладки</string>
|
||||
|
|
|
|||
|
|
@ -521,7 +521,6 @@
|
|||
<string name="action_access_scheduled_toot">Napovedani tuti</string>
|
||||
<string name="action_reset_schedule">Ponastavi</string>
|
||||
<string name="action_schedule_toot">Napovej tut</string>
|
||||
<string name="hint_configure_scheduled_toot">Dotaknite se tukaj, da nastavite napovedan tut.</string>
|
||||
<string name="post_lookup_error_format">Napaka pri iskanju objave %s</string>
|
||||
|
||||
<string name="about_powered_by_tusky">Poganja ga Tusky</string>
|
||||
|
|
|
|||
|
|
@ -468,7 +468,6 @@
|
|||
<string name="action_access_scheduled_toot">Schemalagda toots</string>
|
||||
<string name="action_schedule_toot">Schemalägg toot</string>
|
||||
<string name="action_reset_schedule">Återställ</string>
|
||||
<string name="hint_configure_scheduled_toot">Knacka här för att konfigurera schemalagd toot.</string>
|
||||
<string name="post_lookup_error_format">Fel vid uppslagning av status %s</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -435,7 +435,6 @@
|
|||
<string name="action_access_scheduled_toot">Zamanlanmış iletiler</string>
|
||||
<string name="action_schedule_toot">İleti zamanla</string>
|
||||
<string name="action_reset_schedule">Sıfırla</string>
|
||||
<string name="hint_configure_scheduled_toot">Zamanlanmış iletiyi yapılandırmak için buraya dokunun.</string>
|
||||
<string name="dialog_redraft_toot_warning">Bu iletiyi silip yeniden düzenlemek istiyor musun\?</string>
|
||||
<string name="pref_title_bot_overlay">Botlar için gösterge göster</string>
|
||||
<string name="about_powered_by_tusky">Tusky tarafından desteklenmektedir</string>
|
||||
|
|
|
|||
|
|
@ -159,7 +159,6 @@
|
|||
|
||||
<string name="hint_domain">Which instance?</string>
|
||||
<string name="hint_compose">What\'s happening?</string>
|
||||
<string name="hint_configure_scheduled_toot">Tap here to configure scheduled toot.</string>
|
||||
<string name="hint_content_warning">Content warning</string>
|
||||
<string name="hint_display_name">Display name</string>
|
||||
<string name="hint_note">Bio</string>
|
||||
|
|
|
|||
|
|
@ -144,7 +144,6 @@
|
|||
</style>
|
||||
|
||||
<style name="TuskyImageButton.Light" parent="@style/Widget.MaterialComponents.Button.UnelevatedButton">
|
||||
<item name="android:tint">@color/text_color_tertiary_light</item>
|
||||
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
|
||||
</style>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue