|
|
@@ -2,22 +2,28 @@ package com.xzjmyk.pm.activity.ui.erp.activity.oa;
|
|
|
|
|
|
import android.app.AlarmManager;
|
|
|
import android.app.PendingIntent;
|
|
|
-import android.app.TimePickerDialog;
|
|
|
+import android.content.DialogInterface;
|
|
|
import android.content.Intent;
|
|
|
import android.os.Bundle;
|
|
|
+import android.support.v7.app.AlertDialog;
|
|
|
+import android.util.Log;
|
|
|
import android.view.View;
|
|
|
import android.widget.TextView;
|
|
|
-import android.widget.TimePicker;
|
|
|
|
|
|
import com.lidroid.xutils.ViewUtils;
|
|
|
import com.lidroid.xutils.view.annotation.ViewInject;
|
|
|
import com.xzjmyk.pm.activity.R;
|
|
|
+import com.xzjmyk.pm.activity.bean.oa.Signin;
|
|
|
+import com.xzjmyk.pm.activity.db.dao.SigninDao;
|
|
|
import com.xzjmyk.pm.activity.ui.base.BaseActivity;
|
|
|
import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
|
|
|
import com.xzjmyk.pm.activity.ui.erp.view.SwitchView;
|
|
|
import com.xzjmyk.pm.activity.util.TimeUtils;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Calendar;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
//签到提醒
|
|
|
public class AlarmaActivity extends BaseActivity implements View.OnClickListener {
|
|
|
@@ -30,14 +36,10 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
|
|
|
|
|
|
private boolean isClick;//判断是否为提醒
|
|
|
private AlarmaActivity ct;
|
|
|
- private String uDateTime;
|
|
|
- private String dDateTime;
|
|
|
-
|
|
|
|
|
|
private static String ALARMA_CLICK = "ALARMA_CLICK";//判断是否选中
|
|
|
- public static String KEY_ALAR_ACTION = "KEY_ALAR_ACTION";//发送上班
|
|
|
- public static String KEY_NEXT_ALAR = "KEY_NEXT_ALAR";//下次打卡时间
|
|
|
|
|
|
+ public static String KEY_ALAR_ACTION = "KEY_ALAR_ACTION";//发送上班
|
|
|
public static String KEY_UALAR_ACTION = "KEY_UALAR_ACTION";//发送下班提醒
|
|
|
public static String KEY_ALAR_TIME = "KEY_ALAR_TIME";
|
|
|
public static String KEY_UALAR_TIME = "KEY_UALAR_TIME";
|
|
|
@@ -52,23 +54,24 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
|
|
|
}
|
|
|
|
|
|
private void initView() {
|
|
|
+ getDataByDB();
|
|
|
//初始化界面显示时间
|
|
|
tv_alar.setOnClickListener(this);
|
|
|
tv_ualar.setOnClickListener(this);
|
|
|
isClick = CommonUtil.getSharedPreferencesBoolean(ct, ALARMA_CLICK, false);
|
|
|
isalarma_sw.setChecked(isClick);
|
|
|
- uDateTime = CommonUtil.getSharedPreferences(ct, KEY_ALAR_TIME);
|
|
|
- dDateTime = CommonUtil.getSharedPreferences(ct, KEY_UALAR_TIME);
|
|
|
+ String uDateTime = CommonUtil.getSharedPreferences(ct, KEY_ALAR_TIME);
|
|
|
+ String dDateTime = CommonUtil.getSharedPreferences(ct, KEY_UALAR_TIME);
|
|
|
if (uDateTime == null) {
|
|
|
- uDateTime = getTimeFormat(8, 30);
|
|
|
+ uDateTime = "提前5分钟";
|
|
|
+ CommonUtil.setSharedPreferences(ct, KEY_ALAR_TIME, uDateTime);
|
|
|
}
|
|
|
if (dDateTime == null) {
|
|
|
- dDateTime = getTimeFormat(18, 0);
|
|
|
+ dDateTime = "延后5分钟";
|
|
|
+ CommonUtil.setSharedPreferences(ct, KEY_ALAR_TIME, dDateTime);
|
|
|
}
|
|
|
- int[] u = getHourAndM(uDateTime);
|
|
|
- int[] d = getHourAndM(dDateTime);
|
|
|
- tv_alar.setText((u[0] < 10 ? "0" : "") + u[0] + ":" + (u[1] < 10 ? "0" : "") + u[1]);
|
|
|
- tv_ualar.setText((d[0] < 10 ? "0" : "") + d[0] + ":" + (d[1] < 10 ? "0" : "") + d[1]);
|
|
|
+ tv_alar.setText(uDateTime);
|
|
|
+ tv_ualar.setText(dDateTime);
|
|
|
if (isClick) {
|
|
|
startThread(isClick);
|
|
|
}
|
|
|
@@ -96,34 +99,77 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
|
|
|
}).start();
|
|
|
}
|
|
|
|
|
|
+ //获取打卡时间从数据库
|
|
|
+ private void getDataByDB() {
|
|
|
+ ArrayList<Signin> signins = SigninDao.getInstance(ct).query();
|
|
|
+ for (Signin e : signins) {
|
|
|
+ Log.i("gongpengming", "e.getCode()=" + e.getCode() == null ? "空的" : e.getCode());
|
|
|
+ Log.i("gongpengming", "e.getUtime()=" + e.getUtime() == null ? "空的" : e.getUtime());
|
|
|
+ Log.i("gongpengming", "e.getDtime()=" + e.getDtime() == null ? "空的" : e.getDtime());
|
|
|
+ Log.i("gongpengming", "e.getUsigmin()=" + e.getUsigmin() == null ? "空的" : e.getUsigmin());
|
|
|
+ Log.i("gongpengming", "e.getDsigmin()=" + e.getDsigmin() == null ? "空的" : e.getDsigmin());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//初始化提醒
|
|
|
private void initArmmanager() {
|
|
|
- //先判断两个(上下班)的提醒那个距离当前时间最近
|
|
|
- //将上下班时间设置为今天时间
|
|
|
- int[] u = getHourAndM(uDateTime);
|
|
|
- int[] d = getHourAndM(dDateTime);
|
|
|
- uDateTime = getTimeFormat(u[0], u[1]);
|
|
|
- dDateTime = getTimeFormat(d[0], d[1]);
|
|
|
- //比较两个时间大小
|
|
|
- long uLong = TimeUtils.f_str_2_long(uDateTime);
|
|
|
- long dLong = TimeUtils.f_str_2_long(dDateTime);
|
|
|
- long newLong = System.currentTimeMillis();
|
|
|
- long dayLong = 1000 * 60 * 60 * 24;//一天的毫秒量
|
|
|
+ //1.获取打卡时间
|
|
|
+ ArrayList<Signin> signins = SigninDao.getInstance(ct).query();
|
|
|
+ if (signins == null) return;
|
|
|
+ //判断最近的时间是哪个
|
|
|
+ //获取提前和往后提醒时间
|
|
|
+ int uTime = getMin(CommonUtil.getSharedPreferences(ct, KEY_ALAR_TIME));
|
|
|
+ int dTime = getMin(CommonUtil.getSharedPreferences(ct, KEY_UALAR_TIME));
|
|
|
+ long utime = System.currentTimeMillis();
|
|
|
+ long dtime = System.currentTimeMillis();
|
|
|
+ if (uTime != 0) {
|
|
|
+ utime = System.currentTimeMillis() - (uTime * 60 * 1000);
|
|
|
+ }
|
|
|
+ if (dTime != 0) {
|
|
|
+ dtime = System.currentTimeMillis() + (dTime * 60 * 1000);
|
|
|
+ }
|
|
|
Calendar c = Calendar.getInstance();
|
|
|
+
|
|
|
+ long chche = 0;//时间毫秒数
|
|
|
+ boolean isOk = false;
|
|
|
boolean isAlar = false;
|
|
|
- if (uLong > newLong) {//还没到上班打卡提醒时间
|
|
|
- isAlar = true;
|
|
|
- c.setTimeInMillis(uLong);
|
|
|
- } else if (dLong > newLong) {//过了上班提醒时间,但是没过下班提醒时间
|
|
|
- isAlar = false;
|
|
|
- c.setTimeInMillis(dLong);
|
|
|
- } else if (dLong < newLong) {//今天的提醒时间已经过了
|
|
|
- isAlar = false;
|
|
|
- c.setTimeInMillis(uLong + dayLong);
|
|
|
+ for (Signin e : signins) {
|
|
|
+ if (e.getUtime() != null && e.getUtime().length() > 0)
|
|
|
+ chche = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + e.getUtime() + ":00");
|
|
|
+ if (chche > utime) {//当前时间大于选定的班次的上班时间
|
|
|
+ isAlar = isOk = true;
|
|
|
+ //TODO
|
|
|
+ c.setTimeInMillis(chche);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (e.getDtime() != null && e.getDtime().length() > 0)
|
|
|
+ chche = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + e.getUtime() + ":00");
|
|
|
+ if (chche > dtime) {//当前时间大于选定的班次的下班时间
|
|
|
+ isOk = true;
|
|
|
+ isAlar = false;
|
|
|
+ //TODO
|
|
|
+ c.setTimeInMillis(chche);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!isOk) {//在班次时间内
|
|
|
+ chche = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + signins.get(0).getUtime() + ":00");
|
|
|
+ chche += 24 * 60 * 60 * 1000;
|
|
|
+ c.setTimeInMillis(chche);
|
|
|
}
|
|
|
setArmmanager(c, isAlar);
|
|
|
}
|
|
|
|
|
|
+ private int getMin(String chche) {
|
|
|
+ if (chche == null || chche.length() <= 0) return 0;
|
|
|
+ Pattern p = Pattern.compile("(\\d+)");
|
|
|
+ Matcher m = p.matcher(chche);
|
|
|
+ if (m.find()) {
|
|
|
+ return Integer.parseInt(m.group(0));
|
|
|
+ }
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
private void setArmmanager(Calendar calendar, boolean isAlar) {
|
|
|
//操作:发送一个广播,广播接收后Toast提示定时操作完成
|
|
|
Intent intent = new Intent(AlarmaActivity.this, AlarmReceiver.class);
|
|
|
@@ -153,63 +199,52 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
|
|
|
alarm.cancel(pi);
|
|
|
}
|
|
|
|
|
|
- private int[] getHourAndM(String temp) {
|
|
|
- int[] time = new int[2];
|
|
|
- Calendar c = Calendar.getInstance();
|
|
|
- c.setTimeInMillis(TimeUtils.f_str_2_long(temp));
|
|
|
- time[0] = c.get(Calendar.HOUR_OF_DAY);
|
|
|
- time[1] = c.get(Calendar.MINUTE);
|
|
|
- return time;
|
|
|
- }
|
|
|
-
|
|
|
- private String getTimeFormat(int hh, int mm) {
|
|
|
- String h = (hh < 10 ? "0" : "") + hh;
|
|
|
- String m = (mm < 10 ? "0" : "") + mm;
|
|
|
- String temp = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + h + ":" + m + ":" + "00";
|
|
|
- return temp;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 显示时间选择器
|
|
|
- *
|
|
|
- * @param tv 修改显示的Textview
|
|
|
- * @param isAlar 是否是上班提醒
|
|
|
- */
|
|
|
- private void showSelectDalog(final TextView tv, final boolean isAlar) {
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
|
|
- int minute = calendar.get(Calendar.MINUTE);
|
|
|
- TimePickerDialog dialog = new TimePickerDialog(AlarmaActivity.this, new TimePickerDialog.OnTimeSetListener() {
|
|
|
+ private void showSelectDalog(final TextView tv, final boolean isU) {
|
|
|
+ /*
|
|
|
+ 上班时间设置,弹出框:提前1分钟,提前2分钟,提前5分钟,提前10分钟,提前20分钟,提前30分钟
|
|
|
+ 下班时间设置,弹出款:延迟1分钟,延迟2分钟,延迟5分钟,延迟10分钟,延迟20分钟,延迟30分钟
|
|
|
+ */
|
|
|
+ final String[] str = new String[6];
|
|
|
+ if (isU) {
|
|
|
+ str[0] = "提前1分钟";
|
|
|
+ str[1] = "提前2分钟";
|
|
|
+ str[2] = "提前5分钟";
|
|
|
+ str[3] = "提前10分钟";
|
|
|
+ str[4] = "提前20分钟";
|
|
|
+ str[5] = "提前30分钟";
|
|
|
+ } else {
|
|
|
+ str[0] = "延迟1分钟";
|
|
|
+ str[1] = "延迟2分钟";
|
|
|
+ str[2] = "延迟5分钟";
|
|
|
+ str[3] = "延迟10分钟";
|
|
|
+ str[4] = "延迟20分钟";
|
|
|
+ str[5] = "延迟30分钟";
|
|
|
+ }
|
|
|
+ AlertDialog.Builder builder = new AlertDialog.Builder(ct);
|
|
|
+ builder.setTitle("选择时间");
|
|
|
+ builder.setItems(str, new DialogInterface.OnClickListener() {
|
|
|
@Override
|
|
|
- public void onTimeSet(TimePicker timePicker, int hh, int mm) {
|
|
|
- String temp;
|
|
|
- if (isAlar) {
|
|
|
- //上班提醒
|
|
|
- uDateTime = getTimeFormat(hh, mm);
|
|
|
- CommonUtil.setSharedPreferences(ct, KEY_ALAR_TIME, uDateTime);//保存上班签到的
|
|
|
- temp = uDateTime;
|
|
|
+ public void onClick(DialogInterface dialogInterface, int i) {
|
|
|
+ tv.setText(str[i]);
|
|
|
+ if (isU) {
|
|
|
+ CommonUtil.setSharedPreferences(ct, KEY_ALAR_TIME, str[i]);//保存上班签到的
|
|
|
} else {
|
|
|
- dDateTime = getTimeFormat(hh, mm);
|
|
|
- CommonUtil.setSharedPreferences(ct, KEY_UALAR_TIME, dDateTime);//保存下班签到的时间
|
|
|
- temp = dDateTime;
|
|
|
+ CommonUtil.setSharedPreferences(ct, KEY_UALAR_TIME, str[i]);//保存下班班签到的
|
|
|
+
|
|
|
}
|
|
|
- int[] u = getHourAndM(temp);
|
|
|
- tv.setText((u[0] < 10 ? "0" : "") + u[0] + ":" + (u[1] < 10 ? "0" : "") + u[1]);
|
|
|
- startThread(CommonUtil.getSharedPreferencesBoolean(ct, ALARMA_CLICK));
|
|
|
}
|
|
|
-
|
|
|
- }, hour, minute, true);
|
|
|
- dialog.show();
|
|
|
+ });
|
|
|
+ builder.show();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void onClick(View view) {
|
|
|
switch (view.getId()) {
|
|
|
case R.id.tv_ualar:
|
|
|
- showSelectDalog(tv_alar, true);
|
|
|
+ showSelectDalog(tv_ualar, true);
|
|
|
break;
|
|
|
case R.id.tv_alar:
|
|
|
- showSelectDalog(tv_ualar, false);
|
|
|
+ showSelectDalog(tv_alar, false);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
@@ -218,9 +253,7 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
|
|
|
protected void onDestroy() {
|
|
|
super.onDestroy();
|
|
|
//退出时候保存时间到本地
|
|
|
- String ti = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + tv_alar.getText().toString().trim() + ":00";
|
|
|
- String me = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + tv_ualar.getText().toString().trim() + ":00";
|
|
|
- CommonUtil.setSharedPreferences(ct, KEY_ALAR_TIME, ti);//保存上班签到的
|
|
|
- CommonUtil.setSharedPreferences(ct, KEY_UALAR_TIME, me);//保存下班签到的时间
|
|
|
+ CommonUtil.setSharedPreferences(ct, KEY_ALAR_TIME, tv_alar.getText().toString().trim());//保存上班签到的
|
|
|
+ CommonUtil.setSharedPreferences(ct, KEY_UALAR_TIME, tv_ualar.getText().toString().trim());//保存下班签到的时间
|
|
|
}
|
|
|
}
|