diff --git a/app/build.gradle b/app/build.gradle index afc030050c..ba1ec0f15a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' +apply plugin: 'io.fabric' static def generateVersionName() { def gitCommitsCount = "git rev-list HEAD --count".execute().text.trim() @@ -9,6 +10,9 @@ static def generateVersionName() { return gitCommitsCount.toInteger() + 831// + "\\n" + gitCurrentBranch } +Properties properties = new Properties() +properties.load(project.rootProject.file('local.properties').newDataInputStream()) + android { compileSdkVersion 28 defaultConfig { @@ -25,12 +29,23 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.debug + buildConfigField 'boolean', 'CRASHLYTICS', 'Boolean.parseBoolean("false")' + ext.enableCrashlytics = false } debug { debuggable true minifyEnabled false applicationIdSuffix ".debug" signingConfig signingConfigs.debug + buildConfigField 'boolean', 'CRASHLYTICS', 'Boolean.parseBoolean("false")' + ext.enableCrashlytics = false + } + debug_beta { + initWith debug + versionNameSuffix "-beta" + applicationIdSuffix ".debug_beta" + buildConfigField 'boolean', 'CRASHLYTICS', 'Boolean.parseBoolean("true")' + manifestPlaceholders = [fabric_api_key: properties.getProperty('fabric_api_key')] } } flavorDimensions "" @@ -65,6 +80,7 @@ android { repositories { maven { url "https://jitpack.io" } + maven { url 'https://maven.fabric.io/public' } } configurations { all*.exclude group: 'com.google.guava', module: 'listenablefuture' @@ -119,6 +135,9 @@ dependencies { // implementation 'com.github.stellar:java-stellar-sdk:0.4.1' implementation 'net.i2p.crypto:eddsa:0.3.0' + implementation('com.crashlytics.sdk.android:crashlytics:2.9.9') { transitive = true } + implementation('io.fabric.sdk.android:fabric:1.4.0@aar') { transitive = true } + implementation files('libs/ripple-core-0.0.1.jar') //4 dependencies for ripple-core TODO: move to module? implementation 'net.i2p.crypto:eddsa:0.3.0' diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml index 9ef8838437..1c13a1dbc0 100644 --- a/app/src/debug/res/values/strings.xml +++ b/app/src/debug/res/values/strings.xml @@ -2,5 +2,6 @@ DEBUG + com.tangem.debug.data.LogFileProvider \ No newline at end of file diff --git a/app/src/debug_beta/AndroidManifest.xml b/app/src/debug_beta/AndroidManifest.xml new file mode 100644 index 0000000000..9f07ca1097 --- /dev/null +++ b/app/src/debug_beta/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/debug_beta/res/values/strings.xml b/app/src/debug_beta/res/values/strings.xml new file mode 100644 index 0000000000..dd8d1b1737 --- /dev/null +++ b/app/src/debug_beta/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + TangemBeta + + \ No newline at end of file diff --git a/app/src/main/java/com/tangem/App.kt b/app/src/main/java/com/tangem/App.kt index 64d16a74e3..84e791d4ae 100644 --- a/app/src/main/java/com/tangem/App.kt +++ b/app/src/main/java/com/tangem/App.kt @@ -2,16 +2,18 @@ package com.tangem import android.app.Application import androidx.appcompat.app.AppCompatDelegate +import com.crashlytics.android.Crashlytics import com.google.gson.Gson import com.google.gson.reflect.TypeToken -import com.tangem.data.local.PendingTransactionsStorage import com.tangem.card_android.android.data.Firmwares import com.tangem.card_android.android.data.PINStorage import com.tangem.card_common.data.Issuer import com.tangem.data.dp.PrefsManager +import com.tangem.data.local.PendingTransactionsStorage import com.tangem.di.* import com.tangem.server_android.data.LocalStorage import com.tangem.wallet.BuildConfig +import io.fabric.sdk.android.Fabric import java.io.InputStreamReader import java.nio.charset.StandardCharsets @@ -73,6 +75,7 @@ class App : Application() { } } ) + if (BuildConfig.CRASHLYTICS) Fabric.with(this, Crashlytics()) } } diff --git a/app/src/main/java/com/tangem/ui/activity/LogoActivity.kt b/app/src/main/java/com/tangem/ui/activity/LogoActivity.kt index 841440d8f8..48d110b73f 100644 --- a/app/src/main/java/com/tangem/ui/activity/LogoActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/LogoActivity.kt @@ -8,9 +8,9 @@ import androidx.appcompat.app.AppCompatActivity import com.tangem.App import com.tangem.Constant import com.tangem.di.Navigator -import com.tangem.wallet.TangemContext import com.tangem.wallet.BuildConfig import com.tangem.wallet.R +import com.tangem.wallet.TangemContext import kotlinx.android.synthetic.main.activity_logo.* import javax.inject.Inject @@ -34,7 +34,7 @@ class LogoActivity : AppCompatActivity() { App.navigatorComponent.inject(this) - ivLogo.setOnClickListener { hide() } + clLogoContainer.setOnClickListener { hide() } } override fun onPostCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/tangem/ui/activity/MainActivity.kt b/app/src/main/java/com/tangem/ui/activity/MainActivity.kt index 075ff25409..df3c3218b7 100644 --- a/app/src/main/java/com/tangem/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/MainActivity.kt @@ -41,14 +41,17 @@ class MainActivity : AppCompatActivity() { // private var onNfcReaderCallback: NfcAdapter.ReaderCallback? = null -// override fun onNewIntent(intent: Intent?) { -// super.onNewIntent(intent) -// if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED == intent.action || NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action)) { -// val tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG) -// if (tag != null && onNfcReaderCallback != null) -// onNfcReaderCallback?.onTagDiscovered(tag) -// } -// } + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED == intent.action || NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action)) { + val tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG) + if (tag != null) { + val activeFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) + ?.childFragmentManager?.primaryNavigationFragment + (activeFragment as? NfcAdapter.ReaderCallback)?.onTagDiscovered(tag) + } + } + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/res/layout/activity_logo.xml b/app/src/main/res/layout/activity_logo.xml index 7c7e1de15a..eb036a5eab 100644 --- a/app/src/main/res/layout/activity_logo.xml +++ b/app/src/main/res/layout/activity_logo.xml @@ -1,4 +1,5 @@ Erase wallet - BETA v.%1$s \n dev \n build %2$s - BETA v.%1$s + ALPHA v.%1$s \n dev build %2$s + v.%1$s Hello, %1$s! You have %2$d new messages. diff --git a/build.gradle b/build.gradle index 8820962821..0a6c7bd4a5 100644 --- a/build.gradle +++ b/build.gradle @@ -3,11 +3,13 @@ buildscript { repositories { google() jcenter() + maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'com.android.tools.build:gradle:3.5.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' + classpath 'io.fabric.tools:gradle:1.27.1' } } diff --git a/card-android/build.gradle b/card-android/build.gradle index 956d0c88fe..1dc0028332 100644 --- a/card-android/build.gradle +++ b/card-android/build.gradle @@ -20,6 +20,10 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + debug_beta { + initWith debug + versionNameSuffix "-beta" + } } buildToolsVersion '28.0.3' diff --git a/fastlane/Fastfile b/fastlane/Fastfile index bf598fdf5b..56dd357aba 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -16,46 +16,53 @@ default_platform(:android) platform :android do + desc "Runs all the tests" lane :test do gradle( - task: "test", - flavor: "tangemAccess", - build_type: "Debug") + task: "test", + flavor: "tangemAccess", + build_type: "DebugUnitTest") end - desc "Build a release APK" - lane :release do - gradle( - task: "clean assemble", - flavor: "tangemAccess", - build_type: "Release") + desc "Build a signed release APK" + lane :release do |options| + gradle( + task: "clean assemble", + flavor: "tangemAccess", + build_type: "Release", + properties: { + "android.injected.signing.store.file" => options[:keystore], + "android.injected.signing.store.password" => options[:store_password], + "android.injected.signing.key.alias" => options[:key_alias], + "android.injected.signing.key.password" => options[:key_password], + }) end - desc "Build a debug APK" - lane :debug do - gradle(task: "clean assemble", - flavor: "tangemAccess", - build_type: "Debug") - end + desc "Build debug and release APKs" + lane :build do |options| + gradle( + task: "clean assemble", + flavor: "tangemAccess", + build_type: "Debug_beta") + gradle( + task: "assemble", + flavor: "tangemAccess", + build_type: "Release", + properties: { + "android.injected.signing.store.file" => options[:keystore], + "android.injected.signing.store.password" => options[:store_password], + "android.injected.signing.key.alias" => options[:key_alias], + "android.injected.signing.key.password" => options[:key_password], + }) + end desc "Submit a new Beta Build to Crashlytics Beta" - lane :beta do - gradle(task: "clean assemble", - flavor: "tangemAccess", - build_type: "Debug") - crashlytics - - # sh "your_script.sh" - # You can also use other beta testing services here + lane :beta do |options| + crashlytics( + api_token: options[:api_token], + build_secret: options[:build_secret], + apk_path: options[:apk_path]) end - desc "Deploy a new version to the Google Play" - lane :deploy do - gradle( - task: "clean assemble", - flavor: "tangemAccess", - build_type: "Release") - upload_to_play_store - end end diff --git a/fastlane/README.md b/fastlane/README.md index 61b4a5d99a..7c3f972135 100644 --- a/fastlane/README.md +++ b/fastlane/README.md @@ -25,22 +25,17 @@ Runs all the tests ``` fastlane android release ``` -Build a release APK -### android debug +Build a signed release APK +### android build ``` -fastlane android debug +fastlane android build ``` -Build a debug APK +Build debug and release APKs ### android beta ``` fastlane android beta ``` Submit a new Beta Build to Crashlytics Beta -### android deploy -``` -fastlane android deploy -``` -Deploy a new version to the Google Play ---- diff --git a/server-android/build.gradle b/server-android/build.gradle index 7aaa4af308..c6e7c5bfed 100644 --- a/server-android/build.gradle +++ b/server-android/build.gradle @@ -20,6 +20,10 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + debug_beta { + initWith debug + versionNameSuffix "-beta" + } } productFlavors { }