fixed crash while add/switch netowrk when language is not english(hindi)

This commit is contained in:
Qamar Zaman
2022-07-06 15:10:43 +05:00
parent 500484201b
commit fef17acaa7
3 changed files with 39 additions and 17 deletions
@@ -103,22 +103,16 @@ public class AddSwitchChainNetworkFragment extends BaseDAppsFragment {
Button btnAddSwitchNetwork = view.findViewById(R.id.fragment_add_switch_eth_chain_btn_sign);
if (mPanelType == ADD_ETHEREUM_CHAIN) {
btnAddSwitchNetwork.setText(R.string.approve);
SpannableString addChainHeading = Utils.createSpannableString(
getString(R.string.brave_wallet_allow_add_network_description),
getString(R.string.brave_wallet_learn_more), new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
TabUtils.openUrlInNewTab(false, Utils.BRAVE_SUPPORT_URL);
TabUtils.bringChromeTabbedActivityToTheTop(getActivity());
}
}, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView tvAddChainTitle = view.findViewById(R.id.fragment_add_switch_chain_tv_title);
tvAddChainTitle.setText(R.string.brave_wallet_allow_add_network_heading);
TextView addChainDesc = view.findViewById(R.id.fragment_add_switch_chain_tv_text);
Spanned spannedDescriptionText = Utils.createSpanForSurroundedPhrase(
getContext(), R.string.brave_wallet_allow_add_network_description, (v) -> {
TabUtils.openUrlInNewTab(false, Utils.BRAVE_SUPPORT_URL);
TabUtils.bringChromeTabbedActivityToTheTop(getActivity());
});
addChainDesc.setMovementMethod(LinkMovementMethod.getInstance());
addChainDesc.setText(addChainHeading);
addChainDesc.setText(spannedDescriptionText);
} else if (mPanelType == SWITCH_ETHEREUM_CHAIN) {
btnAddSwitchNetwork.setText(R.string.brave_wallet_allow_change_network_button);
@@ -29,9 +29,11 @@ import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.util.Pair;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
@@ -40,6 +42,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
@@ -87,6 +90,7 @@ import org.chromium.chrome.browser.crypto_wallet.model.WalletListItemModel;
import org.chromium.chrome.browser.crypto_wallet.observers.ApprovedTxObserver;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.util.TabUtils;
import org.chromium.ui.text.NoUnderlineClickableSpan;
import org.chromium.ui.widget.Toast;
import org.chromium.url.GURL;
@@ -1532,10 +1536,37 @@ public class Utils {
String text, ClickableSpan clickListener, int startIndex, int endIndex, int flags) {
assert null != text;
SpannableString spannableString = new SpannableString(text);
spannableString.setSpan(clickListener, startIndex, endIndex, flags);
if (startIndex >= 0 && endIndex > startIndex && endIndex < text.length()) {
spannableString.setSpan(clickListener, startIndex, endIndex, flags);
}
return spannableString;
}
/**
* This method should be used to make substring of a string clickable
* Example: This is <ph name="START">%1$s</ph>Clickable<ph name="END">%2$s</ph> text.
*
* @param context The context
* @param stringRes The id of resource string
* @param onClickListener The callback when clickable substring is clicked.
*/
public static Spannable createSpanForSurroundedPhrase(
Context context, @StringRes int stringRes, View.OnClickListener onClickListener) {
String htmlString =
String.format(context.getResources().getString(stringRes), "<a href=\"\">", "</a>");
Spannable spannable = new SpannableString(AndroidUtils.formateHTML(htmlString));
URLSpan[] spans = spannable.getSpans(0, spannable.length(), URLSpan.class);
for (URLSpan urlSpan : spans) {
NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan(context,
R.color.brave_theme_color, (view) -> { onClickListener.onClick(view); });
int spanStart = spannable.getSpanStart(urlSpan);
int spanEnd = spannable.getSpanEnd(urlSpan);
spannable.setSpan(linkSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.removeSpan(urlSpan);
}
return spannable;
}
public static SpannableString createSpannableString(
String text, String spanText, ClickableSpan clickListener, int flags) {
assert null != spanText;