Skip to content
Draft
36 changes: 15 additions & 21 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlin-kapt'
apply plugin: 'androidx.navigation.safeargs.kotlin'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'appmetrica-plugin'

ext {
compose_version = "1.0.5"
Expand All @@ -22,12 +22,8 @@ android {

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

vectorDrawables.useSupportLibrary = true

buildConfigField "Long", "READ_TIMEOUT_SECOND", READ_TIMEOUT_SECOND
buildConfigField "Long", "CONNECTION_TIMEOUT_SECOND", CONNECTION_TIMEOUT_SECOND

resValue "string", "google_maps_key", (project.findProperty("GOOGLE_MAPS_API_KEY") ?: "")
resValue "string", "google_maps_key", "\"${GOOGLE_MAPS_API_KEY}\""
buildConfigField "String", "APP_METRICA_API_KEY", "\"${APP_METRICA_API_KEY}\""
}

buildFeatures {
Expand All @@ -38,11 +34,12 @@ android {

buildTypes {
release {
minifyEnabled false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
debug {
manifestPlaceholders = [isBranchSdkInTestMode: "true"]
applicationIdSuffix = ".debug"
}
}

Expand All @@ -51,11 +48,11 @@ android {
productFlavors {
staging {
versionNameSuffix 'Staging'
buildConfigField "String", "URL_WEBAPI", "${STAGING_URL_WEBAPI_BASE_URL}"
buildConfigField "String", "URL_WEBAPI", "\"${STAGING_URL_WEBAPI_BASE_URL}\""
}

production {
buildConfigField "String", "URL_WEBAPI", "${PRODUCTION_URL_WEBAPI_BASE_URL}"
buildConfigField "String", "URL_WEBAPI", "\"${PRODUCTION_URL_WEBAPI_BASE_URL}\""
}
}

Expand Down Expand Up @@ -91,9 +88,6 @@ dependencies {
def koin_version = "2.0.1"
implementation "org.koin:koin-android-viewmodel:$koin_version"

def androidXAnnotations = '1.0.1'
implementation "androidx.annotation:annotation:$androidXAnnotations"

def coroutinesVersion = '1.5.2'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
Expand Down Expand Up @@ -130,14 +124,14 @@ dependencies {
implementation "com.github.skydoves:landscapist-glide:1.4.0"

// firebase
implementation 'com.google.firebase:firebase-messaging:20.2.0'
implementation 'com.google.firebase:firebase-analytics:17.4.2'
implementation 'com.google.firebase:firebase-crashlytics:17.0.0'
implementation 'com.google.firebase:firebase-messaging-ktx:23.0.0'
implementation 'com.google.firebase:firebase-analytics-ktx:20.0.2'

implementation 'com.yandex.android:mobmetricalib:4.1.1'

def kotpref_version = "2.13.2"
implementation "com.chibatching.kotpref:kotpref:$kotpref_version"
implementation "com.chibatching.kotpref:gson-support:$kotpref_version"
implementation "com.chibatching.kotpref:initializer:$kotpref_version"
implementation "com.chibatching.kotpref:livedata-support:$kotpref_version"

// zoomable image view
Expand All @@ -151,9 +145,6 @@ dependencies {

implementation "com.github.marlonlom:timeago:4.0.3"

//recycler view swipe detector
implementation 'it.xabaras.android:recyclerview-swipedecorator:1.2.2'

implementation 'com.github.samanzamani.persiandate:PersianDate:0.8'

//chucker debugger
Expand All @@ -172,3 +163,6 @@ dependencies {
implementation 'com.jakewharton.timber:timber:5.0.1'
}

appmetrica {
postApiKey = "${APP_METRICA_POST_API_KEY}"
}
15 changes: 14 additions & 1 deletion app/google-services.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,20 @@
"current_key": "AAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
]
},
{
"client_info": {
"mobilesdk_app_id": "1:1111:android:bbbbbbbbb",
"android_client_info": {
"package_name": "com.kindnesswand.debug"
}
},
"api_key": [
{
"current_key": "BBbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
}
]
}
],
"configuration_version": "1"
}
}
17 changes: 5 additions & 12 deletions app/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,15 +1,8 @@
################### APP_VERSION #######################
VERSION_CODE=8
VERSION_NAME=2.2.0
#######################################################
################## Web Api Url ########################
PRODUCTION_URL_WEBAPI_BASE_URL="http://kindnesswand.com/api/v1/"
STAGING_URL_WEBAPI_BASE_URL="http://dev.kindnesswand.com/api/v1/"
#######################################################
################## Timeout Configs ####################
READ_TIMEOUT_SECOND=20l
CONNECTION_TIMEOUT_SECOND=20l
#######################################################
##################### GOOGLE #########################
# These properties must be override in build script
PRODUCTION_URL_WEBAPI_BASE_URL=http://kindnesswand.com/api/v1/
STAGING_URL_WEBAPI_BASE_URL=http://dev.kindnesswand.com/api/v1/
GOOGLE_MAPS_API_KEY=googleApiKey
######################################################
APP_METRICA_API_KEY=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
APP_METRICA_POST_API_KEY=bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb
4 changes: 4 additions & 0 deletions app/src/debug/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">نسخه دیباگ</string>
</resources>
5 changes: 5 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

<!-- removing app-metrica accessing ad-id -->
<uses-permission
android:name="com.google.android.gms.permission.AD_ID"
tools:node="remove" />

<application
android:name=".KindnessApplication"
android:allowBackup="false"
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/java/ir/kindnesswall/BaseActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.firebase.iid.FirebaseInstanceId
import com.google.firebase.messaging.FirebaseMessaging
import ir.kindnesswall.data.local.AppPref
import ir.kindnesswall.data.local.UserInfoPref
import ir.kindnesswall.data.repository.UserRepo
Expand Down Expand Up @@ -64,9 +64,9 @@ abstract class BaseActivity : AppCompatActivity() {

if (UserInfoPref.bearerToken.isNotEmpty()) {
if (UserInfoPref.fireBaseToken.isEmpty()) {
FirebaseInstanceId.getInstance().instanceId.addOnCompleteListener { result ->
FirebaseMessaging.getInstance().token.addOnCompleteListener { result ->
if (result.isSuccessful) {
val token = result.result?.token.toString()
val token = result.result.toString()
if (token.isNotEmpty()) {
UserInfoPref.fireBaseToken = token
userRepo.registerFirebaseToken()
Expand Down
23 changes: 22 additions & 1 deletion app/src/main/java/ir/kindnesswall/KindnessApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import androidx.lifecycle.ProcessLifecycleOwner
import com.chibatching.kotpref.Kotpref
import com.yandex.metrica.YandexMetrica
import com.yandex.metrica.YandexMetricaConfig
import ir.kindnesswall.data.local.AppPref
import ir.kindnesswall.data.local.UserInfoPref
import ir.kindnesswall.data.local.dao.catalog.GiftModel
import ir.kindnesswall.data.model.ChatContactModel
import ir.kindnesswall.di.dataBaseModule
Expand All @@ -20,7 +24,7 @@ import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin
import timber.log.Timber
import java.util.*
import java.util.Locale

/**
* Created by farshid.abazari since 2019-11-01
Expand Down Expand Up @@ -49,9 +53,26 @@ class KindnessApplication : Application(), LifecycleObserver {
override fun onCreate() {
super.onCreate()

Kotpref.init(this)

if (BuildConfig.DEBUG)
Timber.plant(Timber.DebugTree())

if (BuildConfig.DEBUG.not()) {
YandexMetrica.activate(
this,
YandexMetricaConfig
.newConfigBuilder(BuildConfig.APP_METRICA_API_KEY)
.withLocationTracking(false)
.apply {
UserInfoPref.userId.takeIf { it != 0L }
?.let { withUserProfileID(it.toString()) }
}
.build()
)
YandexMetrica.enableActivityAutoTracking(this)
}

startKoin {
androidLogger()
androidContext(this@KindnessApplication)
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/java/ir/kindnesswall/di/NetworkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ fun headersInterceptor(addAuthHeader: Boolean) = Interceptor { chain ->

private fun setTimeOutToOkHttpClient(okHttpClientBuilder: OkHttpClient.Builder) =
okHttpClientBuilder.apply {
readTimeout(BuildConfig.READ_TIMEOUT_SECOND, TimeUnit.SECONDS)
connectTimeout(BuildConfig.CONNECTION_TIMEOUT_SECOND, TimeUnit.SECONDS)
writeTimeout(BuildConfig.READ_TIMEOUT_SECOND, TimeUnit.SECONDS)
readTimeout(15L, TimeUnit.SECONDS)
connectTimeout(15L, TimeUnit.SECONDS)
writeTimeout(15L, TimeUnit.SECONDS)
}

class NullOnEmptyConverterFactory : Converter.Factory() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.widget.doOnTextChanged
import androidx.databinding.DataBindingUtil
import com.google.firebase.iid.FirebaseInstanceId
import com.google.firebase.messaging.FirebaseMessaging
import ir.kindnesswall.BaseFragment
import ir.kindnesswall.R
import ir.kindnesswall.data.local.AppPref
Expand Down Expand Up @@ -157,9 +157,9 @@ class InsertVerificationNumberFragment : BaseFragment() {
when (it.status) {
CustomResult.Status.SUCCESS -> {
dismissProgressDialog()
FirebaseInstanceId.getInstance().instanceId.addOnCompleteListener { result ->
FirebaseMessaging.getInstance().token.addOnCompleteListener { result ->
if (result.isSuccessful) {
val token = result.result?.token.toString()
val token = result.result.toString()
if (token.isNotEmpty()) {
UserInfoPref.fireBaseToken = token
AppPref.shouldUpdatedFireBaseToken = true
Expand Down
40 changes: 38 additions & 2 deletions app/src/main/java/ir/kindnesswall/view/main/more/MoreFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,20 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.verticalScroll
Expand All @@ -17,6 +28,7 @@ import androidx.compose.material.Text
import androidx.compose.material.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand Down Expand Up @@ -70,6 +82,7 @@ class MoreFragment : BaseFragment() {

override fun configureViews() {}

@OptIn(ExperimentalFoundationApi::class)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view as ComposeView
view.setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
Expand Down Expand Up @@ -173,7 +186,16 @@ class MoreFragment : BaseFragment() {
Text(
text = stringResource(R.string.version, BuildConfig.VERSION_NAME),
style = MaterialTheme.typography.overline,
modifier = Modifier.align(Alignment.CenterHorizontally)
modifier = Modifier
.align(Alignment.CenterHorizontally)
.combinedClickable(
enabled = BuildConfig.FLAVOR == "staging",
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = {},
onLongClick = { throwByLongClick() },
onDoubleClick = { throwByDoubleClick() }
)
)
}
}
Expand Down Expand Up @@ -223,6 +245,20 @@ class MoreFragment : BaseFragment() {
}
.show()
}

private fun throwByLongClick() {
throw RuntimeException("Hello from more fragment: long click")
}

private fun throwByDoubleClick() {
TestCrash().crash("Hello from more fragment: double click")
}

class TestCrash {
fun crash(message: String) {
throw RuntimeException(message)
}
}
}

@Composable
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ buildscript {
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.5"

classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.2'
classpath "com.github.ben-manes:gradle-versions-plugin:0.39.0"
classpath "com.yandex.android:appmetrica-build-plugin:0.3.0"
}
}

Expand Down
2 changes: 1 addition & 1 deletion scripts/extract_dependencies/kapt.txt
Original file line number Diff line number Diff line change
Expand Up @@ -109,5 +109,5 @@ You can use '--warning-mode all' to show the individual deprecation warnings and

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1s
BUILD SUCCESSFUL in 2s
1 actionable task: 1 executed
Loading