Skip to content

Commit

Permalink
feat: better session dump with log for troubleshooting
Browse files Browse the repository at this point in the history
  • Loading branch information
timschneeb committed Oct 1, 2022
1 parent 5b5691c commit 9b96035
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 12 deletions.
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ dependencies {

// Logging
implementation("com.jakewharton.timber:timber:5.0.1")
implementation("com.github.bastienpaulfr:Treessence:1.0.0")

// Room databases
val roomVersion = "2.4.3"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,18 @@ import android.util.Log
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.ktx.Firebase
import com.google.firebase.ktx.app
import fr.bipi.tressence.file.FileLoggerTree
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import me.timschneeberger.rootlessjamesdsp.activity.MainActivity
import me.timschneeberger.rootlessjamesdsp.model.room.AppBlocklistDatabase
import me.timschneeberger.rootlessjamesdsp.model.room.AppBlocklistRepository
import me.timschneeberger.rootlessjamesdsp.utils.Constants
import org.lsposed.hiddenapibypass.HiddenApiBypass
import timber.log.Timber

import timber.log.Timber.*
import java.io.File


class MainApplication : Application() {
init {
Expand All @@ -33,6 +35,21 @@ class MainApplication : Application() {
override fun onCreate() {
Timber.plant(DebugTree())
Timber.plant(CrashReportingTree())
Timber.plant(FileLoggerTree.Builder()
.withFileName("application.log")
.withDirName(this.cacheDir.absolutePath)
.withMinPriority(Log.VERBOSE)
.withSizeLimit(2 * 1000000)
.withFileLimit(1)
.appendToFile(false)
.build())
Timber.i("====> Application starting up")

// Clean up
val dumpFile = File(filesDir, "dump.txt")
if(dumpFile.exists()) {
dumpFile.delete()
}

val prefs = getSharedPreferences(Constants.PREF_APP, Context.MODE_PRIVATE)
// Soft-disable crashlytics in debug mode by default on each launch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ import me.timschneeberger.rootlessjamesdsp.utils.ApplicationUtils
import me.timschneeberger.rootlessjamesdsp.utils.AssetManagerExtensions.installPrivateAssets
import me.timschneeberger.rootlessjamesdsp.utils.Constants
import me.timschneeberger.rootlessjamesdsp.utils.ContextExtensions.showAlert
import me.timschneeberger.rootlessjamesdsp.utils.loadHtml
import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStreamWriter

class SettingsTroubleshootingFragment : PreferenceFragmentCompat() {
Expand All @@ -31,14 +31,39 @@ class SettingsTroubleshootingFragment : PreferenceFragmentCompat() {

findPreference<Preference>(getString(R.string.key_troubleshooting_dump))?.setOnPreferenceClickListener {
val debug = DumpManager.get(requireContext()).collectDebugDumps()
val path = requireContext().filesDir.absolutePath + "/dump.txt"
val path = File(requireContext().filesDir, "dump.txt")
val output = FileOutputStream(path)
val writer = OutputStreamWriter(output)
val log = File(requireContext().cacheDir, "application.log")

writer.write(debug)
writer.write("==================> Application log\n")
writer.flush()

if (log.exists()) {
try {
log.inputStream().use { input ->
val buffer = ByteArray(8192)
var read: Int
while (input.read(buffer, 0, 8192)
.also { read = it } >= 0
) {
output.write(buffer, 0, read)
output.flush()
}
}
}
catch (ex: Exception) {
writer.write("NOTE: Failed to append log file.\n$ex\n")
}
}
else {
writer.write("NOTE: Log file does not exist\n")
}
writer.close()
output.close()

val uri = FileProvider.getUriForFile(requireContext(), BuildConfig.APPLICATION_ID + ".dump_provider", File(path))
val uri = FileProvider.getUriForFile(requireContext(), BuildConfig.APPLICATION_ID + ".dump_provider", path)
val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.putExtra(Intent.EXTRA_STREAM, uri)
shareIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
Expand Down Expand Up @@ -74,7 +99,7 @@ class SettingsTroubleshootingFragment : PreferenceFragmentCompat() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
savedInstanceState: Bundle?,
): View {
val view = super.onCreateView(inflater, container, savedInstanceState)
val a = TypedValue()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,19 @@ import android.content.Context
import android.content.SharedPreferences
import android.os.Build
import me.timschneeberger.rootlessjamesdsp.BuildConfig
import me.timschneeberger.rootlessjamesdsp.session.AudioSessionManager
import me.timschneeberger.rootlessjamesdsp.utils.ContextExtensions.getVersionCode
import me.timschneeberger.rootlessjamesdsp.utils.ContextExtensions.getVersionName
import me.timschneeberger.rootlessjamesdsp.R
import me.timschneeberger.rootlessjamesdsp.session.AudioSessionManager
import me.timschneeberger.rootlessjamesdsp.session.dump.data.AudioPolicyServiceDump
import me.timschneeberger.rootlessjamesdsp.session.dump.data.ISessionPolicyInfoDump
import me.timschneeberger.rootlessjamesdsp.session.dump.data.ISessionInfoDump
import me.timschneeberger.rootlessjamesdsp.session.dump.data.ISessionPolicyInfoDump
import me.timschneeberger.rootlessjamesdsp.session.dump.provider.AudioPolicyServiceDumpProvider
import me.timschneeberger.rootlessjamesdsp.session.dump.provider.AudioServiceDumpProvider
import me.timschneeberger.rootlessjamesdsp.utils.Constants
import me.timschneeberger.rootlessjamesdsp.utils.ContextExtensions.getVersionCode
import me.timschneeberger.rootlessjamesdsp.utils.ContextExtensions.getVersionName
import me.timschneeberger.rootlessjamesdsp.utils.SingletonHolder
import timber.log.Timber
import java.io.File

class DumpManager private constructor(val context: Context) {
enum class Method (val value: Int) {
Expand Down Expand Up @@ -120,7 +121,7 @@ class DumpManager private constructor(val context: Context) {

if(exceptionRaised)
{
sb.append("NOTE: One or more exceptions has been raised while collecting debug dumps")
sb.append("NOTE: One or more exceptions has been raised while collecting debug dumps\n")
}

return sb.toString()
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,9 @@
<string name="credits_app">App &amp; rootless implementation developed by</string>
<string name="credits_dsp">JamesDSP core algorithm library developed by</string>
<string name="credits_project_page">Visit project website on GitHub</string>
<string name="credits_project_page_summary">Report issues, keep yourself updated, and download updates</string>
<string name="credits_project_page_summary">Report issues, keep yourself updated, and read the source code</string>
<string name="credits_project_play_page">Visit RootlessJamesDSP on Google Play</string>
<string name="credits_project_play_page_summary">Search for new updates</string>
<string name="credits_version">Application version</string>
<string name="credits_build_info">Build info</string>

Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/xml/app_about_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,15 @@
android:data="https://github.com/thepbone/RootlessJamesDSP" />
</Preference>

<Preference
android:title="@string/credits_project_play_page"
android:summary="@string/credits_project_play_page_summary"
app:iconSpaceReserved="false">
<intent
android:action="android.intent.action.VIEW"
android:data="https://play.google.com/store/apps/details?id=me.timschneeberger.rootlessjamesdsp" />
</Preference>

<PreferenceCategory
app:title="@string/credits"
app:iconSpaceReserved="false">
Expand Down

0 comments on commit 9b96035

Please sign in to comment.