Add settings module for android
This commit is contained in:
parent
1b9d35d71e
commit
be4098962e
|
@ -22,6 +22,8 @@ import Switch from './Switch'
|
||||||
import {toast} from './toast'
|
import {toast} from './toast'
|
||||||
import {useTheme} from './use-theme'
|
import {useTheme} from './use-theme'
|
||||||
|
|
||||||
|
const defaultFormats = ['P', 'Pp', 'ccc p', 'p']
|
||||||
|
|
||||||
export default function SettingsPage() {
|
export default function SettingsPage() {
|
||||||
const [battery, setBattery] = useState(false)
|
const [battery, setBattery] = useState(false)
|
||||||
const [ignoring, setIgnoring] = useState(false)
|
const [ignoring, setIgnoring] = useState(false)
|
||||||
|
@ -37,12 +39,7 @@ export default function SettingsPage() {
|
||||||
const {theme, setTheme, color, setColor} = useTheme()
|
const {theme, setTheme, color, setColor} = useTheme()
|
||||||
const [showDate, setShowDate] = useState(false)
|
const [showDate, setShowDate] = useState(false)
|
||||||
const [noSound, setNoSound] = useState(false)
|
const [noSound, setNoSound] = useState(false)
|
||||||
const [formatOptions, setFormatOptions] = useState<string[]>([
|
const [formatOptions, setFormatOptions] = useState<string[]>(defaultFormats)
|
||||||
'P',
|
|
||||||
'Pp',
|
|
||||||
'ccc p',
|
|
||||||
'p',
|
|
||||||
])
|
|
||||||
const today = new Date()
|
const today = new Date()
|
||||||
|
|
||||||
useFocusEffect(
|
useFocusEffect(
|
||||||
|
@ -60,7 +57,12 @@ export default function SettingsPage() {
|
||||||
setNoSound(settings.noSound)
|
setNoSound(settings.noSound)
|
||||||
})
|
})
|
||||||
if (Platform.OS !== 'android') return
|
if (Platform.OS !== 'android') return
|
||||||
NativeModules.AlarmModule.ignoringBattery(setIgnoring)
|
NativeModules.SettingsModule.ignoringBattery(setIgnoring)
|
||||||
|
NativeModules.SettingsModule.is24().then((is24: boolean) => {
|
||||||
|
console.log(`${SettingsPage.name}.focus:`, {is24})
|
||||||
|
if (is24) setFormatOptions(['P', 'P, k:m', 'ccc k:m', 'k:m'])
|
||||||
|
else setFormatOptions(defaultFormats)
|
||||||
|
})
|
||||||
}, []),
|
}, []),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -267,7 +269,7 @@ export default function SettingsPage() {
|
||||||
show={battery}
|
show={battery}
|
||||||
setShow={setBattery}
|
setShow={setBattery}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
NativeModules.AlarmModule.ignoreBattery()
|
NativeModules.SettingsModule.ignoreBattery()
|
||||||
setBattery(false)
|
setBattery(false)
|
||||||
}}>
|
}}>
|
||||||
Disable battery optimizations for Massive to use rest timers.
|
Disable battery optimizations for Massive to use rest timers.
|
||||||
|
|
|
@ -51,7 +51,6 @@ class AlarmModule constructor(context: ReactApplicationContext?) :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
reactApplicationContext.registerReceiver(stopReceiver, IntentFilter(STOP_BROADCAST))
|
reactApplicationContext.registerReceiver(stopReceiver, IntentFilter(STOP_BROADCAST))
|
||||||
reactApplicationContext.registerReceiver(addReceiver, IntentFilter(ADD_BROADCAST))
|
reactApplicationContext.registerReceiver(addReceiver, IntentFilter(ADD_BROADCAST))
|
||||||
|
@ -123,36 +122,6 @@ class AlarmModule constructor(context: ReactApplicationContext?) :
|
||||||
running = true
|
running = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.M)
|
|
||||||
@ReactMethod
|
|
||||||
fun ignoringBattery(callback: Callback) {
|
|
||||||
val packageName = reactApplicationContext.packageName
|
|
||||||
val pm = reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
||||||
callback.invoke(pm.isIgnoringBatteryOptimizations(packageName))
|
|
||||||
} else {
|
|
||||||
callback.invoke(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("BatteryLife")
|
|
||||||
@RequiresApi(Build.VERSION_CODES.M)
|
|
||||||
@ReactMethod
|
|
||||||
fun ignoreBattery() {
|
|
||||||
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
|
|
||||||
intent.data = Uri.parse("package:" + reactApplicationContext.packageName)
|
|
||||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
try {
|
|
||||||
reactApplicationContext.startActivity(intent)
|
|
||||||
} catch (e: ActivityNotFoundException) {
|
|
||||||
Toast.makeText(
|
|
||||||
reactApplicationContext,
|
|
||||||
"Requests to ignore battery optimizations are disabled on your device.",
|
|
||||||
Toast.LENGTH_LONG
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.M)
|
@RequiresApi(Build.VERSION_CODES.M)
|
||||||
private fun getTimer(
|
private fun getTimer(
|
||||||
endMs: Int,
|
endMs: Int,
|
||||||
|
|
|
@ -4,7 +4,6 @@ import com.facebook.react.ReactPackage
|
||||||
import com.facebook.react.bridge.NativeModule
|
import com.facebook.react.bridge.NativeModule
|
||||||
import com.facebook.react.bridge.ReactApplicationContext
|
import com.facebook.react.bridge.ReactApplicationContext
|
||||||
import com.facebook.react.uimanager.ViewManager
|
import com.facebook.react.uimanager.ViewManager
|
||||||
import com.massive.AlarmModule
|
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
|
|
||||||
class MassivePackage : ReactPackage {
|
class MassivePackage : ReactPackage {
|
||||||
|
@ -18,6 +17,7 @@ class MassivePackage : ReactPackage {
|
||||||
val modules: MutableList<NativeModule> = ArrayList()
|
val modules: MutableList<NativeModule> = ArrayList()
|
||||||
modules.add(AlarmModule(reactContext))
|
modules.add(AlarmModule(reactContext))
|
||||||
modules.add(DownloadModule(reactContext))
|
modules.add(DownloadModule(reactContext))
|
||||||
|
modules.add(SettingsModule(reactContext))
|
||||||
return modules
|
return modules
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
59
android/app/src/main/java/com/massive/SettingsModule.kt
Normal file
59
android/app/src/main/java/com/massive/SettingsModule.kt
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
package com.massive
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.ActivityNotFoundException
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.PowerManager
|
||||||
|
import android.provider.Settings
|
||||||
|
import android.util.Log
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
import com.facebook.react.bridge.*
|
||||||
|
import java.text.DateFormat
|
||||||
|
|
||||||
|
class SettingsModule constructor(context: ReactApplicationContext?) :
|
||||||
|
ReactContextBaseJavaModule(context) {
|
||||||
|
override fun getName(): String {
|
||||||
|
return "SettingsModule"
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.M)
|
||||||
|
@ReactMethod
|
||||||
|
fun ignoringBattery(callback: Callback) {
|
||||||
|
val packageName = reactApplicationContext.packageName
|
||||||
|
val pm = reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
callback.invoke(pm.isIgnoringBatteryOptimizations(packageName))
|
||||||
|
} else {
|
||||||
|
callback.invoke(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("BatteryLife")
|
||||||
|
@RequiresApi(Build.VERSION_CODES.M)
|
||||||
|
@ReactMethod
|
||||||
|
fun ignoreBattery() {
|
||||||
|
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
|
||||||
|
intent.data = Uri.parse("package:" + reactApplicationContext.packageName)
|
||||||
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
|
try {
|
||||||
|
reactApplicationContext.startActivity(intent)
|
||||||
|
} catch (e: ActivityNotFoundException) {
|
||||||
|
Toast.makeText(
|
||||||
|
reactApplicationContext,
|
||||||
|
"Requests to ignore battery optimizations are disabled on your device.",
|
||||||
|
Toast.LENGTH_LONG
|
||||||
|
).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ReactMethod
|
||||||
|
fun is24(promise: Promise) {
|
||||||
|
val is24 = android.text.format.DateFormat.is24HourFormat(reactApplicationContext)
|
||||||
|
Log.d("SettingsModule", "is24=$is24")
|
||||||
|
promise.resolve(is24)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user