diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-30 12:06:07 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-30 12:06:07 -0300 |
| commit | 5eb694a0468d7bcf199c58cec4b0b17529558339 (patch) | |
| tree | 73a1b10f0bb3a81b8f61097820fe54eb6daa8b43 /android/src/main | |
| parent | e3d1cfbe54bee9361d8ddbd1e83dfef226254880 (diff) | |
| parent | 0e9d3e374709744f4fe8e3a9c4cd6a9420530079 (diff) | |
| download | mullvadvpn-5eb694a0468d7bcf199c58cec4b0b17529558339.tar.xz mullvadvpn-5eb694a0468d7bcf199c58cec4b0b17529558339.zip | |
Merge branch 'show-version'
Diffstat (limited to 'android/src/main')
6 files changed, 92 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt index f5d4d6bd60..33920b749a 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt @@ -36,6 +36,8 @@ class MainActivity : FragmentActivity() { var daemon = CompletableDeferred<MullvadDaemon>() private set + var currentVersion = fetchCurrentVersion() + val connectionProxy = ConnectionProxy(this) val keyStatusListener = KeyStatusListener(daemon) val problemReport = MullvadProblemReport() @@ -149,4 +151,8 @@ class MainActivity : FragmentActivity() { private fun fetchSettings() = GlobalScope.async(Dispatchers.Default) { daemon.await().getSettings() } + + private fun fetchCurrentVersion() = GlobalScope.async(Dispatchers.Default) { + daemon.await().getCurrentVersion() + } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt index e88355c274..9de3dc12d7 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt @@ -25,6 +25,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) { external fun generateWireguardKey(): KeygenEvent? external fun getAccountData(accountToken: String): AccountData? external fun getCurrentLocation(): GeoIpLocation? + external fun getCurrentVersion(): String external fun getRelayLocations(): RelayList external fun getSettings(): Settings external fun getState(): TunnelState diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt index f82ef1e0a9..967e91b6f9 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt @@ -1,6 +1,13 @@ package net.mullvad.mullvadvpn +import kotlinx.coroutines.launch +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.Job + import android.content.Context +import android.content.Intent +import android.net.Uri import android.os.Bundle import android.support.v4.app.Fragment import android.view.LayoutInflater @@ -8,10 +15,14 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.ImageButton +import android.widget.TextView class SettingsFragment : Fragment() { private lateinit var parentActivity: MainActivity private lateinit var remainingTimeLabel: RemainingTimeLabel + private lateinit var appVersionLabel: TextView + + private var showCurrentVersionJob: Job? = null override fun onAttach(context: Context) { super.onAttach(context) @@ -37,11 +48,17 @@ class SettingsFragment : Fragment() { view.findViewById<View>(R.id.account).setOnClickListener { openSubFragment(AccountFragment()) } + view.findViewById<View>(R.id.app_version).setOnClickListener { + openLink("https://mullvad.net/download/") + } view.findViewById<View>(R.id.report_a_problem).setOnClickListener { openSubFragment(ProblemReportFragment()) } remainingTimeLabel = RemainingTimeLabel(parentActivity, view) + appVersionLabel = view.findViewById<TextView>(R.id.app_version_label) + + showCurrentVersionJob = showCurrentVersion() return view } @@ -56,6 +73,11 @@ class SettingsFragment : Fragment() { super.onPause() } + override fun onDestroyView() { + showCurrentVersionJob?.cancel() + super.onDestroyView() + } + private fun openSubFragment(fragment: Fragment) { fragmentManager?.beginTransaction()?.apply { setCustomAnimations( @@ -69,4 +91,16 @@ class SettingsFragment : Fragment() { commit() } } + + private fun openLink(url: String) { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + + startActivity(intent) + } + + private fun showCurrentVersion() = GlobalScope.launch(Dispatchers.Main) { + val version = parentActivity.currentVersion.await() + + appVersionLabel.setText(version) + } } diff --git a/android/src/main/res/drawable/icon_extlink.xml b/android/src/main/res/drawable/icon_extlink.xml new file mode 100644 index 0000000000..2411533520 --- /dev/null +++ b/android/src/main/res/drawable/icon_extlink.xml @@ -0,0 +1,10 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="16dp" + android:height="16dp" + android:viewportWidth="16" + android:viewportHeight="16"> + <path + android:pathData="M12.5858,2L8.9908,2C8.451,2 8,1.5523 8,1C8,0.4439 8.4464,0 8.997,0L15.003,0C15.547,0 16,0.4464 16,0.997L16,7.003C16,7.547 15.5523,8 15,8C14.4439,8 14,7.5564 14,7.0092L14,3.4142L6.7071,10.7071C6.3166,11.0976 5.6834,11.0976 5.2929,10.7071C4.9024,10.3166 4.9024,9.6834 5.2929,9.2929L12.5858,2ZM8.4645,4L6.4645,6L2,6L2,14L10,14L10,9.5355L12,7.5355L12,14.9975C12,15.5512 11.5442,16 10.9975,16L1.0025,16C0.4488,16 0,15.5442 0,14.9975L0,5.0025C0,4.4488 0.4558,4 1.0025,4L8.4645,4Z" + android:fillColor="#FFFFFF" + android:fillType="evenOdd"/> +</vector> diff --git a/android/src/main/res/layout/settings.xml b/android/src/main/res/layout/settings.xml index 0be7a8087e..fd86678a75 100644 --- a/android/src/main/res/layout/settings.xml +++ b/android/src/main/res/layout/settings.xml @@ -64,6 +64,46 @@ android:src="@drawable/icon_chevron" /> </LinearLayout> + <LinearLayout android:id="@+id/app_version" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:paddingHorizontal="16dp" + android:background="@drawable/cell_button_background" + android:clickable="true" + android:gravity="center" + > + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:paddingHorizontal="8dp" + android:paddingVertical="17dp" + android:textColor="@color/white" + android:textSize="20sp" + android:textStyle="bold" + android:text="@string/app_version" + /> + <TextView android:id="@+id/app_version_label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:paddingHorizontal="8dp" + android:gravity="right" + android:textColor="@color/white60" + android:textSize="13sp" + android:textStyle="bold" + android:text="" + android:textAllCaps="true" + /> + <ImageView + android:layout_width="16dp" + android:layout_height="16dp" + android:layout_weight="0" + android:alpha="0.6" + android:src="@drawable/icon_extlink" + /> + </LinearLayout> <LinearLayout android:id="@+id/report_a_problem" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index 711be12793..0ca628f401 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -16,6 +16,7 @@ <string name="settings_account">Account</string> <string name="less_than_a_day_left">less than a day left</string> <string name="out_of_time">Out of time</string> + <string name="app_version">App version</string> <string name="report_a_problem">Report a problem</string> <string name="quit">Quit</string> |
