6.6.3 - Alpha2 - 修复定时任务页面自定义广播内容的输入法遮挡问题
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
"部分设备代码编辑器空行显示方框字符的问题",
|
"部分设备代码编辑器空行显示方框字符的问题",
|
||||||
"主题色设置页面调色盘对话框可能无限叠加的问题",
|
"主题色设置页面调色盘对话框可能无限叠加的问题",
|
||||||
"无障碍服务关闭时音量加键停止所有脚本功能失效的问题",
|
"无障碍服务关闭时音量加键停止所有脚本功能失效的问题",
|
||||||
|
"定时任务页面编辑自定义广播内容时出现的输入法遮挡问题",
|
||||||
"APK 文件类型信息对话框可能无法获取应用名称及 SDK 信息的问题",
|
"APK 文件类型信息对话框可能无法获取应用名称及 SDK 信息的问题",
|
||||||
"Android 15 部分页面状态栏背景颜色可能无法动态跟随主题色的问题",
|
"Android 15 部分页面状态栏背景颜色可能无法动态跟随主题色的问题",
|
||||||
"dialogs 模块无法正常使用 customView 属性的问题 _[`issue #364`](http://issues.autojs6.com/364)_",
|
"dialogs 模块无法正常使用 customView 属性的问题 _[`issue #364`](http://issues.autojs6.com/364)_",
|
||||||
|
|||||||
@@ -16,8 +16,11 @@ import android.view.WindowManager;
|
|||||||
import android.widget.AbsListView;
|
import android.widget.AbsListView;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.Switch;
|
import android.widget.Switch;
|
||||||
|
import androidx.annotation.ColorInt;
|
||||||
import androidx.appcompat.widget.SwitchCompat;
|
import androidx.appcompat.widget.SwitchCompat;
|
||||||
import androidx.core.graphics.drawable.DrawableCompat;
|
import androidx.core.graphics.drawable.DrawableCompat;
|
||||||
|
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
|
||||||
|
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
|
||||||
import org.autojs.autojs.theme.internal.ScrollingViewEdgeGlowColorHelper;
|
import org.autojs.autojs.theme.internal.ScrollingViewEdgeGlowColorHelper;
|
||||||
import org.autojs.autojs.util.ColorUtils;
|
import org.autojs.autojs.util.ColorUtils;
|
||||||
import org.autojs.autojs.util.ViewUtils;
|
import org.autojs.autojs.util.ViewUtils;
|
||||||
@@ -57,6 +60,28 @@ public class ThemeColorHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setThemeColorPrimary(TimePickerDialog timePickerDialog, Context context, boolean contrastMatters) {
|
||||||
|
setThemeColorPrimary(timePickerDialog, context, ThemeColorManager.getColorPrimary(), contrastMatters);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setThemeColorPrimary(TimePickerDialog timePickerDialog, Context context, @ColorInt int color, boolean contrastMatters) {
|
||||||
|
if (contrastMatters) {
|
||||||
|
color = ColorUtils.adjustColorForContrast(context.getColor(R.color.window_background), color, 2.3);
|
||||||
|
}
|
||||||
|
timePickerDialog.setAccentColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setThemeColorPrimary(DatePickerDialog datePickerDialog, Context context, boolean contrastMatters) {
|
||||||
|
setThemeColorPrimary(datePickerDialog, context, ThemeColorManager.getColorPrimary(), contrastMatters);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setThemeColorPrimary(DatePickerDialog datePickerDialog, Context context, @ColorInt int color, boolean contrastMatters) {
|
||||||
|
if (contrastMatters) {
|
||||||
|
color = ColorUtils.adjustColorForContrast(context.getColor(R.color.window_background), color, 2.3);
|
||||||
|
}
|
||||||
|
datePickerDialog.setAccentColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
public static void setColorPrimary(SwitchCompat switchCompat, int color) {
|
public static void setColorPrimary(SwitchCompat switchCompat, int color) {
|
||||||
setColorPrimary(switchCompat, color, false);
|
setColorPrimary(switchCompat, color, false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
package org.autojs.autojs.ui.timing
|
package org.autojs.autojs.ui.timing
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.DatePickerDialog
|
|
||||||
import android.app.TimePickerDialog
|
|
||||||
import android.content.ActivityNotFoundException
|
import android.content.ActivityNotFoundException
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
@@ -26,6 +22,11 @@ import android.widget.RadioGroup
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.TimePicker
|
import android.widget.TimePicker
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
|
import androidx.core.graphics.Insets
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
import androidx.core.view.ViewCompat
|
||||||
|
import androidx.core.view.WindowInsetsCompat
|
||||||
|
import androidx.core.view.forEach
|
||||||
import com.github.aakira.expandablelayout.ExpandableRelativeLayout
|
import com.github.aakira.expandablelayout.ExpandableRelativeLayout
|
||||||
import org.autojs.autojs.core.ui.BiMaps
|
import org.autojs.autojs.core.ui.BiMaps
|
||||||
import org.autojs.autojs.execution.ExecutionConfig
|
import org.autojs.autojs.execution.ExecutionConfig
|
||||||
@@ -33,6 +34,7 @@ import org.autojs.autojs.execution.ExecutionConfig.CREATOR.default
|
|||||||
import org.autojs.autojs.external.ScriptIntents
|
import org.autojs.autojs.external.ScriptIntents
|
||||||
import org.autojs.autojs.external.receiver.DynamicBroadcastReceivers
|
import org.autojs.autojs.external.receiver.DynamicBroadcastReceivers
|
||||||
import org.autojs.autojs.model.script.ScriptFile
|
import org.autojs.autojs.model.script.ScriptFile
|
||||||
|
import org.autojs.autojs.theme.ThemeColorHelper
|
||||||
import org.autojs.autojs.timing.IntentTask
|
import org.autojs.autojs.timing.IntentTask
|
||||||
import org.autojs.autojs.timing.TaskReceiver
|
import org.autojs.autojs.timing.TaskReceiver
|
||||||
import org.autojs.autojs.timing.TimedTask
|
import org.autojs.autojs.timing.TimedTask
|
||||||
@@ -44,6 +46,7 @@ import org.autojs.autojs.timing.TimedTaskManager.updateTask
|
|||||||
import org.autojs.autojs.tool.MapBuilder
|
import org.autojs.autojs.tool.MapBuilder
|
||||||
import org.autojs.autojs.ui.BaseActivity
|
import org.autojs.autojs.ui.BaseActivity
|
||||||
import org.autojs.autojs.util.ViewUtils
|
import org.autojs.autojs.util.ViewUtils
|
||||||
|
import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance
|
||||||
import org.autojs.autojs.util.ViewUtils.showToast
|
import org.autojs.autojs.util.ViewUtils.showToast
|
||||||
import org.autojs.autojs6.R
|
import org.autojs.autojs6.R
|
||||||
import org.autojs.autojs6.databinding.ActivityTimedTaskSettingBinding
|
import org.autojs.autojs6.databinding.ActivityTimedTaskSettingBinding
|
||||||
@@ -51,6 +54,8 @@ import org.joda.time.LocalDate
|
|||||||
import org.joda.time.LocalDateTime
|
import org.joda.time.LocalDateTime
|
||||||
import org.joda.time.LocalTime
|
import org.joda.time.LocalTime
|
||||||
import org.joda.time.format.DateTimeFormat
|
import org.joda.time.format.DateTimeFormat
|
||||||
|
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog as MaterialDatePickerDialog
|
||||||
|
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog as MaterialTimePickerDialog
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Stardust on Nov 28, 2017.
|
* Created by Stardust on Nov 28, 2017.
|
||||||
@@ -64,8 +69,8 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
private lateinit var mDailyTaskRadio: RadioButton
|
private lateinit var mDailyTaskRadio: RadioButton
|
||||||
private lateinit var mWeeklyTaskRadio: RadioButton
|
private lateinit var mWeeklyTaskRadio: RadioButton
|
||||||
private lateinit var mRunOnBroadcastRadio: RadioButton
|
private lateinit var mRunOnBroadcastRadio: RadioButton
|
||||||
private lateinit var mRunOnOtherBroadcast: RadioButton
|
private lateinit var mRunOnCustomBroadcast: RadioButton
|
||||||
private lateinit var mOtherBroadcastAction: EditText
|
private lateinit var mCustomBroadcastAction: EditText
|
||||||
private lateinit var mBroadcastGroup: RadioGroup
|
private lateinit var mBroadcastGroup: RadioGroup
|
||||||
private lateinit var mDisposableTaskTime: TextView
|
private lateinit var mDisposableTaskTime: TextView
|
||||||
private lateinit var mDisposableTaskDate: TextView
|
private lateinit var mDisposableTaskDate: TextView
|
||||||
@@ -74,9 +79,10 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
private lateinit var mWeeklyTaskContainer: LinearLayout
|
private lateinit var mWeeklyTaskContainer: LinearLayout
|
||||||
|
|
||||||
private val mDayOfWeekCheckBoxes: MutableList<CheckBox> = ArrayList()
|
private val mDayOfWeekCheckBoxes: MutableList<CheckBox> = ArrayList()
|
||||||
private var mScriptFile: ScriptFile? = null
|
|
||||||
private var mTimedTask: TimedTask? = null
|
private var mTimedTask: TimedTask? = null
|
||||||
private var mIntentTask: IntentTask? = null
|
private var mIntentTask: IntentTask? = null
|
||||||
|
private lateinit var mScriptFile: ScriptFile
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -86,129 +92,179 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
|
|
||||||
mToolbar = binding.toolbar
|
mToolbar = binding.toolbar
|
||||||
mTimingGroup = binding.timingGroup
|
mTimingGroup = binding.timingGroup
|
||||||
mRunOnOtherBroadcast = binding.runOnOtherBroadcast
|
mRunOnCustomBroadcast = binding.runOnCustomBroadcast
|
||||||
mOtherBroadcastAction = binding.action
|
mCustomBroadcastAction = binding.action.apply {
|
||||||
mBroadcastGroup = binding.broadcastGroup
|
setOnFocusChangeListener { _, hasFocus ->
|
||||||
mDailyTaskTimePicker = binding.dailyTaskTimePicker
|
if (hasFocus) {
|
||||||
mWeeklyTaskTimePicker = binding.weeklyTaskTimePicker
|
mRunOnCustomBroadcast.isChecked = true
|
||||||
mWeeklyTaskContainer = binding.weeklyTaskContainer
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mBroadcastGroup = binding.broadcastGroup.apply {
|
||||||
|
setUpRadioButtonListeners()
|
||||||
|
}
|
||||||
|
mWeeklyTaskContainer = binding.weeklyTaskContainer.apply {
|
||||||
|
setUpDayOfWeekCheckBoxes()
|
||||||
|
}
|
||||||
|
mWeeklyTaskTimePicker = binding.weeklyTaskTimePicker.apply {
|
||||||
|
setIs24HourView(true)
|
||||||
|
}
|
||||||
|
mDailyTaskTimePicker = binding.dailyTaskTimePicker.apply {
|
||||||
|
setIs24HourView(true)
|
||||||
|
}
|
||||||
mDailyTaskRadio = binding.dailyTaskRadio.apply {
|
mDailyTaskRadio = binding.dailyTaskRadio.apply {
|
||||||
setOnCheckedChangeListener { buttonView, _ -> onCheckedChanged(buttonView) }
|
setUpRadioButton()
|
||||||
}
|
}
|
||||||
mWeeklyTaskRadio = binding.weeklyTaskRadio.apply {
|
mWeeklyTaskRadio = binding.weeklyTaskRadio.apply {
|
||||||
setOnCheckedChangeListener { buttonView, _ -> onCheckedChanged(buttonView) }
|
setUpRadioButton()
|
||||||
}
|
}
|
||||||
mDisposableTaskRadio = binding.disposableTaskRadio.apply {
|
mDisposableTaskRadio = binding.disposableTaskRadio.apply {
|
||||||
setOnCheckedChangeListener { buttonView, _ -> onCheckedChanged(buttonView) }
|
setUpRadioButton()
|
||||||
}
|
}
|
||||||
mRunOnBroadcastRadio = binding.runOnBroadcast.apply {
|
mRunOnBroadcastRadio = binding.runOnBroadcast.apply {
|
||||||
setOnCheckedChangeListener { buttonView, _ -> onCheckedChanged(buttonView) }
|
setUpRadioButton()
|
||||||
}
|
}
|
||||||
mDisposableTaskTime = binding.disposableTaskTime.apply {
|
mDisposableTaskTime = binding.disposableTaskTime.apply {
|
||||||
|
text = TIME_FORMATTER.print(LocalTime.now())
|
||||||
setOnClickListener { showDisposableTaskTimePicker() }
|
setOnClickListener { showDisposableTaskTimePicker() }
|
||||||
}
|
}
|
||||||
mDisposableTaskDate = binding.disposableTaskDate.apply {
|
mDisposableTaskDate = binding.disposableTaskDate.apply {
|
||||||
|
text = DATE_FORMATTER.print(LocalDate.now())
|
||||||
setOnClickListener { showDisposableTaskDatePicker() }
|
setOnClickListener { showDisposableTaskDatePicker() }
|
||||||
}
|
}
|
||||||
|
|
||||||
val taskId = intent.getLongExtra(EXTRA_TASK_ID, -1)
|
loadTaskFromIntent()
|
||||||
if (taskId != -1L) {
|
|
||||||
mTimedTask = getTimedTask(taskId)
|
|
||||||
if (mTimedTask != null) {
|
|
||||||
mScriptFile = ScriptFile(mTimedTask!!.scriptPath)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
val intentTaskId = intent.getLongExtra(EXTRA_INTENT_TASK_ID, -1)
|
|
||||||
if (intentTaskId != -1L) {
|
|
||||||
mIntentTask = getIntentTask(intentTaskId)
|
|
||||||
if (mIntentTask != null) {
|
|
||||||
mScriptFile = ScriptFile(mIntentTask!!.scriptPath)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
val path = intent.getStringExtra(ScriptIntents.EXTRA_KEY_PATH)
|
|
||||||
if (TextUtils.isEmpty(path)) {
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
mScriptFile = ScriptFile(path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setToolbarAsBack(R.string.text_timed_task)
|
setToolbarAsBack(R.string.text_timed_task)
|
||||||
mToolbar.subtitle = mScriptFile!!.name
|
mToolbar.subtitle = mScriptFile.name
|
||||||
mDailyTaskTimePicker.setIs24HourView(true)
|
|
||||||
mWeeklyTaskTimePicker.setIs24HourView(true)
|
setUpTaskSettings()
|
||||||
findDayOfWeekCheckBoxes(mWeeklyTaskContainer)
|
|
||||||
setUpTaskSettings(this)
|
|
||||||
|
|
||||||
ViewUtils.excludePaddingClippableViewFromNavigationBar(binding.scrollView)
|
ViewUtils.excludePaddingClippableViewFromNavigationBar(binding.scrollView)
|
||||||
|
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(findViewById(android.R.id.content)) { v, insets ->
|
||||||
|
val sysBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||||
|
val ime = insets.getInsets(WindowInsetsCompat.Type.ime())
|
||||||
|
|
||||||
|
v.setPadding(0, 0, 0, maxOf(sysBars.bottom, ime.bottom))
|
||||||
|
|
||||||
|
// 只把 IME 的 inset 标记为已消费, 其余继续下传
|
||||||
|
val outInsets = WindowInsetsCompat.Builder(insets)
|
||||||
|
.setInsets(WindowInsetsCompat.Type.ime(), Insets.NONE)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
outInsets
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findDayOfWeekCheckBoxes(parent: ViewGroup) {
|
private fun loadTaskFromIntent() {
|
||||||
for (i in 0 until parent.childCount) {
|
when (val taskId = intent.getLongExtra(EXTRA_TASK_ID, -1)) {
|
||||||
val child = parent.getChildAt(i)
|
-1L -> when (val intentTaskId = intent.getLongExtra(EXTRA_INTENT_TASK_ID, -1)) {
|
||||||
|
-1L -> {
|
||||||
|
val path = intent.getStringExtra(ScriptIntents.EXTRA_KEY_PATH)
|
||||||
|
if (TextUtils.isEmpty(path)) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
mScriptFile = ScriptFile(path)
|
||||||
|
}
|
||||||
|
else -> mIntentTask = getIntentTask(intentTaskId)?.also {
|
||||||
|
mScriptFile = ScriptFile(it.scriptPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> mTimedTask = getTimedTask(taskId)?.also {
|
||||||
|
mScriptFile = ScriptFile(it.scriptPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun RadioGroup.setUpRadioButtonListeners() {
|
||||||
|
forEach { view ->
|
||||||
|
if (view !is RadioButton) {
|
||||||
|
return@forEach
|
||||||
|
}
|
||||||
|
view.setOnClickListener {
|
||||||
|
mCustomBroadcastAction.apply {
|
||||||
|
if (view == mRunOnCustomBroadcast) {
|
||||||
|
requestFocus()
|
||||||
|
setSelection(length())
|
||||||
|
ViewUtils.showSoftInput(this)
|
||||||
|
} else {
|
||||||
|
clearFocus()
|
||||||
|
ViewUtils.hideSoftInput(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun RadioButton.setUpRadioButton() {
|
||||||
|
setOnCheckedChangeListener { buttonView, _ -> onCheckedChanged(buttonView) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun ViewGroup.setUpDayOfWeekCheckBoxes() {
|
||||||
|
for (i in 0 until this.childCount) {
|
||||||
|
val child = this.getChildAt(i)
|
||||||
if (child is CheckBox) {
|
if (child is CheckBox) {
|
||||||
mDayOfWeekCheckBoxes.add(child)
|
mDayOfWeekCheckBoxes.add(child)
|
||||||
} else if (child is ViewGroup) {
|
} else if (child is ViewGroup) {
|
||||||
findDayOfWeekCheckBoxes(child)
|
child.setUpDayOfWeekCheckBoxes()
|
||||||
}
|
}
|
||||||
if (mDayOfWeekCheckBoxes.size >= 7) break
|
if (mDayOfWeekCheckBoxes.size >= 7) break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpTaskSettings(context: Context) {
|
private fun setUpTaskSettings() {
|
||||||
mDisposableTaskDate.text = DATE_FORMATTER.print(LocalDate.now())
|
mTimedTask?.let {
|
||||||
mDisposableTaskTime.text = TIME_FORMATTER.print(LocalTime.now())
|
setUpTime(it)
|
||||||
if (mTimedTask != null) {
|
|
||||||
setupTime(context)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (mIntentTask != null) {
|
mIntentTask?.let {
|
||||||
setupAction()
|
setUpAction(it)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
mDailyTaskRadio.isChecked = true
|
mDailyTaskRadio.isChecked = true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupAction() {
|
private fun setUpTime(timedTask: TimedTask) {
|
||||||
|
if (timedTask.isDisposable) {
|
||||||
|
mDisposableTaskRadio.isChecked = true
|
||||||
|
mDisposableTaskTime.text = TIME_FORMATTER.print(timedTask.millis)
|
||||||
|
mDisposableTaskDate.text = DATE_FORMATTER.print(timedTask.millis)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val time = LocalTime.fromMillisOfDay(timedTask.millis)
|
||||||
|
mDailyTaskTimePicker.hour = time.hourOfDay
|
||||||
|
mDailyTaskTimePicker.minute = time.minuteOfHour
|
||||||
|
mWeeklyTaskTimePicker.hour = time.hourOfDay
|
||||||
|
mWeeklyTaskTimePicker.minute = time.minuteOfHour
|
||||||
|
if (timedTask.isDaily) {
|
||||||
|
mDailyTaskRadio.isChecked = true
|
||||||
|
} else {
|
||||||
|
mWeeklyTaskRadio.isChecked = true
|
||||||
|
for (i in mDayOfWeekCheckBoxes.indices) {
|
||||||
|
mDayOfWeekCheckBoxes[i].isChecked = timedTask.hasDayOfWeek(this, i + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setUpAction(intentTask: IntentTask) {
|
||||||
mRunOnBroadcastRadio.isChecked = true
|
mRunOnBroadcastRadio.isChecked = true
|
||||||
val buttonId = ACTIONS.getKey(mIntentTask!!.action)
|
val buttonId = ACTIONS.getKey(intentTask.action)
|
||||||
if (buttonId == null) {
|
if (buttonId == null) {
|
||||||
mRunOnOtherBroadcast.isChecked = true
|
mRunOnCustomBroadcast.isChecked = true
|
||||||
mOtherBroadcastAction.setText(mIntentTask!!.action)
|
mCustomBroadcastAction.setText(intentTask.action)
|
||||||
} else {
|
} else {
|
||||||
(findViewById<View>(buttonId) as RadioButton).isChecked = true
|
(findViewById<View>(buttonId) as RadioButton).isChecked = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupTime(context: Context) {
|
fun onCheckedChanged(button: CompoundButton) {
|
||||||
if (mTimedTask!!.isDisposable) {
|
findExpandableLayoutOf(button).run {
|
||||||
mDisposableTaskRadio.isChecked = true
|
when (button.isChecked) {
|
||||||
mDisposableTaskTime.text = TIME_FORMATTER.print(mTimedTask!!.millis)
|
true -> post { expand() }
|
||||||
mDisposableTaskDate.text = DATE_FORMATTER.print(mTimedTask!!.millis)
|
else -> post { collapse() }
|
||||||
return
|
|
||||||
}
|
|
||||||
val time = LocalTime.fromMillisOfDay(mTimedTask!!.millis)
|
|
||||||
mDailyTaskTimePicker.hour = time.hourOfDay
|
|
||||||
mDailyTaskTimePicker.minute = time.minuteOfHour
|
|
||||||
mWeeklyTaskTimePicker.hour = time.hourOfDay
|
|
||||||
mWeeklyTaskTimePicker.minute = time.minuteOfHour
|
|
||||||
if (mTimedTask!!.isDaily) {
|
|
||||||
mDailyTaskRadio.isChecked = true
|
|
||||||
} else {
|
|
||||||
mWeeklyTaskRadio.isChecked = true
|
|
||||||
for (i in mDayOfWeekCheckBoxes.indices) {
|
|
||||||
mDayOfWeekCheckBoxes[i].isChecked = mTimedTask!!.hasDayOfWeek(context, i + 1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
ViewUtils.hideSoftInput(mCustomBroadcastAction)
|
||||||
|
|
||||||
fun onCheckedChanged(button: CompoundButton) {
|
|
||||||
val relativeLayout = findExpandableLayoutOf(button)
|
|
||||||
if (button.isChecked) {
|
|
||||||
relativeLayout.post { relativeLayout.expand() }
|
|
||||||
} else {
|
|
||||||
relativeLayout.collapse()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findExpandableLayoutOf(button: CompoundButton): ExpandableRelativeLayout {
|
private fun findExpandableLayoutOf(button: CompoundButton): ExpandableRelativeLayout {
|
||||||
@@ -223,29 +279,36 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
|
|
||||||
private fun showDisposableTaskTimePicker() {
|
private fun showDisposableTaskTimePicker() {
|
||||||
val time = TIME_FORMATTER.parseLocalTime(mDisposableTaskTime.text.toString())
|
val time = TIME_FORMATTER.parseLocalTime(mDisposableTaskTime.text.toString())
|
||||||
TimePickerDialog(this, { _, hourOfDay, minute -> mDisposableTaskTime.text = TIME_FORMATTER.print(LocalTime(hourOfDay, minute)) }, time.hourOfDay, time.minuteOfHour, true)
|
MaterialTimePickerDialog.newInstance(
|
||||||
.show()
|
/* callback = */ { _, hourOfDay, minute, _ -> mDisposableTaskTime.text = TIME_FORMATTER.print(LocalTime(hourOfDay, minute)) },
|
||||||
|
/* hourOfDay = */ time.hourOfDay,
|
||||||
|
/* minute = */ time.minuteOfHour,
|
||||||
|
/* is24HourMode = */ true,
|
||||||
|
).apply {
|
||||||
|
version = MaterialTimePickerDialog.Version.VERSION_2
|
||||||
|
ThemeColorHelper.setThemeColorPrimary(this, this@TimedTaskSettingActivity, true)
|
||||||
|
isThemeDark = ViewUtils.isNightModeYes(this@TimedTaskSettingActivity)
|
||||||
|
}.show(supportFragmentManager, "TimedTaskTimePickerDialog")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showDisposableTaskDatePicker() {
|
private fun showDisposableTaskDatePicker() {
|
||||||
val date = DATE_FORMATTER.parseLocalDate(mDisposableTaskDate.text.toString())
|
val date = DATE_FORMATTER.parseLocalDate(mDisposableTaskDate.text.toString())
|
||||||
DatePickerDialog(
|
MaterialDatePickerDialog.newInstance(
|
||||||
this,
|
/* callBack = */ { _, year, month, dayOfMonth -> mDisposableTaskDate.text = DATE_FORMATTER.print(LocalDate(year, month + 1, dayOfMonth)) },
|
||||||
{ _, year, month, dayOfMonth -> mDisposableTaskDate.text = DATE_FORMATTER.print(LocalDate(year, month + 1, dayOfMonth)) },
|
/* year = */ date.year,
|
||||||
date.year,
|
/* monthOfYear = */ date.monthOfYear - 1,
|
||||||
date.monthOfYear - 1,
|
/* dayOfMonth = */ date.dayOfMonth,
|
||||||
date.dayOfMonth
|
).apply {
|
||||||
).show()
|
version = MaterialDatePickerDialog.Version.VERSION_2
|
||||||
|
ThemeColorHelper.setThemeColorPrimary(this, this@TimedTaskSettingActivity, true)
|
||||||
|
isThemeDark = ViewUtils.isNightModeYes(this@TimedTaskSettingActivity)
|
||||||
|
}.show(supportFragmentManager, "TimedTaskDatePickerDialog")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createTimedTask(): TimedTask? {
|
private fun createTimedTask(): TimedTask? = when {
|
||||||
return if (mDisposableTaskRadio.isChecked) {
|
mDisposableTaskRadio.isChecked -> createDisposableTask()
|
||||||
createDisposableTask()
|
mDailyTaskRadio.isChecked -> createDailyTask()
|
||||||
} else if (mDailyTaskRadio.isChecked) {
|
else -> createWeeklyTask()
|
||||||
createDailyTask()
|
|
||||||
} else {
|
|
||||||
createWeeklyTask()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createWeeklyTask(): TimedTask? {
|
private fun createWeeklyTask(): TimedTask? {
|
||||||
@@ -260,12 +323,12 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
val time = LocalTime(mWeeklyTaskTimePicker.hour, mWeeklyTaskTimePicker.minute)
|
val time = LocalTime(mWeeklyTaskTimePicker.hour, mWeeklyTaskTimePicker.minute)
|
||||||
return TimedTask.weeklyTask(time, timeFlag, mScriptFile!!.path, default)
|
return TimedTask.weeklyTask(time, timeFlag, mScriptFile.path, default)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createDailyTask(): TimedTask {
|
private fun createDailyTask(): TimedTask {
|
||||||
val time = LocalTime(mDailyTaskTimePicker.hour, mDailyTaskTimePicker.minute)
|
val time = LocalTime(mDailyTaskTimePicker.hour, mDailyTaskTimePicker.minute)
|
||||||
return TimedTask.dailyTask(time, mScriptFile!!.path, ExecutionConfig())
|
return TimedTask.dailyTask(time, mScriptFile.path, ExecutionConfig())
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createDisposableTask(): TimedTask? {
|
private fun createDisposableTask(): TimedTask? {
|
||||||
@@ -279,11 +342,12 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
showToast(this, R.string.text_disposable_task_time_before_now)
|
showToast(this, R.string.text_disposable_task_time_before_now)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
return TimedTask.disposableTask(dateTime, mScriptFile!!.path, default)
|
return TimedTask.disposableTask(dateTime, mScriptFile.path, default)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
menuInflater.inflate(R.menu.menu_timed_task_setting, menu)
|
menuInflater.inflate(R.menu.menu_timed_task_setting, menu)
|
||||||
|
mToolbar.setMenuIconsColorByThemeColorLuminance(this)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,17 +355,18 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
if (item.itemId == R.id.action_done) {
|
if (item.itemId == R.id.action_done) {
|
||||||
if ((getSystemService(POWER_SERVICE) as PowerManager).isIgnoringBatteryOptimizations(packageName)) {
|
if ((getSystemService(POWER_SERVICE) as PowerManager).isIgnoringBatteryOptimizations(packageName)) {
|
||||||
createOrUpdateTask()
|
createOrUpdateTask()
|
||||||
} else {
|
return true
|
||||||
try {
|
}
|
||||||
@SuppressLint("BatteryLife") val intent = Intent()
|
try {
|
||||||
.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
|
@SuppressLint("BatteryLife")
|
||||||
.setData(Uri.parse("package:$packageName"))
|
val intent = Intent()
|
||||||
@Suppress("DEPRECATION")
|
.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
|
||||||
startActivityForResult(intent, REQUEST_CODE_IGNORE_BATTERY)
|
.setData("package:$packageName".toUri())
|
||||||
} catch (e: ActivityNotFoundException) {
|
@Suppress("DEPRECATION")
|
||||||
e.printStackTrace()
|
startActivityForResult(intent, REQUEST_CODE_IGNORE_BATTERY)
|
||||||
createOrUpdateTask()
|
} catch (e: ActivityNotFoundException) {
|
||||||
}
|
e.printStackTrace()
|
||||||
|
createOrUpdateTask()
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -339,41 +404,46 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
private fun createOrUpdateIntentTask() {
|
private fun createOrUpdateIntentTask() {
|
||||||
val buttonId = mBroadcastGroup.checkedRadioButtonId
|
val buttonId = mBroadcastGroup.checkedRadioButtonId
|
||||||
if (buttonId == -1) {
|
if (buttonId == -1) {
|
||||||
showToast(this, R.string.error_empty_broadcast_selection)
|
showToast(this, R.string.error_empty_broadcast_selection, true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val action: String?
|
val actionString: String?
|
||||||
if (buttonId == R.id.run_on_other_broadcast) {
|
if (buttonId == R.id.run_on_custom_broadcast) {
|
||||||
action = mOtherBroadcastAction.text.toString()
|
actionString = mCustomBroadcastAction.text.toString()
|
||||||
if (action.isEmpty()) {
|
if (actionString.isEmpty()) {
|
||||||
mOtherBroadcastAction.error = getString(R.string.text_should_not_be_empty)
|
mCustomBroadcastAction.error = getString(R.string.text_should_not_be_empty)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
action = ACTIONS[buttonId]
|
actionString = ACTIONS[buttonId]
|
||||||
}
|
}
|
||||||
val task = IntentTask()
|
val task = IntentTask().apply {
|
||||||
task.action = action
|
action = actionString
|
||||||
task.scriptPath = mScriptFile!!.path
|
scriptPath = mScriptFile.path
|
||||||
task.isLocal = action != null && action == DynamicBroadcastReceivers.ACTION_STARTUP
|
isLocal = actionString == DynamicBroadcastReceivers.ACTION_STARTUP
|
||||||
if (mIntentTask != null) {
|
}
|
||||||
task.id = mIntentTask!!.id
|
when (val intentTask = mIntentTask) {
|
||||||
updateTask(task)
|
null -> {
|
||||||
showToast(this, R.string.text_already_created)
|
addTask(task)
|
||||||
} else {
|
mTimedTask?.let { removeTask(it) }
|
||||||
addTask(task)
|
}
|
||||||
if (mTimedTask != null) {
|
else -> {
|
||||||
removeTask(mTimedTask!!)
|
task.id = intentTask.id
|
||||||
|
updateTask(task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
showToast(this, R.string.text_already_created)
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
const val EXTRA_INTENT_TASK_ID = "intent_task_id"
|
const val EXTRA_INTENT_TASK_ID = "intent_task_id"
|
||||||
const val EXTRA_TASK_ID = TaskReceiver.EXTRA_TASK_ID
|
const val EXTRA_TASK_ID = TaskReceiver.EXTRA_TASK_ID
|
||||||
|
|
||||||
private val TIME_FORMATTER = DateTimeFormat.forPattern("HH:mm")
|
private val TIME_FORMATTER = DateTimeFormat.forPattern("HH:mm")
|
||||||
private val DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd")
|
private val DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd")
|
||||||
|
|
||||||
private const val REQUEST_CODE_IGNORE_BATTERY = 27101
|
private const val REQUEST_CODE_IGNORE_BATTERY = 27101
|
||||||
private const val LOG_TAG = "TimedTaskSettings"
|
private const val LOG_TAG = "TimedTaskSettings"
|
||||||
|
|
||||||
@@ -415,6 +485,7 @@ class TimedTaskSettingActivity : BaseActivity() {
|
|||||||
.put(R.id.run_on_config_change, Intent.ACTION_CONFIGURATION_CHANGED)
|
.put(R.id.run_on_config_change, Intent.ACTION_CONFIGURATION_CHANGED)
|
||||||
.put(R.id.run_on_time_tick, Intent.ACTION_TIME_TICK)
|
.put(R.id.run_on_time_tick, Intent.ACTION_TIME_TICK)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user