mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-05-19 15:47:09 +02:00
refactor: common submodule
- organize import - remove unused xml
This commit is contained in:
parent
00a33b9ce6
commit
13d6ae7554
@ -127,6 +127,7 @@ dependencies {
|
||||
}
|
||||
|
||||
implementation(project(":core"))
|
||||
implementation(project(":common"))
|
||||
implementation(libs.androidx.documentfile)
|
||||
implementation(libs.gson)
|
||||
implementation(libs.ffmpeg.kit)
|
||||
|
@ -28,7 +28,7 @@
|
||||
android:value="93" />
|
||||
<meta-data
|
||||
android:name="xposedscope"
|
||||
android:resource="@array/xposed_scope" />
|
||||
android:value="com.snapchat.android" />
|
||||
|
||||
<service
|
||||
android:name=".bridge.BridgeService"
|
||||
|
@ -3,9 +3,9 @@ package me.rhunk.snapenhance
|
||||
import android.content.SharedPreferences
|
||||
import android.util.Log
|
||||
import com.google.gson.GsonBuilder
|
||||
import me.rhunk.snapenhance.core.logger.AbstractLogger
|
||||
import me.rhunk.snapenhance.core.logger.LogChannel
|
||||
import me.rhunk.snapenhance.core.logger.LogLevel
|
||||
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||
import me.rhunk.snapenhance.common.logger.LogChannel
|
||||
import me.rhunk.snapenhance.common.logger.LogLevel
|
||||
import java.io.File
|
||||
import java.io.OutputStream
|
||||
import java.io.RandomAccessFile
|
||||
|
@ -17,10 +17,10 @@ import coil.memory.MemoryCache
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import me.rhunk.snapenhance.bridge.BridgeService
|
||||
import me.rhunk.snapenhance.core.BuildConfig
|
||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.core.bridge.wrapper.MappingsWrapper
|
||||
import me.rhunk.snapenhance.core.config.ModConfig
|
||||
import me.rhunk.snapenhance.common.BuildConfig
|
||||
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.common.bridge.wrapper.MappingsWrapper
|
||||
import me.rhunk.snapenhance.common.config.ModConfig
|
||||
import me.rhunk.snapenhance.download.DownloadTaskManager
|
||||
import me.rhunk.snapenhance.e2ee.E2EEImplementation
|
||||
import me.rhunk.snapenhance.messaging.ModDatabase
|
||||
|
@ -5,16 +5,16 @@ import android.content.Intent
|
||||
import android.os.IBinder
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.SharedContextHolder
|
||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.core.bridge.types.FileActionType
|
||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.core.bridge.wrapper.MessageLoggerWrapper
|
||||
import me.rhunk.snapenhance.core.database.objects.FriendInfo
|
||||
import me.rhunk.snapenhance.core.logger.LogLevel
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingFriendInfo
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingGroupInfo
|
||||
import me.rhunk.snapenhance.core.messaging.SocialScope
|
||||
import me.rhunk.snapenhance.core.util.SerializableDataObject
|
||||
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.common.bridge.types.FileActionType
|
||||
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.common.bridge.wrapper.MessageLoggerWrapper
|
||||
import me.rhunk.snapenhance.common.data.MessagingFriendInfo
|
||||
import me.rhunk.snapenhance.common.data.MessagingGroupInfo
|
||||
import me.rhunk.snapenhance.common.data.SocialScope
|
||||
import me.rhunk.snapenhance.common.database.impl.FriendInfo
|
||||
import me.rhunk.snapenhance.common.logger.LogLevel
|
||||
import me.rhunk.snapenhance.common.util.SerializableDataObject
|
||||
import me.rhunk.snapenhance.download.DownloadProcessor
|
||||
import kotlin.system.measureTimeMillis
|
||||
|
||||
|
@ -3,8 +3,8 @@ package me.rhunk.snapenhance.bridge
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import me.rhunk.snapenhance.Constants
|
||||
import me.rhunk.snapenhance.SharedContextHolder
|
||||
import me.rhunk.snapenhance.common.Constants
|
||||
|
||||
class ForceStartActivity : Activity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
@ -1,8 +1,8 @@
|
||||
package me.rhunk.snapenhance.download
|
||||
|
||||
import kotlinx.coroutines.Job
|
||||
import me.rhunk.snapenhance.core.download.data.DownloadMetadata
|
||||
import me.rhunk.snapenhance.core.download.data.DownloadStage
|
||||
import me.rhunk.snapenhance.common.data.download.DownloadMetadata
|
||||
import me.rhunk.snapenhance.common.data.download.DownloadStage
|
||||
|
||||
data class DownloadObject(
|
||||
var downloadId: Int = 0,
|
||||
|
@ -13,14 +13,14 @@ import kotlinx.coroutines.job
|
||||
import kotlinx.coroutines.joinAll
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import me.rhunk.snapenhance.Constants
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.bridge.DownloadCallback
|
||||
import me.rhunk.snapenhance.core.download.DownloadManagerClient
|
||||
import me.rhunk.snapenhance.core.download.data.*
|
||||
import me.rhunk.snapenhance.core.util.download.RemoteMediaResolver
|
||||
import me.rhunk.snapenhance.core.util.snap.MediaDownloaderHelper
|
||||
import me.rhunk.snapenhance.data.FileType
|
||||
import me.rhunk.snapenhance.common.Constants
|
||||
import me.rhunk.snapenhance.common.ReceiversConfig
|
||||
import me.rhunk.snapenhance.common.data.FileType
|
||||
import me.rhunk.snapenhance.common.data.download.*
|
||||
import me.rhunk.snapenhance.common.util.snap.MediaDownloaderHelper
|
||||
import me.rhunk.snapenhance.common.util.snap.RemoteMediaResolver
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
import java.net.HttpURLConnection
|
||||
@ -296,8 +296,8 @@ class DownloadProcessor (
|
||||
|
||||
fun onReceive(intent: Intent) {
|
||||
remoteSideContext.coroutineScope.launch {
|
||||
val downloadMetadata = gson.fromJson(intent.getStringExtra(DownloadManagerClient.DOWNLOAD_METADATA_EXTRA)!!, DownloadMetadata::class.java)
|
||||
val downloadRequest = gson.fromJson(intent.getStringExtra(DownloadManagerClient.DOWNLOAD_REQUEST_EXTRA)!!, DownloadRequest::class.java)
|
||||
val downloadMetadata = gson.fromJson(intent.getStringExtra(ReceiversConfig.DOWNLOAD_METADATA_EXTRA)!!, DownloadMetadata::class.java)
|
||||
val downloadRequest = gson.fromJson(intent.getStringExtra(ReceiversConfig.DOWNLOAD_REQUEST_EXTRA)!!, DownloadRequest::class.java)
|
||||
|
||||
remoteSideContext.downloadTaskManager.canDownloadMedia(downloadMetadata.mediaIdentifier)?.let { downloadStage ->
|
||||
translation[if (downloadStage.isFinalStage) {
|
||||
|
@ -3,12 +3,12 @@ package me.rhunk.snapenhance.download
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
import me.rhunk.snapenhance.core.download.data.DownloadMetadata
|
||||
import me.rhunk.snapenhance.core.download.data.DownloadStage
|
||||
import me.rhunk.snapenhance.core.download.data.MediaDownloadSource
|
||||
import me.rhunk.snapenhance.core.util.SQLiteDatabaseHelper
|
||||
import me.rhunk.snapenhance.core.util.ktx.getIntOrNull
|
||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
||||
import me.rhunk.snapenhance.common.data.download.DownloadMetadata
|
||||
import me.rhunk.snapenhance.common.data.download.DownloadStage
|
||||
import me.rhunk.snapenhance.common.data.download.MediaDownloadSource
|
||||
import me.rhunk.snapenhance.common.util.SQLiteDatabaseHelper
|
||||
import me.rhunk.snapenhance.common.util.ktx.getIntOrNull
|
||||
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
class DownloadTaskManager {
|
||||
@ -162,7 +162,8 @@ class DownloadTaskManager {
|
||||
metadata = DownloadMetadata(
|
||||
outputPath = cursor.getStringOrNull("outputPath")!!,
|
||||
mediaIdentifier = cursor.getStringOrNull("hash"),
|
||||
downloadSource = cursor.getStringOrNull("downloadSource") ?: MediaDownloadSource.NONE.key,
|
||||
downloadSource = cursor.getStringOrNull("downloadSource")
|
||||
?: MediaDownloadSource.NONE.key,
|
||||
mediaAuthor = cursor.getStringOrNull("mediaAuthor"),
|
||||
iconUrl = cursor.getStringOrNull("iconUrl")
|
||||
)
|
||||
|
@ -5,9 +5,8 @@ import com.arthenica.ffmpegkit.FFmpegSession
|
||||
import com.arthenica.ffmpegkit.Level
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import me.rhunk.snapenhance.LogManager
|
||||
import me.rhunk.snapenhance.core.Logger
|
||||
import me.rhunk.snapenhance.core.config.impl.DownloaderConfig
|
||||
import me.rhunk.snapenhance.core.logger.LogLevel
|
||||
import me.rhunk.snapenhance.common.config.impl.DownloaderConfig
|
||||
import me.rhunk.snapenhance.common.logger.LogLevel
|
||||
import java.io.File
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
@ -71,7 +70,7 @@ class FFMpegProcessor(
|
||||
}
|
||||
}
|
||||
|
||||
Logger.directDebug("arguments: $stringBuilder", "FFMpegProcessor")
|
||||
logManager.debug("arguments: $stringBuilder", "FFMpegProcessor")
|
||||
|
||||
FFmpegKit.executeAsync(stringBuilder.toString(),
|
||||
{ session ->
|
||||
|
@ -2,16 +2,16 @@ package me.rhunk.snapenhance.messaging
|
||||
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.core.database.objects.FriendInfo
|
||||
import me.rhunk.snapenhance.core.messaging.FriendStreaks
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingFriendInfo
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingGroupInfo
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
||||
import me.rhunk.snapenhance.core.util.SQLiteDatabaseHelper
|
||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.core.util.ktx.getLongOrNull
|
||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
||||
import me.rhunk.snapenhance.common.data.FriendStreaks
|
||||
import me.rhunk.snapenhance.common.data.MessagingFriendInfo
|
||||
import me.rhunk.snapenhance.common.data.MessagingGroupInfo
|
||||
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||
import me.rhunk.snapenhance.common.database.impl.FriendInfo
|
||||
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||
import me.rhunk.snapenhance.common.util.SQLiteDatabaseHelper
|
||||
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.common.util.ktx.getLongOrNull
|
||||
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
|
||||
@ -75,11 +75,13 @@ class ModDatabase(
|
||||
return database.rawQuery("SELECT * FROM groups", null).use { cursor ->
|
||||
val groups = mutableListOf<MessagingGroupInfo>()
|
||||
while (cursor.moveToNext()) {
|
||||
groups.add(MessagingGroupInfo(
|
||||
groups.add(
|
||||
MessagingGroupInfo(
|
||||
conversationId = cursor.getStringOrNull("conversationId")!!,
|
||||
name = cursor.getStringOrNull("name")!!,
|
||||
participantsCount = cursor.getInteger("participantsCount")
|
||||
))
|
||||
)
|
||||
)
|
||||
}
|
||||
groups
|
||||
}
|
||||
@ -90,13 +92,15 @@ class ModDatabase(
|
||||
val friends = mutableListOf<MessagingFriendInfo>()
|
||||
while (cursor.moveToNext()) {
|
||||
runCatching {
|
||||
friends.add(MessagingFriendInfo(
|
||||
friends.add(
|
||||
MessagingFriendInfo(
|
||||
userId = cursor.getStringOrNull("userId")!!,
|
||||
displayName = cursor.getStringOrNull("displayName"),
|
||||
mutableUsername = cursor.getStringOrNull("mutableUsername")!!,
|
||||
bitmojiId = cursor.getStringOrNull("bitmojiId"),
|
||||
selfieId = cursor.getStringOrNull("selfieId")
|
||||
))
|
||||
)
|
||||
)
|
||||
}.onFailure {
|
||||
context.log.error("Failed to parse friend", it)
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ import me.rhunk.snapenhance.R
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.SharedContextHolder
|
||||
import me.rhunk.snapenhance.bridge.ForceStartActivity
|
||||
import me.rhunk.snapenhance.core.util.snap.BitmojiSelfie
|
||||
import me.rhunk.snapenhance.common.util.snap.BitmojiSelfie
|
||||
import me.rhunk.snapenhance.ui.util.ImageRequestHelper
|
||||
|
||||
class StreaksReminder(
|
||||
|
@ -5,11 +5,12 @@ import androidx.documentfile.provider.DocumentFile
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.bridge.scripting.IPCListener
|
||||
import me.rhunk.snapenhance.bridge.scripting.IScripting
|
||||
import me.rhunk.snapenhance.common.scripting.ScriptRuntime
|
||||
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||
import me.rhunk.snapenhance.scripting.impl.IPCListeners
|
||||
import me.rhunk.snapenhance.scripting.impl.RemoteManagerIPC
|
||||
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceBuilder
|
||||
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceManager
|
||||
import me.rhunk.snapenhance.scripting.impl.RemoteManagerIPC
|
||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
||||
import java.io.InputStream
|
||||
|
||||
class RemoteScriptManager(
|
||||
|
@ -2,10 +2,10 @@ package me.rhunk.snapenhance.scripting.impl
|
||||
|
||||
import android.os.DeadObjectException
|
||||
import me.rhunk.snapenhance.bridge.scripting.IPCListener
|
||||
import me.rhunk.snapenhance.core.logger.AbstractLogger
|
||||
import me.rhunk.snapenhance.scripting.IPCInterface
|
||||
import me.rhunk.snapenhance.scripting.Listener
|
||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
||||
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||
import me.rhunk.snapenhance.common.scripting.IPCInterface
|
||||
import me.rhunk.snapenhance.common.scripting.Listener
|
||||
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
typealias IPCListeners = ConcurrentHashMap<String, MutableMap<String, MutableSet<IPCListener>>> // channel, eventName -> listeners
|
||||
|
@ -1,10 +1,10 @@
|
||||
package me.rhunk.snapenhance.scripting.impl.ui
|
||||
|
||||
import me.rhunk.snapenhance.core.logger.AbstractLogger
|
||||
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||
import me.rhunk.snapenhance.scripting.impl.ui.components.Node
|
||||
import me.rhunk.snapenhance.scripting.impl.ui.components.NodeType
|
||||
import me.rhunk.snapenhance.scripting.impl.ui.components.impl.RowColumnNode
|
||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
||||
import org.mozilla.javascript.Context
|
||||
import org.mozilla.javascript.Function
|
||||
import org.mozilla.javascript.annotations.JSFunction
|
||||
|
@ -8,7 +8,7 @@ import android.os.Bundle
|
||||
import android.view.MotionEvent
|
||||
import android.widget.Button
|
||||
import android.widget.EditText
|
||||
import me.rhunk.snapenhance.core.R
|
||||
import me.rhunk.snapenhance.R
|
||||
import org.osmdroid.config.Configuration
|
||||
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
|
||||
import org.osmdroid.util.GeoPoint
|
||||
|
@ -1,7 +1,7 @@
|
||||
package me.rhunk.snapenhance.ui.manager.data
|
||||
|
||||
import com.google.gson.JsonParser
|
||||
import me.rhunk.snapenhance.core.BuildConfig
|
||||
import me.rhunk.snapenhance.common.BuildConfig
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
|
||||
|
@ -28,8 +28,8 @@ import coil.compose.rememberAsyncImagePainter
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.future.asCompletableFuture
|
||||
import kotlinx.coroutines.launch
|
||||
import me.rhunk.snapenhance.core.download.data.MediaDownloadSource
|
||||
import me.rhunk.snapenhance.data.FileType
|
||||
import me.rhunk.snapenhance.common.data.FileType
|
||||
import me.rhunk.snapenhance.common.data.download.MediaDownloadSource
|
||||
import me.rhunk.snapenhance.download.DownloadObject
|
||||
import me.rhunk.snapenhance.ui.manager.Section
|
||||
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
||||
|
@ -37,7 +37,7 @@ import androidx.navigation.navigation
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import me.rhunk.snapenhance.core.config.*
|
||||
import me.rhunk.snapenhance.common.config.*
|
||||
import me.rhunk.snapenhance.ui.manager.MainActivity
|
||||
import me.rhunk.snapenhance.ui.manager.Section
|
||||
import me.rhunk.snapenhance.ui.util.*
|
||||
|
@ -33,8 +33,8 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import me.rhunk.snapenhance.LogReader
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.core.logger.LogChannel
|
||||
import me.rhunk.snapenhance.core.logger.LogLevel
|
||||
import me.rhunk.snapenhance.common.logger.LogChannel
|
||||
import me.rhunk.snapenhance.common.logger.LogLevel
|
||||
|
||||
class HomeSubSection(
|
||||
private val context: RemoteSideContext
|
||||
|
@ -20,10 +20,9 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import me.rhunk.snapenhance.Constants
|
||||
import me.rhunk.snapenhance.action.EnumAction
|
||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.manager.impl.ActionManager
|
||||
import me.rhunk.snapenhance.common.Constants
|
||||
import me.rhunk.snapenhance.common.action.EnumAction
|
||||
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.ui.manager.Section
|
||||
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
||||
|
||||
@ -83,7 +82,7 @@ class SettingsSection : Section() {
|
||||
|
||||
private fun launchActionIntent(action: EnumAction) {
|
||||
val intent = context.androidContext.packageManager.getLaunchIntentForPackage(Constants.SNAPCHAT_PACKAGE_NAME)
|
||||
intent?.putExtra(ActionManager.ACTION_PARAMETER, action.key)
|
||||
intent?.putExtra(EnumAction.ACTION_PARAMETER, action.key)
|
||||
context.androidContext.startActivity(intent)
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import kotlinx.coroutines.launch
|
||||
import me.rhunk.snapenhance.core.Logger
|
||||
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceBuilder
|
||||
import me.rhunk.snapenhance.scripting.impl.ui.components.Node
|
||||
import me.rhunk.snapenhance.scripting.impl.ui.components.NodeType
|
||||
@ -54,7 +54,7 @@ private fun DrawNode(node: Node) {
|
||||
runCatching {
|
||||
callback()
|
||||
}.onFailure {
|
||||
Logger.directError("Error running callback", it)
|
||||
AbstractLogger.directError("Error running callback", it)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
||||
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||
import me.rhunk.snapenhance.ui.manager.Section
|
||||
import me.rhunk.snapenhance.ui.util.pullrefresh.PullRefreshIndicator
|
||||
import me.rhunk.snapenhance.ui.util.pullrefresh.pullRefresh
|
||||
|
@ -24,11 +24,11 @@ import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.core.bridge.BridgeClient
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingFriendInfo
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingGroupInfo
|
||||
import me.rhunk.snapenhance.core.messaging.SocialScope
|
||||
import me.rhunk.snapenhance.core.util.snap.SnapWidgetBroadcastReceiverHelper
|
||||
import me.rhunk.snapenhance.common.ReceiversConfig
|
||||
import me.rhunk.snapenhance.common.data.MessagingFriendInfo
|
||||
import me.rhunk.snapenhance.common.data.MessagingGroupInfo
|
||||
import me.rhunk.snapenhance.common.data.SocialScope
|
||||
import me.rhunk.snapenhance.common.util.snap.SnapWidgetBroadcastReceiverHelper
|
||||
|
||||
class AddFriendDialog(
|
||||
private val context: RemoteSideContext,
|
||||
@ -128,7 +128,7 @@ class AddFriendDialog(
|
||||
timeoutJob?.cancel()
|
||||
hasFetchError = false
|
||||
}
|
||||
SnapWidgetBroadcastReceiverHelper.create(BridgeClient.BRIDGE_SYNC_ACTION) {}.also {
|
||||
SnapWidgetBroadcastReceiverHelper.create(ReceiversConfig.BRIDGE_SYNC_ACTION) {}.also {
|
||||
runCatching {
|
||||
context.androidContext.sendBroadcast(it)
|
||||
}.onFailure {
|
||||
|
@ -22,9 +22,9 @@ import androidx.navigation.NavController
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
||||
import me.rhunk.snapenhance.core.messaging.SocialScope
|
||||
import me.rhunk.snapenhance.core.util.snap.BitmojiSelfie
|
||||
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||
import me.rhunk.snapenhance.common.data.SocialScope
|
||||
import me.rhunk.snapenhance.common.util.snap.BitmojiSelfie
|
||||
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
||||
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
||||
import me.rhunk.snapenhance.ui.util.Dialog
|
||||
|
@ -27,10 +27,10 @@ import androidx.navigation.compose.composable
|
||||
import androidx.navigation.navigation
|
||||
import kotlinx.coroutines.launch
|
||||
import me.rhunk.snapenhance.R
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingFriendInfo
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingGroupInfo
|
||||
import me.rhunk.snapenhance.core.messaging.SocialScope
|
||||
import me.rhunk.snapenhance.core.util.snap.BitmojiSelfie
|
||||
import me.rhunk.snapenhance.common.data.MessagingFriendInfo
|
||||
import me.rhunk.snapenhance.common.data.MessagingGroupInfo
|
||||
import me.rhunk.snapenhance.common.data.SocialScope
|
||||
import me.rhunk.snapenhance.common.util.snap.BitmojiSelfie
|
||||
import me.rhunk.snapenhance.ui.manager.Section
|
||||
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
||||
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
||||
|
@ -14,14 +14,18 @@ import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.ui.setup.screens.SetupScreen
|
||||
import me.rhunk.snapenhance.ui.util.ObservableMutableState
|
||||
import java.util.Locale
|
||||
|
@ -4,7 +4,7 @@ import android.content.Intent
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import me.rhunk.snapenhance.core.Logger
|
||||
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||
|
||||
typealias ActivityLauncherCallback = (resultCode: Int, intent: Intent?) -> Unit
|
||||
|
||||
@ -17,7 +17,7 @@ class ActivityLauncherHelper(
|
||||
runCatching {
|
||||
callback?.let { it(if (result) ComponentActivity.RESULT_OK else ComponentActivity.RESULT_CANCELED, null) }
|
||||
}.onFailure {
|
||||
Logger.directError("Failed to process activity result", it)
|
||||
AbstractLogger.directError("Failed to process activity result", it)
|
||||
}
|
||||
callback = null
|
||||
}
|
||||
@ -27,7 +27,7 @@ class ActivityLauncherHelper(
|
||||
runCatching {
|
||||
callback?.let { it(result.resultCode, result.data) }
|
||||
}.onFailure {
|
||||
Logger.directError("Failed to process activity result", it)
|
||||
AbstractLogger.directError("Failed to process activity result", it)
|
||||
}
|
||||
callback = null
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.core.config.DataProcessors
|
||||
import me.rhunk.snapenhance.core.config.PropertyPair
|
||||
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.common.config.DataProcessors
|
||||
import me.rhunk.snapenhance.common.config.PropertyPair
|
||||
|
||||
|
||||
class AlertDialogs(
|
||||
|
@ -12,3 +12,10 @@ rootProject.ext.set("appVersionName", versionName)
|
||||
rootProject.ext.set("appVersionCode", versionCode)
|
||||
rootProject.ext.set("applicationId", "me.rhunk.snapenhance")
|
||||
rootProject.ext.set("nativeName", properties["custom_native_name"] ?: java.security.SecureRandom().nextLong(1000000000, 99999999999).toString(16))
|
||||
|
||||
tasks.register("getVersion") {
|
||||
doLast {
|
||||
val versionFile = File("app/build/version.txt")
|
||||
versionFile.writeText(versionName)
|
||||
}
|
||||
}
|
||||
|
1
common/.gitignore
vendored
Normal file
1
common/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/build
|
37
common/build.gradle.kts
Normal file
37
common/build.gradle.kts
Normal file
@ -0,0 +1,37 @@
|
||||
plugins {
|
||||
alias(libs.plugins.androidLibrary)
|
||||
alias(libs.plugins.kotlinAndroid)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = rootProject.ext["applicationId"].toString() + ".common"
|
||||
compileSdk = 34
|
||||
|
||||
buildFeatures {
|
||||
aidl = true
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 28
|
||||
buildConfigField("String", "VERSION_NAME", "\"${rootProject.ext["appVersionName"]}\"")
|
||||
buildConfigField("int", "VERSION_CODE", "${rootProject.ext["appVersionCode"]}")
|
||||
buildConfigField("String", "APPLICATION_ID", "\"${rootProject.ext["applicationId"]}\"")
|
||||
buildConfigField("int", "BUILD_DATE", "${System.currentTimeMillis() / 1000}")
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(libs.coroutines)
|
||||
implementation(libs.gson)
|
||||
implementation(libs.okhttp)
|
||||
implementation(libs.androidx.documentfile)
|
||||
implementation(libs.rhino)
|
||||
|
||||
implementation(project(":stub"))
|
||||
implementation(project(":mapper"))
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance
|
||||
package me.rhunk.snapenhance.common
|
||||
|
||||
object Constants {
|
||||
const val SNAPCHAT_PACKAGE_NAME = "com.snapchat.android"
|
@ -0,0 +1,7 @@
|
||||
package me.rhunk.snapenhance.common
|
||||
|
||||
object ReceiversConfig {
|
||||
const val BRIDGE_SYNC_ACTION = BuildConfig.APPLICATION_ID + ".core.bridge.SYNC"
|
||||
const val DOWNLOAD_REQUEST_EXTRA = "request"
|
||||
const val DOWNLOAD_METADATA_EXTRA = "metadata"
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package me.rhunk.snapenhance.common.action
|
||||
|
||||
|
||||
|
||||
enum class EnumAction(
|
||||
val key: String,
|
||||
val exitOnFinish: Boolean = false,
|
||||
val isCritical: Boolean = false,
|
||||
) {
|
||||
CLEAN_CACHE("clean_snapchat_cache", exitOnFinish = true),
|
||||
EXPORT_CHAT_MESSAGES("export_chat_messages"),
|
||||
OPEN_MAP("open_map");
|
||||
|
||||
companion object {
|
||||
const val ACTION_PARAMETER = "se_action"
|
||||
}
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
package me.rhunk.snapenhance.core.bridge
|
||||
package me.rhunk.snapenhance.common.bridge
|
||||
|
||||
import android.content.Context
|
||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||
|
||||
open class FileLoaderWrapper(
|
||||
private val fileType: BridgeFileType,
|
||||
private val defaultContent: ByteArray
|
||||
val fileType: BridgeFileType,
|
||||
val defaultContent: ByteArray
|
||||
) {
|
||||
lateinit var isFileExists: () -> Boolean
|
||||
lateinit var write: (ByteArray) -> Unit
|
||||
@ -26,10 +26,4 @@ open class FileLoaderWrapper(
|
||||
delete = { file.delete() }
|
||||
}
|
||||
|
||||
fun loadFromBridge(bridgeClient: BridgeClient) {
|
||||
isFileExists = { bridgeClient.isFileExists(fileType) }
|
||||
read = { bridgeClient.createAndReadFile(fileType, defaultContent) }
|
||||
write = { bridgeClient.writeFile(fileType, it) }
|
||||
delete = { bridgeClient.deleteFile(fileType) }
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.bridge.types
|
||||
package me.rhunk.snapenhance.common.bridge.types
|
||||
|
||||
import android.content.Context
|
||||
import java.io.File
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.bridge.types
|
||||
package me.rhunk.snapenhance.common.bridge.types
|
||||
|
||||
enum class FileActionType {
|
||||
CREATE_AND_READ, READ, WRITE, DELETE, EXISTS
|
@ -0,0 +1,6 @@
|
||||
package me.rhunk.snapenhance.common.bridge.types
|
||||
|
||||
data class LocalePair(
|
||||
val locale: String,
|
||||
val content: String
|
||||
)
|
@ -1,11 +1,10 @@
|
||||
package me.rhunk.snapenhance.core.bridge.wrapper
|
||||
package me.rhunk.snapenhance.common.bridge.wrapper
|
||||
|
||||
import android.content.Context
|
||||
import com.google.gson.JsonObject
|
||||
import com.google.gson.JsonParser
|
||||
import me.rhunk.snapenhance.core.Logger
|
||||
import me.rhunk.snapenhance.core.bridge.BridgeClient
|
||||
import me.rhunk.snapenhance.data.LocalePair
|
||||
import me.rhunk.snapenhance.common.bridge.types.LocalePair
|
||||
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@ -62,8 +61,8 @@ class LocaleWrapper {
|
||||
scanObject(translations)
|
||||
}
|
||||
|
||||
fun loadFromBridge(bridgeClient: BridgeClient) {
|
||||
bridgeClient.fetchLocales(userLocale).forEach {
|
||||
fun loadFromCallback(callback: (String) -> List<LocalePair>) {
|
||||
callback(userLocale).forEach {
|
||||
load(it)
|
||||
}
|
||||
}
|
||||
@ -80,7 +79,7 @@ class LocaleWrapper {
|
||||
loadFromContext(context)
|
||||
}
|
||||
|
||||
operator fun get(key: String) = translationMap[key] ?: key.also { Logger.directDebug("Missing translation for $key") }
|
||||
operator fun get(key: String) = translationMap[key] ?: key.also { AbstractLogger.directDebug("Missing translation for $key") }
|
||||
|
||||
fun format(key: String, vararg args: Pair<String, String>): String {
|
||||
return args.fold(get(key)) { acc, pair ->
|
@ -1,13 +1,12 @@
|
||||
package me.rhunk.snapenhance.core.bridge.wrapper
|
||||
package me.rhunk.snapenhance.common.bridge.wrapper
|
||||
|
||||
import android.content.Context
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.JsonParser
|
||||
import me.rhunk.snapenhance.Constants
|
||||
import me.rhunk.snapenhance.core.Logger
|
||||
import me.rhunk.snapenhance.core.bridge.FileLoaderWrapper
|
||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.common.Constants
|
||||
import me.rhunk.snapenhance.common.bridge.FileLoaderWrapper
|
||||
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.mapper.Mapper
|
||||
import me.rhunk.snapenhance.mapper.impl.*
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
@ -107,8 +106,6 @@ class MappingsWrapper : FileLoaderWrapper(BridgeFileType.MAPPINGS, "{}".toByteAr
|
||||
addProperty("snap_build_number", snapBuildNumber)
|
||||
}
|
||||
write(result.toString().toByteArray())
|
||||
}.also {
|
||||
Logger.directDebug("Generated mappings in $it ms")
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
package me.rhunk.snapenhance.core.bridge.wrapper
|
||||
package me.rhunk.snapenhance.common.bridge.wrapper
|
||||
|
||||
import android.content.ContentValues
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
import me.rhunk.snapenhance.bridge.MessageLoggerInterface
|
||||
import me.rhunk.snapenhance.core.util.SQLiteDatabaseHelper
|
||||
import me.rhunk.snapenhance.common.util.SQLiteDatabaseHelper
|
||||
import java.io.File
|
||||
import java.util.UUID
|
||||
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.config
|
||||
package me.rhunk.snapenhance.common.config
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import kotlin.reflect.KProperty
|
@ -1,6 +1,6 @@
|
||||
package me.rhunk.snapenhance.core.config
|
||||
package me.rhunk.snapenhance.common.config
|
||||
|
||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
data class PropertyPair<T>(
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.config
|
||||
package me.rhunk.snapenhance.common.config
|
||||
|
||||
import com.google.gson.JsonArray
|
||||
import com.google.gson.JsonElement
|
@ -1,16 +1,15 @@
|
||||
package me.rhunk.snapenhance.core.config
|
||||
package me.rhunk.snapenhance.common.config
|
||||
|
||||
import android.content.Context
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.google.gson.JsonObject
|
||||
import me.rhunk.snapenhance.bridge.ConfigStateListener
|
||||
import me.rhunk.snapenhance.core.Logger
|
||||
import me.rhunk.snapenhance.core.bridge.BridgeClient
|
||||
import me.rhunk.snapenhance.core.bridge.FileLoaderWrapper
|
||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.core.config.impl.RootConfig
|
||||
import me.rhunk.snapenhance.common.bridge.FileLoaderWrapper
|
||||
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.common.config.impl.RootConfig
|
||||
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
class ModConfig {
|
||||
@ -106,7 +105,7 @@ class ModConfig {
|
||||
else if (shouldRestart) it.onRestartRequired()
|
||||
}
|
||||
}.onFailure {
|
||||
Logger.directError("Error while calling config state listener", it, "ConfigStateListener")
|
||||
AbstractLogger.directError("Error while calling config state listener", it, "ConfigStateListener")
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,8 +124,8 @@ class ModConfig {
|
||||
load()
|
||||
}
|
||||
|
||||
fun loadFromBridge(bridgeClient: BridgeClient) {
|
||||
file.loadFromBridge(bridgeClient)
|
||||
fun loadFromCallback(callback: (FileLoaderWrapper) -> Unit) {
|
||||
callback(file)
|
||||
load()
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.ConfigFlag
|
||||
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||
|
||||
class Camera : ConfigContainer() {
|
||||
companion object {
|
||||
val resolutions = listOf("3264x2448", "3264x1840", "3264x1504", "2688x1512", "2560x1920", "2448x2448", "2340x1080", "2160x1080", "1920x1440", "1920x1080", "1600x1200", "1600x960", "1600x900", "1600x736", "1600x720", "1560x720", "1520x720", "1440x1080", "1440x720", "1280x720", "1080x1080", "1080x720", "960x720", "720x720", "720x480", "640x480", "352x288", "320x240", "176x144").toTypedArray()
|
||||
}
|
||||
|
||||
val disable = boolean("disable_camera")
|
||||
val immersiveCameraPreview = boolean("immersive_camera_preview") { addNotices(FeatureNotice.UNSTABLE) }
|
||||
val overridePreviewResolution = unique("override_preview_resolution", *resolutions)
|
||||
{ addFlags(ConfigFlag.NO_TRANSLATE) }
|
||||
val overridePictureResolution = unique("override_picture_resolution", *resolutions)
|
||||
{ addFlags(ConfigFlag.NO_TRANSLATE) }
|
||||
val customFrameRate = unique("custom_frame_rate",
|
||||
"5", "10", "20", "25", "30", "48", "60", "90", "120"
|
||||
) { addNotices(FeatureNotice.UNSTABLE); addFlags(ConfigFlag.NO_TRANSLATE) }
|
||||
val forceCameraSourceEncoding = boolean("force_camera_source_encoding")
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.ConfigFlag
|
||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.ConfigFlag
|
||||
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||
|
||||
class DownloaderConfig : ConfigContainer() {
|
||||
inner class FFMpegOptions : ConfigContainer() {
|
@ -1,6 +1,6 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
|
||||
class E2EEConfig : ConfigContainer(hasGlobalState = true) {
|
||||
val encryptedMessageIndicator = boolean("encrypted_message_indicator")
|
@ -1,7 +1,7 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||
|
||||
class Experimental : ConfigContainer() {
|
||||
val nativeHooks = container("native_hooks", NativeHooks()) { icon = "Memory"; requireRestart() }
|
@ -1,13 +1,14 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||
|
||||
class Global : ConfigContainer() {
|
||||
val snapchatPlus = boolean("snapchat_plus") { addNotices(FeatureNotice.BAN_RISK); requireRestart() }
|
||||
val disableMetrics = boolean("disable_metrics")
|
||||
val blockAds = boolean("block_ads")
|
||||
val bypassVideoLengthRestriction = unique("bypass_video_length_restriction", "split", "single") { addNotices(FeatureNotice.BAN_RISK); requireRestart() }
|
||||
val bypassVideoLengthRestriction = unique("bypass_video_length_restriction", "split", "single") { addNotices(
|
||||
FeatureNotice.BAN_RISK); requireRestart() }
|
||||
val disableGooglePlayDialogs = boolean("disable_google_play_dialogs") { requireRestart() }
|
||||
val forceMediaSourceQuality = boolean("force_media_source_quality")
|
||||
val disableSnapSplitting = boolean("disable_snap_splitting") { addNotices(FeatureNotice.INTERNAL_BEHAVIOR) }
|
@ -1,8 +1,8 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.data.NotificationType
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.common.data.NotificationType
|
||||
|
||||
class MessagingTweaks : ConfigContainer() {
|
||||
val anonymousStoryViewing = boolean("anonymous_story_viewing")
|
@ -1,6 +1,6 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
|
||||
class NativeHooks: ConfigContainer(hasGlobalState = true) {
|
||||
val disableBitmoji = boolean("disable_bitmoji")
|
@ -1,7 +1,7 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||
|
||||
class RootConfig : ConfigContainer() {
|
||||
val downloader = container("downloader", DownloaderConfig()) { icon = "Download"}
|
@ -1,9 +1,9 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.PropertyValue
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
||||
import me.rhunk.snapenhance.core.messaging.RuleState
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.PropertyValue
|
||||
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||
import me.rhunk.snapenhance.common.data.RuleState
|
||||
|
||||
|
||||
class Rules : ConfigContainer() {
|
@ -1,7 +1,7 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.ConfigFlag
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.ConfigFlag
|
||||
|
||||
class Scripting : ConfigContainer() {
|
||||
val developerMode = boolean("developer_mode", false) { requireRestart() }
|
@ -1,7 +1,7 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||
|
||||
class Spoof : ConfigContainer() {
|
||||
inner class Location : ConfigContainer(hasGlobalState = true) {
|
@ -1,6 +1,6 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
|
||||
class StreaksReminderConfig : ConfigContainer(hasGlobalState = true) {
|
||||
val interval = integer("interval", 2)
|
@ -1,14 +1,17 @@
|
||||
package me.rhunk.snapenhance.core.config.impl
|
||||
package me.rhunk.snapenhance.common.config.impl
|
||||
|
||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
||||
import me.rhunk.snapenhance.features.impl.ui.ClientBootstrapOverride
|
||||
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||
|
||||
class UserInterfaceTweaks : ConfigContainer() {
|
||||
inner class BootstrapOverride : ConfigContainer() {
|
||||
class BootstrapOverride : ConfigContainer() {
|
||||
companion object {
|
||||
val tabs = arrayOf("map", "chat", "camera", "discover", "spotlight")
|
||||
}
|
||||
|
||||
val appAppearance = unique("app_appearance", "always_light", "always_dark")
|
||||
val homeTab = unique("home_tab", *ClientBootstrapOverride.tabs) { addNotices(FeatureNotice.UNSTABLE) }
|
||||
val homeTab = unique("home_tab", *tabs) { addNotices(FeatureNotice.UNSTABLE) }
|
||||
}
|
||||
|
||||
inner class FriendFeedMessagePreview : ConfigContainer(hasGlobalState = true) {
|
@ -1,6 +1,5 @@
|
||||
package me.rhunk.snapenhance.data
|
||||
package me.rhunk.snapenhance.common.data
|
||||
|
||||
import me.rhunk.snapenhance.core.Logger
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
|
||||
@ -61,9 +60,7 @@ enum class FileType(
|
||||
val headerBytes = ByteArray(16)
|
||||
System.arraycopy(array, 0, headerBytes, 0, 16)
|
||||
val hex = bytesToHex(headerBytes)
|
||||
return fileSignatures.entries.firstOrNull { hex.startsWith(it.key) }?.value ?: UNKNOWN.also {
|
||||
Logger.directDebug("unknown file type, header: $hex", "FileType")
|
||||
}
|
||||
return fileSignatures.entries.firstOrNull { hex.startsWith(it.key) }?.value ?: UNKNOWN
|
||||
}
|
||||
|
||||
fun fromInputStream(inputStream: InputStream): FileType {
|
@ -1,6 +1,6 @@
|
||||
package me.rhunk.snapenhance.core.messaging
|
||||
package me.rhunk.snapenhance.common.data
|
||||
|
||||
import me.rhunk.snapenhance.core.util.SerializableDataObject
|
||||
import me.rhunk.snapenhance.common.util.SerializableDataObject
|
||||
|
||||
|
||||
enum class RuleState(
|
@ -1,6 +1,6 @@
|
||||
package me.rhunk.snapenhance.data
|
||||
package me.rhunk.snapenhance.common.data
|
||||
|
||||
import me.rhunk.snapenhance.core.util.protobuf.ProtoReader
|
||||
import me.rhunk.snapenhance.common.util.protobuf.ProtoReader
|
||||
|
||||
enum class MessageState {
|
||||
PREPARING, SENDING, COMMITTED, FAILED, CANCELING
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.download.data
|
||||
package me.rhunk.snapenhance.common.data.download
|
||||
|
||||
import android.net.Uri
|
||||
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.download.data
|
||||
package me.rhunk.snapenhance.common.data.download
|
||||
|
||||
data class DownloadMetadata(
|
||||
val mediaIdentifier: String?,
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.download.data
|
||||
package me.rhunk.snapenhance.common.data.download
|
||||
|
||||
|
||||
data class DashOptions(val offsetTime: Long, val duration: Long?)
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.download.data
|
||||
package me.rhunk.snapenhance.common.data.download
|
||||
|
||||
enum class DownloadStage(
|
||||
val isFinalStage: Boolean = false,
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.download.data
|
||||
package me.rhunk.snapenhance.common.data.download
|
||||
|
||||
enum class MediaDownloadSource(
|
||||
val key: String,
|
@ -1,8 +1,7 @@
|
||||
@file:OptIn(ExperimentalEncodingApi::class)
|
||||
|
||||
package me.rhunk.snapenhance.core.download.data
|
||||
package me.rhunk.snapenhance.common.data.download
|
||||
|
||||
import me.rhunk.snapenhance.data.wrapper.impl.media.EncryptionWrapper
|
||||
import java.io.InputStream
|
||||
import javax.crypto.Cipher
|
||||
import javax.crypto.CipherInputStream
|
||||
@ -25,6 +24,3 @@ data class MediaEncryptionKeyPair(
|
||||
|
||||
fun Pair<ByteArray, ByteArray>.toKeyPair()
|
||||
= MediaEncryptionKeyPair(Base64.UrlSafe.encode(this.first), Base64.UrlSafe.encode(this.second))
|
||||
|
||||
fun EncryptionWrapper.toKeyPair()
|
||||
= MediaEncryptionKeyPair(Base64.UrlSafe.encode(this.keySpec), Base64.UrlSafe.encode(this.ivKeyParameterSpec))
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.download.data
|
||||
package me.rhunk.snapenhance.common.data.download
|
||||
|
||||
enum class SplitMediaAssetType {
|
||||
ORIGINAL, OVERLAY
|
@ -1,4 +1,4 @@
|
||||
package me.rhunk.snapenhance.core.database
|
||||
package me.rhunk.snapenhance.common.database
|
||||
|
||||
import android.database.Cursor
|
||||
|
@ -1,15 +1,12 @@
|
||||
package me.rhunk.snapenhance.core.database.objects
|
||||
package me.rhunk.snapenhance.common.database.impl
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.database.Cursor
|
||||
import me.rhunk.snapenhance.Constants
|
||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.core.util.ktx.getBlobOrNull
|
||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.core.util.ktx.getLong
|
||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
||||
import me.rhunk.snapenhance.core.util.protobuf.ProtoReader
|
||||
import me.rhunk.snapenhance.data.ContentType
|
||||
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.common.util.ktx.getBlobOrNull
|
||||
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.common.util.ktx.getLong
|
||||
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||
|
||||
@Suppress("ArrayInDataClass")
|
||||
data class ConversationMessage(
|
@ -1,12 +1,12 @@
|
||||
package me.rhunk.snapenhance.core.database.objects
|
||||
package me.rhunk.snapenhance.common.database.impl
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.database.Cursor
|
||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.core.util.ktx.getIntOrNull
|
||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.core.util.ktx.getLong
|
||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
||||
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.common.util.ktx.getIntOrNull
|
||||
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.common.util.ktx.getLong
|
||||
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||
|
||||
data class FriendFeedEntry(
|
||||
var id: Int = 0,
|
@ -1,12 +1,12 @@
|
||||
package me.rhunk.snapenhance.core.database.objects
|
||||
package me.rhunk.snapenhance.common.database.impl
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.database.Cursor
|
||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.core.util.SerializableDataObject
|
||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.core.util.ktx.getLong
|
||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
||||
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.common.util.SerializableDataObject
|
||||
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.common.util.ktx.getLong
|
||||
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||
|
||||
data class FriendInfo(
|
||||
var id: Int = 0,
|
@ -1,10 +1,10 @@
|
||||
package me.rhunk.snapenhance.core.database.objects
|
||||
package me.rhunk.snapenhance.common.database.impl
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.database.Cursor
|
||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
||||
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||
|
||||
data class StoryEntry(
|
||||
var id: Int = 0,
|
@ -1,10 +1,10 @@
|
||||
package me.rhunk.snapenhance.core.database.objects
|
||||
package me.rhunk.snapenhance.common.database.impl
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.database.Cursor
|
||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
||||
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||
|
||||
class UserConversationLink(
|
||||
var userId: String? = null,
|
@ -1,10 +1,26 @@
|
||||
package me.rhunk.snapenhance.core.logger
|
||||
package me.rhunk.snapenhance.common.logger
|
||||
|
||||
import android.util.Log
|
||||
|
||||
abstract class AbstractLogger(
|
||||
logChannel: LogChannel,
|
||||
) {
|
||||
private val TAG = logChannel.shortName
|
||||
|
||||
companion object {
|
||||
|
||||
private const val TAG = "SnapEnhanceCommon"
|
||||
|
||||
fun directDebug(message: Any?, tag: String = TAG) {
|
||||
Log.println(Log.DEBUG, tag, message.toString())
|
||||
}
|
||||
|
||||
fun directError(message: Any?, throwable: Throwable, tag: String = TAG) {
|
||||
Log.println(Log.ERROR, tag, message.toString())
|
||||
Log.println(Log.ERROR, tag, throwable.toString())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
open fun debug(message: Any?, tag: String = TAG) {}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user