punycode host name in open link dialog

pull/197/head
M66B 4 years ago
parent 83975e7c5b
commit 73405f4647

@ -156,6 +156,7 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.net.IDN;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.text.Collator; import java.text.Collator;
@ -6256,7 +6257,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
final Group grpDifferent = dview.findViewById(R.id.grpDifferent); final Group grpDifferent = dview.findViewById(R.id.grpDifferent);
final Group grpOwner = dview.findViewById(R.id.grpOwner); final Group grpOwner = dview.findViewById(R.id.grpOwner);
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); final Context context = getContext();
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
ibDifferent.setOnClickListener(new View.OnClickListener() { ibDifferent.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -6288,7 +6290,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
cbSecure.setText( cbSecure.setText(
secure ? R.string.title_link_https : R.string.title_link_http); secure ? R.string.title_link_https : R.string.title_link_http);
cbSecure.setTextColor(Helper.resolveColor(getContext(), cbSecure.setTextColor(Helper.resolveColor(context,
secure ? android.R.attr.textColorSecondary : R.attr.colorWarning)); secure ? android.R.attr.textColorSecondary : R.attr.colorWarning));
cbSecure.setTypeface( cbSecure.setTypeface(
secure ? Typeface.DEFAULT : Typeface.DEFAULT_BOLD); secure ? Typeface.DEFAULT : Typeface.DEFAULT_BOLD);
@ -6325,12 +6327,12 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
@Override @Override
public void onClick(View v) { public void onClick(View v) {
ClipboardManager clipboard = ClipboardManager clipboard =
(ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard != null) { if (clipboard != null) {
ClipData clip = ClipData.newPlainText(title, etLink.getText().toString()); ClipData clip = ClipData.newPlainText(title, etLink.getText().toString());
clipboard.setPrimaryClip(clip); clipboard.setPrimaryClip(clip);
ToastEx.makeText(getContext(), R.string.title_clipboard_copied, Toast.LENGTH_LONG).show(); ToastEx.makeText(context, R.string.title_clipboard_copied, Toast.LENGTH_LONG).show();
} }
} }
}); });
@ -6364,7 +6366,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
}); });
tvOwnerRemark.setMovementMethod(LinkMovementMethod.getInstance()); tvOwnerRemark.setMovementMethod(LinkMovementMethod.getInstance());
cbNotAgain.setText(getContext().getString(R.string.title_no_ask_for_again, uri.getHost())); cbNotAgain.setText(context.getString(R.string.title_no_ask_for_again, uri.getHost()));
cbNotAgain.setVisibility( cbNotAgain.setVisibility(
"https".equals(uri.getScheme()) && !TextUtils.isEmpty(uri.getHost()) "https".equals(uri.getScheme()) && !TextUtils.isEmpty(uri.getHost())
? View.VISIBLE : View.GONE); ? View.VISIBLE : View.GONE);
@ -6421,11 +6423,25 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvTitle.setText(title); tvTitle.setText(title);
tvTitle.setVisibility(TextUtils.isEmpty(title) ? View.GONE : View.VISIBLE); tvTitle.setVisibility(TextUtils.isEmpty(title) ? View.GONE : View.VISIBLE);
String host = uri.getHost();
String puny;
try {
puny = IDN.toASCII(host);
} catch (Throwable ex) {
Log.e(ex);
puny = host;
}
if (host != null && !host.equals(puny)) {
etLink.setText(uri.buildUpon().encodedAuthority(puny).build().toString());
etLink.setTextColor(Helper.resolveColor(context, R.attr.colorWarning));
} else
etLink.setText(uri.toString()); etLink.setText(uri.toString());
grpDifferent.setVisibility(uri.getHost() == null || grpDifferent.setVisibility(host == null ||
uriTitle == null || uriTitle.getHost() == null || uriTitle == null || uriTitle.getHost() == null ||
uriTitle.getHost().equalsIgnoreCase(uri.getHost()) uriTitle.getHost().equalsIgnoreCase(host)
? View.GONE : View.VISIBLE); ? View.GONE : View.VISIBLE);
boolean disconnect_links = prefs.getBoolean("disconnect_links", true); boolean disconnect_links = prefs.getBoolean("disconnect_links", true);
@ -6437,8 +6453,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvDisconnect.setVisibility(categories == null ? View.GONE : View.VISIBLE); tvDisconnect.setVisibility(categories == null ? View.GONE : View.VISIBLE);
tvDisconnectCategories.setVisibility(categories == null ? View.GONE : View.VISIBLE); tvDisconnectCategories.setVisibility(categories == null ? View.GONE : View.VISIBLE);
final Context context = getContext();
return new AlertDialog.Builder(context) return new AlertDialog.Builder(context)
.setView(dview) .setView(dview)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {

Loading…
Cancel
Save