第二阶段冲刺第七天

Posted on 2019-06-11 20:21  咳咳你  阅读(117)  评论(0编辑  收藏  举报

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();
    }
}