1, 昨天的成就:
a) 完成的任务:成功加入课程
b) 所花时间:10h
c) 还剩余1h
2, 遇到的困难:
a) 连接有时还是会出错
3, 今天的任务:可以设置开学时间
package com.mnnyang.gzuclassschedule.app;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import com.mnnyang.gzuclassschedule.R;
import com.mnnyang.gzuclassschedule.data.bean.Course;
import com.mnnyang.gzuclassschedule.data.bean.CsItem;
import com.mnnyang.gzuclassschedule.data.beanv2.CourseGroup;
import com.mnnyang.gzuclassschedule.data.beanv2.CourseV2;
import com.mnnyang.gzuclassschedule.data.db.CourseDbDao;
import com.mnnyang.gzuclassschedule.data.greendao.CourseGroupDao;
import com.mnnyang.gzuclassschedule.data.greendao.CourseV2Dao;
import com.mnnyang.gzuclassschedule.data.greendao.DaoMaster;
import com.mnnyang.gzuclassschedule.data.greendao.DaoSession;
import com.mnnyang.gzuclassschedule.data.greendao.MyOpenHelper;
import com.mnnyang.gzuclassschedule.utils.LogUtil;
import com.mnnyang.gzuclassschedule.utils.Preferences;
import com.mnnyang.gzuclassschedule.utils.TimeUtils;
import com.mnnyang.gzuclassschedule.widget.UpdateJobService;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.spec.RSAOtherPrimeInfo;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
import static android.content.Context.JOB_SCHEDULER_SERVICE;
/**
*
*/
public class AppUtils {
/**
* 生成UUID
*/
public static String createUUID() {
return UUID.randomUUID().toString().replace("-", "");
}
/**
* 获取当前周数
*/
public static int getCurrentWeek(Context context) {
int week = 1;
//获取开始时间
String beginMillis = Preferences.getString(context.getString(
R.string.app_preference_start_week_begin_millis), "");
//获取当前时间
long currentMillis = Calendar.getInstance().getTimeInMillis();
//存在开始时间
if (!TextUtils.isEmpty(beginMillis)) {
long intBeginMillis = Long.valueOf(beginMillis);
//获取到的配置是时间大于当前时间 重置为第一周
if (intBeginMillis > currentMillis) {
LogUtil.e("getCurrentWeek", "intBeginMillis > currentMillis");
PreferencesCurrentWeek(context, 1);
} else {
//计算出开始时间到现在时间的周数
int weekGap = TimeUtils.getWeekGap(intBeginMillis, currentMillis);
week += weekGap;
}
} else {
//不存在开始时间 初始化为第一周
PreferencesCurrentWeek(context, 1);
}
return week;
}
/**
* 更改当前周
*/
public static void PreferencesCurrentWeek(Context context, int currentWeekCount) {
//得到一个当前周 周一的日期
Calendar calendar = Calendar.getInstance();
Date weekBegin = TimeUtils.getNowWeekBegin();
calendar.setTime(weekBegin);
if (currentWeekCount > 1) {
calendar.add(Calendar.DATE, -7 * (currentWeekCount - 1));
}
LogUtil.e("PreferencesCurrentWeek", "preferences date" + (calendar.get(Calendar.MONTH) + 1)
+ "-" + calendar.get(Calendar.DAY_OF_MONTH));
Preferences.putString(context.getString(R.string.app_preference_start_week_begin_millis),
calendar.getTimeInMillis() + "");
}
/**
* 根据邮箱获取gravator头像
*/
public static String getGravatar(String email) {
String emailMd5 = AppUtils.md5Hex(email); //设置图片大小32px
String avatar = "http://www.gravatar.com/avatar/" + emailMd5 + "?s=128";
return avatar;
}
/**
* 更新widget组件
*/
public static void updateWidget(Context context) {
Intent intent = new Intent();
intent.setAction("com.mnnyang.action.UPDATE_WIDGET");
intent.setComponent(new ComponentName("com.mnnyang.gzuclassschedule", "com.mnnyang.gzuclassschedule.widget.MyWidget"));
context.sendBroadcast(intent);
}
public static int UPDATE_WIDGET_JOB_ID = 1;
/**
* 启动桌面小部件更新服务
*/
public static void startWidgetJobService(Context context) {
if (!isJobPollServiceOn(context)) {
LogUtil.i(AppUtils.class, "安排widget更新任务");
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE);
JobInfo.Builder builder = new JobInfo.Builder(UPDATE_WIDGET_JOB_ID,
new ComponentName(context, UpdateJobService.class));
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE);
builder.setRequiresCharging(true);
builder.setPeriodic(60 * 1000); //一小时更新一次
jobScheduler.schedule(builder.build());
} else {
LogUtil.i(AppUtils.class, "widget更新任务已经安排");
}
}
private static boolean isJobPollServiceOn(Context context) {
JobScheduler scheduler = (JobScheduler) context
.getSystemService(Context.JOB_SCHEDULER_SERVICE);
for (JobInfo jobInfo : scheduler.getAllPendingJobs()) {
if (jobInfo.getId() == UPDATE_WIDGET_JOB_ID) {
return true;
}
}
return false;
}
/**
* 取消widget更新任务
*/
public static void cancelUpdateWidgetService(Context context) {
LogUtil.e(AppUtils.class, "cancelUpdateWidgetService");
JobScheduler scheduler = (JobScheduler) context
.getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.cancel(UPDATE_WIDGET_JOB_ID);
}
private static String hex(byte[] array) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i]
& 0xFF) | 0x100).substring(1, 3));
}
return sb.toString();
}
private static String md5Hex(String message) {
try {
MessageDigest md =
MessageDigest.getInstance("MD5");
return hex(md.digest(message.getBytes("CP1252")));
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* 粗略判断邮箱
*/
public static boolean isEmail(String content) {
String pattern = "[a-zA-Z0-9._]+@[a-zA-Z0-9.]+\\.[a-zA-Z0-9.]+";
return Pattern.matches(pattern, content);
}
/**
* 复制旧数据的数据
*/
public static void copyOldData(Context context) {
migrateData(context);
}
/**
* 迁移旧数据
*/
private static void migrateData(Context context) {
MyOpenHelper myOpenHelper = new MyOpenHelper(
context, "coursev2.db", null);
DaoMaster daoMaster = new DaoMaster(myOpenHelper.getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
CourseGroupDao courseGroupDao =
daoSession.getCourseGroupDao();
CourseV2Dao courseV2Dao = daoSession.getCourseV2Dao();
ArrayList<CsItem> csItems = CourseDbDao.instance().loadCsNameList();
for (CsItem csItem : csItems) {
ArrayList<Course> courses = CourseDbDao.instance().loadCourses(csItem.getCsName().getCsNameId());
CourseGroup group = new CourseGroup();
group.setCgName(csItem.getCsName().getName());
long insert1 = courseGroupDao.insert(group);
for (Course course : courses) {
if (course.getNodes() == null || course.getNodes().size() == 0 || course.getEndWeek() == 0) {
continue;
}
CourseV2 courseV2 = new CourseV2().setCouOnlyId(AppUtils.createUUID());
courseV2.setCouName(course.getName());
courseV2.setCouTeacher(course.getTeacher());
courseV2.setCouLocation(course.getClassRoom());
//node
courseV2.setCouStartNode(course.getNodes().get(0));
courseV2.setCouNodeCount(course.getNodes().size());
//day
courseV2.setCouWeek(course.getWeek());
//week
String couAllWeek = getAllWeek(course);
if (couAllWeek.length() > 0) {
couAllWeek = couAllWeek.substring(0, couAllWeek.length() - 1);
}
courseV2.setCouAllWeek(couAllWeek);
courseV2.setCouCgId(insert1);
courseV2Dao.insert(courseV2);
}
}
}
@NonNull
private static String getAllWeek(Course course) {
int startWeek = course.getStartWeek();
int endWeek = course.getEndWeek();
int weekType = course.getWeekType();
int step = 1;
if (weekType != 0) {
step = 2;
if (weekType == Course.SHOW_DOUBLE && startWeek % 2 == 1) {
startWeek += 1;
} else if (weekType == Course.SHOW_SINGLE && startWeek % 2 == 0) {
startWeek += 1;
}
}
StringBuilder allWeek = new StringBuilder();
for (int i = startWeek; i <= endWeek; i += step) {
allWeek.append(i);
allWeek.append(",");
}
return allWeek.toString();
}
}
浙公网安备 33010602011771号