From 203d67da05f167eab9cc24044862d61c14dba704 Mon Sep 17 00:00:00 2001 From: Girish Suragani Date: Thu, 26 Oct 2023 18:08:00 +0530 Subject: [PATCH] Merge 1.0.4 version to master (#17) Co-authored-by: Sayed Owais Ali --- app/src/main/AndroidManifest.xml | 2 +- .../demo/AlfredNetworkFailureReceiver.kt | 40 + .../java/com/alfred/demo/MainApplication.kt | 82 +- .../com/alfred/demo/activity/DemoActivity.kt | 23 - .../com/alfred/demo/activity/MainActivity.kt | 2 +- .../com/alfred/demo/activity/SWWActivity.kt | 57 + app/src/main/res/layout/activity_demo.xml | 11 - app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/layout/activity_sww.xml | 21 + navi-alfred/build.gradle | 3 +- .../main/java/com/navi/alfred/AlfredConfig.kt | 34 +- .../java/com/navi/alfred/AlfredManager.kt | 980 +++--------------- .../navi/alfred/callbacks/NetworkCallback.kt | 11 - .../com/navi/alfred/model/ErrorMessage.kt | 8 +- .../com/navi/alfred/model/SessionRequest.kt | 13 +- .../alfred/network/AlfredNetworkRepository.kt | 16 +- .../alfred/network/AlfredRetrofitProvider.kt | 28 +- .../alfred/network/AlfredRetrofitService.kt | 11 +- .../navi/alfred/network/model/RequestInfo.kt | 11 + .../com/navi/alfred/utils/AlfredConstants.kt | 15 +- .../java/com/navi/alfred/utils/CommonUtils.kt | 32 + .../navi/alfred/utils/CruiseConfigUtils.kt | 81 ++ .../navi/alfred/utils/DeviceMetricsUtils.kt | 146 +++ .../java/com/navi/alfred/utils/EventUtils.kt | 278 +++++ .../com/navi/alfred/utils/MaskingUtils.kt | 25 + .../com/navi/alfred/utils/NetworkUtils.kt | 10 +- .../com/navi/alfred/utils/ScreenNameUtils.kt | 59 ++ .../com/navi/alfred/utils/ScreenShotUtils.kt | 312 ++++++ .../java/com/navi/alfred/utils/UploadUtils.kt | 144 +++ .../navi/alfred/utils/UserBehaviourUtils.kt | 47 + .../main/java/com/navi/alfred/utils/Utils.kt | 452 -------- .../java/com/navi/alfred/utils/ZipUtils.kt | 222 ++++ .../com/navi/alfred/worker/SyncDataTask.kt | 7 +- .../navi/alfred/worker/UploadFileWorker.kt | 3 +- .../src/main/res/layout/anr_screen.xml | 20 + .../main/res/layout/app_background_screen.xml | 21 + .../src/main/res/layout/crash_screen.xml | 20 + .../main/res/layout/third_party_screen.xml | 36 + navi-alfred/src/main/res/values/colors.xml | 5 + navi-alfred/src/main/res/values/strings.xml | 7 + 40 files changed, 1856 insertions(+), 1441 deletions(-) create mode 100644 app/src/main/java/com/alfred/demo/AlfredNetworkFailureReceiver.kt delete mode 100644 app/src/main/java/com/alfred/demo/activity/DemoActivity.kt create mode 100644 app/src/main/java/com/alfred/demo/activity/SWWActivity.kt delete mode 100644 app/src/main/res/layout/activity_demo.xml create mode 100644 app/src/main/res/layout/activity_sww.xml delete mode 100644 navi-alfred/src/main/java/com/navi/alfred/callbacks/NetworkCallback.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/network/model/RequestInfo.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/CommonUtils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/CruiseConfigUtils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/DeviceMetricsUtils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/EventUtils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/MaskingUtils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/ScreenNameUtils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/ScreenShotUtils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/UploadUtils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/UserBehaviourUtils.kt delete mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/Utils.kt create mode 100644 navi-alfred/src/main/java/com/navi/alfred/utils/ZipUtils.kt create mode 100644 navi-alfred/src/main/res/layout/anr_screen.xml create mode 100644 navi-alfred/src/main/res/layout/app_background_screen.xml create mode 100644 navi-alfred/src/main/res/layout/crash_screen.xml create mode 100644 navi-alfred/src/main/res/layout/third_party_screen.xml create mode 100644 navi-alfred/src/main/res/values/colors.xml create mode 100644 navi-alfred/src/main/res/values/strings.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed64060..de677e9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,7 +25,7 @@ diff --git a/app/src/main/java/com/alfred/demo/AlfredNetworkFailureReceiver.kt b/app/src/main/java/com/alfred/demo/AlfredNetworkFailureReceiver.kt new file mode 100644 index 0000000..7d46535 --- /dev/null +++ b/app/src/main/java/com/alfred/demo/AlfredNetworkFailureReceiver.kt @@ -0,0 +1,40 @@ +package com.alfred.demo + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.util.Log +import com.navi.alfred.model.ErrorMessage +import com.navi.alfred.network.model.RequestInfo +import com.navi.alfred.utils.AlfredConstants.BROADCAST_ACTION_TYPE +import com.navi.alfred.utils.AlfredConstants.BROADCAST_ERROR_MESSAGE +import com.navi.alfred.utils.AlfredConstants.BROADCAST_EXCEPTION +import com.navi.alfred.utils.AlfredConstants.BROADCAST_REQUEST +import android.widget.Toast +import com.navi.alfred.utils.log +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +class AlfredNetworkFailureReceiver : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + if (intent?.action == BROADCAST_ACTION_TYPE) { + try { + val exception = intent.getSerializableExtra(BROADCAST_EXCEPTION) + val request = intent.getParcelableExtra(BROADCAST_REQUEST) + val errorMessage = intent.getParcelableExtra(BROADCAST_ERROR_MESSAGE) + + if (exception is Exception) { + CoroutineScope(Dispatchers.IO).launch { + Log.d( + "AlfredNetworkFailure", + "Network Failure exception = $exception, request = $request, errorMessage = $errorMessage" + ) + } + } + } catch (e: Exception) { + e.log() + } + } + } +} diff --git a/app/src/main/java/com/alfred/demo/MainApplication.kt b/app/src/main/java/com/alfred/demo/MainApplication.kt index e569533..3d9ba35 100644 --- a/app/src/main/java/com/alfred/demo/MainApplication.kt +++ b/app/src/main/java/com/alfred/demo/MainApplication.kt @@ -2,12 +2,10 @@ package com.alfred.demo import android.app.Activity import android.app.Application +import android.content.IntentFilter import android.os.Bundle import android.util.Log -import android.view.LayoutInflater -import android.view.View -import androidx.appcompat.widget.AppCompatTextView -import com.alfred.demo.activity.DemoActivity +import com.alfred.demo.activity.SWWActivity import com.alfred.demo.activity.MainActivity import com.navi.alfred.AlfredConfig import com.navi.alfred.AlfredManager @@ -17,13 +15,10 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import com.github.anrwatchdog.ANRWatchDog -import com.navi.alfred.callbacks.NetworkCallback -import com.navi.alfred.model.ErrorMessage -import com.navi.alfred.network.AlfredRetrofitProvider -import okhttp3.Request -import okhttp3.Response +import com.navi.alfred.AlfredManager.isAlfredRecordingEnabled +import com.navi.alfred.utils.AlfredConstants.BROADCAST_ACTION_TYPE -class MainApplication : Application(), Application.ActivityLifecycleCallbacks, NetworkCallback { +class MainApplication : Application(), Application.ActivityLifecycleCallbacks { private var appForegroundCounter: Int = 0 override fun onCreate() { @@ -53,13 +48,8 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks, N "LINE_NUMBER" to it.cause?.stackTrace?.get(0)?.lineNumber.toString(), "APP_IN_FOREGROUND" to isAppInForeground().toString() ) - if (AlfredManager.config.getAlfredStatus() && AlfredManager.config.getAnrEnableStatus()) { - anrEventProperties["STACK_TRACE"] = it.cause?.stackTrace?.get(0).toString() - val anrView = - LayoutInflater.from(applicationContext).inflate(R.layout.anr_screen, null) - AlfredManager.measureInflatedView(anrView) - AlfredManager.handleAnrEvent(anrEventProperties, anrView) - } + anrEventProperties["STACK_TRACE"] = it.cause?.stackTrace?.get(0).toString() + AlfredManager.handleAnrEvent(anrEventProperties) }.start() // Crash Reporting to backend @@ -76,15 +66,10 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks, N "LINE_NUMBER" to exception.stackTrace[0]?.lineNumber.toString(), "APP_IN_FOREGROUND" to isAppInForeground().toString() ) - if (AlfredManager.config.getAlfredStatus() && AlfredManager.config.getCrashEnableStatus()) { - exception.stackTrace[0]?.let { stackTraceElement -> - crashEventProperties["STACK_TRACE"] = stackTraceElement.toString() - } - val crashView = - LayoutInflater.from(applicationContext).inflate(R.layout.crash_screen, null) - AlfredManager.measureInflatedView(crashView) - AlfredManager.handleCrashEvent(crashEventProperties, crashView.rootView) + exception.stackTrace[0]?.let { stackTraceElement -> + crashEventProperties["STACK_TRACE"] = stackTraceElement.toString() } + AlfredManager.handleCrashEvent(crashEventProperties) } finally { defaultHandler?.uncaughtException(thread, exception) } @@ -110,13 +95,7 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks, N override fun onActivityStopped(activity: Activity) { appForegroundCounter-- if (appForegroundCounter == 0) { - if (AlfredManager.config.getAlfredStatus() && AlfredManager.config.getEnableRecordingStatus()) { - val appBackgroundView = - LayoutInflater.from(this) - .inflate(R.layout.app_background_screen, null) - AlfredManager.measureInflatedView(appBackgroundView) - AlfredManager.stopRecording(appBackgroundView) - } + AlfredManager.stopRecording() } } @@ -127,29 +106,23 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks, N } private fun startAlfredRecording(activity: Activity) { - if (AlfredManager.config.getAlfredStatus() && AlfredManager.config.getEnableRecordingStatus()) { - var screenName: kotlin.String? = null - var moduleName: kotlin.String? = null - var thirdPartyScreenView: View? = null + if (isAlfredRecordingEnabled()) { + val screenName: String? + val moduleName: String? when (activity) { is MainActivity -> { screenName = "MainActivity" moduleName = "Demo App" } - is DemoActivity -> { - screenName = "DemoActivity" + is SWWActivity -> { + screenName = "SWWActivity" moduleName = "Demo App" } else -> { screenName = AlfredConstants.THIRD_PARTY_SCREEN moduleName = AlfredConstants.THIRD_PARTY_MODULE - thirdPartyScreenView = LayoutInflater.from(applicationContext) - .inflate(R.layout.third_party_screen, null) - AlfredManager.measureInflatedView(thirdPartyScreenView) - thirdPartyScreenView.findViewById(R.id.tv_third_party_name).text = - "${activity.localClassName}" } } try { @@ -158,7 +131,6 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks, N activity.window.decorView.rootView, screenName, moduleName, - thirdPartyScreenView, onSessionIdGenerated = { sessionId -> Log.d("Alfred", "Alfred Session ID: $sessionId") } @@ -175,14 +147,16 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks, N private fun getAlfredCruiseInfo() { Log.d("Alfred", "Alfred - getAlfredCruiseInfo started") + val appNetworkReceiver = AlfredNetworkFailureReceiver() + val intentFilter = IntentFilter(BROADCAST_ACTION_TYPE) + registerReceiver(appNetworkReceiver, intentFilter) CoroutineScope(Dispatchers.IO).launch { try { Log.d( "Alfred", "Alfred - getAlfredCruiseInfo started inside try thread = ${Thread.currentThread().name}" ) - AlfredManager.getCruiseConfig(cruiseApiSuccessful = { response -> - AlfredRetrofitProvider.setNetworkCallback(this@MainApplication) + AlfredManager.getAlfredCruiseInfo(cruiseApiSuccessful = { response -> Log.d( "Alfred", "Alfred - getAlfredCruiseInfo cruiseApiSuccessful h response = $response" @@ -194,20 +168,4 @@ class MainApplication : Application(), Application.ActivityLifecycleCallbacks, N } } } - - override fun onNetworkRequest(request: okhttp3.Request?) { - Log.d("Alfred", "Alfred - onNetworkRequest request = $request") - } - - override fun onNetworkSuccess(response: Response?) { - Log.d("Alfred", "Alfred - onNetworkSuccess response = $response") - } - - override fun onNetworkFailure( - exception: Exception, - errorMessage: ErrorMessage, - request: Request - ) { - Log.d("Alfred", "Alfred - onNetworkFailure exception = $exception request = $request") - } } \ No newline at end of file diff --git a/app/src/main/java/com/alfred/demo/activity/DemoActivity.kt b/app/src/main/java/com/alfred/demo/activity/DemoActivity.kt deleted file mode 100644 index 1114b06..0000000 --- a/app/src/main/java/com/alfred/demo/activity/DemoActivity.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.alfred.demo.activity - -import android.os.Bundle -import android.view.MotionEvent -import androidx.appcompat.app.AppCompatActivity -import com.alfred.demo.R -import com.navi.alfred.AlfredManager - -class DemoActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_demo) - } - - override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { - AlfredManager.handleTouchEvent( - ev, - screenName = "Demo Activity", - moduleName = "Alfred Demo App", - ) - return super.dispatchTouchEvent(ev) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/alfred/demo/activity/MainActivity.kt b/app/src/main/java/com/alfred/demo/activity/MainActivity.kt index 8c12858..bbf2bd3 100644 --- a/app/src/main/java/com/alfred/demo/activity/MainActivity.kt +++ b/app/src/main/java/com/alfred/demo/activity/MainActivity.kt @@ -16,7 +16,7 @@ class MainActivity : AppCompatActivity() { val button = findViewById