Commit 7654afcf authored by shohboz's avatar shohboz

[ADD] MUS-107 Feature, added firebase to project

parent 47267ca3
...@@ -4,13 +4,14 @@ plugins { ...@@ -4,13 +4,14 @@ plugins {
id 'kotlin-kapt' id 'kotlin-kapt'
id 'dagger.hilt.android.plugin' id 'dagger.hilt.android.plugin'
id 'androidx.navigation.safeargs.kotlin' id 'androidx.navigation.safeargs.kotlin'
id 'com.google.firebase.crashlytics'
} }
android { android {
compileSdk 31 compileSdk 31
defaultConfig { defaultConfig {
applicationId "uz.ssd.mobiuz" applicationId "com.mobiuz.app"
minSdk 21 minSdk 21
targetSdk 31 targetSdk 31
versionCode 1 versionCode 1
...@@ -49,6 +50,13 @@ dependencies { ...@@ -49,6 +50,13 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
// Firebase
implementation platform('com.google.firebase:firebase-bom:28.2.1')
implementation 'com.google.firebase:firebase-crashlytics-ktx:18.2.5'
implementation 'com.google.firebase:firebase-analytics-ktx:20.0.0'
implementation 'com.google.firebase:firebase-messaging-ktx:23.0.0'
// Navigation // Navigation
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
......
{
"project_info": {
"project_number": "453497477762",
"project_id": "mobiuz-7563b",
"storage_bucket": "mobiuz-7563b.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:453497477762:android:57da19692a77341ae9b29b",
"android_client_info": {
"package_name": "com.mobiuz.app"
}
},
"oauth_client": [
{
"client_id": "453497477762-t0b1iqi4k3t8s49mm7eco951kpdr4eta.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.mobiuz.app",
"certificate_hash": "0259d09452724d02cca3c034973f523c2485a232"
}
},
{
"client_id": "453497477762-1080ucujet6ca5dop6qc2f0k6vornqj6.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyCpGAiOAd5TBCiDI_ZyVMZSkK-OH00LP5w"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "453497477762-1080ucujet6ca5dop6qc2f0k6vornqj6.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:453497477762:android:4e22d841473f89a3e9b29b",
"android_client_info": {
"package_name": "com.mobiuz.app.dev"
}
},
"oauth_client": [
{
"client_id": "453497477762-okn4u5uhp9mq1j85ckqds7bhieo4sbu6.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.mobiuz.app.dev",
"certificate_hash": "0259d09452724d02cca3c034973f523c2485a232"
}
},
{
"client_id": "453497477762-1080ucujet6ca5dop6qc2f0k6vornqj6.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyCpGAiOAd5TBCiDI_ZyVMZSkK-OH00LP5w"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "453497477762-1080ucujet6ca5dop6qc2f0k6vornqj6.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}
\ No newline at end of file
package uz.ssd.mobiuz package com.mobiuz.app
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.ktx.Firebase
import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.ktx.messaging
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import uz.ssd.mobiuz.databinding.ActivityAuthBinding import com.mobiuz.app.databinding.ActivityAuthBinding
import uz.ssd.mobiuz.ui.global.CONSTANTS import com.mobiuz.app.model.SharedPref
import uz.ssd.mobiuz.utils.Utils import com.mobiuz.app.ui.global.CONSTANTS
import com.mobiuz.app.utils.Utils
import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class AuthActivity : AppCompatActivity() { class AuthActivity : AppCompatActivity() {
@Inject
lateinit var pref: SharedPref
private var _bn: ActivityAuthBinding? = null private var _bn: ActivityAuthBinding? = null
private val bn get() = _bn ?: throw NullPointerException("cannot inflate") private val bn get() = _bn ?: throw NullPointerException("cannot inflate")
private lateinit var navController : NavController private lateinit var navController: NavController
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -23,14 +34,23 @@ class AuthActivity : AppCompatActivity() { ...@@ -23,14 +34,23 @@ class AuthActivity : AppCompatActivity() {
setContentView(bn.root) setContentView(bn.root)
val fragment = supportFragmentManager.findFragmentById(R.id.auth_container) as NavHostFragment val fragment = supportFragmentManager.findFragmentById(R.id.auth_container) as NavHostFragment
navController = NavHostFragment.findNavController(fragment) navController = NavHostFragment.findNavController(fragment)
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
// Firebase.messaging.subscribeToTopic("just").addOnCompleteListener { task ->
// Log.e("AAA", "subscribe: ${task.isSuccessful}")
// }
FirebaseMessaging.getInstance().token.addOnCompleteListener {
if(it.isSuccessful) pref.setDeviceToken(it.result.toString())
}
window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
intent?.let { intent?.let {
val type = it.getStringExtra(CONSTANTS.TYPE_AUTH) val type = it.getStringExtra(CONSTANTS.TYPE_AUTH)
if (type == CONSTANTS.PIN_CODE) { if (type == CONSTANTS.PIN_CODE) {
navController.popBackStack() navController.popBackStack()
navController.navigate(R.id.pinFragment,null,Utils.navOptions()) navController.navigate(R.id.pinFragment, null, Utils.navOptions())
} }
} }
} }
......
package uz.ssd.mobiuz package com.mobiuz.app
import android.content.Intent import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContentProviderCompat.requireContext
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.navigation.NavController import androidx.navigation.NavController
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.ktx.Firebase
import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.ktx.messaging
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import uz.ssd.mobiuz.databinding.ActivityMainBinding import com.mobiuz.app.databinding.ActivityMainBinding
import uz.ssd.mobiuz.model.SharedPref import com.mobiuz.app.model.SharedPref
import uz.ssd.mobiuz.ui.global.FullScreenDialog import com.mobiuz.app.ui.global.CONSTANTS
import uz.ssd.mobiuz.ui.global.CONSTANTS import com.mobiuz.app.ui.global.FullScreenDialog
import uz.ssd.mobiuz.utils.extensions.customLog import com.mobiuz.app.utils.extensions.customLog
import uz.ssd.mobiuz.utils.extensions.setupWithNavController import com.mobiuz.app.utils.extensions.setupWithNavController
import javax.inject.Inject import javax.inject.Inject
...@@ -30,13 +34,22 @@ class MainActivity : AppCompatActivity() { ...@@ -30,13 +34,22 @@ class MainActivity : AppCompatActivity() {
private lateinit var bottomNavigationView: BottomNavigationView private lateinit var bottomNavigationView: BottomNavigationView
private var currentNavController: LiveData<NavController>? = null private var currentNavController: LiveData<NavController>? = null
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
_bn = ActivityMainBinding.inflate(layoutInflater) _bn = ActivityMainBinding.inflate(layoutInflater)
setContentView(bn.root) setContentView(bn.root)
window.statusBarColor = Color.TRANSPARENT window.statusBarColor = Color.TRANSPARENT
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
// Firebase.messaging.subscribeToTopic("just").addOnCompleteListener { task ->
// Log.e("AAA", "subscribe: ${task.isSuccessful}")
// }
FirebaseMessaging.getInstance().token.addOnCompleteListener {
if(it.isSuccessful) pref.setDeviceToken(it.result.toString())
}
if (savedInstanceState == null) { if (savedInstanceState == null) {
setupBottomNavigationBar() setupBottomNavigationBar()
} }
......
package uz.ssd.mobiuz.di package com.mobiuz.app.di
import android.content.Context import android.content.Context
import com.readystatesoftware.chuck.ChuckInterceptor import com.readystatesoftware.chuck.ChuckInterceptor
...@@ -13,10 +13,10 @@ import okhttp3.logging.HttpLoggingInterceptor ...@@ -13,10 +13,10 @@ import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
import uz.ssd.mobiuz.model.SharedPref import com.mobiuz.app.model.SharedPref
import uz.ssd.mobiuz.network.api.ApiService import com.mobiuz.app.network.api.ApiService
import uz.ssd.mobiuz.ui.global.CONSTANTS import com.mobiuz.app.ui.global.CONSTANTS
import uz.ssd.mobiuz.utils.Utils import com.mobiuz.app.utils.Utils
import javax.inject.Singleton import javax.inject.Singleton
@Module @Module
...@@ -52,7 +52,7 @@ class ServerModule { ...@@ -52,7 +52,7 @@ class ServerModule {
val builder = chain.request().newBuilder() val builder = chain.request().newBuilder()
builder.header("Content-Type", "application/x-www-form-urlencoded") builder.header("Content-Type", "application/x-www-form-urlencoded")
builder.header("Lang", sharedPref.language) builder.header("Lang", sharedPref.language)
builder.header("device-id", Utils.getDeviceName()) builder.header("device-id", sharedPref.getDeviceToken() ?: Utils.getDeviceName())
builder.header("Accept", "application/json") builder.header("Accept", "application/json")
builder.header("Authorization", "Bearer ${sharedPref.getUserToken()}") builder.header("Authorization", "Bearer ${sharedPref.getUserToken()}")
chain.proceed(builder.build()) chain.proceed(builder.build())
......
package uz.ssd.mobiuz.model package com.mobiuz.app.model
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
...@@ -7,7 +7,7 @@ import javax.inject.Inject ...@@ -7,7 +7,7 @@ import javax.inject.Inject
class SharedPref @Inject constructor(@ApplicationContext context: Context) { class SharedPref @Inject constructor(@ApplicationContext context: Context) {
private var mySharedPref: SharedPreferences = context.getSharedPreferences("mvd", Context.MODE_PRIVATE) private var mySharedPref: SharedPreferences = context.getSharedPreferences("mobiuz", Context.MODE_PRIVATE)
fun setDeviceToken(token: String) { fun setDeviceToken(token: String) {
mySharedPref.edit().putString("device_token", token).apply() mySharedPref.edit().putString("device_token", token).apply()
...@@ -26,25 +26,25 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) { ...@@ -26,25 +26,25 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
} }
var language: String var language: String
get() = mySharedPref.getString(::language.name, "")?:"" get() = mySharedPref.getString(::language.name, "") ?: ""
set(value) { set(value) {
mySharedPref.edit().putString(::language.name, value).apply() mySharedPref.edit().putString(::language.name, value).apply()
} }
var pin_code: String var pin_code: String
get() = mySharedPref.getString(::pin_code.name, "")?:"" get() = mySharedPref.getString(::pin_code.name, "") ?: ""
set(value) { set(value) {
mySharedPref.edit().putString(::pin_code.name, value).apply() mySharedPref.edit().putString(::pin_code.name, value).apply()
} }
var isRegistered: Boolean var isRegistered: Boolean
get() = mySharedPref.getBoolean("isRegistered", false) get() = mySharedPref.getBoolean(::isRegistered.name, false)
set(value) { set(value) {
mySharedPref.edit().putBoolean("isRegistered", value).apply() mySharedPref.edit().putBoolean(::isRegistered.name, value).apply()
} }
var userPhone: String var userPhone: String
get() = mySharedPref.getString(::userPhone.name, "")?:"" get() = mySharedPref.getString(::userPhone.name, "") ?: ""
set(value) { set(value) {
mySharedPref.edit().putString(::userPhone.name, value).apply() mySharedPref.edit().putString(::userPhone.name, value).apply()
} }
......
...@@ -20,6 +20,7 @@ buildscript { ...@@ -20,6 +20,7 @@ buildscript {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"
classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version" classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.4.0-beta02" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.4.0-beta02"
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment