|
|
@@ -4,8 +4,6 @@ import android.content.Context; |
|
|
|
import android.os.Bundle; |
|
|
|
import android.text.InputFilter; |
|
|
|
import android.text.LoginFilter; |
|
|
|
import android.text.SpannableStringBuilder; |
|
|
|
import android.text.Spanned; |
|
|
|
import android.view.LayoutInflater; |
|
|
|
import android.view.Menu; |
|
|
|
import android.view.MenuInflater; |
|
|
@@ -17,7 +15,6 @@ import android.widget.EditText; |
|
|
|
|
|
|
|
import com.wireguard.android.databinding.ConfigEditFragmentBinding; |
|
|
|
import com.wireguard.config.Config; |
|
|
|
import com.wireguard.crypto.KeyEncoding; |
|
|
|
|
|
|
|
/** |
|
|
|
* Fragment for editing a WireGuard configuration. |
|
|
@@ -58,39 +55,7 @@ public class ConfigEditFragment extends BaseConfigFragment { |
|
|
|
} |
|
|
|
}); |
|
|
|
final EditText privateKeyText = binding.getRoot().findViewById(R.id.private_key_text); |
|
|
|
privateKeyText.setFilters(new InputFilter[]{ |
|
|
|
new InputFilter() { |
|
|
|
@Override |
|
|
|
public CharSequence filter(final CharSequence source, |
|
|
|
final int sStart, final int sEnd, |
|
|
|
final Spanned dest, |
|
|
|
final int dStart, final int dEnd) { |
|
|
|
SpannableStringBuilder replacement = null; |
|
|
|
int rIndex = 0; |
|
|
|
final int dLength = dest.length(); |
|
|
|
for (int sIndex = sStart; sIndex < sEnd; ++sIndex) { |
|
|
|
final char c = source.charAt(sIndex); |
|
|
|
final int dIndex = dStart + (sIndex - sStart); |
|
|
|
// Restrict characters to the base64 character set. |
|
|
|
// Ensure adding this character does not push the length over the limit. |
|
|
|
if (((dIndex + 1 < KeyEncoding.KEY_LENGTH_BASE64 && isAllowed(c)) || |
|
|
|
(dIndex + 1 == KeyEncoding.KEY_LENGTH_BASE64 && c == '=')) && |
|
|
|
dLength + (sIndex - sStart) < KeyEncoding.KEY_LENGTH_BASE64) { |
|
|
|
++rIndex; |
|
|
|
} else { |
|
|
|
if (replacement == null) |
|
|
|
replacement = new SpannableStringBuilder(source, sStart, sEnd); |
|
|
|
replacement.delete(rIndex, rIndex + 1); |
|
|
|
} |
|
|
|
} |
|
|
|
return replacement; |
|
|
|
} |
|
|
|
|
|
|
|
private boolean isAllowed(final char c) { |
|
|
|
return Character.isLetterOrDigit(c) || c == '+' || c == '/'; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
privateKeyText.setFilters(new InputFilter[]{new KeyInputFilter()}); |
|
|
|
binding.setConfig(localConfig); |
|
|
|
return binding.getRoot(); |
|
|
|
} |
|
|
|