coding-blocks/CBOnlineApp

View on GitHub
app/src/main/java/com/codingblocks/cbonlineapp/CBOnlineApp.kt

Summary

Maintainability
A
3 hrs
Test Coverage
package com.codingblocks.cbonlineapp

import android.app.Application
import android.app.NotificationChannel
import android.app.NotificationManager
import android.util.Log
import cn.campusapp.router.Router
import cn.campusapp.router.router.IActivityRouteTableInitializer
import com.codingblocks.cbonlineapp.campaign.CampaignActivity
import com.codingblocks.cbonlineapp.course.CourseActivity
import com.codingblocks.cbonlineapp.course.SearchCourseActivity
import com.codingblocks.cbonlineapp.di.databaseModule
import com.codingblocks.cbonlineapp.di.firebaseModule
import com.codingblocks.cbonlineapp.di.preferencesModule
import com.codingblocks.cbonlineapp.di.viewModelModule
import com.codingblocks.cbonlineapp.mycourse.MyCourseActivity
import com.codingblocks.cbonlineapp.mycourse.content.player.VideoPlayerActivity
import com.codingblocks.cbonlineapp.tracks.LearningTracksActivity
import com.codingblocks.cbonlineapp.tracks.TrackActivity
import com.codingblocks.cbonlineapp.util.ADMIN_CHANNEL_ID
import com.codingblocks.cbonlineapp.util.CONTENT_ID
import com.codingblocks.cbonlineapp.util.COURSE_ID
import com.codingblocks.cbonlineapp.util.DOWNLOAD_CHANNEL_ID
import com.codingblocks.cbonlineapp.util.PreferenceHelper
import com.codingblocks.cbonlineapp.util.RUN_ATTEMPT_ID
import com.codingblocks.cbonlineapp.util.RUN_ID
import com.codingblocks.cbonlineapp.util.SECTION_ID
import com.codingblocks.cbonlineapp.util.misc.AppSignatureHelper
import com.codingblocks.cbonlineapp.util.receivers.NotificationOpenedHandler
import com.codingblocks.cbonlineapp.util.receivers.NotificationReceivedHandler
import com.codingblocks.onlineapi.CBOnlineCommunicator
import com.codingblocks.onlineapi.CBOnlineLib
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.onesignal.OneSignal
import org.jetbrains.anko.notificationManager
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin

class CBOnlineApp : Application() {

    companion object {
        lateinit var mInstance: CBOnlineApp
    }

    override fun onCreate() {
        Thread.setDefaultUncaughtExceptionHandler(CrashHandler(applicationContext))
        super.onCreate()
        mInstance = this
        val prefs = PreferenceHelper.getPrefs(this)

        CBOnlineLib.initialize(object : CBOnlineCommunicator {

            override var authJwt: String
                get() = prefs.SP_JWT_TOKEN_KEY
                set(value) {
                    prefs.SP_JWT_TOKEN_KEY = value
                }
            override var refreshToken: String
                get() = prefs.SP_JWT_REFRESH_TOKEN
                set(value) {
                    prefs.SP_JWT_REFRESH_TOKEN = value
                }
            override var baseUrl: String
                get() = BuildConfig.BASE_URL
                set(value) {}
            override var appVersion: Int
                get() = BuildConfig.VERSION_CODE
                set(value) {}
        })

        if (BuildConfig.DEBUG) {
            AppSignatureHelper(this).appSignatures.forEach {
                Log.d("APPSIG", it)
            }
            CBOnlineLib.httpLogging = true
        }

        // Create Notification Channel
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            val notificationChannel = NotificationChannel(
                DOWNLOAD_CHANNEL_ID,
                "Course Download",
                NotificationManager.IMPORTANCE_DEFAULT
            )

            val adminNotificationChannel = NotificationChannel(
                ADMIN_CHANNEL_ID,
                "Admin Notification",
                NotificationManager.IMPORTANCE_HIGH
            )

            notificationManager.createNotificationChannel(notificationChannel)
            notificationManager.createNotificationChannel(adminNotificationChannel)
        }
        startKoin {
            androidContext(this@CBOnlineApp)
            modules(
                listOf(
                    viewModelModule, firebaseModule,
                    databaseModule, preferencesModule
                )
            )
        }

        // OneSignal Initialization
        OneSignal.startInit(this)
            .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
            .unsubscribeWhenNotificationsAreDisabled(true)
            .setNotificationReceivedHandler(NotificationReceivedHandler())
            .setNotificationOpenedHandler(NotificationOpenedHandler())
            .init()

        // Configure Routers
        try {
            Router.initActivityRouter(
                applicationContext,
                IActivityRouteTableInitializer { router ->
                    router["activity://courseRun/https://online.codingblocks.com/app/classroom/course/:s{$COURSE_ID}/run/:s{$RUN_ID}"] =
                        MyCourseActivity::class.java
                    router["activity://courseRun/https://online.codingblocks.com/courses/:s{courseId}"] =
                        CourseActivity::class.java
                    router["activity://courseRun/https://online.codingblocks.com/courses"] =
                        SearchCourseActivity::class.java
                    router["activity://courseRun/https://online.codingblocks.com/app/player/:s{$RUN_ATTEMPT_ID}/content/:s{$SECTION_ID}/:s{$CONTENT_ID}"] =
                        VideoPlayerActivity::class.java
                    router["activity://courseRun/https://online.codingblocks.com/app/tracks/:s{courseId}"] =
                        TrackActivity::class.java
                    router["activity://courseRun/https://online.codingblocks.com/app/tracks"] =
                        LearningTracksActivity::class.java
                    router["activity://courseRun/https://online.codingblocks.com/app/spin-n-win"] =
                        CampaignActivity::class.java
                }
            )
        } catch (e: ConcurrentModificationException) {
            FirebaseCrashlytics.getInstance().log("Router not working : ${e.localizedMessage}")
        }
    }
}