@@ -21,6 +21,7 @@ import android.content.Intent
21
21
import android.net.Uri
22
22
import android.os.Build
23
23
import android.os.Bundle
24
+ import androidx.activity.viewModels
24
25
import androidx.appcompat.app.AppCompatActivity
25
26
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
26
27
import androidx.lifecycle.lifecycleScope
@@ -48,7 +49,6 @@ import com.hover.stax.presentation.financial_tips.FinancialTipsFragment
48
49
import com.hover.stax.requests.REQUEST_LINK
49
50
import com.hover.stax.schedules.ScheduleWorker
50
51
import com.hover.stax.settings.BiometricChecker
51
- import com.hover.stax.core.AnalyticsUtil
52
52
import com.hover.stax.utils.UIHelper
53
53
import com.hover.stax.utils.Utils
54
54
import com.uxcam.OnVerificationListener
@@ -57,15 +57,17 @@ import com.uxcam.datamodel.UXConfig
57
57
import kotlinx.coroutines.launch
58
58
import org.json.JSONException
59
59
import org.json.JSONObject
60
- import org.koin.androidx.viewmodel.ext.android.viewModel
61
60
import timber.log.Timber
62
61
63
62
const val FRAGMENT_DIRECT = " fragment_direct"
64
63
const val FROM_FCM = " from_notification"
65
64
66
- class RoutingActivity : AppCompatActivity (), BiometricChecker.AuthListener, PushNotificationTopicsInterface {
65
+ class RoutingActivity :
66
+ AppCompatActivity (),
67
+ BiometricChecker .AuthListener ,
68
+ PushNotificationTopicsInterface {
67
69
68
- private val channelsViewModel: ChannelsViewModel by viewModel ()
70
+ private val channelsViewModel: ChannelsViewModel by viewModels ()
69
71
private lateinit var remoteConfig: FirebaseRemoteConfig
70
72
private lateinit var workManager: WorkManager
71
73
private var hasAccounts = false
@@ -121,21 +123,36 @@ class RoutingActivity : AppCompatActivity(), BiometricChecker.AuthListener, Push
121
123
joinNoRequestMoneyGroup(this )
122
124
}
123
125
124
- private fun initAmplitude () = Amplitude .getInstance().initialize(this , getString(R .string.amp)).enableForegroundTracking(application)
126
+ private fun initAmplitude () = Amplitude .getInstance().initialize(this , getString(R .string.amp))
127
+ .enableForegroundTracking(application)
125
128
126
129
private fun logPushNotificationIfRequired () = intent.extras?.let {
127
130
val fcmTitle = it.getString(FROM_FCM )
128
- fcmTitle?.let { title -> com.hover.stax.core.AnalyticsUtil .logAnalyticsEvent(getString(R .string.clicked_push_notification, title), this ) }
131
+ fcmTitle?.let { title ->
132
+ com.hover.stax.core.AnalyticsUtil .logAnalyticsEvent(
133
+ getString(
134
+ R .string.clicked_push_notification,
135
+ title
136
+ ),
137
+ this
138
+ )
139
+ }
129
140
}
130
141
131
142
private fun initHover () {
132
143
Hover .initialize(this )
133
- Hover .setBranding(getString(R .string.app_name), R .drawable.named_stax_logo, R .mipmap.ic_launcher_round, this )
144
+ Hover .setBranding(
145
+ getString(R .string.app_name),
146
+ R .drawable.named_stax_logo,
147
+ R .mipmap.ic_launcher_round,
148
+ this
149
+ )
134
150
Hover .setPermissionActivity(PERM_ACTIVITY , this )
135
151
}
136
152
137
153
private fun initRemoteConfigs () {
138
- val configSettings = FirebaseRemoteConfigSettings .Builder ().setMinimumFetchIntervalInSeconds(3600 ).build()
154
+ val configSettings =
155
+ FirebaseRemoteConfigSettings .Builder ().setMinimumFetchIntervalInSeconds(3600 ).build()
139
156
remoteConfig.apply {
140
157
setConfigSettingsAsync(configSettings)
141
158
setDefaultsAsync(R .xml.remote_config_default)
@@ -164,13 +181,22 @@ class RoutingActivity : AppCompatActivity(), BiometricChecker.AuthListener, Push
164
181
UXCam .addVerificationListener(object : OnVerificationListener {
165
182
override fun onVerificationSuccess () {
166
183
FirebaseCrashlytics .getInstance()
167
- .setCustomKey(getString(R .string.uxcam_session_url), UXCam .urlForCurrentSession())
184
+ .setCustomKey(
185
+ getString(R .string.uxcam_session_url),
186
+ UXCam .urlForCurrentSession()
187
+ )
168
188
169
189
val eventProperties = JSONObject ()
170
190
val userProperties = JSONObject ()
171
191
try {
172
- eventProperties.put(getString(R .string.uxcam_session_url), UXCam .urlForCurrentSession())
173
- userProperties.put(getString(R .string.uxcam_session_url), UXCam .urlForCurrentUser())
192
+ eventProperties.put(
193
+ getString(R .string.uxcam_session_url),
194
+ UXCam .urlForCurrentSession()
195
+ )
196
+ userProperties.put(
197
+ getString(R .string.uxcam_session_url),
198
+ UXCam .urlForCurrentUser()
199
+ )
174
200
} catch (exception: JSONException ) {
175
201
}
176
202
@@ -199,7 +225,11 @@ class RoutingActivity : AppCompatActivity(), BiometricChecker.AuthListener, Push
199
225
private fun createNotificationChannel () {
200
226
if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
201
227
val importance = NotificationManager .IMPORTANCE_DEFAULT
202
- val channel = NotificationChannel (getString(R .string.default_notification_channel_id), getString(R .string.notify_default_title), importance)
228
+ val channel = NotificationChannel (
229
+ getString(R .string.default_notification_channel_id),
230
+ getString(R .string.notify_default_title),
231
+ importance
232
+ )
203
233
channel.description = getString(R .string.notify_default_channel_descrip)
204
234
val notificationManager = getSystemService(NotificationManager ::class .java)
205
235
notificationManager.createNotificationChannel(channel)
@@ -213,11 +243,19 @@ class RoutingActivity : AppCompatActivity(), BiometricChecker.AuthListener, Push
213
243
214
244
private fun startChannelWorkers (wm : WorkManager ) {
215
245
wm.enqueue(ImportChannelsWorker .channelsImportRequest())
216
- wm.enqueueUniquePeriodicWork(UpdateChannelsWorker .TAG , ExistingPeriodicWorkPolicy .KEEP , UpdateChannelsWorker .makeToil())
246
+ wm.enqueueUniquePeriodicWork(
247
+ UpdateChannelsWorker .TAG ,
248
+ ExistingPeriodicWorkPolicy .KEEP ,
249
+ UpdateChannelsWorker .makeToil()
250
+ )
217
251
}
218
252
219
253
private fun startScheduleWorker (wm : WorkManager ) {
220
- wm.enqueueUniquePeriodicWork(ScheduleWorker ::class .java.simpleName, ExistingPeriodicWorkPolicy .KEEP , ScheduleWorker .makeToil())
254
+ wm.enqueueUniquePeriodicWork(
255
+ ScheduleWorker ::class .java.simpleName,
256
+ ExistingPeriodicWorkPolicy .KEEP ,
257
+ ScheduleWorker .makeToil()
258
+ )
221
259
}
222
260
223
261
private fun chooseNavigation (intent : Intent ) {
@@ -234,6 +272,7 @@ class RoutingActivity : AppCompatActivity(), BiometricChecker.AuthListener, Push
234
272
goToMainActivity(it)
235
273
}
236
274
}
275
+
237
276
isForFulfilRequest(intent) -> goToFulfillRequestActivity(intent)
238
277
isForSettingsScreen(intent) -> goToSettings()
239
278
else -> goToMainActivity(null )
@@ -244,14 +283,23 @@ class RoutingActivity : AppCompatActivity(), BiometricChecker.AuthListener, Push
244
283
245
284
private fun goToFinancialTips () {
246
285
val tipId = Uri .parse(intent.getStringExtra(" redirect" )).getQueryParameter(" id" )
247
- startActivity(Intent (this , MainActivity ::class .java).putExtra(FinancialTipsFragment .TIP_ID , tipId))
286
+ startActivity(
287
+ Intent (this , MainActivity ::class .java).putExtra(
288
+ FinancialTipsFragment .TIP_ID ,
289
+ tipId
290
+ )
291
+ )
248
292
finish()
249
293
}
250
294
251
295
private fun validateUser () = lifecycleScope.launchWhenStarted {
252
296
when {
253
297
! hasPassedOnboarding() -> goToOnBoardingActivity()
254
- hasAccounts -> BiometricChecker (this @RoutingActivity, this @RoutingActivity).startAuthentication(null )
298
+ hasAccounts -> BiometricChecker (
299
+ this @RoutingActivity,
300
+ this @RoutingActivity
301
+ ).startAuthentication(null )
302
+
255
303
else -> {
256
304
if (redirectToFinancialTips())
257
305
goToFinancialTips()
@@ -267,9 +315,15 @@ class RoutingActivity : AppCompatActivity(), BiometricChecker.AuthListener, Push
267
315
}
268
316
269
317
private fun goToFulfillRequestActivity (intent : Intent ) {
270
- startActivity(Intent (this , MainActivity ::class .java).putExtra(REQUEST_LINK , intent.data.toString()))
318
+ startActivity(
319
+ Intent (this , MainActivity ::class .java).putExtra(
320
+ REQUEST_LINK ,
321
+ intent.data.toString()
322
+ )
323
+ )
271
324
finish()
272
325
}
326
+
273
327
private fun goToSettings () {
274
328
val intent = Intent (this , MainActivity ::class .java)
275
329
intent.putExtra(FRAGMENT_DIRECT , R .id.navigation_settings)
@@ -283,30 +337,40 @@ class RoutingActivity : AppCompatActivity(), BiometricChecker.AuthListener, Push
283
337
try {
284
338
redirectLink?.let { intent.putExtra(FRAGMENT_DIRECT , redirectLink.toInt()) }
285
339
} catch (e: NumberFormatException ) {
286
- com.hover.stax.core.AnalyticsUtil .logErrorAndReportToFirebase(RoutingActivity ::class .java.simpleName, getString(R .string.firebase_fcm_redirect_format_err), e)
340
+ com.hover.stax.core.AnalyticsUtil .logErrorAndReportToFirebase(
341
+ RoutingActivity ::class .java.simpleName,
342
+ getString(R .string.firebase_fcm_redirect_format_err),
343
+ e
344
+ )
287
345
}
288
346
289
347
startActivity(intent)
290
348
finish()
291
349
}
292
350
293
- override fun onAuthError (error : String ) = runOnUiThread { UIHelper .flashAndReportMessage(this , getString(R .string.toast_error_auth)) }
351
+ override fun onAuthError (error : String ) =
352
+ runOnUiThread { UIHelper .flashAndReportMessage(this , getString(R .string.toast_error_auth)) }
294
353
295
354
override fun onAuthSuccess (action : HoverAction ? ) = chooseNavigation(intent)
296
355
297
356
private fun redirectionIsExternal (redirectTo : String ): Boolean = redirectTo.contains(" https" )
298
357
299
- private fun isToRedirectFromMainActivity (intent : Intent ): Boolean = intent.extras?.getString(FRAGMENT_DIRECT ) != null
358
+ private fun isToRedirectFromMainActivity (intent : Intent ): Boolean =
359
+ intent.extras?.getString(FRAGMENT_DIRECT ) != null
300
360
301
361
private fun isForFulfilRequest (intent : Intent ): Boolean = hasDeepLink(" pay" )
302
362
303
- private fun openUrl (url : String ) = startActivity(Intent (Intent .ACTION_VIEW ).setData(Uri .parse(url)))
363
+ private fun openUrl (url : String ) =
364
+ startActivity(Intent (Intent .ACTION_VIEW ).setData(Uri .parse(url)))
304
365
305
- private fun hasPassedOnboarding (): Boolean = Utils .getBoolean(OnBoardingActivity ::class .java.simpleName, this )
366
+ private fun hasPassedOnboarding (): Boolean =
367
+ Utils .getBoolean(OnBoardingActivity ::class .java.simpleName, this )
306
368
307
369
private fun isForSettingsScreen (intent : Intent ): Boolean = hasDeepLink(" share" )
308
370
309
- private fun redirectToFinancialTips (): Boolean = intent.hasExtra(" redirect" ) && intent.getStringExtra(" redirect" )!! .contains(getString(R .string.deeplink_financial_tips))
371
+ private fun redirectToFinancialTips (): Boolean =
372
+ intent.hasExtra(" redirect" ) && intent.getStringExtra(" redirect" )!!
373
+ .contains(getString(R .string.deeplink_financial_tips))
310
374
311
375
private fun hasDeepLink (expectedPath : String ): Boolean {
312
376
val parameters: List <String > = intent.data?.pathSegments ? : emptyList()
0 commit comments