diff --git a/app/src/main/java/app/fedilab/android/activities/InstanceHealthActivity.java b/app/src/main/java/app/fedilab/android/activities/InstanceHealthActivity.java index 085364aa0..5fac8ddc3 100644 --- a/app/src/main/java/app/fedilab/android/activities/InstanceHealthActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/InstanceHealthActivity.java @@ -34,7 +34,6 @@ import androidx.core.content.ContextCompat; import android.text.SpannableString; import android.text.style.UnderlineSpan; -import android.util.Log; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -164,7 +163,6 @@ public class InstanceHealthActivity extends BaseActivity { HashMap parameters = new HashMap<>(); parameters.put("name", instance.trim()); final String response = new HttpsConnection(InstanceHealthActivity.this, instance).get("https://instances.social/api/1.0/instances/show", 30, parameters, Helper.THEKINRAR_SECRET_TOKEN); - Log.v(Helper.TAG,"response: " + response); if (response != null) instanceSocial = API.parseInstanceSocialResponse(getApplicationContext(), new JSONObject(response)); runOnUiThread(new Runnable() { diff --git a/app/src/main/java/app/fedilab/android/activities/TootActivity.java b/app/src/main/java/app/fedilab/android/activities/TootActivity.java index 66dfc0ef3..ff968f98b 100644 --- a/app/src/main/java/app/fedilab/android/activities/TootActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/TootActivity.java @@ -42,6 +42,7 @@ import android.provider.MediaStore; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; +import androidx.appcompat.widget.SwitchCompat; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; @@ -173,6 +174,7 @@ import app.fedilab.android.drawers.AccountsSearchAdapter; import app.fedilab.android.drawers.CustomEmojiAdapter; import app.fedilab.android.drawers.DraftsListAdapter; import app.fedilab.android.drawers.EmojisSearchAdapter; +import app.fedilab.android.drawers.SliderAdapter; import app.fedilab.android.drawers.SuggestionsAdapter; import app.fedilab.android.drawers.TagsSearchAdapter; import app.fedilab.android.helper.FileNameCleaner; @@ -2217,9 +2219,59 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, } createAndSendToot(tootContent, content_type, timestamp); } else { - splitToot = Helper.splitToots(toot_content.getText().toString().trim(), split_toot_size); + splitToot = Helper.splitToots(toot_content.getText().toString().trim(), split_toot_size, true); tootContent = splitToot.get(0); stepSpliToot = 1; + + + + AlertDialog.Builder builderInner = new AlertDialog.Builder(TootActivity.this, style); + builderInner.setTitle(R.string.message_preview); + + View preview = getLayoutInflater().inflate(R.layout.popup_message_preview, new LinearLayout(getApplicationContext()), false); + builderInner.setView(preview); + + //Text for report + final TextView textView = preview.findViewById(R.id.preview); + textView.setText(""); + final SwitchCompat report_mention = preview.findViewById(R.id.report_mention); + int finalSplit_toot_size = split_toot_size; + report_mention.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + splitToot = Helper.splitToots(toot_content.getText().toString().trim(), finalSplit_toot_size, isChecked); + textView.setText(""); + int inc = 0; + for(String prev: splitToot){ + if( inc < splitToot.size()-1) { + textView.setText(textView.getText() + prev + "\n----------\n"); + } + } + } + }); + int inc = 0; + for(String prev: splitToot){ + if( inc < splitToot.size()-1) { + textView.setText(textView.getText() + prev + "\n----------\n"); + } + } + + builderInner.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + toot_it.setEnabled(true); + dialog.dismiss(); + } + }); + builderInner.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + createAndSendToot(tootContent, content_type, timestamp); + dialog.dismiss(); + } + }); + AlertDialog alertDialog = builderInner.create(); + alertDialog.show(); } @@ -2628,10 +2680,6 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, } final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS + userId + instance, false); - int split_toot_size = sharedpreferences.getInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE + userId + instance, Helper.SPLIT_TOOT_SIZE); - - int cwSize = toot_cw_content.getText().toString().trim().length(); - int size = toot_content.getText().toString().trim().length() + cwSize; if (split_toot && splitToot != null && stepSpliToot < splitToot.size()) { String tootContent = splitToot.get(stepSpliToot); diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index 97563cec4..39204e692 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -35,6 +35,7 @@ import android.os.Environment; import android.os.Handler; import androidx.annotation.NonNull; +import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.TooltipCompat; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; @@ -69,6 +70,7 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; +import android.widget.CompoundButton; import android.widget.DatePicker; import android.widget.EditText; import android.widget.FrameLayout; @@ -518,13 +520,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } } final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); - boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS, false); final String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); String instance = Helper.getLiveInstance(context); - int split_toot_size = sharedpreferences.getInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE + userId + instance, Helper.SPLIT_TOOT_SIZE); + boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS + userId + instance, false); + - int cwSize = toot_cw_content.getText().toString().trim().length(); - int size = toot_content.getText().toString().trim().length() + cwSize; if (split_toot && splitToot != null && stepSpliToot < splitToot.size()) { String tootContent = splitToot.get(stepSpliToot); @@ -4102,21 +4102,84 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct return; } SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); - boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS, false); + + final String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); String instance = Helper.getLiveInstance(context); int split_toot_size = sharedpreferences.getInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE + userId + instance, Helper.SPLIT_TOOT_SIZE); - + boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS + userId + instance, false); String tootContent; if (toot_cw_content.getText() != null && toot_cw_content.getText().toString().trim().length() > 0) split_toot_size -= toot_cw_content.getText().toString().trim().length(); + if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA || !split_toot || (TootActivity.countLength(social, toot_content, toot_cw_content) < split_toot_size)) { tootContent = toot_content.getText().toString().trim(); + createAndSendToot(tootContent, content_type, userId, instance); } else { - splitToot = Helper.splitToots(toot_content.getText().toString().trim(), split_toot_size); + splitToot = Helper.splitToots(toot_content.getText().toString().trim(), split_toot_size, true); + int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK); tootContent = splitToot.get(0); stepSpliToot = 1; + int style; + if (theme == Helper.THEME_DARK) { + style = R.style.DialogDark; + } else if (theme == Helper.THEME_BLACK) { + style = R.style.DialogBlack; + } else { + style = R.style.Dialog; + } + AlertDialog.Builder builderInner = new AlertDialog.Builder(context, style); + builderInner.setTitle(R.string.message_preview); + + View preview = ((Activity) context).getLayoutInflater().inflate(R.layout.popup_message_preview, new LinearLayout(context), false); + builderInner.setView(preview); + + //Text for report + final TextView textView = preview.findViewById(R.id.preview); + textView.setText(""); + final SwitchCompat report_mention = preview.findViewById(R.id.report_mention); + int finalSplit_toot_size = split_toot_size; + report_mention.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + splitToot = Helper.splitToots(toot_content.getText().toString().trim(), finalSplit_toot_size, isChecked); + textView.setText(""); + int inc = 0; + for(String prev: splitToot){ + if( inc < splitToot.size()-1) { + textView.setText(textView.getText() + prev + "\n----------\n"); + } + } + } + }); + int inc = 0; + for(String prev: splitToot){ + if( inc < splitToot.size()-1) { + textView.setText(textView.getText() + prev + "\n----------\n"); + } + } + + builderInner.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + builderInner.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + createAndSendToot(tootContent, content_type, userId, instance); + dialog.dismiss(); + } + }); + AlertDialog alertDialog = builderInner.create(); + alertDialog.show(); } + + } + + + private void createAndSendToot(String tootContent, String content_type, String userId, String instance){ Status toot = new Status(); if (content_type != null) toot.setContentType(content_type); @@ -4132,6 +4195,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } + private void bookmark(Status status) { if (type != RetrieveFeedsAsyncTask.Type.CACHE_BOOKMARKS) { status.setBookmarked(!status.isBookmarked()); diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index 67184a106..8e5a8a923 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -3791,30 +3791,33 @@ public class Helper { * @param maxChars int the max chars per toot (minus 10 to write the page: 1/x, 2/x etc.) * @return ArrayList split toot */ - public static ArrayList splitToots(String content, int maxChars) { + public static ArrayList splitToots(String content, int maxChars, boolean reportMentions) { String[] splitContent = content.split("\\s"); ArrayList mentions = new ArrayList<>(); - Matcher matcher = mentionLongPattern.matcher(content); - while (matcher.find()) { - String mentionLong = matcher.group(1); - if (!mentions.contains(mentionLong)) { - mentions.add(mentionLong); - } - } - matcher = mentionPattern.matcher(content); - while (matcher.find()) { - String mention = matcher.group(1); - if (!mentions.contains(mention)) { - mentions.add(mention); - } - } + int mentionLength = 0; StringBuilder mentionString = new StringBuilder(); - for (String mention : mentions) { - mentionString.append(mention).append(" "); + if( reportMentions) { + Matcher matcher = mentionLongPattern.matcher(content); + while (matcher.find()) { + String mentionLong = matcher.group(1); + if (!mentions.contains(mentionLong)) { + mentions.add(mentionLong); + } + } + matcher = mentionPattern.matcher(content); + while (matcher.find()) { + String mention = matcher.group(1); + if (!mentions.contains(mention)) { + mentions.add(mention); + } + } + for (String mention : mentions) { + mentionString.append(mention).append(" "); + } + mentionLength = mentionString.length() + 1; } - int mentionLength = mentionString.length() + 1; int maxCharsPerMessage = (maxChars - 10) - mentionLength; int totalCurrent = 0; ArrayList reply = new ArrayList<>(); diff --git a/app/src/main/res/layout/popup_message_preview.xml b/app/src/main/res/layout/popup_message_preview.xml new file mode 100644 index 000000000..eee664462 --- /dev/null +++ b/app/src/main/res/layout/popup_message_preview.xml @@ -0,0 +1,55 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a6fb0e1dd..a787474df 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1233,4 +1233,6 @@ Upload media Add an optional caption The app received a very long error message from the API %1$s + Message preview + Add mentions in each message \ No newline at end of file