Added check HTML to signature editor

pull/212/head
M66B 2 years ago
parent e4d3e8637e
commit be6993aa17

@ -52,8 +52,12 @@ import androidx.preference.PreferenceManager;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.jsoup.parser.ParseError;
import org.jsoup.parser.ParseErrorList;
import org.jsoup.parser.Parser;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.InputStream; import java.io.InputStream;
@ -248,6 +252,7 @@ public class ActivitySignature extends ActivityBase {
@Override @Override
public boolean onPrepareOptionsMenu(Menu menu) { public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_edit_html).setChecked(etText.isRaw()); menu.findItem(R.id.menu_edit_html).setChecked(etText.isRaw());
menu.findItem(R.id.menu_check_html).setVisible(etText.isRaw());
return super.onPrepareOptionsMenu(menu); return super.onPrepareOptionsMenu(menu);
} }
@ -261,6 +266,9 @@ public class ActivitySignature extends ActivityBase {
item.setChecked(!item.isChecked()); item.setChecked(!item.isChecked());
html(item.isChecked()); html(item.isChecked());
return true; return true;
} else if (itemId == R.id.menu_check_html) {
onMenuCheckHtml();
return true;
} else if (itemId == R.id.menu_import_file) { } else if (itemId == R.id.menu_import_file) {
onMenuSelectFile(); onMenuSelectFile();
return true; return true;
@ -272,6 +280,29 @@ public class ActivitySignature extends ActivityBase {
Helper.viewFAQ(this, 57); Helper.viewFAQ(this, 57);
} }
private void onMenuCheckHtml() {
Parser parser = Parser.htmlParser().setTrackErrors(20);
Jsoup.parse(etText.getText().toString(), "", parser);
ParseErrorList errors = parser.getErrors();
SpannableStringBuilderEx ssb = new SpannableStringBuilderEx();
ssb.append("Errors: ")
.append(Integer.toString(errors.size()))
.append("\n\n");
for (ParseError error : errors)
ssb.append("At ")
.append(error.getCursorPos())
.append(' ')
.append(error.getErrorMessage())
.append("\n\n");
new AlertDialog.Builder(this)
.setIcon(R.drawable.twotone_bug_report_24)
.setTitle(R.string.title_check_html)
.setMessage(ssb)
.setPositiveButton(android.R.string.ok, null)
.show();
}
private void onMenuSelectFile() { private void onMenuSelectFile() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE); intent.addCategory(Intent.CATEGORY_OPENABLE);

@ -11,6 +11,10 @@
android:checkable="true" android:checkable="true"
android:title="@string/title_edit_html" android:title="@string/title_edit_html"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/menu_check_html"
android:title="@string/title_check_html"
app:showAsAction="never" />
<item <item
android:id="@+id/menu_import_file" android:id="@+id/menu_import_file"
android:title="@string/title_import_file" android:title="@string/title_import_file"

@ -1110,6 +1110,7 @@
<string name="title_account_delete">Delete this account permanently?</string> <string name="title_account_delete">Delete this account permanently?</string>
<string name="title_identity_delete">Delete this identity permanently?</string> <string name="title_identity_delete">Delete this identity permanently?</string>
<string name="title_edit_html">Edit as HTML</string> <string name="title_edit_html">Edit as HTML</string>
<string name="title_check_html">Check HTML</string>
<string name="title_import_file">Import file</string> <string name="title_import_file">Import file</string>
<string name="title_sign_key">Sign key: %1$s</string> <string name="title_sign_key">Sign key: %1$s</string>
<string name="title_created_at">Created: %1$s</string> <string name="title_created_at">Created: %1$s</string>

Loading…
Cancel
Save