package moe.yuuta.workmode import android.content.Context import android.content.Intent import android.os.Bundle import androidx.core.content.FileProvider import com.crashlytics.android.Crashlytics import com.crashlytics.android.answers.Answers import com.elvishew.xlog.LogConfiguration import com.elvishew.xlog.LogUtils import com.elvishew.xlog.XLog import com.elvishew.xlog.interceptor.BlacklistTagsFilterInterceptor import com.elvishew.xlog.printer.AndroidPrinter import com.elvishew.xlog.printer.file.FilePrinter import com.elvishew.xlog.printer.file.clean.FileLastModifiedCleanStrategy import io.fabric.sdk.android.Fabric import moe.yuuta.workmode.utils.Utils import java.io.File import java.text.SimpleDateFormat import java.util.* object Setup { val FABRIC_ENABLE = !BuildConfig.DEBUG && BuildConfig.FABRIC_KEY != "disabled" fun getLogsPath(context: Context): File = File(context.applicationContext.dataDir.absolutePath + "/logs") fun initLogs(logsPath: String) { val config = LogConfiguration.Builder() .tag("WorkMode") .addObjectFormatter(Bundle::class.java) { return@addObjectFormatter Utils.dumpExtras(it) } // The tag is used to log #Anti-Crack data. if (!BuildConfig.DEBUG) { config.addInterceptor(BlacklistTagsFilterInterceptor("FCore")) } val androidPrinter = AndroidPrinter() val filePrinter = FilePrinter .Builder(logsPath) .cleanStrategy(FileLastModifiedCleanStrategy(1000 * 60 * 60 * 24 * 5)) .build() XLog.init(config.build(), androidPrinter, filePrinter) } internal fun buildShareLogsIntent(context: Context): Intent { val zipFile = File("${context.externalCacheDir.absolutePath}/logs/logs-" + "${SimpleDateFormat("yyyy-mm-dd-H-m-s", Locale.US).format(Date())}.zip") LogUtils.compress(Setup.getLogsPath(context).absolutePath, zipFile.absolutePath) val fileUri = FileProvider.getUriForFile( context, BuildConfig.APPLICATION_ID + ".fileprovider", zipFile) if (fileUri == null || !zipFile.exists()) { throw NullPointerException() } val intent = Intent() intent.action = Intent.ACTION_SEND intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) var type = context.contentResolver.getType(fileUri) if (type == null || type.trim().equals("")) { type = "application/zip" } intent.type = type intent.putExtra(Intent.EXTRA_STREAM, fileUri) return intent } internal fun initFabric(context: Context) { if (FABRIC_ENABLE) { Fabric.with(Fabric.Builder(context) .kits(Crashlytics(), Answers()) .build()) } } }