diff --git a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonStatusesService.java b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonStatusesService.java index bec0146e..7ecb050f 100644 --- a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonStatusesService.java +++ b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonStatusesService.java @@ -60,7 +60,8 @@ public interface MastodonStatusesService { @Field("spoiler_text") String spoiler_text, @Field("visibility") String visibility, @Field("language") String language, - @Field("quote_id") String quote_id + @Field("quote_id") String quote_id, + @Field("content_type") String content_type ); @GET("statuses/{id}/source") diff --git a/app/src/main/java/app/fedilab/android/client/entities/api/Status.java b/app/src/main/java/app/fedilab/android/client/entities/api/Status.java index a5db6c57..e6a03074 100644 --- a/app/src/main/java/app/fedilab/android/client/entities/api/Status.java +++ b/app/src/main/java/app/fedilab/android/client/entities/api/Status.java @@ -50,6 +50,8 @@ public class Status implements Serializable, Cloneable { public String text; @SerializedName("quote_id") public String quote_id; + @SerializedName("content_type") + public String content_type; @SerializedName("visibility") public String visibility; @SerializedName("language") diff --git a/app/src/main/java/app/fedilab/android/jobs/ComposeWorker.java b/app/src/main/java/app/fedilab/android/jobs/ComposeWorker.java index 37a04e3c..05ed092b 100644 --- a/app/src/main/java/app/fedilab/android/jobs/ComposeWorker.java +++ b/app/src/main/java/app/fedilab/android/jobs/ComposeWorker.java @@ -221,7 +221,7 @@ public class ComposeWorker extends Worker { if (dataPost.scheduledDate == null) { if (dataPost.statusEditId == null) { statusCall = mastodonStatusesService.createStatus(null, dataPost.token, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in, - poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language, statuses.get(i).quote_id); + poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language, statuses.get(i).quote_id, statuses.get(i).content_type); } else { //Status is edited statusCall = mastodonStatusesService.updateStatus(null, dataPost.token, dataPost.statusEditId, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in, poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language); diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java index f635383b..0a6b23ba 100644 --- a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java @@ -28,6 +28,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.Drawable; @@ -99,6 +100,7 @@ import java.util.regex.Pattern; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.activities.ComposeActivity; +import app.fedilab.android.activities.MainActivity; import app.fedilab.android.client.entities.api.Attachment; import app.fedilab.android.client.entities.api.Emoji; import app.fedilab.android.client.entities.api.EmojiInstance; @@ -1273,9 +1275,40 @@ public class ComposeAdapter extends RecyclerView.Adapter { + AlertDialog.Builder builder = new AlertDialog.Builder(context, Helper.dialogStyle()); + builder.setTitle(context.getString(R.string.post_format)); + Resources res = context.getResources(); + String[] formatArr = res.getStringArray(R.array.SET_POST_FORMAT); + int selection = 0; + String defaultFormat = sharedpreferences.getString(context.getString(R.string.SET_POST_FORMAT) + account.user_id + account.instance, "text/plain"); + for (String format : formatArr) { + if (statusDraft.content_type != null && statusDraft.content_type.equalsIgnoreCase(format)) { + break; + } else if (statusDraft.content_type == null && defaultFormat.equalsIgnoreCase(format)) { + break; + } + selection++; + } + builder.setSingleChoiceItems(formatArr, selection, null); + builder.setPositiveButton(R.string.validate, (dialog, which) -> { + int selectedPosition = ((AlertDialog) dialog).getListView().getCheckedItemPosition(); + statusDraft.content_type = formatArr[selectedPosition]; + notifyItemChanged(holder.getLayoutPosition()); + dialog.dismiss(); + }); + builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); + builder.create().show(); + }); + } else { + holder.binding.buttonTextFormat.setVisibility(View.GONE); + } holder.binding.buttonEmojiOne.setOnClickListener(v -> { InputMethodManager imm = (InputMethodManager) context.getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(holder.binding.buttonEmojiOne.getWindowToken(), 0); diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentExtraFeaturesSettings.java b/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentExtraFeaturesSettings.java index 1d11a5db..a0af3556 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentExtraFeaturesSettings.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentExtraFeaturesSettings.java @@ -17,6 +17,7 @@ package app.fedilab.android.ui.fragment.settings; import android.content.SharedPreferences; import android.os.Bundle; +import androidx.preference.ListPreference; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; @@ -24,6 +25,7 @@ import androidx.preference.SwitchPreferenceCompat; import app.fedilab.android.R; import app.fedilab.android.activities.MainActivity; +import app.fedilab.android.helper.Helper; public class FragmentExtraFeaturesSettings extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -55,6 +57,13 @@ public class FragmentExtraFeaturesSettings extends PreferenceFragmentCompat impl boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_TRANSLATE) + MainActivity.currentUserID + MainActivity.currentInstance, false); SET_DISPLAY_TRANSLATE.setChecked(checked); } + + ListPreference SET_POST_FORMAT = findPreference(getString(R.string.SET_POST_FORMAT)); + if (SET_POST_FORMAT != null) { + SET_POST_FORMAT.getContext().setTheme(Helper.dialogStyle()); + String format = sharedpreferences.getString(getString(R.string.SET_POST_FORMAT) + MainActivity.currentUserID + MainActivity.currentInstance, "text/plain"); + SET_POST_FORMAT.setValue(format); + } } @Override @@ -80,6 +89,12 @@ public class FragmentExtraFeaturesSettings extends PreferenceFragmentCompat impl editor.putBoolean(getString(R.string.SET_DISPLAY_TRANSLATE) + MainActivity.currentUserID + MainActivity.currentInstance, SET_DISPLAY_TRANSLATE.isChecked()); } } + if (key.compareToIgnoreCase(getString(R.string.SET_POST_FORMAT)) == 0) { + ListPreference SET_POST_FORMAT = findPreference(getString(R.string.SET_POST_FORMAT)); + if (SET_POST_FORMAT != null) { + editor.putString(getString(R.string.SET_POST_FORMAT) + MainActivity.currentUserID + MainActivity.currentInstance, SET_POST_FORMAT.getValue()); + } + } editor.apply(); } } diff --git a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/StatusesVM.java b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/StatusesVM.java index ebae3e67..bb9c88cf 100644 --- a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/StatusesVM.java +++ b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/StatusesVM.java @@ -187,12 +187,13 @@ public class StatusesVM extends AndroidViewModel { String spoiler_text, String visibility, String language, - String quote_id) { + String quote_id, + String content_type) { MastodonStatusesService mastodonStatusesService = init(instance); statusMutableLiveData = new MutableLiveData<>(); new Thread(() -> { Call statusCall = mastodonStatusesService.createStatus(idempotency_Key, token, text, media_ids, poll_options, poll_expire_in, - poll_multiple, poll_hide_totals, in_reply_to_id, sensitive, spoiler_text, visibility, language, quote_id); + poll_multiple, poll_hide_totals, in_reply_to_id, sensitive, spoiler_text, visibility, language, quote_id, content_type); Status status = null; if (statusCall != null) { try { diff --git a/app/src/main/res/drawable/ic_baseline_format_size_24.xml b/app/src/main/res/drawable/ic_baseline_format_size_24.xml new file mode 100644 index 00000000..cae03ba9 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_format_size_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/drawer_status_compose.xml b/app/src/main/res/layout/drawer_status_compose.xml index ca778b76..11e6c1bf 100644 --- a/app/src/main/res/layout/drawer_status_compose.xml +++ b/app/src/main/res/layout/drawer_status_compose.xml @@ -91,6 +91,18 @@ app:layout_constraintTop_toBottomOf="@id/button_emoji" tools:visibility="visible" /> + + + BrainCrash Mastalab + + + text/plain + text/html + text/markdown + text/bbcode + text/x.misskeymarkdown + + Always Wifi only @@ -1420,6 +1429,8 @@ SET_NOTIF_VALIDATION SET_DISPLAY_BOOKMARK SET_DISPLAY_TRANSLATE + SET_POST_FORMAT + SET_TRANSLATOR SET_TRANSLATOR_VERSION @@ -2154,4 +2165,6 @@ By enabling that option the app will display extra features. This feature is done for social softwares like Pleroma, Akkoma or Glitch Social Icons visibility You can safely hide these icons at the bottom to have more space. They are also in the submenu. + Post format + Post format \ No newline at end of file diff --git a/app/src/main/res/xml/pref_extra_features.xml b/app/src/main/res/xml/pref_extra_features.xml index e4aa51d4..3a1b6f02 100644 --- a/app/src/main/res/xml/pref_extra_features.xml +++ b/app/src/main/res/xml/pref_extra_features.xml @@ -28,4 +28,16 @@ app:title="@string/set_display_translate_indication" /> + + \ No newline at end of file