Merge pull request #4 from imCrest/imCrest/add-customizable-purchase-date-feature-di5qqb
Add Snapchat Plus purchase date setting and chat-hold kill actions (UI + core)
This commit is contained in:
@@ -8,9 +8,11 @@ import me.eternal.purrfectsnap.core.util.hook.HookStage
|
||||
import me.eternal.purrfectsnap.core.util.hook.hook
|
||||
import me.eternal.purrfectsnap.core.util.hook.hookConstructor
|
||||
import me.eternal.purrfectsnap.mapper.impl.PlusSubscriptionMapper
|
||||
import java.time.LocalDate
|
||||
import java.time.ZoneId
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
class SnapchatPlus: Feature("SnapchatPlus") {
|
||||
private val originalSubscriptionTime = (System.currentTimeMillis() - 7776000000L)
|
||||
private val expirationTimeMillis = (System.currentTimeMillis() + 15552000000L)
|
||||
|
||||
override fun init() {
|
||||
@@ -40,7 +42,24 @@ class SnapchatPlus: Feature("SnapchatPlus") {
|
||||
//subscription status
|
||||
set(statusField.getAsString()!!, 2)
|
||||
|
||||
set(originalSubscriptionTimeMillisField.getAsString()!!, originalSubscriptionTime)
|
||||
val fallbackOriginalSubscriptionTime = System.currentTimeMillis() - 7776000000L
|
||||
val customPurchaseDate = context.config.global.snapchatPlusPurchaseDate.get().trim()
|
||||
val customPurchaseDateMillis = if (customPurchaseDate.isNotEmpty()) {
|
||||
runCatching {
|
||||
LocalDate
|
||||
.parse(customPurchaseDate, DateTimeFormatter.ISO_LOCAL_DATE)
|
||||
.atStartOfDay(ZoneId.systemDefault())
|
||||
.toInstant()
|
||||
.toEpochMilli()
|
||||
}.getOrNull()
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
set(
|
||||
originalSubscriptionTimeMillisField.getAsString()!!,
|
||||
customPurchaseDateMillis ?: fallbackOriginalSubscriptionTime
|
||||
)
|
||||
set(expirationTimeMillisField.getAsString()!!, expirationTimeMillis)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package me.eternal.purrfectsnap.core.ui.menu.impl
|
||||
|
||||
import android.app.ActivityManager
|
||||
import android.os.Process
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import me.eternal.purrfectsnap.common.Constants
|
||||
import me.eternal.purrfectsnap.common.ui.OverlayType
|
||||
import me.eternal.purrfectsnap.core.event.events.impl.AddViewEvent
|
||||
import me.eternal.purrfectsnap.core.ui.menu.AbstractMenu
|
||||
@@ -47,6 +50,9 @@ class SettingsGearInjector : AbstractMenu() {
|
||||
this@SettingsGearInjector.context.log.info("Gear icon clicked.", logTag)
|
||||
this@SettingsGearInjector.context.bridgeClient.openOverlay(OverlayType.SETTINGS)
|
||||
}
|
||||
setOnLongClickListener {
|
||||
this@SettingsGearInjector.handleChatHoldKillAction()
|
||||
}
|
||||
}
|
||||
|
||||
val layoutParams = FrameLayout.LayoutParams(
|
||||
@@ -88,4 +94,24 @@ class SettingsGearInjector : AbstractMenu() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleChatHoldKillAction(): Boolean {
|
||||
val selectedActions = context.config.userInterface.chatHoldKillActions.get()
|
||||
if (selectedActions.isEmpty()) return false
|
||||
|
||||
context.mainActivity?.vibrateLongPress()
|
||||
|
||||
if (selectedActions.contains("kill_purrfectsnap")) {
|
||||
runCatching {
|
||||
val activityManager = context.androidContext.getSystemService(ActivityManager::class.java)
|
||||
activityManager?.killBackgroundProcesses(Constants.MODULE_PACKAGE_NAME)
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedActions.contains("kill_snapchat")) {
|
||||
Process.killProcess(Process.myPid())
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package me.eternal.purrfectsnap.core.ui.menu.impl
|
||||
|
||||
import android.app.ActivityManager
|
||||
import android.os.Process
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import me.eternal.purrfectsnap.common.Constants
|
||||
import me.eternal.purrfectsnap.common.ui.OverlayType
|
||||
import me.eternal.purrfectsnap.core.ui.menu.AbstractMenu
|
||||
import me.eternal.purrfectsnap.core.util.hook.HookStage
|
||||
@@ -22,8 +25,31 @@ class SettingsMenu : AbstractMenu() {
|
||||
view.setOnClickListener {
|
||||
context.bridgeClient.openOverlay(OverlayType.SETTINGS)
|
||||
}
|
||||
view.setOnLongClickListener {
|
||||
handleChatHoldKillAction()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleChatHoldKillAction(): Boolean {
|
||||
val selectedActions = context.config.userInterface.chatHoldKillActions.get()
|
||||
if (selectedActions.isEmpty()) return false
|
||||
|
||||
context.mainActivity?.vibrateLongPress()
|
||||
|
||||
if (selectedActions.contains("kill_purrfectsnap")) {
|
||||
runCatching {
|
||||
val activityManager = context.androidContext.getSystemService(ActivityManager::class.java)
|
||||
activityManager?.killBackgroundProcesses(Constants.MODULE_PACKAGE_NAME)
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedActions.contains("kill_snapchat")) {
|
||||
Process.killProcess(Process.myPid())
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user