summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-10-01 13:47:52 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-10-01 13:47:52 -0300
commitd3998b926b76c8b6859820e8435a610b3fe99365 (patch)
tree4887c300fbb7e171fbe13553bfa402f34251f38c /android/src
parent8db85227e3d086e0337b7e325873f8834c555691 (diff)
parentf78d356da409b6af172145d7ccb3a40548ecc9f7 (diff)
downloadmullvadvpn-d3998b926b76c8b6859820e8435a610b3fe99365.tar.xz
mullvadvpn-d3998b926b76c8b6859820e8435a610b3fe99365.zip
Merge branch 'support-api-21'
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInput.kt31
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInputContainer.kt61
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt5
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt10
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/HeaderBar.kt8
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt6
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/WireguardKeyFragment.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt9
-rw-r--r--android/src/main/res/drawable/icon_alert.xml19
-rw-r--r--android/src/main/res/drawable/icon_close.xml37
-rw-r--r--android/src/main/res/layout/login.xml4
13 files changed, 151 insertions, 47 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInput.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInput.kt
index 170df9a0be..6446bd07b5 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInput.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInput.kt
@@ -1,6 +1,6 @@
package net.mullvad.mullvadvpn
-import android.content.Context
+import android.content.res.Resources
import android.text.Editable
import android.text.TextWatcher
import android.text.style.MetricAffectingSpan
@@ -8,19 +8,16 @@ import android.view.View
import android.view.View.OnFocusChangeListener
import android.widget.EditText
import android.widget.ImageButton
+import net.mullvad.mullvadvpn.AccountInputContainer.BorderState
const val MIN_ACCOUNT_TOKEN_LENGTH = 10
-class AccountInput(val parentView: View, val context: Context) {
- private val disabledBackgroundColor = context.getColor(R.color.white20)
- private val disabledTextColor = context.getColor(R.color.white)
- private val enabledBackgroundColor = context.getColor(R.color.white)
- private val enabledTextColor = context.getColor(R.color.blue)
- private val errorTextColor = context.getColor(R.color.red)
-
- private val resources = context.resources
- private val focusedBorder = resources.getDrawable(R.drawable.account_input_border_focused, null)
- private val errorBorder = resources.getDrawable(R.drawable.account_input_border_error, null)
+class AccountInput(val parentView: View, val resources: Resources) {
+ private val disabledBackgroundColor = resources.getColor(R.color.white20)
+ private val disabledTextColor = resources.getColor(R.color.white)
+ private val enabledBackgroundColor = resources.getColor(R.color.white)
+ private val enabledTextColor = resources.getColor(R.color.blue)
+ private val errorTextColor = resources.getColor(R.color.red)
private var inputHasFocus = false
set(value) {
@@ -43,7 +40,7 @@ class AccountInput(val parentView: View, val context: Context) {
}
}
- val container: View = parentView.findViewById(R.id.account_input_container)
+ val container: AccountInputContainer = parentView.findViewById(R.id.account_input_container)
val input: EditText = parentView.findViewById(R.id.account_input)
val button: ImageButton = parentView.findViewById(R.id.login_button)
@@ -121,13 +118,11 @@ class AccountInput(val parentView: View, val context: Context) {
private fun updateBorder() {
if (usingErrorColor) {
- container.foreground = errorBorder
+ container.borderState = BorderState.ERROR
+ } else if (inputHasFocus) {
+ container.borderState = BorderState.FOCUSED
} else {
- if (inputHasFocus) {
- container.foreground = focusedBorder
- } else {
- container.foreground = null
- }
+ container.borderState = BorderState.UNFOCUSED
}
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInputContainer.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInputContainer.kt
new file mode 100644
index 0000000000..19d58c9608
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountInputContainer.kt
@@ -0,0 +1,61 @@
+package net.mullvad.mullvadvpn
+
+import android.content.Context
+import android.util.AttributeSet
+import android.widget.LinearLayout
+
+class AccountInputContainer : LinearLayout {
+ enum class BorderState {
+ UNFOCUSED,
+ FOCUSED,
+ ERROR
+ }
+
+ private val errorBorder = resources.getDrawable(R.drawable.account_input_border_error, null)
+ private val focusedBorder = resources.getDrawable(R.drawable.account_input_border_focused, null)
+
+ var borderState = BorderState.UNFOCUSED
+ set(value) {
+ field = value
+
+ overlay.clear()
+
+ when (value) {
+ BorderState.FOCUSED -> overlay.add(focusedBorder)
+ BorderState.ERROR -> overlay.add(errorBorder)
+ }
+ }
+
+ constructor(context: Context) : super(context) {}
+
+ constructor(context: Context, attributes: AttributeSet) : super(context, attributes) {}
+
+ constructor(context: Context, attributes: AttributeSet, defaultStyleAttribute: Int) :
+ super(context, attributes, defaultStyleAttribute) {}
+
+ constructor(
+ context: Context,
+ attributes: AttributeSet,
+ defaultStyleAttribute: Int,
+ defaultStyleResource: Int
+ ) : super(context, attributes, defaultStyleAttribute, defaultStyleResource) {
+ }
+
+ protected override fun onLayout(
+ changed: Boolean,
+ left: Int,
+ top: Int,
+ right: Int,
+ bottom: Int
+ ) {
+ super.onLayout(changed, left, top, right, bottom)
+
+ if (changed) {
+ val width = right - left
+ val height = bottom - top
+
+ errorBorder.setBounds(0, 0, width, height)
+ focusedBorder.setBounds(0, 0, width, height)
+ }
+ }
+}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt
index df833df39b..a033b0fe84 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectFragment.kt
@@ -68,14 +68,15 @@ class ConnectFragment : Fragment() {
savedInstanceState: Bundle?
): View {
val view = inflater.inflate(R.layout.connect, container, false)
+ val resources = parentActivity.resources
view.findViewById<ImageButton>(R.id.settings).setOnClickListener {
parentActivity.openSettings()
}
- headerBar = HeaderBar(view, context!!)
+ headerBar = HeaderBar(view, resources)
notificationBanner = NotificationBanner(view, context!!, versionInfoCache)
- status = ConnectionStatus(view, context!!)
+ status = ConnectionStatus(view, resources)
locationInfo = LocationInfo(view, context!!)
locationInfo.isTunnelInfoExpanded = isTunnelInfoExpanded
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt
index 707bfde70e..a56852bc59 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt
@@ -1,18 +1,18 @@
package net.mullvad.mullvadvpn
-import android.content.Context
+import android.content.res.Resources
import android.view.View
import android.widget.TextView
import net.mullvad.mullvadvpn.model.ActionAfterDisconnect
import net.mullvad.mullvadvpn.model.TunnelState
-class ConnectionStatus(val parentView: View, val context: Context) {
+class ConnectionStatus(val parentView: View, val resources: Resources) {
private val spinner: View = parentView.findViewById(R.id.connecting_spinner)
private val text: TextView = parentView.findViewById(R.id.connection_status)
- private val unsecuredTextColor = context.getColor(R.color.red)
- private val connectingTextColor = context.getColor(R.color.white)
- private val securedTextColor = context.getColor(R.color.green)
+ private val unsecuredTextColor = resources.getColor(R.color.red)
+ private val connectingTextColor = resources.getColor(R.color.white)
+ private val securedTextColor = resources.getColor(R.color.green)
fun setState(state: TunnelState) {
when (state) {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt
index 37a068c3e6..7032b301fe 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt
@@ -29,6 +29,8 @@ class ForegroundNotificationManager(val service: Service, val connectionProxy: C
tunnelState = state
}
+ private val badgeColor = service.resources.getColor(R.color.colorPrimary)
+
private var reconnecting = false
private var showingReconnecting = false
@@ -189,7 +191,7 @@ class ForegroundNotificationManager(val service: Service, val connectionProxy: C
val builder = NotificationCompat.Builder(service, CHANNEL_ID)
.setSmallIcon(R.drawable.notification)
- .setColor(service.getColor(R.color.colorPrimary))
+ .setColor(badgeColor)
.setContentTitle(service.getString(notificationText))
.setContentIntent(pendingIntent)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/HeaderBar.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/HeaderBar.kt
index 575c166268..b89b13e08a 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/HeaderBar.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/HeaderBar.kt
@@ -1,14 +1,14 @@
package net.mullvad.mullvadvpn
-import android.content.Context
+import android.content.res.Resources
import android.view.View
import net.mullvad.mullvadvpn.model.TunnelState
-class HeaderBar(val parentView: View, val context: Context) {
+class HeaderBar(val parentView: View, val resources: Resources) {
private val headerBar: View = parentView.findViewById(R.id.header_bar)
- private val securedColor = context.getColor(R.color.green)
- private val unsecuredColor = context.getColor(R.color.red)
+ private val securedColor = resources.getColor(R.color.green)
+ private val unsecuredColor = resources.getColor(R.color.red)
fun setState(state: TunnelState) {
when (state) {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt
index 702c7793b0..5561043791 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt
@@ -54,7 +54,7 @@ class LoginFragment : Fragment() {
loggedInStatus = view.findViewById(R.id.logged_in_status)
loginFailStatus = view.findViewById(R.id.login_fail_status)
- accountInput = AccountInput(view, parentActivity)
+ accountInput = AccountInput(view, parentActivity.resources)
accountInput.onLogin = { accountToken -> login(accountToken) }
view.findViewById<View>(R.id.create_account).setOnClickListener { createAccount() }
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt
index 4c2b71f7b3..df996073a0 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt
@@ -13,11 +13,11 @@ import org.joda.time.PeriodType
class RemainingTimeLabel(val parentActivity: MainActivity, val view: View) {
private val accountCache = parentActivity.accountCache
- private val expiredColor = parentActivity.getColor(R.color.red)
- private val normalColor = parentActivity.getColor(R.color.white60)
-
private val resources = parentActivity.resources
+ private val expiredColor = resources.getColor(R.color.red)
+ private val normalColor = resources.getColor(R.color.white60)
+
private val label = view.findViewById<TextView>(R.id.remaining_time)
private var updateJob: Job? = null
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/WireguardKeyFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/WireguardKeyFragment.kt
index 31e59f107e..14d4803717 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/WireguardKeyFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/WireguardKeyFragment.kt
@@ -133,7 +133,7 @@ class WireguardKeyFragment : Fragment() {
private fun setStatusMessage(message: Int, color: Int) {
statusMessage.setText(message)
- statusMessage.setTextColor(parentActivity.getColor(color))
+ statusMessage.setTextColor(resources.getColor(color))
statusMessage.visibility = View.VISIBLE
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt
index ff456acef7..fc7de5b3be 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt
@@ -17,10 +17,11 @@ class RelayItemHolder(
private val relayActive: ImageView = view.findViewById(R.id.relay_active)
private val selectedIcon: View = view.findViewById(R.id.selected)
- private val countryColor = view.context.getColor(R.color.blue)
- private val cityColor = view.context.getColor(R.color.blue40)
- private val relayColor = view.context.getColor(R.color.blue20)
- private val selectedColor = view.context.getColor(R.color.green)
+ private val resources = view.context.resources
+ private val countryColor = resources.getColor(R.color.blue)
+ private val cityColor = resources.getColor(R.color.blue40)
+ private val relayColor = resources.getColor(R.color.blue20)
+ private val selectedColor = resources.getColor(R.color.green)
private val countryPadding = view.resources.getDimensionPixelSize(R.dimen.country_row_padding)
private val cityPadding = view.resources.getDimensionPixelSize(R.dimen.city_row_padding)
diff --git a/android/src/main/res/drawable/icon_alert.xml b/android/src/main/res/drawable/icon_alert.xml
index f0641cc57d..63b33dd00a 100644
--- a/android/src/main/res/drawable/icon_alert.xml
+++ b/android/src/main/res/drawable/icon_alert.xml
@@ -7,6 +7,23 @@
android:viewportHeight="24.0"
>
<path android:fillColor="#E34039"
- android:pathData="m12 24c-6.627417 0-12-5.372583-12-12s5.372583-12 12-12 12 5.372583 12 12-5.372583 12-12 12zm0-19.5c-.8284271 0-1.5.67157288-1.5 1.5v7.5c0 .8284271.6715729 1.5 1.5 1.5s1.5-.6715729 1.5-1.5v-7.5c0-.82842712-.6715729-1.5-1.5-1.5zm0 12c-.8284271 0-1.5.6715729-1.5 1.5s.6715729 1.5 1.5 1.5 1.5-.6715729 1.5-1.5-.6715729-1.5-1.5-1.5z"
+ android:pathData="
+ m 12,24
+ c -6.627417,0 -12,-5.372583 -12,-12
+ s 5.372583,-12 12,-12 12,5.372583 12,12 -5.372583,12 -12,12
+ z
+ m 0,-19.5
+ c -0.8284271,0 -1.5,0.67157288 -1.5,1.5
+ v 7.5
+ c 0,0.8284271 0.6715729,1.5 1.5,1.5
+ s 1.5,-0.6715729 1.5,-1.5
+ v -7.5
+ c 0,-0.82842712 -0.6715729,-1.5 -1.5,-1.5
+ z
+ m 0,12
+ c -0.8284271,0 -1.5,0.6715729 -1.5,1.5
+ s 0.6715729,1.5 1.5,1.5 1.5,-0.6715729 1.5,-1.5 -0.6715729,-1.5 -1.5,-1.5
+ z
+ "
/>
</vector>
diff --git a/android/src/main/res/drawable/icon_close.xml b/android/src/main/res/drawable/icon_close.xml
index 7cab786403..7a3fb50c7b 100644
--- a/android/src/main/res/drawable/icon_close.xml
+++ b/android/src/main/res/drawable/icon_close.xml
@@ -6,9 +6,36 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0"
>
- <group>
- <path android:fillColor="#99FFFFFF"
- android:pathData="M12,24 C5.37312,24 -3.2900871e-16,18.62688 -7.34788079e-16,12 C-1.14056745e-15,5.37312 5.37312,0 12,0 C18.62688,0 24,5.37312 24,12 C24,18.62688 18.62688,24 12,24 Z M13.5,12 L17.2947612,8.20523878 C17.6857559,7.81424414 17.6838785,7.18387854 17.293923,6.79392296 L17.206077,6.70607704 C16.8181114,6.31811142 16.1842538,6.31574616 15.7947612,6.70523878 L12,10.5 L8.20523878,6.70523878 C7.81574616,6.31574616 7.18188858,6.31811142 6.79392296,6.70607704 L6.70607704,6.79392296 C6.31612146,7.18387854 6.31424414,7.81424414 6.70523878,8.20523878 L10.5,12 L6.70523878,15.7947612 C6.31424414,16.1857559 6.31612146,16.8161215 6.70607704,17.206077 L6.79392296,17.293923 C7.18188858,17.6818886 7.81574616,17.6842538 8.20523878,17.2947612 L12,13.5 L15.7947612,17.2947612 C16.1842538,17.6842538 16.8181114,17.6818886 17.206077,17.293923 L17.293923,17.206077 C17.6838785,16.8161215 17.6857559,16.1857559 17.2947612,15.7947612 L13.5,12 L13.5,12 Z"
- />
- </group>
+ <path android:fillColor="#99FFFFFF"
+ android:pathData="
+ M 12,24
+ C 5.37312,24 0,18.62688 0,12
+ C 0,5.37312 5.37312,0 12,0
+ C 18.62688,0 24,5.37312 24,12
+ C 24,18.62688 18.62688,24 12,24
+ Z
+ M 13.5,12
+ L 17.2947612,8.20523878
+ C 17.6857559,7.81424414 17.6838785,7.18387854 17.293923,6.79392296
+ L 17.206077,6.70607704
+ C 16.8181114,6.31811142 16.1842538,6.31574616 15.7947612,6.70523878
+ L 12,10.5
+ L 8.20523878,6.70523878
+ C 7.81574616,6.31574616 7.18188858,6.31811142 6.79392296,6.70607704
+ L 6.70607704,6.79392296
+ C 6.31612146,7.18387854 6.31424414,7.81424414 6.70523878,8.20523878
+ L 10.5,12
+ L 6.70523878,15.7947612
+ C 6.31424414,16.1857559 6.31612146,16.8161215 6.70607704,17.206077
+ L 6.79392296,17.293923
+ C 7.18188858,17.6818886 7.81574616,17.6842538 8.20523878,17.2947612
+ L 12,13.5
+ L 15.7947612,17.2947612
+ C 16.1842538,17.6842538 16.8181114,17.6818886 17.206077,17.293923
+ L 17.293923,17.206077
+ C 17.6838785,16.8161215 17.6857559,16.1857559 17.2947612,15.7947612
+ L 13.5,12
+ L13.5,12
+ Z"
+ />
</vector>
diff --git a/android/src/main/res/layout/login.xml b/android/src/main/res/layout/login.xml
index ce35d56525..8ebf04c8b4 100644
--- a/android/src/main/res/layout/login.xml
+++ b/android/src/main/res/layout/login.xml
@@ -107,7 +107,7 @@
android:textSize="13sp"
android:text="@string/login_description"
/>
- <LinearLayout android:id="@+id/account_input_container"
+ <net.mullvad.mullvadvpn.AccountInputContainer android:id="@+id/account_input_container"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal"
@@ -137,7 +137,7 @@
android:background="@drawable/login_button_background"
android:src="@drawable/login_button_arrow"
/>
- </LinearLayout>
+ </net.mullvad.mullvadvpn.AccountInputContainer>
<Space
android:layout_width="match_parent"
android:layout_height="0dp"