diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 576b7565..2a4f794a 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -1,6 +1,9 @@
+
+
+
@@ -735,6 +738,7 @@
xmlns:android
+
^$
@@ -745,6 +749,7 @@
xmlns:.*
+
^$
@@ -756,6 +761,7 @@
.*:id
+
http://schemas.android.com/apk/res/android
@@ -766,6 +772,7 @@
.*:name
+
http://schemas.android.com/apk/res/android
@@ -776,6 +783,7 @@
name
+
^$
@@ -786,6 +794,7 @@
style
+
^$
@@ -796,70 +805,19 @@
.*
+
^$
BY_NAME
-
-
-
-
- .*:layout_width
- http://schemas.android.com/apk/res/android
-
-
-
-
-
-
-
-
- .*:layout_height
- http://schemas.android.com/apk/res/android
-
-
-
-
-
-
-
-
- .*:layout_.*
- http://schemas.android.com/apk/res/android
-
-
- BY_NAME
-
-
-
-
-
-
- .*:width
- http://schemas.android.com/apk/res/android
-
-
- BY_NAME
-
-
-
-
-
-
- .*:height
- http://schemas.android.com/apk/res/android
-
-
- BY_NAME
-
-
.*
+
http://schemas.android.com/apk/res/android
@@ -871,6 +829,7 @@
.*
+
.*
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 45ef73cc..04f62a6b 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -148,14 +148,12 @@
-
-
@@ -164,7 +162,6 @@
-
@@ -176,7 +173,7 @@
-
+
@@ -274,7 +271,6 @@
-
@@ -305,6 +301,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -542,7 +550,9 @@
-
+
+
+
@@ -553,7 +563,7 @@
-
+
@@ -561,9 +571,6 @@
-
-
-
@@ -585,7 +592,9 @@
-
+
+
+
@@ -715,7 +724,6 @@
-
@@ -827,6 +835,9 @@
+
+
+
@@ -863,5 +874,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.ruby-version b/.ruby-version
new file mode 100644
index 00000000..197c4d5c
--- /dev/null
+++ b/.ruby-version
@@ -0,0 +1 @@
+2.4.0
diff --git a/Gemfile.lock b/Gemfile.lock
index f29f0653..54153c25 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,12 +1,12 @@
GEM
remote: https://rubygems.org/
specs:
- CFPropertyList (3.0.0)
- addressable (2.6.0)
- public_suffix (>= 2.0.2, < 4.0)
+ CFPropertyList (3.0.1)
+ addressable (2.7.0)
+ public_suffix (>= 2.0.2, < 5.0)
atomos (0.1.3)
- babosa (1.0.2)
- claide (1.0.2)
+ babosa (1.0.3)
+ claide (1.0.3)
colored (1.2)
colored2 (3.1.2)
commander-fastlane (4.4.6)
@@ -16,18 +16,18 @@ GEM
digest-crc (0.4.1)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
- dotenv (2.7.4)
+ dotenv (2.7.5)
emoji_regex (1.0.1)
- excon (0.65.0)
- faraday (0.15.4)
+ excon (0.68.0)
+ faraday (0.17.0)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
http-cookie (~> 1.0.0)
faraday_middleware (0.13.1)
faraday (>= 0.7.4, < 1.0)
- fastimage (2.1.5)
- fastlane (2.128.1)
+ fastimage (2.1.7)
+ fastlane (2.136.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
babosa (>= 1.0.2, < 2.0.0)
@@ -37,9 +37,9 @@ GEM
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 2.0)
excon (>= 0.45.0, < 1.0.0)
- faraday (~> 0.9)
+ faraday (~> 0.17)
faraday-cookie_jar (~> 0.0.6)
- faraday_middleware (~> 0.9)
+ faraday_middleware (~> 0.13.1)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-api-client (>= 0.21.2, < 0.24.0)
@@ -52,7 +52,7 @@ GEM
multipart-post (~> 2.0.0)
plist (>= 3.1.0, < 4.0.0)
public_suffix (~> 2.0.0)
- rubyzip (>= 1.2.2, < 2.0.0)
+ rubyzip (>= 1.3.0, < 2.0.0)
security (= 0.1.3)
simctl (~> 1.6.3)
slack-notifier (>= 2.0.0, < 3.0.0)
@@ -73,9 +73,9 @@ GEM
representable (~> 3.0)
retriable (>= 2.0, < 4.0)
signet (~> 0.9)
- google-cloud-core (1.3.0)
+ google-cloud-core (1.4.1)
google-cloud-env (~> 1.0)
- google-cloud-env (1.2.0)
+ google-cloud-env (1.3.0)
faraday (~> 0.11)
google-cloud-storage (1.16.0)
digest-crc (~> 0.4)
@@ -95,12 +95,12 @@ GEM
httpclient (2.8.3)
json (2.2.0)
jwt (2.1.0)
- memoist (0.16.0)
- mime-types (3.2.2)
+ memoist (0.16.1)
+ mime-types (3.3)
mime-types-data (~> 3.2015)
- mime-types-data (3.2019.0331)
+ mime-types-data (3.2019.1009)
mini_magick (4.9.5)
- multi_json (1.13.1)
+ multi_json (1.14.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
nanaimo (0.2.6)
@@ -114,14 +114,14 @@ GEM
uber (< 0.2.0)
retriable (3.1.2)
rouge (2.0.7)
- rubyzip (1.2.3)
+ rubyzip (1.3.0)
security (0.1.3)
- signet (0.11.0)
+ signet (0.12.0)
addressable (~> 2.3)
faraday (~> 0.9)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
- simctl (1.6.5)
+ simctl (1.6.6)
CFPropertyList
naturally
slack-notifier (2.3.2)
@@ -138,7 +138,7 @@ GEM
unf_ext (0.0.7.6)
unicode-display_width (1.6.0)
word_wrap (1.0.0)
- xcodeproj (1.11.0)
+ xcodeproj (1.13.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
diff --git a/README.md b/README.md
index 43b5a08a..c2595920 100644
--- a/README.md
+++ b/README.md
@@ -96,10 +96,11 @@ After the map is done loading, the NordVPN API is invoked to query all the suppo
## Screenshots
-
-
-
-
+
+
+
+
+
## Download
@@ -116,7 +117,7 @@ Please use my `test` branch of [Openpyn](https://github.com/1951FDG/openpyn-nord
To compile and run the project you'll need:
-- [Android Studio 3.3 or higher](https://developer.android.com/studio/)
+- [Android Studio 3.5 or higher](https://developer.android.com/studio/)
- Android `10 (API level 29)`
- Android SDK Build-Tools `29.0.2`
- CMake `v3.10.2`
@@ -130,9 +131,9 @@ To compile and run the project you'll need:
## References
-- [MyStorage.kt](app/src/main/kotlin/io/github/getsixtyfour/openpyn/utilities/MyStorage.kt) inspired by blog post, [Save and retrieve ArrayList of Object in SharedPreference: Android](https://readyandroid.wordpress.com/save-and-retrieve-arraylist-of-object-in-sharedpreference-android/) from Ready Android.
+- [MyStorage.kt](app/src/main/kotlin/io/github/getsixtyfour/openpyn/utils/MyStorage.kt) inspired by blog post, [Save and retrieve ArrayList of Object in SharedPreference: Android](https://readyandroid.wordpress.com/save-and-retrieve-arraylist-of-object-in-sharedpreference-android/) from Ready Android.
-- [PrintArray.kt](app/src/main/kotlin/io/github/getsixtyfour/openpyn/utilities/PrintArray.kt) inspired by Github repo, [PrintArray
+- [PrintArray.kt](app/src/main/kotlin/io/github/getsixtyfour/openpyn/utils/PrintArray.kt) inspired by Github repo, [PrintArray
](https://github.com/Tobibur/PrintArray) by Tobibur Rahman.
- [SecurityManager.java](app/src/main/java/com/getsixtyfour/openvpnmgmt/android/security/SecurityManager.java) inspired by blog post, [Making secured version of EditTextPreference](https://blog.nikitaog.me/2014/11/09/making-secured-edittextpreference/) by Nikita Ogorodnikov.
@@ -157,7 +158,6 @@ To compile and run the project you'll need:
- [Ktor](https://github.com/ktorio/ktor)
- [LeakCanary](https://github.com/square/leakcanary)
- [Minibar](https://github.com/mayuroks/minibar)
-- [Morphing Material Dialogs](https://github.com/AdityaAnand1/Morphing-Material-Dialogs)
- [Moshi](https://github.com/square/moshi)
- [Moshi: Pristine Models](https://github.com/jayrave/moshi-pristine-models)
- [MultiSelectDialog](https://github.com/1951FDG/Android-Multi-Select-Dialog)
@@ -170,6 +170,7 @@ To compile and run the project you'll need:
- [StaticLog](https://github.com/jupf/staticlog)
- [SVC](https://github.com/BansookNam/svc)
- [Toasty](https://github.com/GrenderG/Toasty)
+- [Unused Resources Remover for Android](https://github.com/konifar/gradle-unused-resources-remover-plugin)
## Feedback
diff --git a/app/build.gradle b/app/build.gradle
index e4a91b20..a2eafa5c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@ apply plugin: 'io.fabric'
apply plugin: 'io.gitlab.arturbosch.detekt'
+apply plugin: 'androidx.navigation.safeargs.kotlin'
+
//apply plugin: 'com.google.gms.google-services'
android {
@@ -111,10 +113,11 @@ androidGitVersion {
}
detekt {
- toolVersion = '1.1.1'
+ toolVersion = '1.2.0'
input = files('src/main/kotlin')
- config = files("$rootDir/config/detekt/detekt.yml")
filters = '.*/resources/.*,.*/build/.*'
+ baseline = file('detekt-baseline.xml')
+ config = files("$rootDir/config/detekt/detekt.yml")
reports {
xml {
enabled = false
@@ -159,7 +162,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// 1951FDG
- implementation 'com.github.1951FDG:Android-Multi-Select-Dialog:v3.4'
+ implementation 'com.github.1951FDG:Android-Multi-Select-Dialog:3.5'
implementation('com.github.1951FDG:ProgressToolbar:1.0.7') {
exclude group: 'me.zhanghai.android.materialprogressbar'
}
@@ -167,22 +170,15 @@ dependencies {
debugImplementation 'com.github.1951FDG.AndroidPerformanceMonitor:blockcanary-android:slave-SNAPSHOT'
// Android
- implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
- implementation 'androidx.core:core-ktx:1.1.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta3'
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
- implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.sqlite:sqlite:2.0.1'
// Anko
- implementation "org.jetbrains.anko:anko-commons:$anko_version"
- implementation("org.jetbrains.anko:anko-coroutines:$anko_version") {
- transitive = false
+ implementation("org.jetbrains.anko:anko-sdk21:$anko_version") {
+ exclude group: 'org.jetbrains.anko', module: 'anko-commons'
}
- implementation "org.jetbrains.anko:anko-design:$anko_version"
-
- // Anko Layouts
- implementation "org.jetbrains.anko:anko-sdk21:$anko_version"
// Architecture
implementation('com.naver.android.svc:svc:1.0.0') {
@@ -191,12 +187,11 @@ dependencies {
kapt 'com.naver.android.svc:svc-compiler:1.0.0'
// Coroutines
- implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-io-jvm:$kotlinx_io_version"
// Crashlytics
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
- implementation 'com.google.firebase:firebase-core:17.2.0'
+ implementation 'com.google.firebase:firebase-core:17.2.1'
// GDPR
implementation 'com.github.MFlisar:GDPRDialog:1.4.1'
@@ -205,7 +200,6 @@ dependencies {
implementation 'de.westnordost:countryboundaries:1.5'
// Google Play Services
- implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0'
@@ -213,7 +207,6 @@ dependencies {
implementation 'com.google.android.material:material:1.0.0'
// HTTP Client
- implementation "com.github.kittinunf.fuel:fuel-android:$fuel_version"
implementation "com.github.kittinunf.fuel:fuel-json:$fuel_version"
implementation("io.ktor:ktor-client-android:$ktor_version") {
exclude group: 'org.jetbrains.kotlin'
@@ -225,7 +218,7 @@ dependencies {
implementation('com.jayrave:moshi-pristine-models:1.0.0') {
transitive = false
}
- implementation 'com.squareup.moshi:moshi:1.8.0'
+ implementation 'com.squareup.moshi:moshi:1.9.2'
// Kotlin
implementation('org.jetbrains.kotlin:kotlin-reflect') {
@@ -239,8 +232,7 @@ dependencies {
}
// LeakCanary
- debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
- releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'
+ debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0'
// Logger
implementation 'io.github.jupf.staticlog:staticlog:2.2.0'
@@ -252,14 +244,11 @@ dependencies {
implementation 'pub.devrel:easypermissions:3.0.0'
// Preference
- implementation('net.mm2d:preference:0.2.1') {
+ implementation('net.mm2d:preference:0.2.2') {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7'
}
// UI
- implementation('com.afollestad.material-dialogs:core:0.9.6.0') {
- exclude group: 'me.zhanghai.android.materialprogressbar'
- }
implementation 'com.github.AdityaAnand1:Morphing-Material-Dialogs:0.0.4'
implementation 'com.github.GrenderG:Toasty:1.4.2'
implementation 'com.github.mayuroks:minibar:0.2.0'
@@ -298,6 +287,9 @@ dependencies {
//implementation 'com.google.android.gms:play-services-gcm:17.0.0'
// UI
+ //implementation('com.afollestad.material-dialogs:core:0.9.6.0') {
+ // exclude group: 'me.zhanghai.android.materialprogressbar'
+ //}
//implementation 'com.github.armcha:ElasticView:0.2.0'
}
diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml
new file mode 100644
index 00000000..f2edc655
--- /dev/null
+++ b/app/detekt-baseline.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ ComplexCondition:Common.kt$flag.isNotEmpty() && city.isNotEmpty() && lat != 0.0 && lon != 0.0 && ip.isNotEmpty()
+ ComplexMethod:Common.kt$createJson
+ ComplexMethod:OpenpynController.kt$OpenpynController$onOutputLine
+ LongMethod:Common.kt$createJson
+ LongMethod:Utilities.kt$showThreats
+ LongParameterList:Utilities.kt$( context: Context, countryBoundaries: CountryBoundaries?, lastLocation: Location?, flags: HashSet<CharSequence>, jsonObj: JSONObject?, jsonArr: JSONArray? = null )
+ LongParameterList:Utilities.kt$( context: Context, jsonArray: JSONArray, countries: List<MultiSelectable>, listener: OnMarkerCreateListener, favorites: ArrayList<LazyMarker>?, callback: OnLevelChangeCallback )
+ TooManyFunctions:MainActivity.kt$MainActivity$MainActivity
+ TooManyFunctions:MapControlTower.kt$MapControlTower$MapControlTower
+
+
diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml
index 335af3e3..d4f67c99 100644
--- a/app/lint-baseline.xml
+++ b/app/lint-baseline.xml
@@ -705,44 +705,6 @@
column="5"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/app/src/debug/kotlin/io/github/getsixtyfour/openpyn/DebugMainApplication.kt b/app/src/debug/kotlin/io/github/getsixtyfour/openpyn/DebugMainApplication.kt
index 76b60840..caea270b 100644
--- a/app/src/debug/kotlin/io/github/getsixtyfour/openpyn/DebugMainApplication.kt
+++ b/app/src/debug/kotlin/io/github/getsixtyfour/openpyn/DebugMainApplication.kt
@@ -1,15 +1,22 @@
package io.github.getsixtyfour.openpyn
import com.github.moduth.blockcanary.BlockCanary
-import com.squareup.leakcanary.LeakCanary
@Suppress("unused")
class DebugMainApplication : MainApplication() {
+
override fun installBlockCanary() {
BlockCanary.install(this, AppBlockCanaryContext()).start()
}
-
- override fun installLeakCanary() {
- LeakCanary.install(this)
- }
+ /*override fun installLeakCanary() {
+ val sdkInt = Build.VERSION.SDK_INT
+ if ((Build.VERSION_CODES.O..Build.VERSION_CODES.Q).contains(sdkInt)) {
+ Log.d(
+ "Application",
+ "Ignoring LeakCanary on Android $sdkInt due to an Android bug. See https://github.com/square/leakcanary/issues/1081"
+ )
+ } else {
+ LeakCanary.install(this)
+ }
+ }*/
}
diff --git a/app/src/debug/res/menu/menu_main.xml b/app/src/debug/res/menu/menu_main.xml
index 7930c55c..a6fe72b2 100644
--- a/app/src/debug/res/menu/menu_main.xml
+++ b/app/src/debug/res/menu/menu_main.xml
@@ -18,6 +18,6 @@
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 17a8161a..5aa6db03 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,22 +42,25 @@
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/color/control_checkable_material.xml b/app/src/main/res/color/control_checkable_material.xml
new file mode 100644
index 00000000..32a5e208
--- /dev/null
+++ b/app/src/main/res/color/control_checkable_material.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_check_material.xml b/app/src/main/res/drawable/btn_check_material.xml
new file mode 100644
index 00000000..ae69c2bb
--- /dev/null
+++ b/app/src/main/res/drawable/btn_check_material.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/abc_preference_dialog_material.xml b/app/src/main/res/layout/abc_preference_dialog_material.xml
new file mode 100644
index 00000000..04fab6fa
--- /dev/null
+++ b/app/src/main/res/layout/abc_preference_dialog_material.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/abc_preference_material.xml b/app/src/main/res/layout/abc_preference_material.xml
new file mode 100644
index 00000000..bf8eeb0d
--- /dev/null
+++ b/app/src/main/res/layout/abc_preference_material.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/abc_preference_widget_checkbox.xml b/app/src/main/res/layout/abc_preference_widget_checkbox.xml
new file mode 100644
index 00000000..bd28c7d4
--- /dev/null
+++ b/app/src/main/res/layout/abc_preference_widget_checkbox.xml
@@ -0,0 +1,10 @@
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 8e43281d..43b8b9c2 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -23,7 +23,7 @@
app:ptb_progressHeight="1dp">
-
+ app:navGraph="@navigation/nav_graph"
+ tools:ignore="UnusedIds" />
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index c9a9ccab..cd93ecbf 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -12,6 +12,6 @@
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index df49b117..fac5272e 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -3,10 +3,34 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
- app:startDestination="@id/mapFragment">
+ app:startDestination="@id/mapFragment"
+ tools:ignore="UnusedNavigation">
-
\ No newline at end of file
+ tools:layout="@layout/fragment_map" >
+
+
+
+
+
+
diff --git a/app/src/main/res/raw/nordvpn.json b/app/src/main/res/raw/nordvpn.json
index 5b856b41..7c778b2e 100644
--- a/app/src/main/res/raw/nordvpn.json
+++ b/app/src/main/res/raw/nordvpn.json
@@ -573,9 +573,6 @@
"long": 34.766667
},
"categories": [
- {
- "name": "P2P"
- },
{
"name": "Standard VPN servers"
}
@@ -672,9 +669,6 @@
"long": -99.138611
},
"categories": [
- {
- "name": "P2P"
- },
{
"name": "Standard VPN servers"
}
@@ -713,6 +707,9 @@
{
"name": "Obfuscated Servers"
},
+ {
+ "name": "Onion Over VPN"
+ },
{
"name": "P2P"
},
@@ -965,6 +962,9 @@
{
"name": "Obfuscated Servers"
},
+ {
+ "name": "Onion Over VPN"
+ },
{
"name": "P2P"
},
@@ -981,6 +981,9 @@
"long": 121.525
},
"categories": [
+ {
+ "name": "Double VPN"
+ },
{
"name": "Standard VPN servers"
}
@@ -1007,9 +1010,6 @@
"long": 28.964722
},
"categories": [
- {
- "name": "Obfuscated Servers"
- },
{
"name": "P2P"
},
@@ -1088,22 +1088,6 @@
}
]
},
- {
- "flag": "us",
- "country": "United States",
- "location": {
- "lat": 29.9544444,
- "long": -90.075
- },
- "categories": [
- {
- "name": "P2P"
- },
- {
- "name": "Standard VPN servers"
- }
- ]
- },
{
"flag": "us",
"country": "United States",
@@ -1212,22 +1196,6 @@
}
]
},
- {
- "flag": "us",
- "country": "United States",
- "location": {
- "lat": 38.2541667,
- "long": -85.7594444
- },
- "categories": [
- {
- "name": "P2P"
- },
- {
- "name": "Standard VPN servers"
- }
- ]
- },
{
"flag": "us",
"country": "United States",
@@ -1361,22 +1329,6 @@
}
]
},
- {
- "flag": "us",
- "country": "United States",
- "location": {
- "lat": 44.98,
- "long": -93.2636111
- },
- "categories": [
- {
- "name": "P2P"
- },
- {
- "name": "Standard VPN servers"
- }
- ]
- },
{
"flag": "us",
"country": "United States",
diff --git a/app/src/main/res/values-v27/styles.xml b/app/src/main/res/values-v27/styles.xml
index 85a4445c..2797dac5 100644
--- a/app/src/main/res/values-v27/styles.xml
+++ b/app/src/main/res/values-v27/styles.xml
@@ -16,21 +16,18 @@
- @color/colorPrimary
- true
- true
+ - #ffbebebe
+
-
-
diff --git a/app/src/main/res/values/openvpnmgmt.xml b/app/src/main/res/values/openvpnmgmt.xml
new file mode 100644
index 00000000..f51ff8ac
--- /dev/null
+++ b/app/src/main/res/values/openvpnmgmt.xml
@@ -0,0 +1,46 @@
+
+
+ Connecting
+ Waiting for server reply
+ Authenticating
+ Getting client configuration
+ Assigning IP addresses
+ Adding routes
+ Connected
+ Disconnected
+ Reconnecting
+ Exiting
+ Resolving host names
+ Connecting (TCP)
+ Authentication failed
+ Authentication pending
+ Unknown state
+
+ Connection statistics
+ Ongoing statistics of the established OpenVPN connection
+ Connection status change
+ Status changes of the OpenVPN connection (Connecting, authenticating,…)
+
+ bit/s
+ kbit/s
+ Mbit/s
+ Gbit/s
+
+ B
+ kB
+ MB
+ GB
+
+ %1$s %2$s
+
+ OpenVPN: %s
+
+ ↓%2$s %1$s - ↑%4$s %3$s
+
+ Disconnect
+
+ Cancel Confirmation
+ Disconnect the connected VPN/cancel the connection attempt?
+
+ Connecting to OpenVPN Management Interface…
+
diff --git a/app/src/main/res/values/preference.xml b/app/src/main/res/values/preference.xml
new file mode 100644
index 00000000..606cd38c
--- /dev/null
+++ b/app/src/main/res/values/preference.xml
@@ -0,0 +1,322 @@
+
+
+ Server name
+
+ Country
+
+
+ - Albania
+ - Argentina
+ - Australia
+ - Austria
+ - Belgium
+ - Bosnia and Herzegovina
+ - Brazil
+ - Bulgaria
+ - Canada
+ - Chile
+ - Costa Rica
+ - Croatia
+ - Cyprus
+ - Czech Republic
+ - Denmark
+ - Estonia
+ - Finland
+ - France
+ - Georgia
+ - Germany
+ - Greece
+ - Hong Kong
+ - Hungary
+ - Iceland
+ - India
+ - Indonesia
+ - Ireland
+ - Israel
+ - Italy
+ - Japan
+ - Latvia
+ - Luxembourg
+ - Malaysia
+ - Mexico
+ - Moldova
+ - Netherlands
+ - New Zealand
+ - North Macedonia
+ - Norway
+ - Poland
+ - Portugal
+ - Romania
+ - Serbia
+ - Singapore
+ - Slovakia
+ - Slovenia
+ - South Africa
+ - South Korea
+ - Spain
+ - Sweden
+ - Switzerland
+ - Taiwan
+ - Thailand
+ - Turkey
+ - Ukraine
+ - United Arab Emirates
+ - United Kingdom
+ - United States
+ - Vietnam
+
+
+
+ - al
+ - ar
+ - au
+ - at
+ - be
+ - ba
+ - br
+ - bg
+ - ca
+ - cl
+ - cr
+ - hr
+ - cy
+ - cz
+ - dk
+ - ee
+ - fi
+ - fr
+ - ge
+ - de
+ - gr
+ - hk
+ - hu
+ - is
+ - in
+ - id
+ - ie
+ - il
+ - it
+ - jp
+ - lv
+ - lu
+ - my
+ - mx
+ - md
+ - nl
+ - nz
+ - mk
+ - no
+ - pl
+ - pt
+ - ro
+ - rs
+ - sg
+ - sk
+ - si
+ - za
+ - kr
+ - es
+ - se
+ - ch
+ - tw
+ - th
+ - tr
+ - ua
+ - ae
+ - gb
+ - us
+ - vn
+
+
+ TCP
+ Port 443
+ Port 1194 (UDP)
+
+ Max load
+
+
+ - 10
+ - 20
+ - 30
+ - 40
+ - 50
+ - 60
+ - 70
+
+
+
+ - 10
+ - 20
+ - 30
+ - 40
+ - 50
+ - 60
+ - 70
+
+
+ Top servers
+
+
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+
+
+
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+
+
+ Pings
+
+
+ - 2
+ - 3
+ - 4
+ - 5
+
+
+
+ - 2
+ - 3
+ - 4
+ - 5
+
+
+ P2P
+
+
+ Dedicated IP
+
+
+ Double VPN
+
+
+ Onion over VPN
+
+
+ Obfuscated
+
+
+
+
+
+ Test
+ Simulation only, do not actually connect to the VPN server
+
+ Skip DNS patching
+ Leaves /etc/resolv.conf untouched
+
+ Enforce firewall rules
+ Drop traffic when tunnel breaks, force disable DNS traffic going to any other interface
+
+ ASUSWRT-Merlin VPN client
+ Apply VPN configuration to a client instance
+
+ ASUSWRT-Merlin client instance
+
+
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+
+
+
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+
+
+ Silent
+ Do not try to send notifications. Use if \“libnotify\” or \“gi\” are not available
+
+ is_tor
+ is_proxy
+ is_anonymous
+ is_known_attacker
+ is_known_abuser
+ is_threat
+ is_bogon
+
+ Geolocation API
+ GeoIP
+ Specify service to use to determine current location based on public IP address
+
+ GeoIP service
+
+
+ - IPApi
+ - IPData (requires API Key)
+ - IPInfo
+ - IPStack (requires API Key)
+
+
+
+ - ipapi
+ - ipdata
+ - ipinfo
+ - ipstack
+
+
+ API keys
+
+ IPData
+ IPInfo
+ IPStack
+
+ Leave review
+ Contact us
+ Version
+ Author
+ Share
+ Changelog
+ Report a problem
+
+ Logging level
+
+
+ - Spam
+ - Debug
+ - Verbose
+ - Info
+ - Notice
+ - Warning
+ - Success
+ - Error
+ - Critical
+
+
+
+ - 5
+ - 10
+ - 15
+ - 20
+ - 25
+ - 30
+ - 35
+ - 40
+ - 50
+
+
+ Support
+ Other
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 13f8f3bd..784f390d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,13 +1,14 @@
-
+
Openpyn
- Settings
- -
+ at
+
+
Refresh
GitHub
- About
+
Please restart app for changes to take effect
@@ -15,393 +16,26 @@
Must enable permissions!
- Could not connect to JuiceSSH Plugin Service
+ Tried to execute a command but could not connect to JuiceSSH plugin service
Must install the JuiceSSH app!
Must have at least one server!
- Search
-
About
APIs
Licenses
Settings
-
-
-
- Settings
-
- Basics
-
- Server Name
-
- Country
-
-
- - Albania
- - Argentina
- - Australia
- - Austria
- - Belgium
- - Bosnia and Herzegovina
- - Brazil
- - Bulgaria
- - Canada
- - Chile
- - Costa Rica
- - Croatia
- - Cyprus
- - Czech Republic
- - Denmark
- - Estonia
- - Finland
- - France
- - Georgia
- - Germany
- - Greece
- - Hong Kong
- - Hungary
- - Iceland
- - India
- - Indonesia
- - Ireland
- - Israel
- - Italy
- - Japan
- - Latvia
- - Luxembourg
- - Malaysia
- - Mexico
- - Moldova
- - Netherlands
- - New Zealand
- - North Macedonia
- - Norway
- - Poland
- - Portugal
- - Romania
- - Serbia
- - Singapore
- - Slovakia
- - Slovenia
- - South Africa
- - South Korea
- - Spain
- - Sweden
- - Switzerland
- - Taiwan
- - Thailand
- - Turkey
- - Ukraine
- - United Arab Emirates
- - United Kingdom
- - United States
- - Vietnam
-
-
-
- - al
- - ar
- - au
- - at
- - be
- - ba
- - br
- - bg
- - ca
- - cl
- - cr
- - hr
- - cy
- - cz
- - dk
- - ee
- - fi
- - fr
- - ge
- - de
- - gr
- - hk
- - hu
- - is
- - in
- - id
- - ie
- - il
- - it
- - jp
- - lv
- - lu
- - my
- - mx
- - md
- - nl
- - nz
- - mk
- - no
- - pl
- - pt
- - ro
- - rs
- - sg
- - sk
- - si
- - za
- - kr
- - es
- - se
- - ch
- - tw
- - th
- - tr
- - ua
- - ae
- - gb
- - us
- - vn
-
-
- TCP
- Port 443
- Port 1194 (UDP)
-
- Max Load
-
-
- - 10
- - 20
- - 30
- - 40
- - 50
- - 60
- - 70
-
-
-
- - 10
- - 20
- - 30
- - 40
- - 50
- - 60
- - 70
-
-
- Top Servers
-
-
- - 1
- - 2
- - 3
- - 4
- - 5
- - 6
- - 7
- - 8
- - 9
- - 10
-
-
-
- - 1
- - 2
- - 3
- - 4
- - 5
- - 6
- - 7
- - 8
- - 9
- - 10
-
-
- Pings
-
-
- - 2
- - 3
- - 4
- - 5
-
-
-
- - 2
- - 3
- - 4
- - 5
-
-
- Advanced
-
- P2P
- Look for \“Peer To Peer\” servers
-
- Dedicated IP
- Look for \“Dedicated IP\” servers
-
- Double VPN
- Look for \“Double VPN\” servers
-
- Onion Over VPN
- Look for \“Onion Over VPN\” servers
-
- Obfuscated
- Look for \“Obfuscated\” servers
-
- Netflix
- Only look for \“Netflix\” servers
-
- Expert
-
- Test
- Simulation only, do not actually connect to the VPN server
-
- Skip DNS Patching
- Skips DNS patching, leaves /etc/resolv.conf untouched
-
- Enforce Firewall Rules
- Drop traffic when tunnel breaks, force disable DNS traffic going to any other interface
-
- NVRAM
- Specify client to save configuration to NVRAM (ASUSWRT-Merlin)
-
- NVRAM Client
-
-
- - 1
- - 2
- - 3
- - 4
- - 5
-
-
-
- - 1
- - 2
- - 3
- - 4
- - 5
-
-
- Silent
- Do not try to send notifications. Use if \“libnotify\” or \“gi\” are not available
-
- is_tor
- is_proxy
- is_anonymous
- is_known_attacker
- is_known_abuser
- is_threat
- is_bogon
-
- Geolocation API
- GeoIP
- Specify service to use to determine current location based on public IP address
-
- GeoIP Service
-
-
- - IPApi
- - IPData (requires API Key)
- - IPInfo
- - IPStack (requires API Key)
-
-
-
- - ipapi
- - ipdata
- - ipinfo
- - ipstack
-
-
- API keys
-
- IPData
- IPInfo
- IPStack
-
- Leave Review
- Contact Us
- Version
- Author
- Share
- Open Source Licenses
- Changelog
- Report a Problem
-
- Logging Level
-
-
- - Spam
- - Debug
- - Verbose
- - Info
- - Notice
- - Warning
- - Success
- - Error
- - Critical
-
-
-
- - 5
- - 10
- - 15
- - 20
- - 25
- - 30
- - 35
- - 40
- - 50
-
-
- About
- Support
- Other
-
-
-
- Connecting
- Waiting for server reply
- Authenticating
- Getting client configuration
- Assigning IP addresses
- Adding routes
- Connected
- Disconnected
- Reconnecting
- Exiting
- Resolving host names
- Connecting (TCP)
- Authentication failed
- Authentication pending
- Unknown state
-
- Connection statistics
- Ongoing statistics of the established OpenVPN connection
- Connection status change
- Status changes of the OpenVPN connection (Connecting, authenticating,…)
-
- bit/s
- kbit/s
- Mbit/s
- Gbit/s
-
- B
- kB
- MB
- GB
-
- %1$s %2$s
-
- OpenVPN: %s
-
- ↓%2$s %1$s - ↑%4$s %3$s
-
- Disconnect
-
- Cancel Confirmation
- Disconnect the connected VPN/cancel the connection attempt?
-
- Connecting to OpenVPN Management Interface…
+ VPN Connection
+ Error
+ Warning
+
+ %1$s %2$s
+
+
+ Connected to %1$s, %2$s (%3$s)
+ Are you sure you want to connect to %1$s
+ server %1$s.nordvpn.com
+ %1$s
+ %1$s %2$s %3$s, %4$s
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 25d865b0..3265103b 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -23,6 +23,8 @@
- false
- true
+ - @style/PreferenceThemeOverlay.Custom
+
-
+ -->
+
+
+
+
+
-
+
+
+
+
+
@@ -84,6 +96,4 @@
-
-
diff --git a/app/src/main/res/xml/pref_connect.xml b/app/src/main/res/xml/pref_connect.xml
new file mode 100644
index 00000000..73421eb5
--- /dev/null
+++ b/app/src/main/res/xml/pref_connect.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml/pref_headers.xml b/app/src/main/res/xml/pref_headers.xml
index 41802911..6625e8f3 100644
--- a/app/src/main/res/xml/pref_headers.xml
+++ b/app/src/main/res/xml/pref_headers.xml
@@ -2,6 +2,6 @@
+ app:fragment="io.github.getsixtyfour.openpyn.SettingsActivity$SettingsPreferenceFragment"
+ app:title="@string/title_activity_settings" />
diff --git a/app/src/main/res/xml/pref_settings.xml b/app/src/main/res/xml/pref_settings.xml
index 3da1feae..048095f5 100644
--- a/app/src/main/res/xml/pref_settings.xml
+++ b/app/src/main/res/xml/pref_settings.xml
@@ -1,8 +1,9 @@
-
+ android:key="settings"
+ android:title="@string/title_activity_settings"
+ app:initialExpandedChildrenCount="9">
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/test/java/com/getsixtyfour/openvpnmgmt/api/StatusTest.java b/app/src/test/java/com/getsixtyfour/openvpnmgmt/api/StatusTest.java
index 8ba59918..a75dbba9 100644
--- a/app/src/test/java/com/getsixtyfour/openvpnmgmt/api/StatusTest.java
+++ b/app/src/test/java/com/getsixtyfour/openvpnmgmt/api/StatusTest.java
@@ -5,6 +5,10 @@
*/
package com.getsixtyfour.openvpnmgmt.api;
+import com.getsixtyfour.openvpnmgmt.exceptions.OpenVpnParseException;
+import com.getsixtyfour.openvpnmgmt.implementation.OpenVpnCommand;
+import com.getsixtyfour.openvpnmgmt.implementation.OpenVpnStatus;
+
import org.junit.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -13,10 +17,6 @@
import java.util.List;
import java.util.Set;
-import com.getsixtyfour.openvpnmgmt.exceptions.OpenVpnParseException;
-import com.getsixtyfour.openvpnmgmt.implementation.OpenVpnCommand;
-import com.getsixtyfour.openvpnmgmt.implementation.OpenVpnStatus;
-
/**
* @author Maksym Shkolnyi aka maskimko
*/
diff --git a/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/ConnectionTest.java b/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/ConnectionTest.java
index 74d573e4..4fcf449f 100644
--- a/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/ConnectionTest.java
+++ b/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/ConnectionTest.java
@@ -5,6 +5,11 @@
*/
package com.getsixtyfour.openvpnmgmt.net;
+import com.getsixtyfour.openvpnmgmt.api.Client;
+import com.getsixtyfour.openvpnmgmt.api.Route;
+import com.getsixtyfour.openvpnmgmt.api.Status;
+import com.getsixtyfour.openvpnmgmt.exceptions.OpenVpnParseException;
+
import org.jetbrains.annotations.NotNull;
import org.junit.*;
import org.junit.runners.*;
@@ -16,11 +21,6 @@
import java.util.ResourceBundle;
import java.util.Set;
-import com.getsixtyfour.openvpnmgmt.api.Client;
-import com.getsixtyfour.openvpnmgmt.api.Route;
-import com.getsixtyfour.openvpnmgmt.api.Status;
-import com.getsixtyfour.openvpnmgmt.exceptions.OpenVpnParseException;
-
/**
* @author 1951FDG
*/
diff --git a/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/ManagementConnectionTest.java b/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/ManagementConnectionTest.java
index 297049fc..09d6424f 100644
--- a/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/ManagementConnectionTest.java
+++ b/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/ManagementConnectionTest.java
@@ -5,6 +5,11 @@
*/
package com.getsixtyfour.openvpnmgmt.net;
+import com.getsixtyfour.openvpnmgmt.core.LogLevel;
+import com.getsixtyfour.openvpnmgmt.listeners.ByteCountManager.ByteCountListener;
+import com.getsixtyfour.openvpnmgmt.listeners.LogManager.Log;
+import com.getsixtyfour.openvpnmgmt.listeners.LogManager.LogListener;
+
import junit.framework.AssertionFailedError;
import org.jetbrains.annotations.NotNull;
@@ -16,11 +21,6 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import com.getsixtyfour.openvpnmgmt.core.LogLevel;
-import com.getsixtyfour.openvpnmgmt.listeners.ByteCountManager.ByteCountListener;
-import com.getsixtyfour.openvpnmgmt.listeners.LogManager.Log;
-import com.getsixtyfour.openvpnmgmt.listeners.LogManager.LogListener;
-
/**
* @author 1951FDG
*/
diff --git a/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/StringUtilsTest.java b/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/StringUtilsTest.java
index 1542642f..e90a20d0 100644
--- a/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/StringUtilsTest.java
+++ b/app/src/test/java/com/getsixtyfour/openvpnmgmt/net/StringUtilsTest.java
@@ -1,11 +1,11 @@
package com.getsixtyfour.openvpnmgmt.net;
+import com.getsixtyfour.openvpnmgmt.utils.StringUtils;
+
import org.junit.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.getsixtyfour.openvpnmgmt.utils.StringUtils;
-
/**
* @author 1951FDG
*/
diff --git a/build.gradle b/build.gradle
index b7416194..b2d69398 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,11 +3,11 @@
buildscript {
ext.anko_version = '0.10.8'
ext.fuel_version = '2.2.1'
- ext.kotlin_version = '1.3.50'
- ext.kotlinx_io_version = '0.1.15'
- ext.ktor_version = '1.2.5'
- ext.nav_version = '2.2.0-beta01'
- ext.slf4j_version = '1.7.28'
+ ext.kotlin_version = '1.3.61'
+ ext.kotlinx_io_version = '0.1.16'
+ ext.ktor_version = '1.2.6'
+ ext.nav_version = '2.2.0-rc02'
+ ext.slf4j_version = '1.7.29'
repositories {
google()
jcenter()
@@ -15,16 +15,17 @@ buildscript {
maven { url 'https://plugins.gradle.org/m2/' }
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.1'
+ classpath 'com.android.tools.build:gradle:3.5.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'io.fabric.tools:gradle:1.31.1'
classpath 'com.google.android.gms:oss-licenses-plugin:0.10.0'
- classpath 'com.netflix.nebula:gradle-lint-plugin:14.2.5'
- classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.6'
- classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.0'
+ classpath 'com.netflix.nebula:gradle-lint-plugin:16.0.2'
+ classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:1.0.0'
+ classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
classpath 'gradle.plugin.com.github.konifar.gradle:plugin:0.3.3'
- classpath 'io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.1.1'
+ classpath 'io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.2.0'
classpath 'com.gladed.androidgitversion:gradle-android-git-version:0.4.10'
+ classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
//classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml
index f3fda4b7..2426770b 100644
--- a/config/detekt/detekt.yml
+++ b/config/detekt/detekt.yml
@@ -1,12 +1,16 @@
build:
maxIssues: 10
weights:
- complexity: 0
# complexity: 2
# LongParameterList: 1
# style: 1
# comments: 1
+config:
+ validation: true
+ # when writing own rules with new properties, exclude the property path e.g.: "my_rule_set,.*>.*>[my_property]"
+ excludes: ""
+
processors:
active: true
exclude:
@@ -59,9 +63,11 @@ complexity:
includeStaticDeclarations: false
ComplexMethod:
active: true
- threshold: 10
+ threshold: 15
ignoreSingleWhenExpression: false
ignoreSimpleWhenEntries: false
+ ignoreNestingFunctions: false
+ nestingFunctions: run,let,apply,with,also,use,forEach,isNotNull,ifNull
LabeledExpression:
active: false
ignoredLabels: ""
@@ -80,7 +86,7 @@ complexity:
threshold: 6
NestedBlockDepth:
active: true
- threshold: 4
+ threshold: 5
StringLiteralDuplication:
active: false
excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt"
@@ -118,7 +124,7 @@ empty-blocks:
EmptyForBlock:
active: true
EmptyFunctionBlock:
- active: true
+ active: false
ignoreOverriddenFunctions: false
EmptyIfBlock:
active: true
@@ -195,7 +201,7 @@ formatting:
active: true
autoCorrect: true
CommentSpacing:
- active: false
+ active: true
autoCorrect: true
Filename:
active: true
@@ -332,7 +338,7 @@ naming:
MatchingDeclarationName:
active: true
MemberNameEqualsClassName:
- active: false
+ active: true
ignoreOverriddenFunction: true
ObjectPropertyNaming:
active: true
@@ -369,12 +375,12 @@ naming:
performance:
active: true
ArrayPrimitive:
- active: false
+ active: true
ForEachOnRange:
active: true
excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt"
SpreadOperator:
- active: true
+ active: false
excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt"
UnnecessaryTemporaryInstantiation:
active: true
@@ -386,40 +392,42 @@ potential-bugs:
DuplicateCaseInWhenExpression:
active: true
EqualsAlwaysReturnsTrueOrFalse:
- active: false
+ active: true
EqualsWithHashCodeExist:
active: true
ExplicitGarbageCollectionCall:
active: true
HasPlatformType:
active: false
- InvalidRange:
+ ImplicitDefaultLocale:
active: false
+ InvalidRange:
+ active: true
IteratorHasNextCallsNextMethod:
- active: false
+ active: true
IteratorNotThrowingNoSuchElementException:
- active: false
+ active: true
LateinitUsage:
active: false
excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt"
excludeAnnotatedProperties: ""
ignoreOnClassesPattern: ""
MissingWhenCase:
- active: false
+ active: true
RedundantElseInWhen:
- active: false
+ active: true
UnconditionalJumpStatementInLoop:
active: false
UnreachableCode:
active: true
UnsafeCallOnNullableType:
- active: false
+ active: true
UnsafeCast:
active: false
UselessPostfixExpression:
active: false
WrongEqualsTypeParameter:
- active: false
+ active: true
style:
active: true
@@ -431,7 +439,7 @@ style:
DataClassShouldBeImmutable:
active: false
EqualsNullCall:
- active: false
+ active: true
EqualsOnSignatureLine:
active: false
ExplicitItLambdaParameter:
@@ -452,14 +460,14 @@ style:
ignoreOverridden: false
ignoreUsageInGenerics: false
FunctionOnlyReturningConstant:
- active: false
+ active: true
ignoreOverridableFunction: true
excludedFunctions: 'describeContents'
excludeAnnotatedFunction: "dagger.Provides"
LibraryCodeMustSpecifyReturnType:
- active: false
+ active: true
LoopWithTooManyJumpStatements:
- active: false
+ active: true
maxJumpCount: 1
MagicNumber:
active: true
@@ -482,7 +490,7 @@ style:
excludeImportStatements: true
excludeCommentStatements: false
MayBeConst:
- active: false
+ active: true
ModifierOrder:
active: true
NestedClassesVisibility:
@@ -500,7 +508,7 @@ style:
PreferToOverPairSyntax:
active: false
ProtectedMemberInFinalClass:
- active: false
+ active: true
RedundantExplicitType:
active: false
RedundantVisibilityModifierRule:
@@ -527,12 +535,12 @@ style:
active: false
acceptableDecimalLength: 5
UnnecessaryAbstractClass:
- active: false
+ active: true
excludeAnnotatedClasses: "dagger.Module"
UnnecessaryApply:
active: false
UnnecessaryInheritance:
- active: false
+ active: true
UnnecessaryLet:
active: false
UnnecessaryParentheses:
@@ -542,7 +550,7 @@ style:
UnusedImports:
active: false
UnusedPrivateClass:
- active: false
+ active: true
UnusedPrivateMember:
active: false
allowedNames: "(_|ignored|expected|serialVersionUID)"
@@ -559,9 +567,9 @@ style:
UseRequire:
active: false
UselessCallOnNotNull:
- active: false
+ active: true
UtilityClassWithPublicConstructor:
- active: false
+ active: true
VarCouldBeVal:
active: false
WildcardImport:
diff --git a/fastlane/Screengrabfile b/fastlane/Screengrabfile
index 549e2172..b0fdac35 100644
--- a/fastlane/Screengrabfile
+++ b/fastlane/Screengrabfile
@@ -14,6 +14,7 @@ tests_apk_path('app/build/outputs/apk/androidTest/debug/app-debug-androidTest.ap
# clear all previously generated screenshots in your local output directory before creating new ones
clear_previous_screenshots(true)
reinstall_app(true)
+use_adb_root(true)
# For more information about all available options run
# fastlane screengrab --help
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_01.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_01.png
index f22f35da..961efb21 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_01.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_01.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_01_01.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_01_01.png
new file mode 100644
index 00000000..33a68d6e
Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_01_01.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_02.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_02.png
index 003c61d7..d10df550 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_02.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_02.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_03.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_03.png
index 38c01850..bc30f8ba 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_03.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_03.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_04.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_04.png
index 17b3ad4d..67ec5432 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_04.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot_04.png differ