mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
add: support for weekly task
This commit is contained in:
parent
97382965da
commit
0d8f96eff7
@ -8,8 +8,8 @@ android {
|
||||
applicationId "com.stardust.scriptdroid"
|
||||
minSdkVersion 17
|
||||
targetSdkVersion 23
|
||||
versionCode 223
|
||||
versionName "3.0.0 Alpha23"
|
||||
versionCode 224
|
||||
versionName "3.0.0 Alpha24"
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
multiDexEnabled true
|
||||
ndk {
|
||||
|
||||
@ -11,6 +11,8 @@ import com.stardust.autojs.execution.ExecutionConfig;
|
||||
import com.stardust.scriptdroid.external.ScriptIntents;
|
||||
import com.stardust.scriptdroid.storage.database.TimedTaskDatabase;
|
||||
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.DateTimeConstants;
|
||||
import org.joda.time.LocalDateTime;
|
||||
import org.joda.time.LocalTime;
|
||||
|
||||
@ -63,7 +65,7 @@ public class TimedTask {
|
||||
|
||||
}
|
||||
|
||||
public TimedTask(long millis, int timeFlag, String scriptPath, ExecutionConfig config) {
|
||||
public TimedTask(long millis, long timeFlag, String scriptPath, ExecutionConfig config) {
|
||||
mMillis = millis;
|
||||
mTimeFlag = timeFlag;
|
||||
mScriptPath = scriptPath;
|
||||
@ -88,13 +90,58 @@ public class TimedTask {
|
||||
if (isDisposable()) {
|
||||
return mMillis;
|
||||
}
|
||||
// TODO: 2017/11/28 day of week
|
||||
LocalTime time = LocalTime.fromMillisOfDay(mMillis);
|
||||
long nextTimeMillis = time.toDateTimeToday().getMillis();
|
||||
if (System.currentTimeMillis() > nextTimeMillis) {
|
||||
return nextTimeMillis + TimeUnit.DAYS.toMillis(1);
|
||||
if (isDaily()) {
|
||||
LocalTime time = LocalTime.fromMillisOfDay(mMillis);
|
||||
long nextTimeMillis = time.toDateTimeToday().getMillis();
|
||||
if (System.currentTimeMillis() > nextTimeMillis) {
|
||||
return nextTimeMillis + TimeUnit.DAYS.toMillis(1);
|
||||
}
|
||||
return nextTimeMillis;
|
||||
}
|
||||
return nextTimeMillis;
|
||||
return getNextTimeOfWeeklyTask();
|
||||
|
||||
}
|
||||
|
||||
private long getNextTimeOfWeeklyTask() {
|
||||
int dayOfWeek = DateTime.now().getDayOfWeek();
|
||||
long nextTimeMillis = LocalTime.fromMillisOfDay(mMillis).toDateTimeToday().getMillis();
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if ((getDayOfWeekTimeFlag(dayOfWeek) & mTimeFlag) != 0) {
|
||||
if (System.currentTimeMillis() <= nextTimeMillis) {
|
||||
return nextTimeMillis;
|
||||
}
|
||||
}
|
||||
dayOfWeek++;
|
||||
nextTimeMillis += TimeUnit.DAYS.toMillis(1);
|
||||
}
|
||||
throw new IllegalStateException("Should not happen! timeFlag = " + mTimeFlag + ", dayOfWeek = " + DateTime.now().getDayOfWeek());
|
||||
}
|
||||
|
||||
public static long getDayOfWeekTimeFlag(int dayOfWeek) {
|
||||
dayOfWeek = (dayOfWeek - 1) % 7 + 1;
|
||||
switch (dayOfWeek) {
|
||||
case DateTimeConstants.SUNDAY:
|
||||
return FLAG_SUNDAY;
|
||||
|
||||
case DateTimeConstants.MONDAY:
|
||||
return FLAG_MONDAY;
|
||||
|
||||
case DateTimeConstants.SATURDAY:
|
||||
return FLAG_SATURDAY;
|
||||
|
||||
case DateTimeConstants.WEDNESDAY:
|
||||
return FLAG_WEDNESDAY;
|
||||
|
||||
case DateTimeConstants.TUESDAY:
|
||||
return FLAG_TUESDAY;
|
||||
|
||||
case DateTimeConstants.THURSDAY:
|
||||
return FLAG_THURSDAY;
|
||||
case DateTimeConstants.FRIDAY:
|
||||
return FLAG_FRIDAY;
|
||||
|
||||
}
|
||||
throw new IllegalArgumentException("dayOfWeek = " + dayOfWeek);
|
||||
}
|
||||
|
||||
public long getMillis() {
|
||||
@ -210,4 +257,11 @@ public class TimedTask {
|
||||
return new TimedTask(dateTime.toDateTime().getMillis(), FLAG_DISPOSABLE, scriptPath, config);
|
||||
}
|
||||
|
||||
public static TimedTask weeklyTask(LocalTime time, long timeFlag, String scriptPath, ExecutionConfig config) {
|
||||
return new TimedTask(time.getMillisOfDay(), timeFlag, scriptPath, config);
|
||||
}
|
||||
|
||||
public boolean hasDayOfWeek(int dayOfWeek) {
|
||||
return (mTimeFlag & getDayOfWeekTimeFlag(dayOfWeek)) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,8 +9,11 @@ import android.support.v7.widget.Toolbar;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.TextView;
|
||||
@ -38,6 +41,9 @@ import org.joda.time.LocalTime;
|
||||
import org.joda.time.format.DateTimeFormat;
|
||||
import org.joda.time.format.DateTimeFormatter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/11/28.
|
||||
*/
|
||||
@ -73,7 +79,13 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
TimePicker mDailyTaskTimePicker;
|
||||
|
||||
@ViewById(R.id.weekly_task_time_picker)
|
||||
TimePicker mWWeeklyTaskTimePicker;
|
||||
TimePicker mWeeklyTaskTimePicker;
|
||||
|
||||
@ViewById(R.id.weekly_task_container)
|
||||
LinearLayout mWeeklyTaskContainer;
|
||||
|
||||
private List<CheckBox> mDayOfWeekCheckBoxes = new ArrayList<>();
|
||||
|
||||
|
||||
private ScriptFile mScriptFile;
|
||||
private TimedTask mTimedTask;
|
||||
@ -103,9 +115,24 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
mToolbar.setSubtitle(mScriptFile.getName());
|
||||
}
|
||||
findDayOfWeekCheckBoxes(mWeeklyTaskContainer);
|
||||
setUpTime();
|
||||
}
|
||||
|
||||
private void findDayOfWeekCheckBoxes(ViewGroup parent) {
|
||||
for (int i = 0; i < parent.getChildCount(); i++) {
|
||||
View child = parent.getChildAt(i);
|
||||
if (child instanceof CheckBox) {
|
||||
mDayOfWeekCheckBoxes.add((CheckBox) child);
|
||||
} else if (child instanceof ViewGroup) {
|
||||
findDayOfWeekCheckBoxes((ViewGroup) child);
|
||||
}
|
||||
if (mDayOfWeekCheckBoxes.size() >= 7)
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void setUpTime() {
|
||||
mDisposableTaskDate.setText(DATE_FORMATTER.print(LocalDate.now()));
|
||||
mDisposableTaskTime.setText(TIME_FORMATTER.print(LocalTime.now()));
|
||||
@ -119,14 +146,18 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
mDisposableTaskDate.setText(DATE_FORMATTER.print(mTimedTask.getMillis()));
|
||||
return;
|
||||
}
|
||||
LocalTime time = LocalTime.fromMillisOfDay(mTimedTask.getMillis());
|
||||
mDailyTaskTimePicker.setCurrentHour(time.getHourOfDay());
|
||||
mDailyTaskTimePicker.setCurrentMinute(time.getMinuteOfHour());
|
||||
if (mTimedTask.isDaily()) {
|
||||
mDailyTaskRadio.setChecked(true);
|
||||
LocalTime time = LocalTime.fromMillisOfDay(mTimedTask.getMillis());
|
||||
mDailyTaskTimePicker.setCurrentHour(time.getHourOfDay());
|
||||
mDailyTaskTimePicker.setCurrentMinute(time.getMinuteOfHour());
|
||||
return;
|
||||
} else {
|
||||
mWeeklyTaskRadio.setChecked(true);
|
||||
for (int i = 0; i < mDayOfWeekCheckBoxes.size(); i++) {
|
||||
mDayOfWeekCheckBoxes.get(i).setChecked(mTimedTask.hasDayOfWeek(i + 1));
|
||||
}
|
||||
}
|
||||
// TODO: 2017/11/28 Weekly
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -180,8 +211,18 @@ public class TimedTaskSettingActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
private TimedTask createWeeklyTask() {
|
||||
// TODO: 2017/11/28 Weekly
|
||||
return null;
|
||||
long timeFlag = 0;
|
||||
for (int i = 0; i < mDayOfWeekCheckBoxes.size(); i++) {
|
||||
if (mDayOfWeekCheckBoxes.get(i).isChecked()) {
|
||||
timeFlag |= TimedTask.getDayOfWeekTimeFlag(i + 1);
|
||||
}
|
||||
}
|
||||
if (timeFlag == 0) {
|
||||
Toast.makeText(this, R.string.text_weekly_task_should_check_day_of_week, Toast.LENGTH_SHORT).show();
|
||||
return null;
|
||||
}
|
||||
LocalTime time = new LocalTime(mDailyTaskTimePicker.getCurrentHour(), mDailyTaskTimePicker.getCurrentMinute());
|
||||
return TimedTask.weeklyTask(time, timeFlag, mScriptFile.getPath(), ExecutionConfig.getDefault());
|
||||
}
|
||||
|
||||
private TimedTask createDailyTask() {
|
||||
|
||||
@ -174,11 +174,81 @@
|
||||
app:ael_interpolator="fastOutSlowIn"
|
||||
app:ael_orientation="vertical">
|
||||
|
||||
<TimePicker
|
||||
android:id="@+id/weekly_task_time_picker"
|
||||
<LinearLayout
|
||||
android:id="@+id/weekly_task_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:timePickerMode="spinner"/>
|
||||
android:orientation="vertical">
|
||||
|
||||
<TimePicker
|
||||
android:id="@+id/weekly_task_time_picker"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:timePickerMode="spinner"/>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="25dp"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="4">
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/text_day1"/>
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/text_day2"/>
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/text_day3"/>
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/text_day4"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="25dp"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="4">
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/text_day5"/>
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/text_day6"/>
|
||||
|
||||
<CheckBox
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/text_day7"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</com.github.aakira.expandablelayout.ExpandableRelativeLayout>
|
||||
|
||||
|
||||
@ -322,4 +322,12 @@
|
||||
<string name="text_timing">定时</string>
|
||||
<string name="text_disposable_task_time_before_now">任务时间小于当前时间</string>
|
||||
<string name="text_next_run_time">下次运行</string>
|
||||
<string name="text_day1">一</string>
|
||||
<string name="text_day2">二</string>
|
||||
<string name="text_day3">三</string>
|
||||
<string name="text_day4">四</string>
|
||||
<string name="text_day5">五</string>
|
||||
<string name="text_day6">六</string>
|
||||
<string name="text_day7">日</string>
|
||||
<string name="text_weekly_task_should_check_day_of_week">至少选择一周中的一天</string>
|
||||
</resources>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user