package moe.yuuta.workmode import android.content.Context import android.content.Intent import android.os.Bundle import androidx.core.content.FileProvider 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 moe.yuuta.workmode.utils.Utils import java.io.File import java.text.SimpleDateFormat import java.util.* object Setup { fun getLogsPath(context: Context): File = File(context.applicationContext.dataDir.absolutePath + "/logs") fun initLogs(logsPath: String) { val config = LogConfiguration.Builder() .tag("WorkMode") .addInterceptor(BlacklistTagsFilterInterceptor("FCore")) .addObjectFormatter(Bundle::class.java) { return@addObjectFormatter Utils.dumpExtras(it) } .build() val androidPrinter = AndroidPrinter() val filePrinter = FilePrinter .Builder(logsPath) .cleanStrategy(FileLastModifiedCleanStrategy(1000 * 60 * 60 * 24 * 5)) .build() XLog.init(config, 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 } }