global: cleanup code style
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
10e910186e
commit
d74b988f75
@ -5,8 +5,9 @@
|
|||||||
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.wireguard.android.tunnel">
|
package="com.wireguard.android.tunnel">
|
||||||
|
|
||||||
<application>
|
<application>
|
||||||
<service
|
<service
|
||||||
android:name="com.wireguard.android.backend.GoBackend$VpnService"
|
android:name="com.wireguard.android.backend.GoBackend$VpnService"
|
||||||
android:permission="android.permission.BIND_VPN_SERVICE">
|
android:permission="android.permission.BIND_VPN_SERVICE">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -11,6 +11,7 @@ import com.wireguard.util.NonNullForAll;
|
|||||||
public final class BackendException extends Exception {
|
public final class BackendException extends Exception {
|
||||||
private final Object[] format;
|
private final Object[] format;
|
||||||
private final Reason reason;
|
private final Reason reason;
|
||||||
|
|
||||||
public BackendException(final Reason reason, final Object... format) {
|
public BackendException(final Reason reason, final Object... format) {
|
||||||
this.reason = reason;
|
this.reason = reason;
|
||||||
this.format = format;
|
this.format = format;
|
||||||
|
@ -42,6 +42,7 @@ public final class GoBackend implements Backend {
|
|||||||
@Nullable private Config currentConfig;
|
@Nullable private Config currentConfig;
|
||||||
@Nullable private Tunnel currentTunnel;
|
@Nullable private Tunnel currentTunnel;
|
||||||
private int currentTunnelHandle = -1;
|
private int currentTunnelHandle = -1;
|
||||||
|
|
||||||
public GoBackend(final Context context) {
|
public GoBackend(final Context context) {
|
||||||
SharedLibraryLoader.loadSharedLibrary(context, "wg-go");
|
SharedLibraryLoader.loadSharedLibrary(context, "wg-go");
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
@ -189,6 +189,7 @@ public class RootShell {
|
|||||||
public static class RootShellException extends Exception {
|
public static class RootShellException extends Exception {
|
||||||
private final Object[] format;
|
private final Object[] format;
|
||||||
private final Reason reason;
|
private final Reason reason;
|
||||||
|
|
||||||
public RootShellException(final Reason reason, final Object... format) {
|
public RootShellException(final Reason reason, final Object... format) {
|
||||||
this.reason = reason;
|
this.reason = reason;
|
||||||
this.format = format;
|
this.format = format;
|
||||||
|
@ -18,9 +18,11 @@ import java.io.InputStream;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
public class BadConfigExceptionTest {
|
public class BadConfigExceptionTest {
|
||||||
|
private static final Map<String, InputStream> CONFIG_MAP = new HashMap<>();
|
||||||
private static final String[] CONFIG_NAMES = {
|
private static final String[] CONFIG_NAMES = {
|
||||||
"invalid-key",
|
"invalid-key",
|
||||||
"invalid-number",
|
"invalid-number",
|
||||||
@ -31,14 +33,6 @@ public class BadConfigExceptionTest {
|
|||||||
"unknown-attribute",
|
"unknown-attribute",
|
||||||
"unknown-section"
|
"unknown-section"
|
||||||
};
|
};
|
||||||
private static final Map<String, InputStream> CONFIG_MAP = new HashMap<>();
|
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void readConfigs() {
|
|
||||||
for (final String config: CONFIG_NAMES) {
|
|
||||||
CONFIG_MAP.put(config, BadConfigExceptionTest.class.getClassLoader().getResourceAsStream(config + ".conf"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
public static void closeStreams() {
|
public static void closeStreams() {
|
||||||
@ -50,6 +44,13 @@ public class BadConfigExceptionTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void readConfigs() {
|
||||||
|
for (final String config : CONFIG_NAMES) {
|
||||||
|
CONFIG_MAP.put(config, BadConfigExceptionTest.class.getClassLoader().getResourceAsStream(config + ".conf"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void throws_correctly_with_INVALID_KEY_reason() {
|
public void throws_correctly_with_INVALID_KEY_reason() {
|
||||||
try {
|
try {
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package com.wireguard.config;
|
package com.wireguard.config;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -15,8 +14,20 @@ import java.util.Collection;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
public class ConfigTest {
|
public class ConfigTest {
|
||||||
|
|
||||||
|
@Test(expected = BadConfigException.class)
|
||||||
|
public void invalid_config_throws() throws IOException, BadConfigException {
|
||||||
|
try (final InputStream is = Objects.requireNonNull(getClass().getClassLoader()).getResourceAsStream("broken.conf")) {
|
||||||
|
Config.parse(is);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void valid_config_parses_correctly() throws IOException, ParseException {
|
public void valid_config_parses_correctly() throws IOException, ParseException {
|
||||||
Config config = null;
|
Config config = null;
|
||||||
@ -35,11 +46,4 @@ public class ConfigTest {
|
|||||||
assertEquals("Test config's allowed IPs are 0.0.0.0/0 and ::0/0", config.getPeers().get(0).getAllowedIps(), expectedAllowedIps);
|
assertEquals("Test config's allowed IPs are 0.0.0.0/0 and ::0/0", config.getPeers().get(0).getAllowedIps(), expectedAllowedIps);
|
||||||
assertEquals("Test config has one DNS server", 1, config.getInterface().getDnsServers().size());
|
assertEquals("Test config has one DNS server", 1, config.getInterface().getDnsServers().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = BadConfigException.class)
|
|
||||||
public void invalid_config_throws() throws IOException, BadConfigException {
|
|
||||||
try (final InputStream is = Objects.requireNonNull(getClass().getClassLoader()).getResourceAsStream("broken.conf")) {
|
|
||||||
Config.parse(is);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.wireguard.android.databinding
|
package com.wireguard.android.databinding
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
@ -7,7 +7,6 @@ package com.wireguard.android.databinding
|
|||||||
import java.util.AbstractList
|
import java.util.AbstractList
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
import java.util.Comparator
|
import java.util.Comparator
|
||||||
import java.util.NoSuchElementException
|
|
||||||
import java.util.Spliterator
|
import java.util.Spliterator
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,9 +15,9 @@ import androidx.fragment.app.Fragment
|
|||||||
import com.wireguard.android.Application
|
import com.wireguard.android.Application
|
||||||
import com.wireguard.android.R
|
import com.wireguard.android.R
|
||||||
import com.wireguard.android.databinding.AppListDialogFragmentBinding
|
import com.wireguard.android.databinding.AppListDialogFragmentBinding
|
||||||
|
import com.wireguard.android.databinding.ObservableKeyedArrayList
|
||||||
import com.wireguard.android.model.ApplicationData
|
import com.wireguard.android.model.ApplicationData
|
||||||
import com.wireguard.android.util.ErrorMessages
|
import com.wireguard.android.util.ErrorMessages
|
||||||
import com.wireguard.android.databinding.ObservableKeyedArrayList
|
|
||||||
|
|
||||||
class AppListDialogFragment : DialogFragment() {
|
class AppListDialogFragment : DialogFragment() {
|
||||||
private val appData: ObservableKeyedArrayList<String, ApplicationData> = ObservableKeyedArrayList()
|
private val appData: ObservableKeyedArrayList<String, ApplicationData> = ObservableKeyedArrayList()
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.wireguard.android.fragment
|
package com.wireguard.android.fragment
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
|
@ -9,9 +9,9 @@ import androidx.databinding.Bindable
|
|||||||
import com.wireguard.android.BR
|
import com.wireguard.android.BR
|
||||||
import com.wireguard.android.backend.Statistics
|
import com.wireguard.android.backend.Statistics
|
||||||
import com.wireguard.android.backend.Tunnel
|
import com.wireguard.android.backend.Tunnel
|
||||||
|
import com.wireguard.android.databinding.Keyed
|
||||||
import com.wireguard.android.util.ExceptionLoggers
|
import com.wireguard.android.util.ExceptionLoggers
|
||||||
import com.wireguard.config.Config
|
import com.wireguard.config.Config
|
||||||
import com.wireguard.android.databinding.Keyed
|
|
||||||
import java9.util.concurrent.CompletableFuture
|
import java9.util.concurrent.CompletableFuture
|
||||||
import java9.util.concurrent.CompletionStage
|
import java9.util.concurrent.CompletionStage
|
||||||
|
|
||||||
|
@ -25,7 +25,9 @@ object TunnelComparator : Comparator<String> {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val tokens: MutableList<NaturalSortToken> = ArrayList()
|
val tokens: MutableList<NaturalSortToken> = ArrayList()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
for (s in NATURAL_SORT_DIGIT_FINDER.findAll(originalString.split(WHITESPACE_FINDER).joinToString(" ").toLowerCase(Locale.ENGLISH))) {
|
for (s in NATURAL_SORT_DIGIT_FINDER.findAll(originalString.split(WHITESPACE_FINDER).joinToString(" ").toLowerCase(Locale.ENGLISH))) {
|
||||||
try {
|
try {
|
||||||
@ -36,6 +38,7 @@ object TunnelComparator : Comparator<String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
private val NATURAL_SORT_DIGIT_FINDER = Regex("""\d+|\D+""")
|
private val NATURAL_SORT_DIGIT_FINDER = Regex("""\d+|\D+""")
|
||||||
private val WHITESPACE_FINDER = Regex("""\s""")
|
private val WHITESPACE_FINDER = Regex("""\s""")
|
||||||
|
@ -21,8 +21,8 @@ import com.wireguard.android.R
|
|||||||
import com.wireguard.android.backend.Statistics
|
import com.wireguard.android.backend.Statistics
|
||||||
import com.wireguard.android.backend.Tunnel
|
import com.wireguard.android.backend.Tunnel
|
||||||
import com.wireguard.android.configStore.ConfigStore
|
import com.wireguard.android.configStore.ConfigStore
|
||||||
import com.wireguard.android.util.ExceptionLoggers
|
|
||||||
import com.wireguard.android.databinding.ObservableSortedKeyedArrayList
|
import com.wireguard.android.databinding.ObservableSortedKeyedArrayList
|
||||||
|
import com.wireguard.android.util.ExceptionLoggers
|
||||||
import com.wireguard.config.Config
|
import com.wireguard.config.Config
|
||||||
import java9.util.concurrent.CompletableFuture
|
import java9.util.concurrent.CompletableFuture
|
||||||
import java9.util.concurrent.CompletionStage
|
import java9.util.concurrent.CompletionStage
|
||||||
|
@ -97,9 +97,9 @@ class ZipExporterPreference(context: Context, attrs: AttributeSet?) : Preference
|
|||||||
}
|
}
|
||||||
is BiometricAuthenticator.Result.Failure -> {
|
is BiometricAuthenticator.Result.Failure -> {
|
||||||
Snackbar.make(
|
Snackbar.make(
|
||||||
prefActivity.findViewById(android.R.id.content),
|
prefActivity.findViewById(android.R.id.content),
|
||||||
it.message,
|
it.message,
|
||||||
Snackbar.LENGTH_SHORT
|
Snackbar.LENGTH_SHORT
|
||||||
).show()
|
).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
package com.wireguard.android.util
|
package com.wireguard.android.util
|
||||||
|
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import java.util.concurrent.Executor
|
|
||||||
import java9.util.concurrent.CompletableFuture
|
import java9.util.concurrent.CompletableFuture
|
||||||
import java9.util.concurrent.CompletionStage
|
import java9.util.concurrent.CompletionStage
|
||||||
|
import java.util.concurrent.Executor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper class for running asynchronous tasks and ensuring they are completed on the main thread.
|
* Helper class for running asynchronous tasks and ensuring they are completed on the main thread.
|
||||||
|
@ -25,25 +25,25 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:background="?attr/colorBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:background="?attr/colorBackground">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<com.google.android.material.card.MaterialCardView
|
<com.google.android.material.card.MaterialCardView
|
||||||
android:id="@+id/tunnel_detail_card"
|
android:id="@+id/tunnel_detail_card"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
app:cardBackgroundColor="?attr/elevationOverlayColor"
|
app:cardBackgroundColor="?attr/elevationOverlayColor"
|
||||||
app:cardCornerRadius="0dp"
|
app:cardCornerRadius="0dp"
|
||||||
app:cardElevation="2dp"
|
app:cardElevation="2dp"
|
||||||
app:contentPadding="8dp"
|
app:contentPadding="8dp"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -55,8 +55,8 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/interface_title"
|
android:text="@string/interface_title"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"/>
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<com.wireguard.android.widget.ToggleSwitch
|
<com.wireguard.android.widget.ToggleSwitch
|
||||||
android:id="@+id/tunnel_switch"
|
android:id="@+id/tunnel_switch"
|
||||||
@ -64,9 +64,9 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
app:checked="@{tunnel.state == State.UP}"
|
app:checked="@{tunnel.state == State.UP}"
|
||||||
app:onBeforeCheckedChanged="@{fragment::setTunnelState}"
|
|
||||||
app:layout_constraintBaseline_toBaselineOf="@+id/interface_title"
|
app:layout_constraintBaseline_toBaselineOf="@+id/interface_title"
|
||||||
app:layout_constraintEnd_toEndOf="parent"/>
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:onBeforeCheckedChanged="@{fragment::setTunnelState}" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/interface_name_label"
|
android:id="@+id/interface_name_label"
|
||||||
@ -76,7 +76,7 @@
|
|||||||
android:labelFor="@+id/interface_name_text"
|
android:labelFor="@+id/interface_name_text"
|
||||||
android:text="@string/name"
|
android:text="@string/name"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/interface_title"/>
|
app:layout_constraintTop_toBottomOf="@+id/interface_title" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/interface_name_text"
|
android:id="@+id/interface_name_text"
|
||||||
@ -86,7 +86,7 @@
|
|||||||
android:text="@{tunnel.name}"
|
android:text="@{tunnel.name}"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/interface_name_label"
|
app:layout_constraintTop_toBottomOf="@+id/interface_name_label"
|
||||||
tools:text="wg0"/>
|
tools:text="wg0" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/public_key_label"
|
android:id="@+id/public_key_label"
|
||||||
@ -96,7 +96,7 @@
|
|||||||
android:labelFor="@+id/public_key_text"
|
android:labelFor="@+id/public_key_text"
|
||||||
android:text="@string/public_key"
|
android:text="@string/public_key"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/interface_name_text"/>
|
app:layout_constraintTop_toBottomOf="@id/interface_name_text" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/public_key_text"
|
android:id="@+id/public_key_text"
|
||||||
@ -105,13 +105,13 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/public_key_description"
|
android:contentDescription="@string/public_key_description"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:singleLine="true"
|
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:onClick="@{ClipboardUtils::copyTextView}"
|
android:onClick="@{ClipboardUtils::copyTextView}"
|
||||||
|
android:singleLine="true"
|
||||||
android:text="@{config.interface.keyPair.publicKey.toBase64}"
|
android:text="@{config.interface.keyPair.publicKey.toBase64}"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/public_key_label"
|
app:layout_constraintTop_toBottomOf="@+id/public_key_label"
|
||||||
tools:text="wOs2eguFEohqIZxlSJ1CAT9584tc6ejj9hfGFsoBVkA="/>
|
tools:text="wOs2eguFEohqIZxlSJ1CAT9584tc6ejj9hfGFsoBVkA=" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/addresses_label"
|
android:id="@+id/addresses_label"
|
||||||
@ -121,7 +121,7 @@
|
|||||||
android:labelFor="@+id/addresses_text"
|
android:labelFor="@+id/addresses_text"
|
||||||
android:text="@string/addresses"
|
android:text="@string/addresses"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/public_key_text"/>
|
app:layout_constraintTop_toBottomOf="@id/public_key_text" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/addresses_text"
|
android:id="@+id/addresses_text"
|
||||||
@ -132,7 +132,7 @@
|
|||||||
android:text="@{config.interface.addresses}"
|
android:text="@{config.interface.addresses}"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/addresses_label"
|
app:layout_constraintTop_toBottomOf="@+id/addresses_label"
|
||||||
tools:text="fc00:bbbb:bbbb:bb11::3:368b/128"/>
|
tools:text="fc00:bbbb:bbbb:bb11::3:368b/128" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
@ -145,8 +145,8 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
app:items="@{config.peers}"
|
app:items="@{config.peers}"
|
||||||
app:layout="@{@layout/tunnel_detail_peer}"
|
app:layout="@{@layout/tunnel_detail_peer}"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/tunnel_detail_card"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
tools:ignore="UselessLeaf"/>
|
app:layout_constraintTop_toBottomOf="@+id/tunnel_detail_card"
|
||||||
|
tools:ignore="UselessLeaf" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -31,8 +31,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/peer"
|
android:text="@string/peer"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"/>
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/public_key_label"
|
android:id="@+id/public_key_label"
|
||||||
@ -42,7 +42,7 @@
|
|||||||
android:labelFor="@+id/public_key_text"
|
android:labelFor="@+id/public_key_text"
|
||||||
android:text="@string/public_key"
|
android:text="@string/public_key"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/peer_title"/>
|
app:layout_constraintTop_toBottomOf="@id/peer_title" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/public_key_text"
|
android:id="@+id/public_key_text"
|
||||||
@ -51,13 +51,13 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/public_key_description"
|
android:contentDescription="@string/public_key_description"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:singleLine="true"
|
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:onClick="@{ClipboardUtils::copyTextView}"
|
android:onClick="@{ClipboardUtils::copyTextView}"
|
||||||
|
android:singleLine="true"
|
||||||
android:text="@{item.publicKey.toBase64}"
|
android:text="@{item.publicKey.toBase64}"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/public_key_label"
|
app:layout_constraintTop_toBottomOf="@+id/public_key_label"
|
||||||
tools:text="wOs2eguFEohqIZxlSJ1CAT9584tc6ejj9hfGFsoBVkA="/>
|
tools:text="wOs2eguFEohqIZxlSJ1CAT9584tc6ejj9hfGFsoBVkA=" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/allowed_ips_label"
|
android:id="@+id/allowed_ips_label"
|
||||||
@ -67,7 +67,7 @@
|
|||||||
android:labelFor="@+id/allowed_ips_text"
|
android:labelFor="@+id/allowed_ips_text"
|
||||||
android:text="@string/allowed_ips"
|
android:text="@string/allowed_ips"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/public_key_text"/>
|
app:layout_constraintTop_toBottomOf="@+id/public_key_text" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/allowed_ips_text"
|
android:id="@+id/allowed_ips_text"
|
||||||
@ -77,7 +77,7 @@
|
|||||||
android:text="@{item.allowedIps}"
|
android:text="@{item.allowedIps}"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/allowed_ips_label"
|
app:layout_constraintTop_toBottomOf="@+id/allowed_ips_label"
|
||||||
tools:text="0.0.0.0/5, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3"/>
|
tools:text="0.0.0.0/5, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/endpoint_label"
|
android:id="@+id/endpoint_label"
|
||||||
@ -87,7 +87,7 @@
|
|||||||
android:labelFor="@+id/endpoint_text"
|
android:labelFor="@+id/endpoint_text"
|
||||||
android:text="@string/endpoint"
|
android:text="@string/endpoint"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/allowed_ips_text"/>
|
app:layout_constraintTop_toBottomOf="@+id/allowed_ips_text" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/endpoint_text"
|
android:id="@+id/endpoint_text"
|
||||||
@ -121,8 +121,8 @@
|
|||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/transfer_label"
|
app:layout_constraintTop_toBottomOf="@+id/transfer_label"
|
||||||
tools:visibility="visible"
|
tools:text="1024 MB"
|
||||||
tools:text="1024 MB" />
|
tools:visibility="visible" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="DetailText" parent="TextAppearance.MaterialComponents.Body1" />
|
<style name="DetailText" parent="TextAppearance.MaterialComponents.Body1" />
|
||||||
|
|
||||||
<style name="SectionText" parent="TextAppearance.MaterialComponents.Subtitle1" />
|
<style name="SectionText" parent="TextAppearance.MaterialComponents.Subtitle1" />
|
||||||
|
|
||||||
<style name="ThemeOverlay.AppTheme.TextInputEditText.OutlinedBox" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
|
<style name="ThemeOverlay.AppTheme.TextInputEditText.OutlinedBox" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
|
||||||
@ -64,6 +65,8 @@
|
|||||||
<style name="TextInputLayoutBase" parent="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
|
<style name="TextInputLayoutBase" parent="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
|
||||||
<item name="boxStrokeColor">?attr/colorSecondary</item>
|
<item name="boxStrokeColor">?attr/colorSecondary</item>
|
||||||
<item name="hintTextColor">?attr/colorOnPrimary</item>
|
<item name="hintTextColor">?attr/colorOnPrimary</item>
|
||||||
<item name="materialThemeOverlay">@style/ThemeOverlay.AppTheme.TextInputEditText.OutlinedBox</item>
|
<item name="materialThemeOverlay">
|
||||||
|
@style/ThemeOverlay.AppTheme.TextInputEditText.OutlinedBox
|
||||||
|
</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user