mirror of
https://github.com/SimpleMobileTools/Simple-Flashlight.git
synced 2025-04-24 23:18:49 +02:00
Change base for all activities to ComponentActivity
This commit is contained in:
parent
81096e35a6
commit
132b469b44
@ -4,6 +4,7 @@ import android.app.Application
|
|||||||
import android.content.pm.ActivityInfo
|
import android.content.pm.ActivityInfo
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@ -24,7 +25,7 @@ import org.greenrobot.eventbus.Subscribe
|
|||||||
import org.greenrobot.eventbus.ThreadMode
|
import org.greenrobot.eventbus.ThreadMode
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
class BrightDisplayActivity : SimpleActivity() {
|
class BrightDisplayActivity : ComponentActivity() {
|
||||||
private val viewModel by viewModels<BrightDisplayViewModel>()
|
private val viewModel by viewModels<BrightDisplayViewModel>()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@ -35,7 +36,6 @@ class BrightDisplayActivity : SimpleActivity() {
|
|||||||
WindowManager.LayoutParams.FLAG_FULLSCREEN
|
WindowManager.LayoutParams.FLAG_FULLSCREEN
|
||||||
)
|
)
|
||||||
|
|
||||||
useDynamicTheme = false
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdgeSimple()
|
enableEdgeToEdgeSimple()
|
||||||
setContent {
|
setContent {
|
||||||
|
@ -1,24 +1,32 @@
|
|||||||
package com.simplemobiletools.flashlight.activities
|
package com.simplemobiletools.flashlight.activities
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.AlarmManager
|
import android.app.AlarmManager
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.ActivityInfo
|
import android.content.pm.ActivityInfo
|
||||||
|
import android.content.pm.PackageManager
|
||||||
import android.content.pm.ShortcutInfo
|
import android.content.pm.ShortcutInfo
|
||||||
import android.graphics.drawable.Icon
|
import android.graphics.drawable.Icon
|
||||||
import android.graphics.drawable.LayerDrawable
|
import android.graphics.drawable.LayerDrawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
|
import androidx.activity.compose.ManagedActivityResultLauncher
|
||||||
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.AndroidViewModel
|
import androidx.lifecycle.AndroidViewModel
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import com.google.android.material.math.MathUtils
|
import com.google.android.material.math.MathUtils
|
||||||
import com.simplemobiletools.commons.compose.extensions.onEventValue
|
import com.simplemobiletools.commons.compose.extensions.onEventValue
|
||||||
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
|
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
|
||||||
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
|
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
@ -29,6 +37,7 @@ import com.simplemobiletools.flashlight.BuildConfig
|
|||||||
import com.simplemobiletools.flashlight.R
|
import com.simplemobiletools.flashlight.R
|
||||||
import com.simplemobiletools.flashlight.dialogs.SleepTimerCustomDialog
|
import com.simplemobiletools.flashlight.dialogs.SleepTimerCustomDialog
|
||||||
import com.simplemobiletools.flashlight.extensions.config
|
import com.simplemobiletools.flashlight.extensions.config
|
||||||
|
import com.simplemobiletools.flashlight.extensions.startAboutActivity
|
||||||
import com.simplemobiletools.flashlight.helpers.*
|
import com.simplemobiletools.flashlight.helpers.*
|
||||||
import com.simplemobiletools.flashlight.models.Events
|
import com.simplemobiletools.flashlight.models.Events
|
||||||
import com.simplemobiletools.flashlight.screens.MainScreen
|
import com.simplemobiletools.flashlight.screens.MainScreen
|
||||||
@ -41,7 +50,7 @@ import org.greenrobot.eventbus.ThreadMode
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
class MainActivity : SimpleActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
companion object {
|
companion object {
|
||||||
private const val MAX_STROBO_DELAY = 2000L
|
private const val MAX_STROBO_DELAY = 2000L
|
||||||
private const val MIN_STROBO_DELAY = 10L
|
private const val MIN_STROBO_DELAY = 10L
|
||||||
@ -51,7 +60,6 @@ class MainActivity : SimpleActivity() {
|
|||||||
private val viewModel by viewModels<MainViewModel>()
|
private val viewModel by viewModels<MainViewModel>()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
appLaunched(BuildConfig.APPLICATION_ID)
|
appLaunched(BuildConfig.APPLICATION_ID)
|
||||||
|
|
||||||
@ -77,6 +85,27 @@ class MainActivity : SimpleActivity() {
|
|||||||
val stroboscopeBarVisible by viewModel.stroboscopeBarVisible.collectAsStateWithLifecycle(false)
|
val stroboscopeBarVisible by viewModel.stroboscopeBarVisible.collectAsStateWithLifecycle(false)
|
||||||
val stroboscopeBarValue by viewModel.stroboscopeBarValue.collectAsStateWithLifecycle()
|
val stroboscopeBarValue by viewModel.stroboscopeBarValue.collectAsStateWithLifecycle()
|
||||||
|
|
||||||
|
val sosPermissionLauncher = rememberLauncherForActivityResult(
|
||||||
|
contract = ActivityResultContracts.RequestPermission(),
|
||||||
|
onResult = {
|
||||||
|
if (it) {
|
||||||
|
cameraPermissionGranted(true)
|
||||||
|
} else {
|
||||||
|
toast(R.string.camera_permission)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
val stroboscopePermissionLauncher = rememberLauncherForActivityResult(
|
||||||
|
contract = ActivityResultContracts.RequestPermission(),
|
||||||
|
onResult = {
|
||||||
|
if (it) {
|
||||||
|
cameraPermissionGranted(false)
|
||||||
|
} else {
|
||||||
|
toast(R.string.camera_permission)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
MainScreen(
|
MainScreen(
|
||||||
timerText = timerText,
|
timerText = timerText,
|
||||||
timerVisible = timerVisible,
|
timerVisible = timerVisible,
|
||||||
@ -90,12 +119,12 @@ class MainActivity : SimpleActivity() {
|
|||||||
showSosButton = showSosButton,
|
showSosButton = showSosButton,
|
||||||
sosActive = sosActive,
|
sosActive = sosActive,
|
||||||
onSosButtonPress = {
|
onSosButtonPress = {
|
||||||
toggleStroboscope(true)
|
toggleStroboscope(true, sosPermissionLauncher)
|
||||||
},
|
},
|
||||||
showStroboscopeButton = showStroboscopeButton,
|
showStroboscopeButton = showStroboscopeButton,
|
||||||
stroboscopeActive = stroboscopeActive,
|
stroboscopeActive = stroboscopeActive,
|
||||||
onStroboscopeButtonPress = {
|
onStroboscopeButtonPress = {
|
||||||
toggleStroboscope(false)
|
toggleStroboscope(false, stroboscopePermissionLauncher)
|
||||||
},
|
},
|
||||||
showBrightnessBar = brightnessBarVisible,
|
showBrightnessBar = brightnessBarVisible,
|
||||||
brightnessBarValue = brightnessBarValue,
|
brightnessBarValue = brightnessBarValue,
|
||||||
@ -159,17 +188,23 @@ class MainActivity : SimpleActivity() {
|
|||||||
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
|
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toggleStroboscope(isSOS: Boolean) {
|
private fun checkAppOnSDCard() {
|
||||||
|
if (!baseConfig.wasAppOnSDShown && isAppInstalledOnSDCard()) {
|
||||||
|
baseConfig.wasAppOnSDShown = true
|
||||||
|
ConfirmationDialog(this, "", R.string.app_on_sd_card, R.string.ok, 0) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleStroboscope(isSOS: Boolean, launcher: ManagedActivityResultLauncher<String, Boolean>) {
|
||||||
// use the old Camera API for stroboscope, the new Camera Manager is way too slow
|
// use the old Camera API for stroboscope, the new Camera Manager is way too slow
|
||||||
if (isNougatPlus()) {
|
if (isNougatPlus()) {
|
||||||
cameraPermissionGranted(isSOS)
|
cameraPermissionGranted(isSOS)
|
||||||
} else {
|
} else {
|
||||||
handlePermission(PERMISSION_CAMERA) {
|
val permission = Manifest.permission.CAMERA
|
||||||
if (it) {
|
if (ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED) {
|
||||||
cameraPermissionGranted(isSOS)
|
cameraPermissionGranted(isSOS)
|
||||||
} else {
|
} else {
|
||||||
toast(R.string.camera_permission)
|
launcher.launch(permission)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.simplemobiletools.flashlight.activities
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
@ -10,10 +11,12 @@ import com.simplemobiletools.commons.compose.extensions.enableEdgeToEdgeSimple
|
|||||||
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
|
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
|
||||||
import com.simplemobiletools.commons.helpers.IS_CUSTOMIZING_COLORS
|
import com.simplemobiletools.commons.helpers.IS_CUSTOMIZING_COLORS
|
||||||
import com.simplemobiletools.flashlight.extensions.config
|
import com.simplemobiletools.flashlight.extensions.config
|
||||||
|
import com.simplemobiletools.flashlight.extensions.launchChangeAppLanguageIntent
|
||||||
|
import com.simplemobiletools.flashlight.extensions.startCustomizationActivity
|
||||||
import com.simplemobiletools.flashlight.screens.SettingsScreen
|
import com.simplemobiletools.flashlight.screens.SettingsScreen
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
class SettingsActivity : SimpleActivity() {
|
class SettingsActivity : ComponentActivity() {
|
||||||
private val preferences by lazy { config }
|
private val preferences by lazy { config }
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
@ -4,6 +4,7 @@ import android.app.Activity
|
|||||||
import android.appwidget.AppWidgetManager
|
import android.appwidget.AppWidgetManager
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@ -20,13 +21,12 @@ import com.simplemobiletools.flashlight.extensions.config
|
|||||||
import com.simplemobiletools.flashlight.helpers.MyWidgetBrightDisplayProvider
|
import com.simplemobiletools.flashlight.helpers.MyWidgetBrightDisplayProvider
|
||||||
import com.simplemobiletools.flashlight.screens.WidgetConfigureScreen
|
import com.simplemobiletools.flashlight.screens.WidgetConfigureScreen
|
||||||
|
|
||||||
class WidgetBrightDisplayConfigureActivity : SimpleActivity() {
|
class WidgetBrightDisplayConfigureActivity : ComponentActivity() {
|
||||||
private val viewModel by viewModels<WidgetConfigureViewModel>()
|
private val viewModel by viewModels<WidgetConfigureViewModel>()
|
||||||
|
|
||||||
private var mFeatureLockedDialog: FeatureLockedDialog? = null
|
private var mFeatureLockedDialog: FeatureLockedDialog? = null
|
||||||
|
|
||||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
useDynamicTheme = false
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setResult(Activity.RESULT_CANCELED)
|
setResult(Activity.RESULT_CANCELED)
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import android.app.Activity
|
|||||||
import android.appwidget.AppWidgetManager
|
import android.appwidget.AppWidgetManager
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@ -21,13 +22,12 @@ import com.simplemobiletools.flashlight.extensions.updateBrightDisplayWidget
|
|||||||
import com.simplemobiletools.flashlight.helpers.MyWidgetTorchProvider
|
import com.simplemobiletools.flashlight.helpers.MyWidgetTorchProvider
|
||||||
import com.simplemobiletools.flashlight.screens.WidgetConfigureScreen
|
import com.simplemobiletools.flashlight.screens.WidgetConfigureScreen
|
||||||
|
|
||||||
class WidgetTorchConfigureActivity : SimpleActivity() {
|
class WidgetTorchConfigureActivity : ComponentActivity() {
|
||||||
private val viewModel by viewModels<WidgetConfigureViewModel>()
|
private val viewModel by viewModels<WidgetConfigureViewModel>()
|
||||||
|
|
||||||
private var mFeatureLockedDialog: FeatureLockedDialog? = null
|
private var mFeatureLockedDialog: FeatureLockedDialog? = null
|
||||||
|
|
||||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
useDynamicTheme = false
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setResult(Activity.RESULT_CANCELED)
|
setResult(Activity.RESULT_CANCELED)
|
||||||
|
|
||||||
|
@ -0,0 +1,94 @@
|
|||||||
|
package com.simplemobiletools.flashlight.extensions
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
|
import android.provider.Settings
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
import com.simplemobiletools.commons.activities.AboutActivity
|
||||||
|
import com.simplemobiletools.commons.activities.CustomizationActivity
|
||||||
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
|
import com.simplemobiletools.commons.extensions.baseConfig
|
||||||
|
import com.simplemobiletools.commons.extensions.hideKeyboard
|
||||||
|
import com.simplemobiletools.commons.extensions.launchViewIntent
|
||||||
|
import com.simplemobiletools.commons.extensions.openDeviceSettings
|
||||||
|
import com.simplemobiletools.commons.helpers.*
|
||||||
|
import com.simplemobiletools.commons.models.FAQItem
|
||||||
|
import com.simplemobiletools.flashlight.R
|
||||||
|
|
||||||
|
internal fun Activity.startAboutActivity(
|
||||||
|
appNameId: Int, licenseMask: Long, versionName: String, faqItems: ArrayList<FAQItem>, showFAQBeforeMail: Boolean,
|
||||||
|
getAppIconIDs: ArrayList<Int> = getAppIconIDs(),
|
||||||
|
getAppLauncherName: String = launcherName()
|
||||||
|
) {
|
||||||
|
hideKeyboard()
|
||||||
|
Intent(applicationContext, AboutActivity::class.java).apply {
|
||||||
|
putExtra(APP_ICON_IDS, getAppIconIDs)
|
||||||
|
putExtra(APP_LAUNCHER_NAME, getAppLauncherName)
|
||||||
|
putExtra(APP_NAME, getString(appNameId))
|
||||||
|
putExtra(APP_LICENSES, licenseMask)
|
||||||
|
putExtra(APP_VERSION_NAME, versionName)
|
||||||
|
putExtra(APP_FAQ, faqItems)
|
||||||
|
putExtra(SHOW_FAQ_BEFORE_MAIL, showFAQBeforeMail)
|
||||||
|
startActivity(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun Activity.startCustomizationActivity(
|
||||||
|
getAppIconIDs: ArrayList<Int> = getAppIconIDs(),
|
||||||
|
getAppLauncherName: String = launcherName()
|
||||||
|
) {
|
||||||
|
if (!packageName.contains("slootelibomelpmis".reversed(), true)) {
|
||||||
|
if (baseConfig.appRunCount > 100) {
|
||||||
|
val label = "You are using a fake version of the app. For your own safety download the original one from www.simplemobiletools.com. Thanks"
|
||||||
|
ConfirmationDialog(this, label, positive = R.string.ok, negative = 0) {
|
||||||
|
launchViewIntent("https://play.google.com/store/apps/dev?id=9070296388022589266")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Intent(applicationContext, CustomizationActivity::class.java).apply {
|
||||||
|
putExtra(APP_ICON_IDS, getAppIconIDs)
|
||||||
|
putExtra(APP_LAUNCHER_NAME, getAppLauncherName)
|
||||||
|
startActivity(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
|
internal fun Activity.launchChangeAppLanguageIntent() {
|
||||||
|
try {
|
||||||
|
Intent(Settings.ACTION_APP_LOCALE_SETTINGS).apply {
|
||||||
|
data = Uri.fromParts("package", packageName, null)
|
||||||
|
startActivity(this)
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
openDeviceSettings()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getAppIconIDs() = arrayListOf(
|
||||||
|
R.mipmap.ic_launcher_red,
|
||||||
|
R.mipmap.ic_launcher_pink,
|
||||||
|
R.mipmap.ic_launcher_purple,
|
||||||
|
R.mipmap.ic_launcher_deep_purple,
|
||||||
|
R.mipmap.ic_launcher_indigo,
|
||||||
|
R.mipmap.ic_launcher_blue,
|
||||||
|
R.mipmap.ic_launcher_light_blue,
|
||||||
|
R.mipmap.ic_launcher_cyan,
|
||||||
|
R.mipmap.ic_launcher_teal,
|
||||||
|
R.mipmap.ic_launcher_green,
|
||||||
|
R.mipmap.ic_launcher_light_green,
|
||||||
|
R.mipmap.ic_launcher_lime,
|
||||||
|
R.mipmap.ic_launcher_yellow,
|
||||||
|
R.mipmap.ic_launcher_amber,
|
||||||
|
R.mipmap.ic_launcher,
|
||||||
|
R.mipmap.ic_launcher_deep_orange,
|
||||||
|
R.mipmap.ic_launcher_brown,
|
||||||
|
R.mipmap.ic_launcher_blue_grey,
|
||||||
|
R.mipmap.ic_launcher_grey_black
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun Context.launcherName() = getString(R.string.app_launcher_name)
|
Loading…
x
Reference in New Issue
Block a user