diff --git a/.gitignore b/.gitignore
index 969eee4..a8b9dd3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,6 @@
.idea
.DS_Store
local.properties
+google-services.json
*.iml
build
diff --git a/app/build.gradle b/app/build.gradle
index 21d8e63..73bfea8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,13 +9,21 @@ android {
defaultConfig {
applicationId 'com.tananaev.passportreader'
- minSdkVersion 15
+ minSdkVersion 19
targetSdkVersion 33
- versionCode 18
- versionName "2.3"
+ versionCode 19
+ versionName '3.0'
multiDexEnabled = true
}
- namespace "com.tananaev.passportreader"
+ namespace 'com.tananaev.passportreader'
+
+ flavorDimensions 'default'
+ productFlavors {
+ regular {
+ isDefault = true
+ }
+ google
+ }
packagingOptions {
resources {
@@ -35,6 +43,27 @@ dependencies {
implementation 'com.madgag.spongycastle:prov:1.54.0.0'
implementation 'com.gemalto.jp2:jp2-android:1.0.3'
implementation 'com.github.mhshams:jnbis:1.1.0'
- implementation 'org.bouncycastle:bcpkix-jdk15on:1.65'
+ implementation 'org.bouncycastle:bcpkix-jdk15on:1.65' // do not update
implementation 'commons-io:commons-io:2.8.0'
+ googleImplementation platform('com.google.firebase:firebase-bom:31.0.0')
+ googleImplementation 'com.google.firebase:firebase-analytics-ktx'
+ googleImplementation 'com.google.firebase:firebase-crashlytics'
+ googleImplementation 'com.google.android.gms:play-services-ads:21.3.0'
+ googleImplementation 'com.google.android.play:review-ktx:2.0.1'
+}
+
+if (getGradle().getStartParameter().getTaskRequests().toString().contains('Google')) {
+ apply plugin: 'com.google.gms.google-services'
+ apply plugin: 'com.google.firebase.crashlytics'
+
+ task copyJson(type: Copy) {
+ from '../../environment/firebase'
+ into '.'
+ include 'passport-reader.json'
+ rename('passport-reader.json', 'google-services.json')
+ }
+
+ afterEvaluate {
+ preBuild.dependsOn copyJson
+ }
}
diff --git a/app/src/google/AndroidManifest.xml b/app/src/google/AndroidManifest.xml
new file mode 100644
index 0000000..0968fb1
--- /dev/null
+++ b/app/src/google/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/google/java/com/tananaev/passportreader/GoogleActivity.kt b/app/src/google/java/com/tananaev/passportreader/GoogleActivity.kt
new file mode 100644
index 0000000..96e03fd
--- /dev/null
+++ b/app/src/google/java/com/tananaev/passportreader/GoogleActivity.kt
@@ -0,0 +1,60 @@
+package com.tananaev.passportreader
+
+import android.os.Bundle
+import android.preference.PreferenceManager
+import android.widget.FrameLayout
+import com.google.android.gms.ads.AdRequest
+import com.google.android.gms.ads.AdSize
+import com.google.android.gms.ads.AdView
+import com.google.android.gms.ads.MobileAds
+import com.google.android.play.core.review.ReviewManagerFactory
+import com.google.firebase.analytics.FirebaseAnalytics
+import com.google.firebase.analytics.ktx.analytics
+import com.google.firebase.ktx.Firebase
+
+class GoogleActivity : MainActivity() {
+ private lateinit var firebaseAnalytics: FirebaseAnalytics
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ firebaseAnalytics = Firebase.analytics
+ MobileAds.initialize(this) {}
+
+ val adView = AdView(this).apply {
+ setAdSize(AdSize.BANNER)
+ adUnitId = "ca-app-pub-9061647223840223/5869276959"
+ loadAd(AdRequest.Builder().build())
+ }
+ val params = FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.WRAP_CONTENT,
+ )
+ val containerView: FrameLayout = findViewById(R.id.bottom_container)
+ containerView.addView(adView, params)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ handleRating()
+ }
+
+ @Suppress("DEPRECATION")
+ private fun handleRating() {
+ val preferences = PreferenceManager.getDefaultSharedPreferences(this)
+ if (!preferences.getBoolean("ratingShown", false)) {
+ val openTimes = preferences.getInt("openTimes", 0) + 1
+ preferences.edit().putInt("openTimes", openTimes).apply()
+ if (openTimes >= 5) {
+ val reviewManager = ReviewManagerFactory.create(this)
+ reviewManager.requestReviewFlow().addOnCompleteListener { infoTask ->
+ if (infoTask.isSuccessful) {
+ val flow = reviewManager.launchReviewFlow(this, infoTask.result)
+ flow.addOnCompleteListener {
+ preferences.edit().putBoolean("ratingShown", true).apply()
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8e56418..e8a62af 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,35 +12,14 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ android:screenOrientation="fullSensor" />
diff --git a/app/src/main/java/com/tananaev/passportreader/MainActivity.kt b/app/src/main/java/com/tananaev/passportreader/MainActivity.kt
index 0bc6c00..c9f2e66 100644
--- a/app/src/main/java/com/tananaev/passportreader/MainActivity.kt
+++ b/app/src/main/java/com/tananaev/passportreader/MainActivity.kt
@@ -73,7 +73,7 @@ import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
-class MainActivity : AppCompatActivity() {
+abstract class MainActivity : AppCompatActivity() {
private lateinit var passportNumberView: EditText
private lateinit var expirationDateView: EditText
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index b94a222..8a0bbcb 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -98,4 +98,10 @@
+
+
diff --git a/app/src/regular/AndroidManifest.xml b/app/src/regular/AndroidManifest.xml
new file mode 100644
index 0000000..d855f74
--- /dev/null
+++ b/app/src/regular/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/regular/java/com/tananaev/passportreader/RegularActivity.kt b/app/src/regular/java/com/tananaev/passportreader/RegularActivity.kt
new file mode 100644
index 0000000..e3d3b88
--- /dev/null
+++ b/app/src/regular/java/com/tananaev/passportreader/RegularActivity.kt
@@ -0,0 +1,3 @@
+package com.tananaev.passportreader
+
+class RegularActivity : MainActivity()
diff --git a/build.gradle b/build.gradle
index f646a3a..1ef989c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,8 +5,10 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ classpath 'com.android.tools.build:gradle:7.3.1'
+ classpath 'com.google.gms:google-services:4.3.14'
+ classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
}
}
diff --git a/gradle.properties b/gradle.properties
index 5465fec..5a40459 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,2 +1,3 @@
+org.gradle.jvmargs=-Xmx4096m
android.enableJetifier=true
android.useAndroidX=true
\ No newline at end of file