mirror of
				https://github.com/SimpleMobileTools/Simple-Flashlight.git
				synced 2025-06-05 21:59:19 +02:00 
			
		
		
		
	Change base for all activities to ComponentActivity
				
					
				
			This commit is contained in:
		| @@ -4,6 +4,7 @@ import android.app.Application | ||||
| import android.content.pm.ActivityInfo | ||||
| import android.os.Bundle | ||||
| import android.view.WindowManager | ||||
| import androidx.activity.ComponentActivity | ||||
| import androidx.activity.compose.setContent | ||||
| import androidx.activity.viewModels | ||||
| import androidx.compose.runtime.getValue | ||||
| @@ -24,7 +25,7 @@ import org.greenrobot.eventbus.Subscribe | ||||
| import org.greenrobot.eventbus.ThreadMode | ||||
| import kotlin.system.exitProcess | ||||
|  | ||||
| class BrightDisplayActivity : SimpleActivity() { | ||||
| class BrightDisplayActivity : ComponentActivity() { | ||||
|     private val viewModel by viewModels<BrightDisplayViewModel>() | ||||
|  | ||||
|     override fun onCreate(savedInstanceState: Bundle?) { | ||||
| @@ -35,7 +36,6 @@ class BrightDisplayActivity : SimpleActivity() { | ||||
|                 WindowManager.LayoutParams.FLAG_FULLSCREEN | ||||
|         ) | ||||
|  | ||||
|         useDynamicTheme = false | ||||
|         super.onCreate(savedInstanceState) | ||||
|         enableEdgeToEdgeSimple() | ||||
|         setContent { | ||||
|   | ||||
| @@ -1,24 +1,32 @@ | ||||
| package com.simplemobiletools.flashlight.activities | ||||
|  | ||||
| import android.Manifest | ||||
| import android.annotation.SuppressLint | ||||
| import android.app.AlarmManager | ||||
| import android.app.Application | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.content.pm.ActivityInfo | ||||
| import android.content.pm.PackageManager | ||||
| import android.content.pm.ShortcutInfo | ||||
| import android.graphics.drawable.Icon | ||||
| import android.graphics.drawable.LayerDrawable | ||||
| 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.result.contract.ActivityResultContracts | ||||
| import androidx.activity.viewModels | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.core.content.ContextCompat | ||||
| import androidx.lifecycle.AndroidViewModel | ||||
| import androidx.lifecycle.Lifecycle | ||||
| import androidx.lifecycle.compose.collectAsStateWithLifecycle | ||||
| import com.google.android.material.math.MathUtils | ||||
| import com.simplemobiletools.commons.compose.extensions.onEventValue | ||||
| import com.simplemobiletools.commons.compose.theme.AppThemeSurface | ||||
| import com.simplemobiletools.commons.dialogs.ConfirmationDialog | ||||
| import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog | ||||
| import com.simplemobiletools.commons.dialogs.RadioGroupDialog | ||||
| import com.simplemobiletools.commons.extensions.* | ||||
| @@ -29,6 +37,7 @@ import com.simplemobiletools.flashlight.BuildConfig | ||||
| import com.simplemobiletools.flashlight.R | ||||
| import com.simplemobiletools.flashlight.dialogs.SleepTimerCustomDialog | ||||
| import com.simplemobiletools.flashlight.extensions.config | ||||
| import com.simplemobiletools.flashlight.extensions.startAboutActivity | ||||
| import com.simplemobiletools.flashlight.helpers.* | ||||
| import com.simplemobiletools.flashlight.models.Events | ||||
| import com.simplemobiletools.flashlight.screens.MainScreen | ||||
| @@ -41,7 +50,7 @@ import org.greenrobot.eventbus.ThreadMode | ||||
| import java.util.* | ||||
| import kotlin.system.exitProcess | ||||
|  | ||||
| class MainActivity : SimpleActivity() { | ||||
| class MainActivity : ComponentActivity() { | ||||
|     companion object { | ||||
|         private const val MAX_STROBO_DELAY = 2000L | ||||
|         private const val MIN_STROBO_DELAY = 10L | ||||
| @@ -51,7 +60,6 @@ class MainActivity : SimpleActivity() { | ||||
|     private val viewModel by viewModels<MainViewModel>() | ||||
|  | ||||
|     override fun onCreate(savedInstanceState: Bundle?) { | ||||
|         isMaterialActivity = true | ||||
|         super.onCreate(savedInstanceState) | ||||
|         appLaunched(BuildConfig.APPLICATION_ID) | ||||
|  | ||||
| @@ -77,6 +85,27 @@ class MainActivity : SimpleActivity() { | ||||
|                 val stroboscopeBarVisible by viewModel.stroboscopeBarVisible.collectAsStateWithLifecycle(false) | ||||
|                 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( | ||||
|                     timerText = timerText, | ||||
|                     timerVisible = timerVisible, | ||||
| @@ -90,12 +119,12 @@ class MainActivity : SimpleActivity() { | ||||
|                     showSosButton = showSosButton, | ||||
|                     sosActive = sosActive, | ||||
|                     onSosButtonPress = { | ||||
|                         toggleStroboscope(true) | ||||
|                         toggleStroboscope(true, sosPermissionLauncher) | ||||
|                     }, | ||||
|                     showStroboscopeButton = showStroboscopeButton, | ||||
|                     stroboscopeActive = stroboscopeActive, | ||||
|                     onStroboscopeButtonPress = { | ||||
|                         toggleStroboscope(false) | ||||
|                         toggleStroboscope(false, stroboscopePermissionLauncher) | ||||
|                     }, | ||||
|                     showBrightnessBar = brightnessBarVisible, | ||||
|                     brightnessBarValue = brightnessBarValue, | ||||
| @@ -159,17 +188,23 @@ class MainActivity : SimpleActivity() { | ||||
|         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 | ||||
|         if (isNougatPlus()) { | ||||
|             cameraPermissionGranted(isSOS) | ||||
|         } else { | ||||
|             handlePermission(PERMISSION_CAMERA) { | ||||
|                 if (it) { | ||||
|                     cameraPermissionGranted(isSOS) | ||||
|                 } else { | ||||
|                     toast(R.string.camera_permission) | ||||
|                 } | ||||
|             val permission = Manifest.permission.CAMERA | ||||
|             if (ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED) { | ||||
|                 cameraPermissionGranted(isSOS) | ||||
|             } else { | ||||
|                 launcher.launch(permission) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package com.simplemobiletools.flashlight.activities | ||||
|  | ||||
| import android.content.Intent | ||||
| import android.os.Bundle | ||||
| import androidx.activity.ComponentActivity | ||||
| import androidx.activity.compose.setContent | ||||
| import androidx.compose.runtime.getValue | ||||
| 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.helpers.IS_CUSTOMIZING_COLORS | ||||
| 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 java.util.Locale | ||||
|  | ||||
| class SettingsActivity : SimpleActivity() { | ||||
| class SettingsActivity : ComponentActivity() { | ||||
|     private val preferences by lazy { config } | ||||
|  | ||||
|     override fun onCreate(savedInstanceState: Bundle?) { | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import android.app.Activity | ||||
| import android.appwidget.AppWidgetManager | ||||
| import android.content.Intent | ||||
| import android.os.Bundle | ||||
| import androidx.activity.ComponentActivity | ||||
| import androidx.activity.compose.setContent | ||||
| import androidx.activity.viewModels | ||||
| 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.screens.WidgetConfigureScreen | ||||
|  | ||||
| class WidgetBrightDisplayConfigureActivity : SimpleActivity() { | ||||
| class WidgetBrightDisplayConfigureActivity : ComponentActivity() { | ||||
|     private val viewModel by viewModels<WidgetConfigureViewModel>() | ||||
|  | ||||
|     private var mFeatureLockedDialog: FeatureLockedDialog? = null | ||||
|  | ||||
|     public override fun onCreate(savedInstanceState: Bundle?) { | ||||
|         useDynamicTheme = false | ||||
|         super.onCreate(savedInstanceState) | ||||
|         setResult(Activity.RESULT_CANCELED) | ||||
|  | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import android.app.Activity | ||||
| import android.appwidget.AppWidgetManager | ||||
| import android.content.Intent | ||||
| import android.os.Bundle | ||||
| import androidx.activity.ComponentActivity | ||||
| import androidx.activity.compose.setContent | ||||
| import androidx.activity.viewModels | ||||
| 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.screens.WidgetConfigureScreen | ||||
|  | ||||
| class WidgetTorchConfigureActivity : SimpleActivity() { | ||||
| class WidgetTorchConfigureActivity : ComponentActivity() { | ||||
|     private val viewModel by viewModels<WidgetConfigureViewModel>() | ||||
|  | ||||
|     private var mFeatureLockedDialog: FeatureLockedDialog? = null | ||||
|  | ||||
|     public override fun onCreate(savedInstanceState: Bundle?) { | ||||
|         useDynamicTheme = false | ||||
|         super.onCreate(savedInstanceState) | ||||
|         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) | ||||
		Reference in New Issue
	
	Block a user