From 8e50ab0d34ca778e2775676cc26de73a3805b2be Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Wed, 20 Jul 2022 20:01:32 +0800 Subject: [PATCH 01/20] =?UTF-8?q?perf:=E9=83=A8=E5=88=86=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8C=96=E6=94=B9=E4=B8=BAjson=E6=A0=BC=E5=BC=8F=20perf:?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 + .../main/java/top/yvyan/guettable/MyApp.java | 3 + .../guettable/activity/AddCourseActivity.java | 7 +- .../guettable/activity/LoginActivity.java | 4 +- .../guettable/activity/SetTermActivity.java | 17 +- .../guettable/adapter/ClassDetailAdapter.java | 2 +- .../yvyan/guettable/baseFun/FirstLoad.java | 5 +- .../top/yvyan/guettable/data/BaseData.java | 31 ++ .../top/yvyan/guettable/data/MoreData.java | 120 ++++++ .../top/yvyan/guettable/data/MoreDate.java | 352 ------------------ .../yvyan/guettable/data/ScheduleData.java | 309 +++++---------- .../fragment/CourseTableFragment.java | 24 +- .../guettable/fragment/DayClassFragment.java | 22 +- .../yvyan/guettable/moreFun/CETActivity.java | 12 +- .../yvyan/guettable/moreFun/ExamActivity.java | 10 +- .../guettable/moreFun/ExamScoreActivity.java | 10 +- .../moreFun/ExperimentScoreActivity.java | 10 +- .../guettable/moreFun/GradesActivity.java | 9 +- .../yvyan/guettable/moreFun/LibActivity.java | 8 +- .../moreFun/PlannedCoursesActivity.java | 10 +- .../guettable/moreFun/ResitActivity.java | 12 +- .../moreFun/SelectedCourseActivity.java | 12 +- .../yvyan/guettable/service/AutoUpdate.java | 14 +- .../yvyan/guettable/widget/WidgetService.java | 12 +- .../widget/WidgetServiceFactory.java | 14 +- build.gradle | 14 +- 26 files changed, 339 insertions(+), 706 deletions(-) create mode 100644 app/src/main/java/top/yvyan/guettable/data/BaseData.java create mode 100644 app/src/main/java/top/yvyan/guettable/data/MoreData.java delete mode 100644 app/src/main/java/top/yvyan/guettable/data/MoreDate.java diff --git a/app/build.gradle b/app/build.gradle index 339a04b..b259694 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,4 +70,6 @@ dependencies { //update implementation 'com.tencent.bugly:crashreport_upgrade:1.5.1' implementation 'com.tencent.bugly:nativecrashreport:3.9.1' + //键值对存储 + implementation 'com.tencent:mmkv:1.2.13' } \ No newline at end of file diff --git a/app/src/main/java/top/yvyan/guettable/MyApp.java b/app/src/main/java/top/yvyan/guettable/MyApp.java index 0c1687c..05ec3a6 100644 --- a/app/src/main/java/top/yvyan/guettable/MyApp.java +++ b/app/src/main/java/top/yvyan/guettable/MyApp.java @@ -2,6 +2,7 @@ package top.yvyan.guettable; import android.app.Application; +import com.tencent.mmkv.MMKV; import com.xuexiang.xui.XUI; public class MyApp extends Application { @@ -21,6 +22,8 @@ public class MyApp extends Application { private void init() { XUI.init(this); //初始化UI框架 XUI.debug(true); //开启UI框架调试日志 + + MMKV.initialize(this); //MMKV初始化 } } diff --git a/app/src/main/java/top/yvyan/guettable/activity/AddCourseActivity.java b/app/src/main/java/top/yvyan/guettable/activity/AddCourseActivity.java index 84732a3..c2d58e4 100644 --- a/app/src/main/java/top/yvyan/guettable/activity/AddCourseActivity.java +++ b/app/src/main/java/top/yvyan/guettable/activity/AddCourseActivity.java @@ -183,8 +183,7 @@ public class AddCourseActivity extends AppCompatActivity { if (courseName.isEmpty()) { ToastUtil.showToast(getApplicationContext(), "课程名称不能为空!"); } else { - ScheduleData scheduleData = ScheduleData.newInstance(getApplicationContext()); - List courseBeans = scheduleData.getUserCourseBeans(); + List courseBeans = ScheduleData.getUserCourseBeans(); CourseBean courseBean = new CourseBean(); courseBean.userAdd( (courseNumberEditText.getText().toString().isEmpty() ? null : courseNumberEditText.getText().toString()), @@ -196,7 +195,7 @@ public class AddCourseActivity extends AppCompatActivity { (courseStartSeekBar.getProgress() == 0 ? 7 : courseStartSeekBar.getProgress()), (courseTeacherEditText.getText().toString().isEmpty() ? null : courseTeacherEditText.getText().toString()), (courseCommEditText.getText().toString().isEmpty() ? null : courseCommEditText.getText().toString()), - scheduleData.getUserCourseNo() + ScheduleData.getUserCourseNo() ); try { courseBeans.add(courseBean); @@ -204,7 +203,7 @@ public class AddCourseActivity extends AppCompatActivity { e.printStackTrace(); } - scheduleData.setUserCourseBeans(courseBeans); + ScheduleData.setUserCourseBeans(courseBeans); WidgetUtil.notifyWidgetUpdate(this); ToastUtil.showToast(getApplicationContext(), "添加成功!"); diff --git a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java index a30f143..9fdb00f 100644 --- a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java +++ b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java @@ -31,7 +31,7 @@ import top.yvyan.guettable.R; import top.yvyan.guettable.bean.TermBean; import top.yvyan.guettable.data.AccountData; import top.yvyan.guettable.data.GeneralData; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.data.TokenData; import top.yvyan.guettable.service.fetch.Net; import top.yvyan.guettable.service.fetch.StaticService; @@ -406,7 +406,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { if (!generalData.isInternational()) { List allTerm = StaticService.getTerms(this, tokenData.getCookie()); if (allTerm != null) { - MoreDate.newInstance(this).setTermBeans(allTerm); + MoreData.setTermBeans(allTerm); } } } catch (Exception e) { diff --git a/app/src/main/java/top/yvyan/guettable/activity/SetTermActivity.java b/app/src/main/java/top/yvyan/guettable/activity/SetTermActivity.java index 094300d..92f125f 100644 --- a/app/src/main/java/top/yvyan/guettable/activity/SetTermActivity.java +++ b/app/src/main/java/top/yvyan/guettable/activity/SetTermActivity.java @@ -18,7 +18,7 @@ import top.yvyan.guettable.R; import top.yvyan.guettable.bean.TermBean; import top.yvyan.guettable.data.AccountData; import top.yvyan.guettable.data.GeneralData; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.data.ScheduleData; import top.yvyan.guettable.util.DialogUtil; import top.yvyan.guettable.util.ToastUtil; @@ -36,7 +36,6 @@ public class SetTermActivity extends AppCompatActivity implements View.OnClickLi private XSeekBar seekBar; private GeneralData generalData; - private ScheduleData scheduleData; @Override protected void onCreate(Bundle savedInstanceState) { @@ -66,7 +65,6 @@ public class SetTermActivity extends AppCompatActivity implements View.OnClickLi back.setOnClickListener(this); input.setOnClickListener(this); generalData = GeneralData.newInstance(this); - scheduleData = ScheduleData.newInstance(this); } @SuppressLint("SetTextI18n") @@ -131,19 +129,18 @@ public class SetTermActivity extends AppCompatActivity implements View.OnClickLi break; case R.id.input: //保存学年 - ScheduleData scheduleData = ScheduleData.newInstance(getApplicationContext()); int year = Integer.parseInt(generalData.getGrade()) + (int) spinnerYear.getSelectedItemId(); int num = (int) spinnerTerm.getSelectedItemId() + 1; boolean changeTerm = false; if (generalData.isInternational()) { if (!(year + "" + num).equals(generalData.getTerm())) { - scheduleData.deleteInputCourse(); + ScheduleData.deleteInputCourse(); changeTerm = true; } generalData.setTerm(year + "" + num); } else { String term_1 = year + "-" + (year + 1) + "_" + num; - for (TermBean termBean : MoreDate.newInstance(this).getTermBeans()) { + for (TermBean termBean : MoreData.getTermBeans()) { String termString = termBean.getTerm(); if (termString != null && termString.length() >= 11 @@ -154,10 +151,10 @@ public class SetTermActivity extends AppCompatActivity implements View.OnClickLi } } generalData.setTerm(term_1); - scheduleData.deleteInputCourse(); + ScheduleData.deleteInputCourse(); changeTerm = true; } - if (changeTerm && scheduleData.getUserCourseBeans().size() != 0) { + if (changeTerm && ScheduleData.getUserCourseBeans().size() != 0) { DialogUtil.IDialogService service = new DialogUtil.IDialogService() { @Override public void onClickYes() { @@ -166,7 +163,7 @@ public class SetTermActivity extends AppCompatActivity implements View.OnClickLi @Override public void onClickBack() { - scheduleData.deleteUserCourse(); + ScheduleData.deleteUserCourse(); importCourse(); } }; @@ -183,7 +180,7 @@ public class SetTermActivity extends AppCompatActivity implements View.OnClickLi int week = seekBar.getSelectedNumber() / 10; generalData.setWeek(week); generalData.setLastUpdateTime(-1); - scheduleData.setUpdate(true); + ScheduleData.setUpdate(true); ToastUtil.showToast(getApplicationContext(), "正在导入课表,受教务系统影响,最长需要约30秒,请耐心等待,不要滑动页面"); Intent intent = getIntent(); setResult(OK, intent); diff --git a/app/src/main/java/top/yvyan/guettable/adapter/ClassDetailAdapter.java b/app/src/main/java/top/yvyan/guettable/adapter/ClassDetailAdapter.java index ea57c74..e156a5b 100644 --- a/app/src/main/java/top/yvyan/guettable/adapter/ClassDetailAdapter.java +++ b/app/src/main/java/top/yvyan/guettable/adapter/ClassDetailAdapter.java @@ -110,7 +110,7 @@ public class ClassDetailAdapter extends RecyclerView.Adapter { - ScheduleData.newInstance(activity).deleteUserCourse(courseBean.getId()); + ScheduleData.deleteUserCourse(courseBean.getId()); schedules.remove(position); //删除动画 notifyItemRemoved(position); diff --git a/app/src/main/java/top/yvyan/guettable/baseFun/FirstLoad.java b/app/src/main/java/top/yvyan/guettable/baseFun/FirstLoad.java index 5307ae2..55f2d02 100644 --- a/app/src/main/java/top/yvyan/guettable/baseFun/FirstLoad.java +++ b/app/src/main/java/top/yvyan/guettable/baseFun/FirstLoad.java @@ -67,14 +67,13 @@ public class FirstLoad { * 40->41需要进行的操作 */ private void update_40() { - ScheduleData scheduleData = ScheduleData.newInstance(context); - List examBeans = scheduleData.getExamBeans(); + List examBeans = ScheduleData.getExamBeans(); for (ExamBean examBean : examBeans) { if (examBean.getClassNum() < 1) { examBean.setClassNum(1); } } - scheduleData.setExamBeans(examBeans); + ScheduleData.setExamBeans(examBeans); } /** diff --git a/app/src/main/java/top/yvyan/guettable/data/BaseData.java b/app/src/main/java/top/yvyan/guettable/data/BaseData.java new file mode 100644 index 0000000..e8f323e --- /dev/null +++ b/app/src/main/java/top/yvyan/guettable/data/BaseData.java @@ -0,0 +1,31 @@ +package top.yvyan.guettable.data; + +import com.google.gson.Gson; +import com.tencent.mmkv.MMKV; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +public class BaseData { + public static void set(String key, List Beans) { + String str = new Gson().toJson(Beans); + MMKV mmkv = MMKV.defaultMMKV(); + mmkv.encode(key, str); + } + + public static List get(String key, Type type) { + List list = null; + MMKV mmkv = MMKV.defaultMMKV(); + try { + String str = mmkv.decodeString(key); + list = new Gson().fromJson(str, type); + } catch (Exception e) { + mmkv.remove(key); + } + if (list == null) { + list = new ArrayList<>(); + } + return list; + } +} diff --git a/app/src/main/java/top/yvyan/guettable/data/MoreData.java b/app/src/main/java/top/yvyan/guettable/data/MoreData.java new file mode 100644 index 0000000..82c9546 --- /dev/null +++ b/app/src/main/java/top/yvyan/guettable/data/MoreData.java @@ -0,0 +1,120 @@ +package top.yvyan.guettable.data; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.tencent.mmkv.MMKV; + +import java.util.List; + +import top.yvyan.guettable.bean.CETBean; +import top.yvyan.guettable.bean.ExamScoreBean; +import top.yvyan.guettable.bean.ExperimentScoreBean; +import top.yvyan.guettable.bean.PlannedCourseBean; +import top.yvyan.guettable.bean.ResitBean; +import top.yvyan.guettable.bean.SelectedCourseBean; +import top.yvyan.guettable.bean.TermBean; + +public class MoreData extends BaseData { + private static final String MAIN_KEY = "MoreData"; + private static final String CET_STRING = MAIN_KEY + "CET_STRING"; + private static final String EXAM_SCORE_STRING = MAIN_KEY + "EXAM_SCORE_STRING"; + private static final String RESIT_STRING = MAIN_KEY + "resitString"; + private static final String EXPERIMENT_SCORE_STRING = MAIN_KEY + "EXPERIMENT_SCORE_STRING"; + private static final String PLANNED_COURSE_STRING = MAIN_KEY + "plannedCourseString"; + private static final String GRADES_STRING = MAIN_KEY + "gradesString"; + private static final String SELECTED_COURSE = MAIN_KEY + "selectedCourses"; + private static final String ALL_TERM = MAIN_KEY + "allTerms"; + + //CET成绩 + public static List getCetBeans() { + return get(CET_STRING, new TypeToken>() { + }.getType()); + } + + public static void setCetBeans(List cetBeans) { + set(CET_STRING, cetBeans); + } + + //考试成绩 + public static List getExamScoreBeans() { + return get(EXAM_SCORE_STRING, new TypeToken>() { + }.getType()); + } + + public static void setExamScoreBeans(List examScoreBeans) { + set(EXAM_SCORE_STRING, examScoreBeans); + } + + //补考成绩 + public static List getResitBeans() { + return get(RESIT_STRING, new TypeToken>() { + }.getType()); + } + + public static void setResitBeans(List resitBeans) { + set(RESIT_STRING, resitBeans); + } + + //实验成绩 + public static List getExperimentScoreBeans() { + return get(EXPERIMENT_SCORE_STRING, new TypeToken>() { + }.getType()); + } + + public static void setExperimentScoreBeans(List experimentScoreBeans) { + set(EXPERIMENT_SCORE_STRING, experimentScoreBeans); + } + + //计划课程 + public static List getPlannedCourseBeans() { + return get(PLANNED_COURSE_STRING, new TypeToken>() { + }.getType()); + } + + public static void setPlannedCourseBeans(List plannedCourseBeans) { + set(PLANNED_COURSE_STRING, plannedCourseBeans); + } + + //已选课程 + public static List getSelectedCourseBeans() { + return get(SELECTED_COURSE, new TypeToken>() { + }.getType()); + } + + public static void setSelectedCoursesBeans(List selectedCoursesBeans) { + set(SELECTED_COURSE, selectedCoursesBeans); + } + + //学期列表 + public static List getTermBeans() { + return get(ALL_TERM, new TypeToken>() { + }.getType()); + } + + public static void setTermBeans(List termBeans) { + set(ALL_TERM, termBeans); + } + + //学分绩 + public static float[] getGrades() { + float[] grades = null; + MMKV mmkv = MMKV.defaultMMKV(); + try { + String str = mmkv.decodeString(GRADES_STRING); + grades = new Gson().fromJson(str, new TypeToken() { + }.getType()); + } catch (Exception e) { + mmkv.remove(GRADES_STRING); + } + if (grades == null) { + grades = new float[]{100, 100, 100, 100, 100, 100, 100}; + } + return grades; + } + + public static void setGrades(float[] grades) { + String str = new Gson().toJson(grades); + MMKV mmkv = MMKV.defaultMMKV(); + mmkv.encode(GRADES_STRING, str); + } +} diff --git a/app/src/main/java/top/yvyan/guettable/data/MoreDate.java b/app/src/main/java/top/yvyan/guettable/data/MoreDate.java deleted file mode 100644 index 86eaa64..0000000 --- a/app/src/main/java/top/yvyan/guettable/data/MoreDate.java +++ /dev/null @@ -1,352 +0,0 @@ -package top.yvyan.guettable.data; - -import android.content.Context; -import android.content.SharedPreferences; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import top.yvyan.guettable.bean.CETBean; -import top.yvyan.guettable.bean.ExamScoreBean; -import top.yvyan.guettable.bean.ExperimentScoreBean; -import top.yvyan.guettable.bean.PlannedCourseBean; -import top.yvyan.guettable.bean.ResitBean; -import top.yvyan.guettable.bean.SelectedCourseBean; -import top.yvyan.guettable.bean.TermBean; -import top.yvyan.guettable.util.SerializeUtil; - -public class MoreDate { - private static MoreDate moreDate; - private static final String SHP_NAME = "MoreDate"; - private static final String RESIT_STRING = "resitString"; - private static final String CET_STRING = "CET_STRING"; - private static final String EXAM_SCORE_STRING = "EXAM_SCORE_STRING"; - private static final String EXPERIMENT_SCORE_STRING = "EXPERIMENT_SCORE_STRING"; - private static final String PLANNED_COURSE_STRING = "plannedCourseString"; - private static final String GRADES_STRING = "gradesString"; - private static final String SELECTED_COURSE = "selectedCourses"; - private static final String ALL_TERM = "allTerms"; - - private final SharedPreferences sharedPreferences; - private final SharedPreferences.Editor editor; - - private List resitBeans; - private List cetBeans; - private List examScoreBeans; - private List experimentScoreBeans; - private List plannedCourseBeans; - private List selectedCoursesBeans; - private List termBeans; - private float[] grades; - - private MoreDate(Context context) { - sharedPreferences = context.getSharedPreferences(SHP_NAME, Context.MODE_PRIVATE); - editor = sharedPreferences.edit(); - editor.apply(); - load(); - } - - private void load() { - ResitBean[] resitBeans1 = null; - CETBean[] cetBeans1 = null; - ExamScoreBean[] examScoreBeans1 = null; - ExperimentScoreBean[] experimentScoreBeans1 = null; - PlannedCourseBean[] plannedCourseBeans1 = null; - SelectedCourseBean[] selectedCourseBeans1 = null; - TermBean[] termBeans1 = null; - - - String resitString = sharedPreferences.getString(RESIT_STRING, null); - String cetString = sharedPreferences.getString(CET_STRING, null); - String examScoreString = sharedPreferences.getString(EXAM_SCORE_STRING, null); - String experimentScoreString = sharedPreferences.getString(EXPERIMENT_SCORE_STRING, null); - String plannedCourseString = sharedPreferences.getString(PLANNED_COURSE_STRING, null); - String gradesString = sharedPreferences.getString(GRADES_STRING, null); - String selectedCourseString = sharedPreferences.getString(SELECTED_COURSE, null); - String termString = sharedPreferences.getString(ALL_TERM, null); - - if (resitString != null) { - try { - resitBeans1 = (ResitBean[]) SerializeUtil.serializeToObject(resitString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (resitBeans1 != null) { - resitBeans = Arrays.asList(resitBeans1); - } - } - if (cetString != null) { - try { - cetBeans1 = (CETBean[]) SerializeUtil.serializeToObject(cetString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (cetBeans1 != null) { - cetBeans = Arrays.asList(cetBeans1); - } - } - if (examScoreString != null) { - try { - examScoreBeans1 = (ExamScoreBean[]) SerializeUtil.serializeToObject(examScoreString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (examScoreBeans1 != null) { - examScoreBeans = Arrays.asList(examScoreBeans1); - } - } - if (experimentScoreString != null) { - try { - experimentScoreBeans1 = (ExperimentScoreBean[]) SerializeUtil.serializeToObject(experimentScoreString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (experimentScoreBeans1 != null) { - experimentScoreBeans = Arrays.asList(experimentScoreBeans1); - } - } - if (plannedCourseString != null) { - try { - plannedCourseBeans1 = (PlannedCourseBean[]) SerializeUtil.serializeToObject(plannedCourseString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (plannedCourseBeans1 != null) { - plannedCourseBeans = Arrays.asList(plannedCourseBeans1); - } - } - if (gradesString != null) { - try { - grades = (float[]) SerializeUtil.serializeToObject(gradesString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - } - if (selectedCourseString != null) { - try { - selectedCourseBeans1 = (SelectedCourseBean[]) SerializeUtil.serializeToObject(selectedCourseString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (selectedCourseBeans1 != null) { - selectedCoursesBeans = Arrays.asList(selectedCourseBeans1); - } - } - if (termString != null) { - try { - termBeans1 = (TermBean[]) SerializeUtil.serializeToObject(termString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (termBeans1 != null) { - termBeans = Arrays.asList(termBeans1); - } - } - } - - public static MoreDate newInstance(Context context) { - if (moreDate == null) { - moreDate = new MoreDate(context); - } - return moreDate; - } - - public List getResitBeans() { - if (resitBeans == null) { - resitBeans = new ArrayList<>(); - } - return resitBeans; - } - - public void setResitBeans(List resitBeans) { - this.resitBeans = resitBeans; - String resitString = null; - ResitBean[] resitBeans1 = new ResitBean[resitBeans.size()]; - resitBeans.toArray(resitBeans1); - try { - resitString = SerializeUtil.serialize(resitBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (resitString != null) { - editor.putString(RESIT_STRING, resitString); - editor.apply(); - } - } - - //CET成绩 - public List getCetBeans() { - if (cetBeans == null) { - cetBeans = new ArrayList<>(); - } - return cetBeans; - } - - public void setCetBeans(List cetBeans) { - this.cetBeans = cetBeans; - String cetString = null; - CETBean[] cetBeans1 = new CETBean[cetBeans.size()]; - cetBeans.toArray(cetBeans1); - try { - cetString = SerializeUtil.serialize(cetBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (cetString != null) { - editor.putString(CET_STRING, cetString); - editor.apply(); - } - } - - //考试成绩 - public List getExamScoreBeans() { - if (examScoreBeans == null) { - examScoreBeans = new ArrayList<>(); - } - return examScoreBeans; - } - - public void setExamScoreBeans(List examScoreBeans) { - this.examScoreBeans = examScoreBeans; - String examScoreString = null; - ExamScoreBean[] examScoreBeans1 = new ExamScoreBean[examScoreBeans.size()]; - examScoreBeans.toArray(examScoreBeans1); - try { - examScoreString = SerializeUtil.serialize(examScoreBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (examScoreString != null) { - editor.putString(EXAM_SCORE_STRING, examScoreString); - editor.apply(); - } - } - - //实验成绩 - public List getExperimentScoreBeans() { - if (experimentScoreBeans == null) { - experimentScoreBeans = new ArrayList<>(); - } - return experimentScoreBeans; - } - - public void setExperimentScoreBeans(List experimentScoreBeans) { - this.experimentScoreBeans = experimentScoreBeans; - String experimentScoreString = null; - ExperimentScoreBean[] experimentScoreBeans1 = new ExperimentScoreBean[experimentScoreBeans.size()]; - experimentScoreBeans.toArray(experimentScoreBeans1); - try { - experimentScoreString = SerializeUtil.serialize(experimentScoreBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (experimentScoreString != null) { - editor.putString(EXPERIMENT_SCORE_STRING, experimentScoreString); - editor.apply(); - } - } - - //计划课程 - public List getPlannedCourseBeans() { - if (plannedCourseBeans == null) { - plannedCourseBeans = new ArrayList<>(); - } - return plannedCourseBeans; - } - - public void setPlannedCourseBeans(List plannedCourseBeans) { - this.plannedCourseBeans = plannedCourseBeans; - String plannedCourseString = null; - PlannedCourseBean[] plannedCourseBeans1 = new PlannedCourseBean[plannedCourseBeans.size()]; - plannedCourseBeans.toArray(plannedCourseBeans1); - try { - plannedCourseString = SerializeUtil.serialize(plannedCourseBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (plannedCourseString != null) { - editor.putString(PLANNED_COURSE_STRING, plannedCourseString); - editor.apply(); - } - } - - //已选课程 - public List getSelectedCourseBeans() { - if (selectedCoursesBeans == null) { - selectedCoursesBeans = new ArrayList<>(); - } - return selectedCoursesBeans; - } - - public void setSelectedCoursesBeans(List selectedCoursesBeans) { - this.selectedCoursesBeans = selectedCoursesBeans; - String selectCourseString = null; - SelectedCourseBean[] selectedCourseBeans1 = new SelectedCourseBean[selectedCoursesBeans.size()]; - selectedCoursesBeans.toArray(selectedCourseBeans1); - try { - selectCourseString = SerializeUtil.serialize(selectedCourseBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (selectCourseString != null) { - editor.putString(SELECTED_COURSE, selectCourseString); - editor.apply(); - } - } - - public List getTermBeans() { - if (termBeans == null) { - termBeans = new ArrayList<>(); - } - return termBeans; - } - - public void setTermBeans(List termBeans) { - this.termBeans = termBeans; - String termString = null; - TermBean[] termBeans1 = new TermBean[termBeans.size()]; - termBeans.toArray(termBeans1); - try { - termString = SerializeUtil.serialize(termBeans1); - } catch (Exception e) { - e.printStackTrace(); - } - if (termString != null) { - editor.putString(ALL_TERM, termString); - editor.apply(); - } - } - - public float[] getGrades() { - if (grades == null) { - grades = new float[]{100, 100, 100, 100, 100, 100, 100}; - } - return grades; - } - - public void setGrades(float[] grades) { - this.grades = grades; - String gradesString = null; - try { - gradesString = SerializeUtil.serialize(grades); - } catch (IOException e) { - e.printStackTrace(); - } - if (gradesString != null) { - editor.putString(GRADES_STRING, gradesString); - editor.apply(); - } - } - - /** - * 清除数据 - * - * @param name 空间名称 - */ - public void deleteData(String name) { - editor.putString(name, null); - editor.apply(); - } -} diff --git a/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java b/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java index bead51d..136dbf9 100644 --- a/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java +++ b/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java @@ -1,270 +1,92 @@ package top.yvyan.guettable.data; -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.SharedPreferences; +import com.google.gson.reflect.TypeToken; +import com.tencent.mmkv.MMKV; -import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import top.yvyan.guettable.bean.CourseBean; import top.yvyan.guettable.bean.ExamBean; -import top.yvyan.guettable.util.SerializeUtil; -public class ScheduleData { - private static ScheduleData scheduleData; - private static final String SHP_NAME = "ClassData"; - private static final String CLASS_STRING = "classString"; - private static final String LIB_STRING = "libString"; - private static final String EXAM_STRING = "examString"; - private static final String USER_COURSE_NO = "userCourseNo"; - private static final String USER_COURSE_BEANS = "userCourseBeans"; - private final SharedPreferences sharedPreferences; - private final SharedPreferences.Editor editor; +public class ScheduleData extends BaseData { + private static final String MAIN_KEY = "ScheduleData"; + private static final String CLASS_STRING = MAIN_KEY + "classString"; + private static final String LIB_STRING = MAIN_KEY + "libString"; + private static final String EXAM_STRING = MAIN_KEY + "examString"; + private static final String USER_COURSE_NO = MAIN_KEY + "userCourseNo"; + private static final String USER_COURSE_BEANS = MAIN_KEY + "userCourseBeans"; - private List courseBeans; - private List libBeans; - private List examBeans; - private long userCourseNo; - private List userCourseBeans; - private boolean isUpdate = false; //用于同步数据后周课表继续刷新 - - @SuppressLint("CommitPrefEdits") - private ScheduleData(Context context) { - sharedPreferences = context.getSharedPreferences(SHP_NAME, Context.MODE_PRIVATE); - editor = sharedPreferences.edit(); - load(); - } - - private void load() { - CourseBean[] courseBeans1 = null; - CourseBean[] libBeans1 = null; - ExamBean[] examBeans1 = null; - CourseBean[] userCourseBeans1 = null; - String classString = sharedPreferences.getString(CLASS_STRING, null); - String libString = sharedPreferences.getString(LIB_STRING, null); - String examString = sharedPreferences.getString(EXAM_STRING, null); - String userCourseString = sharedPreferences.getString(USER_COURSE_BEANS, null); - if (classString != null) { - try { - courseBeans1 = (CourseBean[]) SerializeUtil.serializeToObject(classString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (courseBeans1 != null) { - courseBeans = Arrays.asList(courseBeans1); - courseBeans = new ArrayList<>(courseBeans); - } - } - if (libString != null) { - try { - libBeans1 = (CourseBean[]) SerializeUtil.serializeToObject(libString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (libBeans1 != null) { - libBeans = Arrays.asList(libBeans1); - libBeans = new ArrayList<>(libBeans); - } - } - if (examString != null) { - try { - examBeans1 = (ExamBean[]) SerializeUtil.serializeToObject(examString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (examBeans1 != null) { - examBeans = Arrays.asList(examBeans1); - examBeans = new ArrayList<>(examBeans); - } - } - if (userCourseString != null) { - try { - userCourseBeans1 = (CourseBean[]) SerializeUtil.serializeToObject(userCourseString); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - } - if (userCourseBeans1 != null) { - userCourseBeans = Arrays.asList(userCourseBeans1); - userCourseBeans = new ArrayList<>(userCourseBeans); - } - } - userCourseNo = sharedPreferences.getLong(USER_COURSE_NO, 1); - } - - public static ScheduleData newInstance(Context context) { - if (scheduleData == null) { - scheduleData = new ScheduleData(context); - } - return scheduleData; - } + private static boolean isUpdate = false; //用于同步数据后周课表继续刷新 //课程信息 - public List getCourseBeans() { - if (courseBeans == null) { - courseBeans = new ArrayList<>(); - } - return courseBeans; + public static List getCourseBeans() { + return get(CLASS_STRING, new TypeToken>() { + }.getType()); } - public void setCourseBeans(List courseBeans) { - this.courseBeans = courseBeans; - String classString = null; - CourseBean[] courseBeans1 = new CourseBean[courseBeans.size()]; - courseBeans.toArray(courseBeans1); - try { - classString = SerializeUtil.serialize(courseBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (classString != null) { - editor.putString(CLASS_STRING, classString); - editor.apply(); - } + public static void setCourseBeans(List courseBeans) { + set(CLASS_STRING, courseBeans); } //实验信息 - public List getLibBeans() { - if (libBeans == null) { - libBeans = new ArrayList<>(); - } - return libBeans; + public static List getLibBeans() { + return get(LIB_STRING, new TypeToken>() { + }.getType()); } - public void setLibBeans(List libBeans) { - this.libBeans = libBeans; - String libString = null; - CourseBean[] libBean1 = new CourseBean[libBeans.size()]; - libBeans.toArray(libBean1); - try { - libString = SerializeUtil.serialize(libBean1); - } catch (IOException e) { - e.printStackTrace(); - } - if (libString != null) { - editor.putString(LIB_STRING, libString); - editor.apply(); - } + public static void setLibBeans(List libBeans) { + set(LIB_STRING, libBeans); } //考试安排 - public List getExamBeans() { - if (examBeans == null) { - examBeans = new ArrayList<>(); - } - return examBeans; + public static List getExamBeans() { + return get(EXAM_STRING, new TypeToken>() { + }.getType()); } - public void setExamBeans(List examBeans) { - this.examBeans = examBeans; - String examString = null; - ExamBean[] examBeans1 = new ExamBean[examBeans.size()]; - examBeans.toArray(examBeans1); - try { - examString = SerializeUtil.serialize(examBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (examString != null) { - editor.putString(EXAM_STRING, examString); - editor.apply(); - } - } - - /** - * 通过现有课程数据计算最大周数 - * - * @return 最大周数 - */ - public int getMaxWeek() { - int maxWeek = 0; - try { - if (courseBeans != null) { - for (CourseBean courseBean : courseBeans) { - if (courseBean.getWeekEnd() > maxWeek) { - maxWeek = courseBean.getWeekEnd(); - } - } - } - if (libBeans != null) { - for (CourseBean courseBean : libBeans) { - if (courseBean.getWeekEnd() > maxWeek) { - maxWeek = courseBean.getWeekEnd(); - } - } - } - if (userCourseBeans != null) { - for (CourseBean courseBean : userCourseBeans) { - if (courseBean.getWeekEnd() > maxWeek) { - maxWeek = courseBean.getWeekEnd(); - } - } - } - if (examBeans != null) { - for (ExamBean examBean : examBeans) { - if (examBean.getWeek() > maxWeek) { - maxWeek = examBean.getWeek(); - } - } - } - if (maxWeek > 25) { - maxWeek = 25; - } - return maxWeek; - } catch (Exception e) { - return 0; - } + public static void setExamBeans(List examBeans) { + set(EXAM_STRING, examBeans); } //用户自定义课程 - public List getUserCourseBeans() { - if (userCourseBeans == null) { - userCourseBeans = new ArrayList<>(); - } - return userCourseBeans; + public static List getUserCourseBeans() { + return get(USER_COURSE_BEANS, new TypeToken>() { + }.getType()); } - public void setUserCourseBeans(List userCourseBeans) { - this.userCourseBeans = userCourseBeans; - String userCourseString = null; - CourseBean[] userCourseBeans1 = new CourseBean[userCourseBeans.size()]; - userCourseBeans.toArray(userCourseBeans1); - try { - userCourseString = SerializeUtil.serialize(userCourseBeans1); - } catch (IOException e) { - e.printStackTrace(); - } - if (userCourseString != null) { - editor.putString(USER_COURSE_BEANS, userCourseString); - editor.apply(); - } + public static void setUserCourseBeans(List userCourseBeans) { + set(USER_COURSE_BEANS, userCourseBeans); } - public void deleteInputCourse() { + public static void deleteInputCourse() { setCourseBeans(new ArrayList<>()); setLibBeans(new ArrayList<>()); setExamBeans(new ArrayList<>()); } - public void deleteUserCourse() { + public static void deleteUserCourse() { setUserCourseNo(1); setUserCourseBeans(new ArrayList<>()); } - public long getUserCourseNo() { + public static long getUserCourseNo() { + MMKV mmkv = MMKV.defaultMMKV(); + long userCourseNo = mmkv.decodeLong(USER_COURSE_NO); + if (userCourseNo == 0) { + userCourseNo = 1; + } setUserCourseNo(userCourseNo + 1); return userCourseNo; } - public void setUserCourseNo(long userCourseNo) { - this.userCourseNo = userCourseNo; - editor.putLong(USER_COURSE_NO, userCourseNo); - editor.apply(); + public static void setUserCourseNo(long userCourseNo) { + MMKV mmkv = MMKV.defaultMMKV(); + mmkv.encode(USER_COURSE_NO, userCourseNo); } - public void deleteUserCourse(long id) { + public static void deleteUserCourse(long id) { + List userCourseBeans = getUserCourseBeans(); for (int i = 0; i < userCourseBeans.size(); i++) { if (userCourseBeans.get(i).getId() == id) { userCourseBeans.remove(i); @@ -274,11 +96,52 @@ public class ScheduleData { } } - public boolean isUpdate() { + /** + * 通过现有课程数据计算最大周数 + * + * @return 最大周数 + */ + public static int getMaxWeek() { + int maxWeek = 0; + List courseBeans = getCourseBeans(); + List libBeans = getLibBeans(); + List userCourseBeans = getUserCourseBeans(); + List examBeans = getExamBeans(); + try { + for (CourseBean courseBean : courseBeans) { + if (courseBean.getWeekEnd() > maxWeek) { + maxWeek = courseBean.getWeekEnd(); + } + } + for (CourseBean courseBean : libBeans) { + if (courseBean.getWeekEnd() > maxWeek) { + maxWeek = courseBean.getWeekEnd(); + } + } + for (CourseBean courseBean : userCourseBeans) { + if (courseBean.getWeekEnd() > maxWeek) { + maxWeek = courseBean.getWeekEnd(); + } + } + for (ExamBean examBean : examBeans) { + if (examBean.getWeek() > maxWeek) { + maxWeek = examBean.getWeek(); + } + } + if (maxWeek > 25) { + maxWeek = 25; + } + return maxWeek; + } catch (Exception e) { + return 0; + } + } + + public static boolean isUpdate() { return isUpdate; } - public void setUpdate(boolean update) { + public static void setUpdate(boolean update) { isUpdate = update; } } diff --git a/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java b/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java index 96e229c..8ca99e4 100644 --- a/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java +++ b/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java @@ -38,8 +38,8 @@ import top.yvyan.guettable.data.SingleSettingData; import top.yvyan.guettable.service.MyOperator; import top.yvyan.guettable.util.AppUtil; import top.yvyan.guettable.util.BackgroundUtil; -import top.yvyan.guettable.util.DensityUtil; import top.yvyan.guettable.util.CourseUtil; +import top.yvyan.guettable.util.DensityUtil; import top.yvyan.guettable.util.ToastUtil; import top.yvyan.guettable.widget.WidgetUtil; @@ -53,7 +53,6 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene private View view; private GeneralData generalData; - private ScheduleData scheduleData; private SingleSettingData singleSettingData; private DetailClassData detailClassData; private SettingData settingData; @@ -91,7 +90,6 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene private void initData() { generalData = GeneralData.newInstance(getActivity()); - scheduleData = ScheduleData.newInstance(getActivity()); singleSettingData = SingleSettingData.newInstance(getActivity()); detailClassData = DetailClassData.newInstance(); settingData = SettingData.newInstance(getActivity()); @@ -138,8 +136,8 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene } else { generalData.setWeek(target); mWeekView.curWeek(target).updateView(); - scheduleData.setUpdate(true); - WidgetUtil.notifyWidgetUpdate(this.getActivity()); + ScheduleData.setUpdate(true); + WidgetUtil.notifyWidgetUpdate(Objects.requireNonNull(this.getActivity())); ToastUtil.showToast(getActivity(), "设置第" + target + "周为当前周"); mTimetableView.changeWeekForce(target); } @@ -208,27 +206,27 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); - if (isVisibleToUser && scheduleData != null && scheduleData.isUpdate()) { + if (isVisibleToUser && ScheduleData.isUpdate()) { updateTable(); - scheduleData.setUpdate(false); + ScheduleData.setUpdate(false); } } public void updateTable() { List schedules = new ArrayList<>(); - for (CourseBean courseBean : scheduleData.getCourseBeans()) { + for (CourseBean courseBean : ScheduleData.getCourseBeans()) { schedules.add(courseBean.getSchedule()); } - for (CourseBean courseBean : scheduleData.getUserCourseBeans()) { + for (CourseBean courseBean : ScheduleData.getUserCourseBeans()) { schedules.add(courseBean.getSchedule()); } if (settingData.getShowLibOnTable()) { - for (CourseBean courseBean : scheduleData.getLibBeans()) { + for (CourseBean courseBean : ScheduleData.getLibBeans()) { schedules.add(courseBean.getSchedule()); } } if (settingData.getShowExamOnTable()) { - for (ExamBean examBean : CourseUtil.combineExam(scheduleData.getExamBeans())) { + for (ExamBean examBean : CourseUtil.combineExam(ScheduleData.getExamBeans())) { if (examBean != null && examBean.getWeek() != 0) { schedules.add(examBean.getSchedule()); } @@ -269,10 +267,10 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene super.onActivityResult(requestCode, resultCode, data); if (requestCode == AddCourseActivity.REQUEST_CODE && resultCode == AddCourseActivity.ADD) { updateTable(); - scheduleData.setUpdate(true); + ScheduleData.setUpdate(true); } else if (requestCode == DetailActivity.REQUEST_CODE && resultCode == DetailActivity.ALTER) { updateTable(); - scheduleData.setUpdate(true); + ScheduleData.setUpdate(true); } } diff --git a/app/src/main/java/top/yvyan/guettable/fragment/DayClassFragment.java b/app/src/main/java/top/yvyan/guettable/fragment/DayClassFragment.java index ff5b369..bea36ec 100644 --- a/app/src/main/java/top/yvyan/guettable/fragment/DayClassFragment.java +++ b/app/src/main/java/top/yvyan/guettable/fragment/DayClassFragment.java @@ -70,7 +70,6 @@ public class DayClassFragment extends Fragment implements View.OnClickListener { private AccountData accountData; private GeneralData generalData; private SettingData settingData; - private ScheduleData scheduleData; public static DayClassFragment newInstance() { return new DayClassFragment(); @@ -88,9 +87,9 @@ public class DayClassFragment extends Fragment implements View.OnClickListener { @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); - if (isVisibleToUser && scheduleData != null && scheduleData.isUpdate()) { + if (isVisibleToUser && ScheduleData.isUpdate()) { onStart(); - scheduleData.setUpdate(false); + ScheduleData.setUpdate(false); } } @@ -134,7 +133,6 @@ public class DayClassFragment extends Fragment implements View.OnClickListener { accountData = AccountData.newInstance(getActivity()); generalData = GeneralData.newInstance(getActivity()); settingData = SettingData.newInstance(getActivity()); - scheduleData = ScheduleData.newInstance(getActivity()); } /** @@ -174,7 +172,7 @@ public class DayClassFragment extends Fragment implements View.OnClickListener { //更新考试剩余时间信息 try { - List examBeans = scheduleData.getExamBeans(); + List examBeans = ScheduleData.getExamBeans(); examBeans = CourseUtil.combineExam(examBeans); examBeans = CourseUtil.ridOfOutdatedExam(examBeans); if (examBeans.size() != 0) { @@ -267,24 +265,20 @@ public class DayClassFragment extends Fragment implements View.OnClickListener { */ private List getData() { List list; - //防止出现空指针闪退 - if (scheduleData == null) { - initData(); - } - if (!scheduleData.getCourseBeans().isEmpty()) { - list = ScheduleSupport.transform(scheduleData.getCourseBeans()); + if (!ScheduleData.getCourseBeans().isEmpty()) { + list = ScheduleSupport.transform(ScheduleData.getCourseBeans()); } else { list = new ArrayList<>(); } - for (CourseBean courseBean : scheduleData.getUserCourseBeans()) { + for (CourseBean courseBean : ScheduleData.getUserCourseBeans()) { list.add(courseBean.getSchedule()); } if (settingData.getShowLibOnTable()) { - List labList = ScheduleSupport.transform(scheduleData.getLibBeans()); + List labList = ScheduleSupport.transform(ScheduleData.getLibBeans()); list.addAll(labList); } if (settingData.getShowExamOnTable()) { - for (ExamBean examBean : CourseUtil.combineExam(scheduleData.getExamBeans())) { + for (ExamBean examBean : CourseUtil.combineExam(ScheduleData.getExamBeans())) { if (examBean != null && examBean.getWeek() != 0) { list.add(examBean.getSchedule()); } diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/CETActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/CETActivity.java index 7d169f8..d2d7c85 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/CETActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/CETActivity.java @@ -9,7 +9,7 @@ import java.util.List; import top.yvyan.guettable.R; import top.yvyan.guettable.adapter.CETAdapter; import top.yvyan.guettable.bean.CETBean; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.service.fetch.StaticService; import top.yvyan.guettable.util.AppUtil; import top.yvyan.guettable.util.CourseUtil; @@ -18,22 +18,18 @@ import static com.xuexiang.xui.XUI.getContext; public class CETActivity extends BaseFuncActivity { - private MoreDate moreDate; - @Override protected void childInit() { setTitle(getResources().getString(R.string.moreFun_cet)); setShowMore(false); AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_cet)); - - moreDate = MoreDate.newInstance(getApplicationContext()); } @Override protected void showContent() { baseSetContentView(R.layout.recycler_view); RecyclerView recyclerView = findViewById(R.id.recycler_view_info); - List cetBeans = moreDate.getCetBeans(); + List cetBeans = MoreData.getCetBeans(); if (cetBeans.size() == 0) { showEmptyPage(); } else { @@ -50,8 +46,8 @@ public class CETActivity extends BaseFuncActivity { if (cetBeans != null) { CourseUtil.BeanAttributeUtil beanAttributeUtil = new CourseUtil.BeanAttributeUtil(); Collections.sort(cetBeans, beanAttributeUtil); - if (!AppUtil.equalList(cetBeans, moreDate.getCetBeans())) { - moreDate.setCetBeans(cetBeans); + if (!AppUtil.equalList(cetBeans, MoreData.getCetBeans())) { + MoreData.setCetBeans(cetBeans); } return 5; } diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/ExamActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/ExamActivity.java index 3086f24..fb74955 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/ExamActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/ExamActivity.java @@ -27,7 +27,6 @@ import static com.xuexiang.xui.XUI.getContext; public class ExamActivity extends BaseFuncActivity { private GeneralData generalData; - private ScheduleData scheduleData; private SingleSettingData singleSettingData; @Override @@ -38,7 +37,6 @@ public class ExamActivity extends BaseFuncActivity { AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_test_schedule)); generalData = GeneralData.newInstance(this); - scheduleData = ScheduleData.newInstance(this); singleSettingData = SingleSettingData.newInstance(this); } @@ -46,7 +44,7 @@ public class ExamActivity extends BaseFuncActivity { protected void showContent() { baseSetContentView(R.layout.recycler_view); RecyclerView recyclerView = findViewById(R.id.recycler_view_info); - List examBeans = scheduleData.getExamBeans(); + List examBeans = ScheduleData.getExamBeans(); if (singleSettingData.isCombineExam()) { examBeans = CourseUtil.combineExam(examBeans); } @@ -118,10 +116,10 @@ public class ExamActivity extends BaseFuncActivity { if (examBeans != null) { CourseUtil.BeanAttributeUtil beanAttributeUtil = new CourseUtil.BeanAttributeUtil(); Collections.sort(examBeans, beanAttributeUtil); - if (!AppUtil.equalList(examBeans, scheduleData.getExamBeans())) { - scheduleData.setExamBeans(examBeans); + if (!AppUtil.equalList(examBeans, ScheduleData.getExamBeans())) { + ScheduleData.setExamBeans(examBeans); update = true; - scheduleData.setUpdate(true); + ScheduleData.setUpdate(true); } return 5; } diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/ExamScoreActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/ExamScoreActivity.java index 1a82385..3ee922b 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/ExamScoreActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/ExamScoreActivity.java @@ -13,7 +13,7 @@ import top.yvyan.guettable.R; import top.yvyan.guettable.adapter.ExamScoreAdapter; import top.yvyan.guettable.bean.ExamScoreBean; import top.yvyan.guettable.data.GeneralData; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.data.SingleSettingData; import top.yvyan.guettable.service.fetch.StaticService; import top.yvyan.guettable.util.AppUtil; @@ -23,7 +23,6 @@ import static com.xuexiang.xui.XUI.getContext; public class ExamScoreActivity extends BaseFuncActivity { - private MoreDate moreDate; private GeneralData generalData; private SingleSettingData singleSettingData; @@ -34,7 +33,6 @@ public class ExamScoreActivity extends BaseFuncActivity { openUpdate(); AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_test_scores)); - moreDate = MoreDate.newInstance(this); generalData = GeneralData.newInstance(this); singleSettingData = SingleSettingData.newInstance(this); } @@ -43,7 +41,7 @@ public class ExamScoreActivity extends BaseFuncActivity { protected void showContent() { baseSetContentView(R.layout.activity_exam_score); RecyclerView recyclerView = findViewById(R.id.exam_score_info_recycler_view); - List examScoreBeans = moreDate.getExamScoreBeans(); + List examScoreBeans = MoreData.getExamScoreBeans(); if (singleSettingData.isHideOtherTermExamScore()) { examScoreBeans = CourseUtil.BeanAttributeUtil.hideOtherTerm(examScoreBeans, generalData.getTerm()); } @@ -88,8 +86,8 @@ public class ExamScoreActivity extends BaseFuncActivity { if (examScoreBeans != null) { CourseUtil.BeanAttributeUtil beanAttributeUtil = new CourseUtil.BeanAttributeUtil(); Collections.sort(examScoreBeans, beanAttributeUtil); - if (!AppUtil.equalList(examScoreBeans, moreDate.getExamScoreBeans())) { - moreDate.setExamScoreBeans(examScoreBeans); + if (!AppUtil.equalList(examScoreBeans, MoreData.getExamScoreBeans())) { + MoreData.setExamScoreBeans(examScoreBeans); update = true; } return 5; diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/ExperimentScoreActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/ExperimentScoreActivity.java index 301fcab..76eb4c4 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/ExperimentScoreActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/ExperimentScoreActivity.java @@ -13,7 +13,7 @@ import top.yvyan.guettable.R; import top.yvyan.guettable.adapter.ExperimentScoreAdapter; import top.yvyan.guettable.bean.ExperimentScoreBean; import top.yvyan.guettable.data.GeneralData; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.data.SingleSettingData; import top.yvyan.guettable.service.fetch.StaticService; import top.yvyan.guettable.util.AppUtil; @@ -23,7 +23,6 @@ import static com.xuexiang.xui.XUI.getContext; public class ExperimentScoreActivity extends BaseFuncActivity { - private MoreDate moreDate; private GeneralData generalData; private SingleSettingData singleSettingData; @@ -34,7 +33,6 @@ public class ExperimentScoreActivity extends BaseFuncActivity { openUpdate(); AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_lib_scores)); - moreDate = MoreDate.newInstance(this); generalData = GeneralData.newInstance(this); singleSettingData = SingleSettingData.newInstance(this); } @@ -43,7 +41,7 @@ public class ExperimentScoreActivity extends BaseFuncActivity { protected void showContent() { baseSetContentView(R.layout.activity_experiment_score); RecyclerView recyclerView = findViewById(R.id.experiment_score_info_recycler_view); - List experimentScoreBeans = moreDate.getExperimentScoreBeans(); + List experimentScoreBeans = MoreData.getExperimentScoreBeans(); if (singleSettingData.isHideOtherTermExamScore()) { experimentScoreBeans = CourseUtil.BeanAttributeUtil.hideOtherTerm(experimentScoreBeans, generalData.getTerm()); } @@ -88,8 +86,8 @@ public class ExperimentScoreActivity extends BaseFuncActivity { if (experimentScoreBeans != null) { CourseUtil.BeanAttributeUtil beanAttributeUtil = new CourseUtil.BeanAttributeUtil(); Collections.sort(experimentScoreBeans, beanAttributeUtil); - if (!AppUtil.equalList(experimentScoreBeans, moreDate.getExperimentScoreBeans())) { - moreDate.setExperimentScoreBeans(experimentScoreBeans); + if (!AppUtil.equalList(experimentScoreBeans, MoreData.getExperimentScoreBeans())) { + MoreData.setExperimentScoreBeans(experimentScoreBeans); update = true; } return 5; diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/GradesActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/GradesActivity.java index 4e04b0b..519f268 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/GradesActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/GradesActivity.java @@ -6,15 +6,13 @@ import java.text.DecimalFormat; import top.yvyan.guettable.R; import top.yvyan.guettable.data.GeneralData; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.service.fetch.StaticService; import top.yvyan.guettable.util.AppUtil; public class GradesActivity extends BaseFuncActivity { private GeneralData generalData; - private MoreDate moreDate; - @Override protected void childInit() { @@ -23,7 +21,6 @@ public class GradesActivity extends BaseFuncActivity { AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_credits)); generalData = GeneralData.newInstance(this); - moreDate = MoreDate.newInstance(this); } @Override @@ -37,7 +34,7 @@ public class GradesActivity extends BaseFuncActivity { TextView gradesYear5 = findViewById(R.id.grades_year_5); TextView gradesYear6 = findViewById(R.id.grades_year_6); - float[] grades = moreDate.getGrades(); + float[] grades = MoreData.getGrades(); DecimalFormat format = new DecimalFormat("0.00"); gradesMain.setText(format.format(grades[0])); gradesYear1.setText(format.format(grades[1])); @@ -52,7 +49,7 @@ public class GradesActivity extends BaseFuncActivity { public int updateData(String cookie) { float[] grades = StaticService.calculateGrades(this, cookie, Integer.parseInt(generalData.getGrade())); if (grades != null) { - moreDate.setGrades(grades); + MoreData.setGrades(grades); return 5; } else { return 1; diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/LibActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/LibActivity.java index d7b3c92..3484ba1 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/LibActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/LibActivity.java @@ -20,7 +20,6 @@ import static com.xuexiang.xui.XUI.getContext; public class LibActivity extends BaseFuncActivity { - private ScheduleData scheduleData; private GeneralData generalData; @Override @@ -28,7 +27,6 @@ public class LibActivity extends BaseFuncActivity { setTitle(getResources().getString(R.string.moreFun_lib_schedule)); AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_lib_schedule)); - scheduleData = ScheduleData.newInstance(this); generalData = GeneralData.newInstance(this); } @@ -36,7 +34,7 @@ public class LibActivity extends BaseFuncActivity { protected void showContent() { baseSetContentView(R.layout.recycler_view); RecyclerView recyclerView = findViewById(R.id.recycler_view_info); - List libBeans = scheduleData.getLibBeans(); + List libBeans = ScheduleData.getLibBeans(); if (libBeans.size() == 0) { showEmptyPage(); } else { @@ -51,8 +49,8 @@ public class LibActivity extends BaseFuncActivity { public int updateData(String cookie) { List libBeans = StaticService.getLab(this, cookie, generalData.getTerm()); if (libBeans != null) { - scheduleData.setLibBeans(libBeans); - scheduleData.setUpdate(true); + ScheduleData.setLibBeans(libBeans); + ScheduleData.setUpdate(true); return 5; } return 1; diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/PlannedCoursesActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/PlannedCoursesActivity.java index b413ee4..6632af2 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/PlannedCoursesActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/PlannedCoursesActivity.java @@ -11,7 +11,7 @@ import java.util.List; import top.yvyan.guettable.R; import top.yvyan.guettable.adapter.PlannedCourseAdapter; import top.yvyan.guettable.bean.PlannedCourseBean; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.data.SingleSettingData; import top.yvyan.guettable.service.fetch.StaticService; import top.yvyan.guettable.util.AppUtil; @@ -21,7 +21,6 @@ import static com.xuexiang.xui.XUI.getContext; public class PlannedCoursesActivity extends BaseFuncActivity { - private MoreDate moreDate; private SingleSettingData singleSettingData; @Override @@ -31,7 +30,6 @@ public class PlannedCoursesActivity extends BaseFuncActivity { openUpdate(); AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_plan_courses)); - moreDate = MoreDate.newInstance(this); singleSettingData = SingleSettingData.newInstance(this); } @@ -39,7 +37,7 @@ public class PlannedCoursesActivity extends BaseFuncActivity { protected void showContent() { baseSetContentView(R.layout.activity_planned_courses); RecyclerView recyclerView = findViewById(R.id.planned_course_info_recycler_view); - List plannedCourseBeans = moreDate.getPlannedCourseBeans(); + List plannedCourseBeans = MoreData.getPlannedCourseBeans(); if (singleSettingData.isHideRepeatScore()) { plannedCourseBeans = CourseUtil.ridRepeatScore(plannedCourseBeans); } @@ -81,8 +79,8 @@ public class PlannedCoursesActivity extends BaseFuncActivity { public int updateData(String cookie) { List plannedCourseBeans = StaticService.getPlannedCourseBeans(this, cookie); if (plannedCourseBeans != null) { - if (!AppUtil.equalList(plannedCourseBeans, moreDate.getPlannedCourseBeans())) { - moreDate.setPlannedCourseBeans(plannedCourseBeans); + if (!AppUtil.equalList(plannedCourseBeans, MoreData.getPlannedCourseBeans())) { + MoreData.setPlannedCourseBeans(plannedCourseBeans); update = true; } return 5; diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/ResitActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/ResitActivity.java index 72b9811..c091072 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/ResitActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/ResitActivity.java @@ -8,7 +8,7 @@ import java.util.List; import top.yvyan.guettable.R; import top.yvyan.guettable.adapter.ResitAdapter; import top.yvyan.guettable.bean.ResitBean; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.service.fetch.StaticService; import top.yvyan.guettable.util.AppUtil; @@ -16,22 +16,18 @@ import static com.xuexiang.xui.XUI.getContext; public class ResitActivity extends BaseFuncActivity { - private MoreDate moreDate; - @Override protected void childInit() { setTitle(getResources().getString(R.string.moreFun_resit_schedule)); openUpdate(); AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_resit_schedule)); - - moreDate = MoreDate.newInstance(getApplicationContext()); } @Override protected void showContent() { baseSetContentView(R.layout.recycler_view); RecyclerView recyclerView = findViewById(R.id.recycler_view_info); - List resitBeans = moreDate.getResitBeans(); + List resitBeans = MoreData.getResitBeans(); if (resitBeans.size() == 0) { showEmptyPage(); } else { @@ -45,8 +41,8 @@ public class ResitActivity extends BaseFuncActivity { public int updateData(String cookie) { List resitBeans = StaticService.getResit(this, cookie); if (resitBeans != null) { - if (!AppUtil.equalList(resitBeans, moreDate.getResitBeans())) { - moreDate.setResitBeans(resitBeans); + if (!AppUtil.equalList(resitBeans, MoreData.getResitBeans())) { + MoreData.setResitBeans(resitBeans); update = true; } return 5; diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/SelectedCourseActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/SelectedCourseActivity.java index 99f6b9d..58a7124 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/SelectedCourseActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/SelectedCourseActivity.java @@ -15,7 +15,7 @@ import top.yvyan.guettable.adapter.SelectedCourseAdapter; import top.yvyan.guettable.bean.SelectedCourseBean; import top.yvyan.guettable.bean.TermBean; import top.yvyan.guettable.data.GeneralData; -import top.yvyan.guettable.data.MoreDate; +import top.yvyan.guettable.data.MoreData; import top.yvyan.guettable.data.TokenData; import top.yvyan.guettable.service.IMoreFun; import top.yvyan.guettable.service.fetch.StaticService; @@ -26,7 +26,6 @@ public class SelectedCourseActivity extends BaseFuncActivity implements IMoreFun private GeneralData generalData; private TokenData tokenData; - private MoreDate moreDate; private MaterialSpinner spinner; private SelectedCourseAdapter adapter; private List terms; @@ -40,7 +39,6 @@ public class SelectedCourseActivity extends BaseFuncActivity implements IMoreFun setShowMore(false); generalData = GeneralData.newInstance(this); tokenData = TokenData.newInstance(this); - moreDate = MoreDate.newInstance(this); terms = new ArrayList<>(); curTerm = generalData.getTerm(); } @@ -48,7 +46,7 @@ public class SelectedCourseActivity extends BaseFuncActivity implements IMoreFun @Override protected void showContent() { baseSetContentView(R.layout.activity_selected_course); - List selectedCourseBeans = moreDate.getSelectedCourseBeans(); + List selectedCourseBeans = MoreData.getSelectedCourseBeans(); spinner = findViewById(R.id.spinner_course_term); rv = findViewById(R.id.rv_selected_course); rv.setLayoutManager(new LinearLayoutManager(this)); @@ -85,7 +83,7 @@ public class SelectedCourseActivity extends BaseFuncActivity implements IMoreFun if (selectedCourseBeans != null) { CourseUtil.BeanAttributeUtil beanAttributeUtil = new CourseUtil.BeanAttributeUtil(); Collections.sort(selectedCourseBeans, beanAttributeUtil); - moreDate.setSelectedCoursesBeans(selectedCourseBeans); + MoreData.setSelectedCoursesBeans(selectedCourseBeans); update = true; return 5; } @@ -121,7 +119,7 @@ public class SelectedCourseActivity extends BaseFuncActivity implements IMoreFun // 初始化学期集合 private void initTerm() { - List termBeans = moreDate.getTermBeans(); + List termBeans = MoreData.getTermBeans(); String grade = generalData.getGrade(); if (grade == null) { return; @@ -139,7 +137,7 @@ public class SelectedCourseActivity extends BaseFuncActivity implements IMoreFun new Thread(() -> { List allTerm = StaticService.getTerms(this, tokenData.getCookie()); if (allTerm != null) { - moreDate.setTermBeans(allTerm); + MoreData.setTermBeans(allTerm); terms.clear(); for (int i = 0; i < allTerm.size(); i++) { String substring = allTerm.get(i).getTerm().substring(0, 4); diff --git a/app/src/main/java/top/yvyan/guettable/service/AutoUpdate.java b/app/src/main/java/top/yvyan/guettable/service/AutoUpdate.java index 28f7b6d..e91f570 100644 --- a/app/src/main/java/top/yvyan/guettable/service/AutoUpdate.java +++ b/app/src/main/java/top/yvyan/guettable/service/AutoUpdate.java @@ -29,7 +29,6 @@ public class AutoUpdate { private final DayClassFragment fragment; private final AccountData accountData; - private final ScheduleData scheduleData; private final GeneralData generalData; private final TokenData tokenData; private final SettingData settingData; @@ -40,7 +39,6 @@ public class AutoUpdate { this.fragment = fragment; this.activity = fragment.getActivity(); accountData = AccountData.newInstance(activity); - scheduleData = ScheduleData.newInstance(activity); generalData = GeneralData.newInstance(activity); tokenData = TokenData.newInstance(activity); settingData = SettingData.newInstance(activity); @@ -153,7 +151,7 @@ public class AutoUpdate { ); if (getClass != null) { courseBeans = getClass; - scheduleData.setCourseBeans(courseBeans); + ScheduleData.setCourseBeans(courseBeans); } else { updateView(92); state = tokenData.refresh(); @@ -170,7 +168,7 @@ public class AutoUpdate { ); if (getClass != null) { courseBeans = getClass; - scheduleData.setCourseBeans(courseBeans); + ScheduleData.setCourseBeans(courseBeans); } else { updateView(3); return; @@ -186,7 +184,7 @@ public class AutoUpdate { if (examBeans != null) { CourseUtil.BeanAttributeUtil beanAttributeUtil = new CourseUtil.BeanAttributeUtil(); Collections.sort(examBeans, beanAttributeUtil); - scheduleData.setExamBeans(examBeans); + ScheduleData.setExamBeans(examBeans); } else { updateView(3); return; @@ -200,10 +198,10 @@ public class AutoUpdate { ); if (getLab != null) { updateView(5); - scheduleData.setLibBeans(getLab); - scheduleData.setUpdate(true); + ScheduleData.setLibBeans(getLab); + ScheduleData.setUpdate(true); generalData.setLastUpdateTime(System.currentTimeMillis()); - int maxWeek = scheduleData.getMaxWeek(); + int maxWeek = ScheduleData.getMaxWeek(); if (maxWeek > generalData.getMaxWeek()) { generalData.setMaxWeek(maxWeek); } diff --git a/app/src/main/java/top/yvyan/guettable/widget/WidgetService.java b/app/src/main/java/top/yvyan/guettable/widget/WidgetService.java index d0ee303..001d598 100644 --- a/app/src/main/java/top/yvyan/guettable/widget/WidgetService.java +++ b/app/src/main/java/top/yvyan/guettable/widget/WidgetService.java @@ -22,7 +22,6 @@ public class WidgetService extends RemoteViewsService { private GeneralData generalData; private SettingData settingData; - private ScheduleData scheduleData; private static final String TAG = "RemoteViewsService"; @Override @@ -32,7 +31,6 @@ public class WidgetService extends RemoteViewsService { try { generalData = GeneralData.newInstance(getApplicationContext()); settingData = SettingData.newInstance(getApplicationContext()); - scheduleData = ScheduleData.newInstance(getApplicationContext()); todayList = new ArrayList<>(getTodayList()); } catch (Exception e) { Log.d(TAG, "Exception: " + e.getMessage()); @@ -44,20 +42,20 @@ public class WidgetService extends RemoteViewsService { // 日课表的获取当日课程方法 private List getTodayList() { List list; - if (!scheduleData.getCourseBeans().isEmpty()) { - list = ScheduleSupport.transform(scheduleData.getCourseBeans()); + if (!ScheduleData.getCourseBeans().isEmpty()) { + list = ScheduleSupport.transform(ScheduleData.getCourseBeans()); } else { list = new ArrayList<>(); } - for (CourseBean courseBean : scheduleData.getUserCourseBeans()) { + for (CourseBean courseBean : ScheduleData.getUserCourseBeans()) { list.add(courseBean.getSchedule()); } if (settingData.getShowLibOnTable()) { - List labList = ScheduleSupport.transform(scheduleData.getLibBeans()); + List labList = ScheduleSupport.transform(ScheduleData.getLibBeans()); list.addAll(labList); } if (settingData.getShowExamOnTable()) { - for (ExamBean examBean : CourseUtil.combineExam(scheduleData.getExamBeans())) { + for (ExamBean examBean : CourseUtil.combineExam(ScheduleData.getExamBeans())) { if (examBean != null && examBean.getWeek() != 0) { list.add(examBean.getSchedule()); } diff --git a/app/src/main/java/top/yvyan/guettable/widget/WidgetServiceFactory.java b/app/src/main/java/top/yvyan/guettable/widget/WidgetServiceFactory.java index 2c0a872..118d6d4 100644 --- a/app/src/main/java/top/yvyan/guettable/widget/WidgetServiceFactory.java +++ b/app/src/main/java/top/yvyan/guettable/widget/WidgetServiceFactory.java @@ -29,7 +29,6 @@ public class WidgetServiceFactory implements RemoteViewsService.RemoteViewsFacto private List dataList; private GeneralData generalData; private SettingData settingData; - private ScheduleData scheduleData; private static final String TAG = "WidgetServiceFactory"; @@ -52,9 +51,6 @@ public class WidgetServiceFactory implements RemoteViewsService.RemoteViewsFacto if (settingData == null) { settingData = SettingData.newInstance(context); } - if (scheduleData == null) { - scheduleData = ScheduleData.newInstance(context); - } dataList = getTodayList(); } @@ -124,20 +120,20 @@ public class WidgetServiceFactory implements RemoteViewsService.RemoteViewsFacto // 日课表的获取当日课程方法 private List getTodayList() { List list; - if (!scheduleData.getCourseBeans().isEmpty()) { - list = ScheduleSupport.transform(scheduleData.getCourseBeans()); + if (!ScheduleData.getCourseBeans().isEmpty()) { + list = ScheduleSupport.transform(ScheduleData.getCourseBeans()); } else { list = new ArrayList<>(); } - for (CourseBean courseBean : scheduleData.getUserCourseBeans()) { + for (CourseBean courseBean : ScheduleData.getUserCourseBeans()) { list.add(courseBean.getSchedule()); } if (settingData.getShowLibOnTable()) { - List labList = ScheduleSupport.transform(scheduleData.getLibBeans()); + List labList = ScheduleSupport.transform(ScheduleData.getLibBeans()); list.addAll(labList); } if (settingData.getShowExamOnTable()) { - for (ExamBean examBean : CourseUtil.combineExam(scheduleData.getExamBeans())) { + for (ExamBean examBean : CourseUtil.combineExam(ScheduleData.getExamBeans())) { if (examBean != null && examBean.getWeek() != 0) { list.add(examBean.getSchedule()); } diff --git a/build.gradle b/build.gradle index 37c1339..f1b3e5e 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,15 @@ buildscript { repositories { google() - jcenter() + // 阿里云云效仓库:https://maven.aliyun.com/mvn/guide + maven { url 'https://maven.aliyun.com/repository/jcenter' } + maven { url 'https://maven.aliyun.com/repository/google' } + // 华为开源镜像:https://mirrors.huaweicloud.com + maven { url 'https://repo.huaweicloud.com/repository/maven' } + // JitPack 远程仓库:https://jitpack.io + maven { url 'https://jitpack.io' } + // MavenCentral 远程仓库:https://mvnrepository.com + mavenCentral() maven { url 'https://dl.bintray.com/umsdk/release' } } dependencies { @@ -16,7 +24,9 @@ buildscript { allprojects { repositories { google() - jcenter() + maven { url 'https://maven.aliyun.com/repository/jcenter' } + maven { url 'https://maven.aliyun.com/repository/google' } + maven { url 'https://repo.huaweicloud.com/repository/maven' } maven { url 'https://jitpack.io' } maven { url 'https://repo1.maven.org/maven2/' } maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } -- Gitee From 7c5fe4e1ab63c2aedbdce195f63359b3378aeb33 Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Wed, 20 Jul 2022 20:22:07 +0800 Subject: [PATCH 02/20] =?UTF-8?q?perf:=E7=AE=80=E5=8C=96=E7=B1=BB=20perf:?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=97=A0=E6=95=88=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../guettable/activity/DetailActivity.java | 2 +- .../yvyan/guettable/data/DetailClassData.java | 20 ++------ .../yvyan/guettable/data/ScheduleData.java | 5 +- .../fragment/CourseTableFragment.java | 4 +- .../guettable/moreFun/MoreUrlActivity.java | 8 ---- app/src/main/res/layout/activity_more_url.xml | 48 ------------------- app/src/main/res/values/strings.xml | 4 -- 7 files changed, 7 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/top/yvyan/guettable/activity/DetailActivity.java b/app/src/main/java/top/yvyan/guettable/activity/DetailActivity.java index b1a482e..b1bbcb3 100644 --- a/app/src/main/java/top/yvyan/guettable/activity/DetailActivity.java +++ b/app/src/main/java/top/yvyan/guettable/activity/DetailActivity.java @@ -44,7 +44,7 @@ public class DetailActivity extends AppCompatActivity { SingleSettingData singleSettingData = SingleSettingData.newInstance(getApplicationContext()); BackgroundUtil.setPageTheme(this, singleSettingData.getThemeId()); setContentView(R.layout.activity_detail); - schedules = DetailClassData.newInstance().getCourseBeans(); + schedules = DetailClassData.getCourseBeans(); //透明状态栏 Window window = this.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); diff --git a/app/src/main/java/top/yvyan/guettable/data/DetailClassData.java b/app/src/main/java/top/yvyan/guettable/data/DetailClassData.java index 19ad022..19d17d8 100644 --- a/app/src/main/java/top/yvyan/guettable/data/DetailClassData.java +++ b/app/src/main/java/top/yvyan/guettable/data/DetailClassData.java @@ -5,25 +5,13 @@ import com.zhuangfei.timetable.model.Schedule; import java.util.List; public class DetailClassData { - private static DetailClassData detailClassData; + private static List schedules; - private List schedules; - - private DetailClassData() { - } - - public static DetailClassData newInstance() { - if (detailClassData == null) { - detailClassData = new DetailClassData(); - } - return detailClassData; - } - - public List getCourseBeans() { + public static List getCourseBeans() { return schedules; } - public void setCourseBeans(List schedules) { - this.schedules = schedules; + public static void setCourseBeans(List schedules) { + DetailClassData.schedules = schedules; } } diff --git a/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java b/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java index 136dbf9..505b1dd 100644 --- a/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java +++ b/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java @@ -72,10 +72,7 @@ public class ScheduleData extends BaseData { public static long getUserCourseNo() { MMKV mmkv = MMKV.defaultMMKV(); - long userCourseNo = mmkv.decodeLong(USER_COURSE_NO); - if (userCourseNo == 0) { - userCourseNo = 1; - } + long userCourseNo = mmkv.decodeLong(USER_COURSE_NO, 1); setUserCourseNo(userCourseNo + 1); return userCourseNo; } diff --git a/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java b/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java index 8ca99e4..e02d9b0 100644 --- a/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java +++ b/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java @@ -54,7 +54,6 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene private GeneralData generalData; private SingleSettingData singleSettingData; - private DetailClassData detailClassData; private SettingData settingData; //记录切换的周次,不一定是当前周 int target; @@ -91,7 +90,6 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene private void initData() { generalData = GeneralData.newInstance(getActivity()); singleSettingData = SingleSettingData.newInstance(getActivity()); - detailClassData = DetailClassData.newInstance(); settingData = SettingData.newInstance(getActivity()); } @@ -248,7 +246,7 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene * @param beans beans */ protected void display(List beans) { - detailClassData.setCourseBeans(beans); + DetailClassData.setCourseBeans(beans); Intent intent = new Intent(getContext(), DetailActivity.class); intent.putExtra("week", target); startActivityForResult(intent, DetailActivity.REQUEST_CODE); diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/MoreUrlActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/MoreUrlActivity.java index 59c5c6c..ff06c64 100644 --- a/app/src/main/java/top/yvyan/guettable/moreFun/MoreUrlActivity.java +++ b/app/src/main/java/top/yvyan/guettable/moreFun/MoreUrlActivity.java @@ -88,12 +88,4 @@ public class MoreUrlActivity extends AppCompatActivity { getResources().getString(R.string.url_staff_vpn), null); } - - public void news1(View view) { - openBrowser(getResources().getString(R.string.url_news_1)); - } - - public void news2(View view) { - openBrowser(getResources().getString(R.string.url_new_2)); - } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_more_url.xml b/app/src/main/res/layout/activity_more_url.xml index 0148ddd..078a13e 100644 --- a/app/src/main/res/layout/activity_more_url.xml +++ b/app/src/main/res/layout/activity_more_url.xml @@ -52,54 +52,6 @@ - - - - - - - - - - - - - - - - https://v.guet.edu.cn/http/77726476706e69737468656265737421e5e3529f69377d556a468ca88d1b203b/CourseArrange.aspx?wrdrecordvisit=1640584485000 http://utsc.guet.edu.cn/EmptyClassRoom.aspx https://v.guet.edu.cn/http/77726476706e69737468656265737421e5e3529f69377d556a468ca88d1b203b/EmptyClassRoom.aspx?mCode=001503 - 校内公告 - http://weixin.guet.edu.cn/News?type=0 - 校内通知 - http://weixin.guet.edu.cn/News?type=4 桂电课程表交流群 b6B5JNbpsHV0scWnS1amN7NH3Ry-LlrP -- Gitee From c84d53801ce0537889d2e531d9766317a0586c57 Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Thu, 21 Jul 2022 20:57:22 +0800 Subject: [PATCH 03/20] =?UTF-8?q?feat:=E5=9F=BA=E4=BA=8Egitee=E7=9A=84?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 7 + .../guettable/Http/entity/ApiResult.java | 91 +++++++++ .../top/yvyan/guettable/bean/TipInfo.java | 59 ++++++ .../yvyan/guettable/util/GuideTipsDialog.java | 190 ++++++++++++++++++ .../bg_dialog_common_tip_corner_white.xml | 9 + .../res/drawable/ic_action_close_white.xml | 22 ++ .../main/res/drawable/img_guide_tip_top.xml | 36 ++++ app/src/main/res/layout/dialog_guide.xml | 115 +++++++++++ app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/dimens.xml | 13 ++ 10 files changed, 544 insertions(+) create mode 100644 app/src/main/java/top/yvyan/guettable/Http/entity/ApiResult.java create mode 100644 app/src/main/java/top/yvyan/guettable/bean/TipInfo.java create mode 100644 app/src/main/java/top/yvyan/guettable/util/GuideTipsDialog.java create mode 100644 app/src/main/res/drawable/bg_dialog_common_tip_corner_white.xml create mode 100644 app/src/main/res/drawable/ic_action_close_white.xml create mode 100644 app/src/main/res/drawable/img_guide_tip_top.xml create mode 100644 app/src/main/res/layout/dialog_guide.xml diff --git a/app/build.gradle b/app/build.gradle index b259694..ee7cc2f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,4 +72,11 @@ dependencies { implementation 'com.tencent.bugly:nativecrashreport:3.9.1' //键值对存储 implementation 'com.tencent:mmkv:1.2.13' + //富文本 + implementation 'com.zzhoujay.richtext:richtext:3.0.8' + //工具类 + implementation 'com.github.xuexiangjys.XUtil:xutil-core:2.0.0' + implementation 'com.github.xuexiangjys.XUtil:xutil-sub:2.0.0' + + implementation 'com.zhy:okhttputils:2.6.2' } \ No newline at end of file diff --git a/app/src/main/java/top/yvyan/guettable/Http/entity/ApiResult.java b/app/src/main/java/top/yvyan/guettable/Http/entity/ApiResult.java new file mode 100644 index 0000000..bd8b2e9 --- /dev/null +++ b/app/src/main/java/top/yvyan/guettable/Http/entity/ApiResult.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2018 xuexiangjys(xuexiangjys@163.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.yvyan.guettable.Http.entity; + +import androidx.annotation.Keep; + +import com.google.gson.annotations.SerializedName; + +/** + * 提供的默认的标注返回api + * + * @author xuexiang + * @since 2018/5/22 下午4:22 + */ +@Keep +public class ApiResult { + public final static String CODE = "Code"; + public final static String MSG = "Msg"; + public final static String DATA = "Data"; + + @SerializedName(value = CODE, alternate = {"code"}) + private int Code; + @SerializedName(value = MSG, alternate = {"msg"}) + private String Msg; + @SerializedName(value = DATA, alternate = {"data"}) + private T Data; + + public int getCode() { + return Code; + } + + public ApiResult setCode(int code) { + Code = code; + return this; + } + + public String getMsg() { + return Msg; + } + + public ApiResult setMsg(String msg) { + Msg = msg; + return this; + } + + public ApiResult setData(T data) { + Data = data; + return this; + } + + /** + * 获取请求响应的数据,自定义api的时候需要重写【很关键】 + * + * @return + */ + public T getData() { + return Data; + } + + /** + * 是否请求成功,自定义api的时候需要重写【很关键】 + * + * @return + */ + public boolean isSuccess() { + return getCode() == 0; + } + + @Override + public String toString() { + return "ApiResult{" + + "Code='" + Code + '\'' + + ", Msg='" + Msg + '\'' + + ", Data=" + Data + + '}'; + } +} diff --git a/app/src/main/java/top/yvyan/guettable/bean/TipInfo.java b/app/src/main/java/top/yvyan/guettable/bean/TipInfo.java new file mode 100644 index 0000000..f408148 --- /dev/null +++ b/app/src/main/java/top/yvyan/guettable/bean/TipInfo.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2021 xuexiangjys(xuexiangjys@163.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package top.yvyan.guettable.bean; + +import androidx.annotation.Keep; + +/** + * @author xuexiang + * @since 2019-08-28 15:35 + */ +@Keep +public class TipInfo { + /** + * title : 小贴士3 + * content :

欢迎关注我的微信公众号:我的Android开源之旅。


+ */ + + private String title; + private String content; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + @Override + public String toString() { + return "TipInfo{" + + "title='" + title + '\'' + + ", content='" + content + '\'' + + '}'; + } +} diff --git a/app/src/main/java/top/yvyan/guettable/util/GuideTipsDialog.java b/app/src/main/java/top/yvyan/guettable/util/GuideTipsDialog.java new file mode 100644 index 0000000..548c64f --- /dev/null +++ b/app/src/main/java/top/yvyan/guettable/util/GuideTipsDialog.java @@ -0,0 +1,190 @@ +package top.yvyan.guettable.util; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.google.gson.Gson; +import com.xuexiang.xui.widget.dialog.BaseDialog; +import com.xuexiang.xutil.common.ObjectUtils; +import com.xuexiang.xutil.net.type.TypeBuilder; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; +import com.zzhoujay.richtext.RichText; + +import java.lang.reflect.Type; +import java.util.List; + +import okhttp3.Call; +import top.yvyan.guettable.Http.entity.ApiResult; +import top.yvyan.guettable.R; +import top.yvyan.guettable.bean.TipInfo; + +public class GuideTipsDialog extends BaseDialog implements View.OnClickListener { + private static final String TIPS_URL = "https://gitee.com/fireworkwing/resource/raw/master/GuetTable/tips.json"; + + private List mTips; + private int mIndex = -1; + + private TextView mTvPrevious; + private TextView mTvNext; + + private TextView mTvTitle; + private TextView mTvContent; + + /** + * 显示提示 + * + * @param context 上下文 + */ + public static void showTips(final Context context) { + showTipsForce(context); + } + + /** + * 强制显示提示 + * + * @param context 上下文 + */ + public static void showTipsForce(Context context) { + OkHttpUtils.get() + .url(TIPS_URL) + .build() + .execute(new StringCallback() { + @Override + public void onError(Call call, Exception e, int id) { + + } + + @Override + public void onResponse(String response, int id) { + showTips(context, response); + } + }); + } + + + private static void showTips(Context context, String response) { + Type type = TypeBuilder.newInstance(ApiResult.class) + .beginSubType(List.class) + .addTypeParam(TipInfo.class) + .endSubType() + .build(); + + ApiResult> apiResult = new Gson().fromJson(response, type); + if (apiResult != null) { + List tips = apiResult.getData(); + if (ObjectUtils.isNotEmpty(tips)) { + new GuideTipsDialog(context, tips).show(); + } + } + } + + public GuideTipsDialog(Context context, @NonNull List tips) { + super(context, R.layout.dialog_guide); + initViews(); + updateTips(tips); + } + + /** + * 初始化弹窗 + */ + private void initViews() { + mTvTitle = findViewById(R.id.tv_title); + mTvContent = findViewById(R.id.tv_content); + ImageView ivClose = findViewById(R.id.iv_close); + + mTvPrevious = findViewById(R.id.tv_previous); + mTvNext = findViewById(R.id.tv_next); + + if (ivClose != null) { + ivClose.setOnClickListener(this); + } + mTvPrevious.setOnClickListener(this); + mTvNext.setOnClickListener(this); + mTvPrevious.setEnabled(false); + mTvNext.setEnabled(true); + setCancelable(false); + setCanceledOnTouchOutside(true); + } + + /** + * 更新提示信息 + * + * @param tips 提示信息 + */ + private void updateTips(List tips) { + mTips = tips; + if (mTips != null && mTips.size() > 0 && mTvContent != null) { + mIndex = 0; + showRichText(mTips.get(mIndex)); + } + } + + /** + * 切换提示信息 + * + * @param index 索引 + */ + private void switchTipInfo(int index) { + if (mTips != null && mTips.size() > 0 && mTvContent != null) { + if (index >= 0 && index <= mTips.size() - 1) { + showRichText(mTips.get(index)); + if (index == 0) { + mTvPrevious.setEnabled(false); + mTvNext.setEnabled(true); + } else if (index == mTips.size() - 1) { + mTvPrevious.setEnabled(true); + mTvNext.setEnabled(false); + } else { + mTvPrevious.setEnabled(true); + mTvNext.setEnabled(true); + } + } + } + } + + /** + * 显示富文本 + * + * @param tipInfo 提示信息 + */ + private void showRichText(TipInfo tipInfo) { + mTvTitle.setText(tipInfo.getTitle()); + RichText.fromHtml(tipInfo.getContent()) + .bind(this) + .into(mTvContent); + } + + @SuppressLint("NonConstantResourceId") + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.iv_close: + dismiss(); + break; + case R.id.tv_previous: + if (mIndex > 0) { + mIndex--; + switchTipInfo(mIndex); + } + break; + case R.id.tv_next: + if (mIndex < mTips.size() - 1) { + mIndex++; + switchTipInfo(mIndex); + } + break; + default: + break; + } + } + + @Override + public void onDetachedFromWindow() { + } +} diff --git a/app/src/main/res/drawable/bg_dialog_common_tip_corner_white.xml b/app/src/main/res/drawable/bg_dialog_common_tip_corner_white.xml new file mode 100644 index 0000000..dbcadad --- /dev/null +++ b/app/src/main/res/drawable/bg_dialog_common_tip_corner_white.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_action_close_white.xml b/app/src/main/res/drawable/ic_action_close_white.xml new file mode 100644 index 0000000..75c5dee --- /dev/null +++ b/app/src/main/res/drawable/ic_action_close_white.xml @@ -0,0 +1,22 @@ + + + + diff --git a/app/src/main/res/drawable/img_guide_tip_top.xml b/app/src/main/res/drawable/img_guide_tip_top.xml new file mode 100644 index 0000000..f684094 --- /dev/null +++ b/app/src/main/res/drawable/img_guide_tip_top.xml @@ -0,0 +1,36 @@ + + + + + + + diff --git a/app/src/main/res/layout/dialog_guide.xml b/app/src/main/res/layout/dialog_guide.xml new file mode 100644 index 0000000..aeeb1d1 --- /dev/null +++ b/app/src/main/res/layout/dialog_guide.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index c1bf31e..04abb58 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -14,4 +14,6 @@ #FB7299 #FF6705 #06C160 + + #FFF1F1F1 \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 4db8c59..88fc619 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -7,4 +7,17 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout --> 0dp + 4dp + 5dp + 6dp + 8dp + 10dp + 12dp + 14dp + 16dp + 18dp + 20dp + 24dp + 30dp + \ No newline at end of file -- Gitee From a90bef760a31e400a350d102d0afe1dfe7b21ecd Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Fri, 17 Mar 2023 21:49:00 +0800 Subject: [PATCH 04/20] =?UTF-8?q?fix:=E5=90=88=E5=B9=B6=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/top/yvyan/guettable/activity/LoginActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java index 92d42e5..5996b73 100644 --- a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java +++ b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java @@ -287,7 +287,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { List allTerm = StaticService.getTerms(this, tokenData.getCookie()); if (allTerm != null) { - MoreData.newInstance(this).setTermBeans(allTerm); + MoreData.setTermBeans(allTerm); } } catch (Exception e) { UMCrash.generateCustomLog(e, "getInfo"); -- Gitee From 54a9e8936421acb908890738af30a8282ea20364 Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Fri, 17 Mar 2023 22:34:27 +0800 Subject: [PATCH 05/20] =?UTF-8?q?fix:=E8=BF=81=E7=A7=BB=E4=B9=8B=E5=90=8E?= =?UTF-8?q?=E6=97=A0=E6=95=B0=E6=8D=AE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yvyan/guettable/baseFun/FirstLoad.java | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/top/yvyan/guettable/baseFun/FirstLoad.java b/app/src/main/java/top/yvyan/guettable/baseFun/FirstLoad.java index 55f2d02..f24a16c 100644 --- a/app/src/main/java/top/yvyan/guettable/baseFun/FirstLoad.java +++ b/app/src/main/java/top/yvyan/guettable/baseFun/FirstLoad.java @@ -9,7 +9,7 @@ import java.util.List; import top.yvyan.guettable.activity.SettingActivity; import top.yvyan.guettable.bean.ExamBean; -import top.yvyan.guettable.data.AccountData; +import top.yvyan.guettable.data.GeneralData; import top.yvyan.guettable.data.ScheduleData; import top.yvyan.guettable.util.AppUtil; @@ -51,18 +51,24 @@ public class FirstLoad { */ private void updateDate(int i) { switch (i) { - case 36: - update_36(); - break; case 40: //修复考试安排信息错误导致的闪退问题 update_40(); break; + case 52: + update_52(); default: break; } } + /** + * 52->53需要进行的操作 + */ + private void update_52() { + GeneralData.newInstance(context).setLastUpdateTime(-1); + } + /** * 40->41需要进行的操作 */ @@ -76,22 +82,6 @@ public class FirstLoad { ScheduleData.setExamBeans(examBeans); } - /** - * 36->37需要进行的操作 - */ - private void update_36() { - //修复密码丢失导致的登录错误 - AccountData accountData = AccountData.newInstance(context); - if (accountData.getIsLogin()) { - if (accountData.getVPNPwd() == null || accountData.getVPNPwd().isEmpty()) { - accountData.logoff(); - } - if (accountData.getBkjwPwd() == null || accountData.getBkjwPwd().isEmpty()) { - accountData.logoff(); - } - } - } - private void openUpdate() { //打开检查更新 SharedPreferences.Editor mEditor = PreferenceManager.getDefaultSharedPreferences(context).edit(); -- Gitee From a0b89b9357dde12189782e36e1ac06ecfc819d3b Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Fri, 17 Mar 2023 22:51:15 +0800 Subject: [PATCH 06/20] =?UTF-8?q?perf:=E8=B0=83=E8=8A=82=E6=96=87=E5=AD=97?= =?UTF-8?q?=E9=97=B4=E8=B7=9D=EF=BC=8C=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/planned_course_cardview.xml | 9 ++++++--- app/src/main/res/layout/score_cardview.xml | 7 +++++-- app/src/main/res/values/dimens.xml | 7 ------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/layout/planned_course_cardview.xml b/app/src/main/res/layout/planned_course_cardview.xml index 82d2e30..928e5ea 100644 --- a/app/src/main/res/layout/planned_course_cardview.xml +++ b/app/src/main/res/layout/planned_course_cardview.xml @@ -50,10 +50,13 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="10dp" - android:layout_marginTop="3dp" - android:layout_marginBottom="3dp" - android:textColor="#ff000000" + android:layout_marginTop="5dp" + android:layout_marginBottom="5dp" + android:textColor="#000000" android:textSize="16sp" + android:typeface="serif" + android:textStyle="bold" + android:letterSpacing="0.1" app:layout_constraintEnd_toStartOf="@+id/guideline2" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/score_cardview.xml b/app/src/main/res/layout/score_cardview.xml index 8b1bcd4..9f74fde 100644 --- a/app/src/main/res/layout/score_cardview.xml +++ b/app/src/main/res/layout/score_cardview.xml @@ -59,7 +59,10 @@ android:layout_marginStart="10dp" android:layout_marginTop="4dp" android:textColor="#000000" - android:textSize="14sp" + android:textSize="16sp" + android:typeface="serif" + android:textStyle="bold" + android:letterSpacing="0.1" app:layout_constraintEnd_toStartOf="@+id/guideline2" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -71,7 +74,7 @@ android:layout_marginStart="10dp" android:layout_marginTop="1dp" android:layout_marginBottom="4dp" - android:textSize="13sp" + android:textSize="14sp" app:layout_constraintEnd_toStartOf="@+id/guideline2" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/course_name" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 88fc619..cd2711c 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -7,17 +7,10 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout --> 0dp - 4dp 5dp - 6dp 8dp 10dp - 12dp - 14dp 16dp - 18dp 20dp - 24dp - 30dp \ No newline at end of file -- Gitee From 4e75827c9de0e679cc72d25c13455ac5751d5dfb Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Sat, 18 Mar 2023 16:45:21 +0800 Subject: [PATCH 07/20] =?UTF-8?q?perf:=E5=8E=BB=E6=8E=89=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../top/yvyan/guettable/Gson/AvgTeacher.java | 99 --------- .../guettable/Gson/AvgTeacherFormGet.java | 189 ------------------ .../guettable/Gson/AvgTeacherFormSend.java | 119 ----------- .../top/yvyan/guettable/Gson/AvgTextbook.java | 58 ------ .../yvyan/guettable/Gson/AvgTextbookData.java | 85 -------- .../guettable/Gson/AvgTextbookFormGet.java | 180 ----------------- .../yvyan/guettable/Gson/LoginResponse.java | 22 -- .../top/yvyan/guettable/Http/GetBitmap.java | 118 ----------- .../guettable/activity/LoginActivity.java | 40 ++-- .../guettable/adapter/AvgTeacherAdapter.java | 54 ----- .../guettable/adapter/AvgTextbookAdapter.java | 54 ----- .../yvyan/guettable/bean/AvgTeacherBean.java | 29 --- .../yvyan/guettable/bean/AvgTextbookBean.java | 29 --- .../top/yvyan/guettable/data/AccountData.java | 27 +-- .../top/yvyan/guettable/data/BaseData.java | 3 + .../yvyan/guettable/data/ScheduleData.java | 2 +- .../top/yvyan/guettable/data/TokenData.java | 4 +- .../fragment/CourseTableFragment.java | 11 +- .../yvyan/guettable/service/fetch/Net.java | 2 +- .../top/yvyan/guettable/util/RSAUtil.java | 60 ------ .../yvyan/guettable/util/SerializeUtil.java | 45 ----- app/src/main/res/layout/activity_login.xml | 4 +- app/src/main/res/layout/teacher_cardview.xml | 44 ---- app/src/main/res/layout/textbook_cardview.xml | 44 ---- 24 files changed, 42 insertions(+), 1280 deletions(-) delete mode 100644 app/src/main/java/top/yvyan/guettable/Gson/AvgTeacher.java delete mode 100644 app/src/main/java/top/yvyan/guettable/Gson/AvgTeacherFormGet.java delete mode 100644 app/src/main/java/top/yvyan/guettable/Gson/AvgTeacherFormSend.java delete mode 100644 app/src/main/java/top/yvyan/guettable/Gson/AvgTextbook.java delete mode 100644 app/src/main/java/top/yvyan/guettable/Gson/AvgTextbookData.java delete mode 100644 app/src/main/java/top/yvyan/guettable/Gson/AvgTextbookFormGet.java delete mode 100644 app/src/main/java/top/yvyan/guettable/Gson/LoginResponse.java delete mode 100644 app/src/main/java/top/yvyan/guettable/Http/GetBitmap.java delete mode 100644 app/src/main/java/top/yvyan/guettable/adapter/AvgTeacherAdapter.java delete mode 100644 app/src/main/java/top/yvyan/guettable/adapter/AvgTextbookAdapter.java delete mode 100644 app/src/main/java/top/yvyan/guettable/bean/AvgTeacherBean.java delete mode 100644 app/src/main/java/top/yvyan/guettable/bean/AvgTextbookBean.java delete mode 100644 app/src/main/java/top/yvyan/guettable/util/RSAUtil.java delete mode 100644 app/src/main/java/top/yvyan/guettable/util/SerializeUtil.java delete mode 100644 app/src/main/res/layout/teacher_cardview.xml delete mode 100644 app/src/main/res/layout/textbook_cardview.xml diff --git a/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacher.java b/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacher.java deleted file mode 100644 index 8ff700c..0000000 --- a/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacher.java +++ /dev/null @@ -1,99 +0,0 @@ -package top.yvyan.guettable.Gson; - -public class AvgTeacher { - private String term; - private String stid; - private String courseid; - private String teacherno; - private String courseno; - private String cname; - private String name; - private int lb; - private int chk; - private boolean can; - public void setTerm(String term) { - this.term = term; - } - public String getTerm() { - return term; - } - - public void setStid(String stid) { - this.stid = stid; - } - public String getStid() { - return stid; - } - - public void setCourseid(String courseid) { - this.courseid = courseid; - } - public String getCourseid() { - return courseid; - } - - public void setTeacherno(String teacherno) { - this.teacherno = teacherno; - } - public String getTeacherno() { - return teacherno; - } - - public void setCourseno(String courseno) { - this.courseno = courseno; - } - public String getCourseno() { - return courseno; - } - - public void setCname(String cname) { - this.cname = cname; - } - public String getCname() { - return cname; - } - - public void setName(String name) { - this.name = name; - } - public String getName() { - return name; - } - - public void setLb(int lb) { - this.lb = lb; - } - public int getLb() { - return lb; - } - - public void setChk(int chk) { - this.chk = chk; - } - public int getChk() { - return chk; - } - - public void setCan(boolean can) { - this.can = can; - } - public boolean getCan() { - return can; - } - - @Override - public String toString() { - return "AvgTeacher{" + - "term='" + term + '\'' + - ", stid='" + stid + '\'' + - ", courseid='" + courseid + '\'' + - ", teacherno='" + teacherno + '\'' + - ", courseno='" + courseno + '\'' + - ", cname='" + cname + '\'' + - ", name='" + name + '\'' + - ", lb=" + lb + - ", chk='" + chk + '\'' + - ", can=" + can + - '}'; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacherFormGet.java b/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacherFormGet.java deleted file mode 100644 index f9a3e3c..0000000 --- a/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacherFormGet.java +++ /dev/null @@ -1,189 +0,0 @@ -package top.yvyan.guettable.Gson; - -public class AvgTeacherFormGet { - private int lsh; - private String term; - private String mc; - private String nr; - private int xh; - private String lb; - private double qz; - private String zbnh; - private String dja; - private int afz; - private String djb; - private int bfz; - private String djc; - private int cfz; - private String djd; - private int dfz; - private String dje; - private int efz; - private int zt; - private String score; - public void setLsh(int lsh) { - this.lsh = lsh; - } - public int getLsh() { - return lsh; - } - - public void setTerm(String term) { - this.term = term; - } - public String getTerm() { - return term; - } - - public void setMc(String mc) { - this.mc = mc; - } - public String getMc() { - return mc; - } - - public void setNr(String nr) { - this.nr = nr; - } - public String getNr() { - return nr; - } - - public void setXh(int xh) { - this.xh = xh; - } - public int getXh() { - return xh; - } - - public void setLb(String lb) { - this.lb = lb; - } - public String getLb() { - return lb; - } - - public void setQz(double qz) { - this.qz = qz; - } - public double getQz() { - return qz; - } - - public void setZbnh(String zbnh) { - this.zbnh = zbnh; - } - public String getZbnh() { - return zbnh; - } - - public void setDja(String dja) { - this.dja = dja; - } - public String getDja() { - return dja; - } - - public void setAfz(int afz) { - this.afz = afz; - } - public int getAfz() { - return afz; - } - - public void setDjb(String djb) { - this.djb = djb; - } - public String getDjb() { - return djb; - } - - public void setBfz(int bfz) { - this.bfz = bfz; - } - public int getBfz() { - return bfz; - } - - public void setDjc(String djc) { - this.djc = djc; - } - public String getDjc() { - return djc; - } - - public void setCfz(int cfz) { - this.cfz = cfz; - } - public int getCfz() { - return cfz; - } - - public void setDjd(String djd) { - this.djd = djd; - } - public String getDjd() { - return djd; - } - - public void setDfz(int dfz) { - this.dfz = dfz; - } - public int getDfz() { - return dfz; - } - - public void setDje(String dje) { - this.dje = dje; - } - public String getDje() { - return dje; - } - - public void setEfz(int efz) { - this.efz = efz; - } - public int getEfz() { - return efz; - } - - public void setZt(int zt) { - this.zt = zt; - } - public int getZt() { - return zt; - } - - public void setScore(String score) { - this.score = score; - } - public String getScore() { - return score; - } - - @Override - public String toString() { - return "AvgTeacherFormGet{" + - "lsh=" + lsh + - ", term='" + term + '\'' + - ", mc='" + mc + '\'' + - ", nr='" + nr + '\'' + - ", xh=" + xh + - ", lb='" + lb + '\'' + - ", qz=" + qz + - ", zbnh='" + zbnh + '\'' + - ", dja='" + dja + '\'' + - ", afz=" + afz + - ", djb='" + djb + '\'' + - ", bfz=" + bfz + - ", djc='" + djc + '\'' + - ", cfz=" + cfz + - ", djd='" + djd + '\'' + - ", dfz=" + dfz + - ", dje='" + dje + '\'' + - ", efz=" + efz + - ", zt=" + zt + - ", score='" + score + '\'' + - '}'; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacherFormSend.java b/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacherFormSend.java deleted file mode 100644 index 16e35bf..0000000 --- a/app/src/main/java/top/yvyan/guettable/Gson/AvgTeacherFormSend.java +++ /dev/null @@ -1,119 +0,0 @@ -package top.yvyan.guettable.Gson; - -import android.util.Log; - -import top.yvyan.guettable.util.AppUtil; - -public class AvgTeacherFormSend { - private int afz; - private int bfz; - private int cfz; - private int dfz; - private int efz; - private String courseid; - private String courseno; - private String dja; - private String djb; - private String djc; - private String djd; - private String dje; - private int lb = 1; - private int lsh; - private String nr; - private double qz; - private int score = 100; - private String teacherno; - private String term; - private String zbnh; - private int zp = 0; - - public AvgTeacherFormSend(AvgTeacherFormGet avgTeacherFormGet, String courseId, String courseNo, String teacherNo, String term) { - this.afz = avgTeacherFormGet.getAfz(); - this.bfz = avgTeacherFormGet.getBfz(); - this.cfz = avgTeacherFormGet.getCfz(); - this.dfz = avgTeacherFormGet.getDfz(); - this.efz = avgTeacherFormGet.getEfz(); - this.courseid = courseId; - this.courseno = courseNo; - this.dja = AppUtil.encode(avgTeacherFormGet.getDja()); - this.djb = AppUtil.encode(avgTeacherFormGet.getDjb()); - this.djc = AppUtil.encode(avgTeacherFormGet.getDjc()); - this.djd = AppUtil.encode(avgTeacherFormGet.getDjd()); - this.dje = AppUtil.encode(avgTeacherFormGet.getDje()); - this.lsh = avgTeacherFormGet.getLsh(); - String str = avgTeacherFormGet.getNr(); - if (str.contains("(")) { - str = str.substring(1, str.length() - 1); - } - this.nr = str; - this.qz = avgTeacherFormGet.getQz(); - this.teacherno = teacherNo; - this.term = term; - this.zbnh = AppUtil.encode(avgTeacherFormGet.getZbnh()); - Log.d("testNr", nr); - } - - public AvgTeacherFormSend(int afz, int bfz, int cfz, int dfz, int efz, String courseid, String courseno, String dja, String djb, String djc, String djd, String dje, int lsh, String nr, double qz, String teacherno, String term, String zbnh) { - this.afz = afz; - this.bfz = bfz; - this.cfz = cfz; - this.dfz = dfz; - this.efz = efz; - this.courseid = courseid; - this.courseno = courseno; - this.dja = dja; - this.djb = djb; - this.djc = djc; - this.djd = djd; - this.dje = dje; - this.lsh = lsh; - this.nr = nr; - this.qz = qz; - this.teacherno = teacherno; - this.term = term; - this.zbnh = zbnh; - } - - public String getTerm() { - return term; - } - - public String getCourseno() { - return courseno; - } - - public String getTeacherno() { - return teacherno; - } - - public String getCourseid() { - return courseid; - } - - @Override - public String toString() { - return "AvgTeacherFormSend{" + - "afz=" + afz + - ", bfz=" + bfz + - ", cfz=" + cfz + - ", dfz=" + dfz + - ", efz=" + efz + - ", courseid='" + courseid + '\'' + - ", courseno='" + courseno + '\'' + - ", dja='" + dja + '\'' + - ", djb='" + djb + '\'' + - ", djc='" + djc + '\'' + - ", djd='" + djd + '\'' + - ", dje='" + dje + '\'' + - ", lb=" + lb + - ", lsh=" + lsh + - ", nr='" + nr + '\'' + - ", qz=" + qz + - ", score=" + score + - ", teacherno='" + teacherno + '\'' + - ", term='" + term + '\'' + - ", zbnh='" + zbnh + '\'' + - ", zp=" + zp + - '}'; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbook.java b/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbook.java deleted file mode 100644 index 3b1786c..0000000 --- a/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbook.java +++ /dev/null @@ -1,58 +0,0 @@ -package top.yvyan.guettable.Gson; - -public class AvgTextbook { - private String term; - private String courseid; - private String cname; - private int lsh; - private String name; - private String dptno; - - public String getTerm() { - return term; - } - - public void setTerm(String term) { - this.term = term; - } - - public String getCourseid() { - return courseid; - } - - public void setCourseid(String courseid) { - this.courseid = courseid; - } - - public String getCname() { - return cname; - } - - public void setCname(String cname) { - this.cname = cname; - } - - public int getLsh() { - return lsh; - } - - public void setLsh(int lsh) { - this.lsh = lsh; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDptno() { - return dptno; - } - - public void setDptno(String dptno) { - this.dptno = dptno; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbookData.java b/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbookData.java deleted file mode 100644 index 4ce5000..0000000 --- a/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbookData.java +++ /dev/null @@ -1,85 +0,0 @@ -package top.yvyan.guettable.Gson; - -public class AvgTextbookData { - private String term; - private String userid; - private String type; - private int checked; - private int lsh; - private String courseid; - private String dptno; - private double score; - private String comm; - - public String getTerm() { - return term; - } - - public void setTerm(String term) { - this.term = term; - } - - public String getUserid() { - return userid; - } - - public void setUserid(String userid) { - this.userid = userid; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public int getChecked() { - return checked; - } - - public void setChecked(int checked) { - this.checked = checked; - } - - public int getLsh() { - return lsh; - } - - public void setLsh(int lsh) { - this.lsh = lsh; - } - - public String getCourseid() { - return courseid; - } - - public void setCourseid(String courseid) { - this.courseid = courseid; - } - - public String getDptno() { - return dptno; - } - - public void setDptno(String dptno) { - this.dptno = dptno; - } - - public double getScore() { - return score; - } - - public void setScore(double score) { - this.score = score; - } - - public String getComm() { - return comm; - } - - public void setComm(String comm) { - this.comm = comm; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbookFormGet.java b/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbookFormGet.java deleted file mode 100644 index 00d6c2a..0000000 --- a/app/src/main/java/top/yvyan/guettable/Gson/AvgTextbookFormGet.java +++ /dev/null @@ -1,180 +0,0 @@ -package top.yvyan.guettable.Gson; - -public class AvgTextbookFormGet { - private String term; - private String courseid; - private int lsh; - private int pjno; - private String type; - private String pzjb; - private String zbnr; - private double qz; - private double score; - private String dja; - private String djb; - private String djc; - private String djd; - private String a; - private String b; - private String c; - private String d; - - public String getTerm() { - return term; - } - - public void setTerm(String term) { - this.term = term; - } - - public String getCourseid() { - return courseid; - } - - public void setCourseid(String courseid) { - this.courseid = courseid; - } - - public int getLsh() { - return lsh; - } - - public void setLsh(int lsh) { - this.lsh = lsh; - } - - public int getPjno() { - return pjno; - } - - public void setPjno(int pjno) { - this.pjno = pjno; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getPzjb() { - return pzjb; - } - - public void setPzjb(String pzjb) { - this.pzjb = pzjb; - } - - public String getZbnr() { - return zbnr; - } - - public void setZbnr(String zbnr) { - this.zbnr = zbnr; - } - - public double getQz() { - return qz; - } - - public void setQz(double qz) { - this.qz = qz; - } - - public double getScore() { - return score; - } - - public void setScore(double score) { - this.score = score; - } - - public String getDja() { - return dja; - } - - public void setDja(String dja) { - this.dja = dja; - } - - public String getDjb() { - return djb; - } - - public void setDjb(String djb) { - this.djb = djb; - } - - public String getDjc() { - return djc; - } - - public void setDjc(String djc) { - this.djc = djc; - } - - public String getDjd() { - return djd; - } - - public void setDjd(String djd) { - this.djd = djd; - } - - public String getA() { - return a; - } - - public void setA(String a) { - this.a = a; - } - - public String getB() { - return b; - } - - public void setB(String b) { - this.b = b; - } - - public String getC() { - return c; - } - - public void setC(String c) { - this.c = c; - } - - public String getD() { - return d; - } - - public void setD(String d) { - this.d = d; - } - - @Override - public String toString() { - return "AvgTextbookFormGet{" + - "term='" + term + '\'' + - ", courseid='" + courseid + '\'' + - ", lsh=" + lsh + - ", pjno=" + pjno + - ", type='" + type + '\'' + - ", pzjb='" + pzjb + '\'' + - ", zbnr='" + zbnr + '\'' + - ", qz=" + qz + - ", score=" + score + - ", dja='" + dja + '\'' + - ", djb='" + djb + '\'' + - ", djc='" + djc + '\'' + - ", djd='" + djd + '\'' + - ", a='" + a + '\'' + - ", b='" + b + '\'' + - ", c='" + c + '\'' + - ", d='" + d + '\'' + - '}'; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/Gson/LoginResponse.java b/app/src/main/java/top/yvyan/guettable/Gson/LoginResponse.java deleted file mode 100644 index a20f58a..0000000 --- a/app/src/main/java/top/yvyan/guettable/Gson/LoginResponse.java +++ /dev/null @@ -1,22 +0,0 @@ -package top.yvyan.guettable.Gson; - -/** - * @clear - */ -public class LoginResponse { - private boolean success; - private String msg; - private String data; - - public boolean isSuccess() { - return success; - } - - public String getMsg() { - return msg; - } - - public String getData() { - return data; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/Http/GetBitmap.java b/app/src/main/java/top/yvyan/guettable/Http/GetBitmap.java deleted file mode 100644 index dd50eb4..0000000 --- a/app/src/main/java/top/yvyan/guettable/Http/GetBitmap.java +++ /dev/null @@ -1,118 +0,0 @@ -package top.yvyan.guettable.Http; - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.text.TextUtils; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.net.CookieManager; -import java.net.HttpCookie; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.LinkedList; -import java.util.List; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocketFactory; - -import top.yvyan.guettable.util.SSLUtils; - - -public class GetBitmap { - /** - * @return - * - 0 GET success - * - -1 cannot open url - * - -5 cannot get response - * - -6 response check fail - * - -7 302 - */ - public static HttpConnectionAndCode get(@NonNull final String u, - @Nullable final String[] parms, - @NonNull final String user_agent, - @NonNull final String referer, - @Nullable final String cookie, - @Nullable final String cookie_delimiter){ - URL url; - HttpURLConnection cnt; - String response; - Bitmap bmp; - int resp_code; - try { - StringBuilder u_bulider = new StringBuilder(); - u_bulider.append(u); - if (parms != null && parms.length > 0) { - u_bulider.append("?").append(TextUtils.join("&", parms)); - } - url = new URL(u_bulider.toString()); - cnt = (HttpURLConnection) url.openConnection(); - cnt.setDoOutput(true); - cnt.setDoInput(true); - cnt.setRequestProperty("User-Agent", user_agent); - cnt.setRequestProperty("Referer", referer); - if (cookie != null){ - cnt.setRequestProperty("Cookie", cookie); - } - cnt.setRequestMethod("GET"); - cnt.setInstanceFollowRedirects(false); - cnt.setReadTimeout(4000); - cnt.setConnectTimeout(2000); - if (cnt instanceof HttpsURLConnection) { // 判断是否为https请求 - SSLContext sslContext = SSLUtils.getSSLContextWithoutCer(); - SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); - ((HttpsURLConnection) cnt).setSSLSocketFactory(sslSocketFactory); - ((HttpsURLConnection) cnt).setHostnameVerifier(SSLUtils.hostnameVerifier); - } - cnt.connect(); - } catch (Exception e) { - e.printStackTrace(); - return new HttpConnectionAndCode(-1); - } - try { - resp_code = cnt.getResponseCode(); - if (resp_code == 302){ - return new HttpConnectionAndCode(cnt, -7, ""); - } - response = ""; - bmp = BitmapFactory.decodeStream(cnt.getInputStream()); - } catch (Exception e) { - e.printStackTrace(); - return new HttpConnectionAndCode(-5); - } - - //get cookie from server - String set_cookie = null; - if (cookie_delimiter != null) { - CookieManager cookieman = new CookieManager(); - StringBuilder cookie_builder = new StringBuilder(); - //getHeaderFields() returns the header fields of response - List cookies = cnt.getHeaderFields().get("Set-Cookie"); - if (cookies != null) { - for (String cookie_resp : cookies) { - cookieman.getCookieStore().add(null, HttpCookie.parse(cookie_resp).get(0)); - } - } - if (cookieman.getCookieStore().getCookies().size() > 0) { - List cookieList = cookieman.getCookieStore().getCookies(); - List cookieStringList = new LinkedList<>(); - for (HttpCookie httpCookie : cookieList){ - String str = httpCookie.getName() + "=" + httpCookie.getValue(); - cookieStringList.add(str); - } - String cookie_join = TextUtils.join(cookie_delimiter, cookieStringList); - cookie_builder.append(cookie_join); - } - set_cookie = cookie_builder.toString(); - } - - //do not disconnect, keep alive - //if cookie_delimiter != null but no server cookie, set_cookie = "" - //if no response, response = "" - HttpConnectionAndCode res = new HttpConnectionAndCode(cnt, 0, response, set_cookie, resp_code); - res.obj = bmp; - return res; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java index 5996b73..d4c51ee 100644 --- a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java +++ b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java @@ -51,8 +51,8 @@ public class LoginActivity extends Activity implements View.OnClickListener { private EditText etAccount; private CheckBox cbRememberPwd; private SuperButton button; - private EditText etPwd2; - private ImageView ivPwdSwitch2; + private EditText etPwd; + private ImageView ivPwdSwitch; private View progressBar; private AccountData accountData; @@ -64,21 +64,21 @@ public class LoginActivity extends Activity implements View.OnClickListener { accountData = AccountData.newInstance(getContext()); - ivPwdSwitch2 = findViewById(R.id.iv_pwd_switch_2); + ivPwdSwitch = findViewById(R.id.iv_pwd_switch); button = findViewById(R.id.login); button.setOnClickListener(this); - etPwd2 = findViewById(R.id.et_pwd2); + etPwd = findViewById(R.id.et_pwd); etAccount = findViewById(R.id.et_account); cbRememberPwd = findViewById(R.id.cb_remember_pwd); cbRememberPwd.setChecked(true); - ivPwdSwitch2.setOnClickListener(showPwdClickListener()); + ivPwdSwitch.setOnClickListener(showPwdClickListener()); progressBar = findViewById(R.id.progressBar2); TextView profileVersion = findViewById(R.id.tv_profile_version); profileVersion.setText(AppUtil.getAppVersionName(Objects.requireNonNull(getContext()))); //获取账号密码 if (accountData.getIsSave()) { etAccount.setText(accountData.getUsername()); - etPwd2.setText(accountData.getVPNPwd()); + etPwd.setText(accountData.getPwd()); } } @@ -93,12 +93,12 @@ public class LoginActivity extends Activity implements View.OnClickListener { bPwdSwitch = !bPwdSwitch; bPwdSwitch2 = !bPwdSwitch2; if (bPwdSwitch) { - ivPwdSwitch2.setImageResource(R.drawable.ic_baseline_visibility_24); - etPwd2.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + ivPwdSwitch.setImageResource(R.drawable.ic_baseline_visibility_24); + etPwd.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } else { - ivPwdSwitch2.setImageResource(R.drawable.ic_baseline_visibility_off_24); - etPwd2.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT); - etPwd2.setTypeface(Typeface.DEFAULT); + ivPwdSwitch.setImageResource(R.drawable.ic_baseline_visibility_off_24); + etPwd.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT); + etPwd.setTypeface(Typeface.DEFAULT); } }; } @@ -112,8 +112,8 @@ public class LoginActivity extends Activity implements View.OnClickListener { public void onClick(View view) { setUnClick(); String account = etAccount.getText().toString(); - String pwd2 = etPwd2.getText().toString(); - new Thread(() -> testCAS(account, pwd2)).start(); + String pwd = etPwd.getText().toString(); + new Thread(() -> testCAS(account, pwd)).start(); } @Override @@ -131,7 +131,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { */ private void testCASWithOTP(String OTP, String CASCookie, TokenData tokenData) { String account = etAccount.getText().toString(); - String pwd2 = etPwd2.getText().toString(); + String pwd = etPwd.getText().toString(); new Thread(() -> { runOnUiThread(() -> button.setText("正在认证-手机验证码")); String MultiFactorAuth = StaticService.VerifyPhoneOTP(this, OTP, CASCookie); @@ -146,7 +146,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { } else { tokenData.setMFACookie(MultiFactorAuth); tokenData.setBkjwCookie(null); - accountData.setUser(account, null, pwd2, cbRememberPwd.isChecked()); + accountData.setUser(account, pwd, cbRememberPwd.isChecked()); getInfo(); } }).start(); @@ -162,7 +162,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { new Thread(() -> { TokenData tokenData = TokenData.newInstance(this); runOnUiThread(() -> button.setText("正在认证")); - String CasCookie = StaticService.SSOLogin(this, account, password, accountData.getVPNPwd() == password ? tokenData.getTGTToken() : null, tokenData.getMFACookie()); + String CasCookie = StaticService.SSOLogin(this, account, password, accountData.getPwd().equals(password) ? tokenData.getTGTToken() : null, tokenData.getMFACookie()); if (CasCookie.contains("TGT-")) { if (CasCookie.contains("ERROR5")) { tokenData.setTGTToken(CasCookie.substring(CasCookie.indexOf(";") + 1)); @@ -171,7 +171,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { } else { tokenData.setTGTToken(CasCookie); tokenData.setBkjwCookie(null); - accountData.setUser(account, null, password, cbRememberPwd.isChecked()); + accountData.setUser(account, password, cbRememberPwd.isChecked()); getInfo(); } } else { @@ -209,7 +209,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { } else { tokenData.setMFACookie(MultiFactorAuth); tokenData.setBkjwCookie(null); - accountData.setUser(account, null, password, cbRememberPwd.isChecked()); + accountData.setUser(account, password, cbRememberPwd.isChecked()); getInfo(); } @@ -318,7 +318,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { button.setText("登录"); button.setEnabled(true); etAccount.setEnabled(true); - etPwd2.setEnabled(true); + etPwd.setEnabled(true); progressBar.setVisibility(View.GONE); } @@ -329,7 +329,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { button.setText("网络初始化"); button.setEnabled(false); etAccount.setEnabled(false); - etPwd2.setEnabled(false); + etPwd.setEnabled(false); progressBar.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/top/yvyan/guettable/adapter/AvgTeacherAdapter.java b/app/src/main/java/top/yvyan/guettable/adapter/AvgTeacherAdapter.java deleted file mode 100644 index f0d6383..0000000 --- a/app/src/main/java/top/yvyan/guettable/adapter/AvgTeacherAdapter.java +++ /dev/null @@ -1,54 +0,0 @@ -package top.yvyan.guettable.adapter; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -import top.yvyan.guettable.R; -import top.yvyan.guettable.bean.AvgTeacherBean; - -public class AvgTeacherAdapter extends RecyclerView.Adapter { - private final List avgTeacherBeans; - - public AvgTeacherAdapter(List avgTeacherBeans) { - this.avgTeacherBeans = avgTeacherBeans; - } - - @NonNull - @Override - public AvgTeacherViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); - View itemView = layoutInflater.inflate(R.layout.teacher_cardview,parent,false); - return new AvgTeacherViewHolder(itemView); - } - - @Override - public void onBindViewHolder(@NonNull AvgTeacherViewHolder holder, int position) { - holder.courseName.setText(avgTeacherBeans.get(position).getCourseName()); - holder.teacherName.setText(avgTeacherBeans.get(position).getTeacherName()); - holder.teacherHint.setText(avgTeacherBeans.get(position).getHint()); - } - - @Override - public int getItemCount() { - return avgTeacherBeans.size(); - } - - public static class AvgTeacherViewHolder extends RecyclerView.ViewHolder { - TextView courseName, teacherName, teacherHint; - - public AvgTeacherViewHolder(@NonNull View itemView) { - super(itemView); - courseName = itemView.findViewById(R.id.course_Name); - teacherName = itemView.findViewById(R.id.teacher_name); - teacherHint = itemView.findViewById(R.id.teacher_hint); - } - } - -} diff --git a/app/src/main/java/top/yvyan/guettable/adapter/AvgTextbookAdapter.java b/app/src/main/java/top/yvyan/guettable/adapter/AvgTextbookAdapter.java deleted file mode 100644 index d98fcdd..0000000 --- a/app/src/main/java/top/yvyan/guettable/adapter/AvgTextbookAdapter.java +++ /dev/null @@ -1,54 +0,0 @@ -package top.yvyan.guettable.adapter; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -import top.yvyan.guettable.R; -import top.yvyan.guettable.bean.AvgTextbookBean; - -public class AvgTextbookAdapter extends RecyclerView.Adapter { - - private final List avgTextbookBeans; - - public AvgTextbookAdapter(List avgTextbookBeans) { - this.avgTextbookBeans = avgTextbookBeans; - } - - @NonNull - @Override - public AvgTextbookAdapter.AvgTextbookViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); - View itemView = layoutInflater.inflate(R.layout.textbook_cardview, parent, false); - return new AvgTextbookViewHolder(itemView); - } - - @Override - public void onBindViewHolder(@NonNull AvgTextbookAdapter.AvgTextbookViewHolder holder, int position) { - holder.courseName.setText(avgTextbookBeans.get(position).getCourseName()); - holder.textbookName.setText(avgTextbookBeans.get(position).getTextbookName()); - holder.textbookHint.setText(avgTextbookBeans.get(position).getHint()); - } - - @Override - public int getItemCount() { - return avgTextbookBeans.size(); - } - - static class AvgTextbookViewHolder extends RecyclerView.ViewHolder { - TextView courseName, textbookName, textbookHint; - - public AvgTextbookViewHolder(@NonNull View itemView) { - super(itemView); - courseName = itemView.findViewById(R.id.textbook_course_Name); - textbookName = itemView.findViewById(R.id.textbook_name); - textbookHint = itemView.findViewById(R.id.textbook_hint); - } - } -} diff --git a/app/src/main/java/top/yvyan/guettable/bean/AvgTeacherBean.java b/app/src/main/java/top/yvyan/guettable/bean/AvgTeacherBean.java deleted file mode 100644 index 153ecdf..0000000 --- a/app/src/main/java/top/yvyan/guettable/bean/AvgTeacherBean.java +++ /dev/null @@ -1,29 +0,0 @@ -package top.yvyan.guettable.bean; - -public class AvgTeacherBean { - String courseName; - String teacherName; - String hint; - - public AvgTeacherBean(String courseName, String teacherName, String hint) { - this.courseName = courseName; - this.teacherName = teacherName; - this.hint = hint; - } - - public String getCourseName() { - return courseName; - } - - public void setHint(String hint) { - this.hint = hint; - } - - public String getHint() { - return hint; - } - - public String getTeacherName() { - return teacherName; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/bean/AvgTextbookBean.java b/app/src/main/java/top/yvyan/guettable/bean/AvgTextbookBean.java deleted file mode 100644 index 9e51ced..0000000 --- a/app/src/main/java/top/yvyan/guettable/bean/AvgTextbookBean.java +++ /dev/null @@ -1,29 +0,0 @@ -package top.yvyan.guettable.bean; - -public class AvgTextbookBean { - private final String courseName; - private final String textbookName; - private String hint; - - public AvgTextbookBean(String courseName, String textbookName, String hint) { - this.courseName = courseName; - this.textbookName = textbookName; - this.hint = hint; - } - - public String getCourseName() { - return courseName; - } - - public String getTextbookName() { - return textbookName; - } - - public String getHint() { - return hint; - } - - public void setHint(String hint) { - this.hint = hint; - } -} diff --git a/app/src/main/java/top/yvyan/guettable/data/AccountData.java b/app/src/main/java/top/yvyan/guettable/data/AccountData.java index 60733a2..f7afa7d 100644 --- a/app/src/main/java/top/yvyan/guettable/data/AccountData.java +++ b/app/src/main/java/top/yvyan/guettable/data/AccountData.java @@ -9,15 +9,13 @@ public class AccountData { private static final String IS_SAVE = "isSave"; private static final String IS_LOGIN = "isLogin"; private static final String USERNAME = "username"; - private static final String PASSWORD = "password"; - private static final String PASSWORD2 = "password2"; + private static final String PASSWORD = "password2"; SharedPreferences sharedPreferences; private boolean isSave; private boolean isLogin; private String username; - private String bkjwPwd; - private String VPNPwd; + private String Pwd; private AccountData(Context context) { sharedPreferences = context.getSharedPreferences(SHP_NAME, Context.MODE_PRIVATE); @@ -43,12 +41,9 @@ public class AccountData { return username; } - public void setUser(String username, String bkjwPwd, String VPNPwd, boolean isSave) { - if (bkjwPwd != null) { - this.bkjwPwd = bkjwPwd; - } + public void setUser(String username, String Pwd, boolean isSave) { this.username = username; - this.VPNPwd = VPNPwd; + this.Pwd = Pwd; this.isSave = isSave; this.isLogin = true; saveUser(); @@ -63,8 +58,7 @@ public class AccountData { isSave = sharedPreferences.getBoolean(IS_SAVE, false); isLogin = sharedPreferences.getBoolean(IS_LOGIN, false); username = sharedPreferences.getString(USERNAME, ""); - bkjwPwd = sharedPreferences.getString(PASSWORD, ""); - VPNPwd = sharedPreferences.getString(PASSWORD2, ""); + Pwd = sharedPreferences.getString(PASSWORD, ""); } private void saveUser() { @@ -72,16 +66,11 @@ public class AccountData { editor.putBoolean(IS_SAVE, isSave); editor.putBoolean(IS_LOGIN, isLogin); editor.putString(USERNAME, username); - editor.putString(PASSWORD, bkjwPwd); - editor.putString(PASSWORD2, VPNPwd); + editor.putString(PASSWORD, Pwd); editor.apply(); } - public String getBkjwPwd() { - return bkjwPwd; - } - - public String getVPNPwd() { - return VPNPwd; + public String getPwd() { + return Pwd; } } diff --git a/app/src/main/java/top/yvyan/guettable/data/BaseData.java b/app/src/main/java/top/yvyan/guettable/data/BaseData.java index e8f323e..d8a27c1 100644 --- a/app/src/main/java/top/yvyan/guettable/data/BaseData.java +++ b/app/src/main/java/top/yvyan/guettable/data/BaseData.java @@ -7,6 +7,9 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; +/** + * List转码存储,用于存储课程列表等信息 + */ public class BaseData { public static void set(String key, List Beans) { String str = new Gson().toJson(Beans); diff --git a/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java b/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java index 505b1dd..e328c0c 100644 --- a/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java +++ b/app/src/main/java/top/yvyan/guettable/data/ScheduleData.java @@ -10,7 +10,7 @@ import top.yvyan.guettable.bean.CourseBean; import top.yvyan.guettable.bean.ExamBean; public class ScheduleData extends BaseData { - private static final String MAIN_KEY = "ScheduleData"; + private static final String MAIN_KEY = "ScheduleData."; private static final String CLASS_STRING = MAIN_KEY + "classString"; private static final String LIB_STRING = MAIN_KEY + "libString"; private static final String EXAM_STRING = MAIN_KEY + "examString"; diff --git a/app/src/main/java/top/yvyan/guettable/data/TokenData.java b/app/src/main/java/top/yvyan/guettable/data/TokenData.java index 3eb0d0e..272896a 100644 --- a/app/src/main/java/top/yvyan/guettable/data/TokenData.java +++ b/app/src/main/java/top/yvyan/guettable/data/TokenData.java @@ -176,14 +176,14 @@ public class TokenData { * @return 操作结果 */ public int refreshTGT() { - String TGTTokenStr = StaticService.SSOLogin(context, accountData.getUsername(), accountData.getVPNPwd(),TGTToken, MFACookie); + String TGTTokenStr = StaticService.SSOLogin(context, accountData.getUsername(), accountData.getPwd(),TGTToken, MFACookie); if (TGTTokenStr.equals("ERROR2") || TGTTokenStr.equals("ERROR0")) { return -2; } if (TGTTokenStr.contains("TGT-")) { if (TGTTokenStr.contains("ERROR5")) { setTGTToken(TGTTokenStr.substring(TGTTokenStr.indexOf(";") + 1)); - return bypass2FA(accountData.getVPNPwd(), TGTTokenStr.substring(TGTTokenStr.indexOf(";") + 1)); + return bypass2FA(accountData.getPwd(), TGTTokenStr.substring(TGTTokenStr.indexOf(";") + 1)); } else { setTGTToken(TGTTokenStr); } diff --git a/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java b/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java index e02d9b0..07d69ae 100644 --- a/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java +++ b/app/src/main/java/top/yvyan/guettable/fragment/CourseTableFragment.java @@ -23,7 +23,6 @@ import com.zhuangfei.timetable.view.WeekView; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import top.yvyan.guettable.R; import top.yvyan.guettable.activity.AddCourseActivity; @@ -71,7 +70,7 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene View addStatus = view.findViewById(R.id.add_status); ViewGroup.LayoutParams lp = addStatus.getLayoutParams(); - lp.height = lp.height + AppUtil.getStatusBarHeight(Objects.requireNonNull(getContext())); + lp.height = lp.height + AppUtil.getStatusBarHeight(requireContext()); addStatus.setLayoutParams(lp); initData(); @@ -82,7 +81,7 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene mWeekView = view.findViewById(R.id.id_weekview); mWeekView.setVisibility(View.VISIBLE); mTimetableView = view.findViewById(R.id.id_timetableView); - setBackground(BackgroundUtil.isSetBackground(getContext())); + setBackground(BackgroundUtil.isSetBackground(requireContext())); initTimetableView(); return view; } @@ -135,7 +134,7 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene generalData.setWeek(target); mWeekView.curWeek(target).updateView(); ScheduleData.setUpdate(true); - WidgetUtil.notifyWidgetUpdate(Objects.requireNonNull(this.getActivity())); + WidgetUtil.notifyWidgetUpdate(this.requireActivity()); ToastUtil.showToast(getActivity(), "设置第" + target + "周为当前周"); mTimetableView.changeWeekForce(target); } @@ -147,7 +146,7 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene .curWeek(generalData.getWeek()) .maxSlideItem(12) .monthWidthDp(18) - .itemHeight(DensityUtil.dip2px(Objects.requireNonNull(getContext()), singleSettingData.getItemLength())) + .itemHeight(DensityUtil.dip2px(requireContext(), singleSettingData.getItemLength())) .callback(new OnItemBuildAdapter() { @Override public String getItemText(Schedule schedule, boolean isThisWeek) { @@ -276,7 +275,7 @@ public class CourseTableFragment extends Fragment implements View.OnClickListene * 显示弹出菜单 */ public void showPopMenu() { - PopupMenu popup = new PopupMenu(Objects.requireNonNull(getActivity()), moreButton); + PopupMenu popup = new PopupMenu(requireActivity(), moreButton); popup.getMenuInflater().inflate(R.menu.course_table_popmenu, popup.getMenu()); if (singleSettingData.isHideOtherWeek()) { popup.getMenu().findItem(R.id.course_tab_top1).setTitle("显示非本周课程"); diff --git a/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java b/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java index 7916678..88066b6 100644 --- a/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java +++ b/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java @@ -599,7 +599,7 @@ public class Net { } /** - * 同步有效课程 + * 同步有效学分 * * @param context context * @param cookie 登录后的cookie diff --git a/app/src/main/java/top/yvyan/guettable/util/RSAUtil.java b/app/src/main/java/top/yvyan/guettable/util/RSAUtil.java deleted file mode 100644 index 171abf2..0000000 --- a/app/src/main/java/top/yvyan/guettable/util/RSAUtil.java +++ /dev/null @@ -1,60 +0,0 @@ -package top.yvyan.guettable.util; - -import java.math.BigInteger; -import java.security.KeyFactory; -import java.security.PublicKey; -import java.security.spec.RSAPublicKeySpec; - -import javax.crypto.Cipher; - -public class RSAUtil { - private static final String publicExponentStr = "010001"; - private static final String modulusStr = "00b5eeb166e069920e80bebd1fea4829d3d1f3216f2aabe79b6c47a3c18dcee5fd22c2e7ac519cab59198ece036dcf289ea8201e2a0b9ded307f8fb704136eaeb670286f5ad44e691005ba9ea5af04ada5367cd724b5a26fdb5120cc95b6431604bd219c6b7d83a6f8f24b43918ea988a76f93c333aa5a20991493d4eb1117e7b1"; - - /** - * CAS登录RSA公钥加密 - * - * @param text 未加密字符串 - * @return RSA加密后的字符串(16进制字符串) - */ - public static String CASEncryption(String text) { - try { - //公钥加密 - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - BigInteger modulus = new BigInteger(modulusStr, 16); - BigInteger publicExponent = new BigInteger(publicExponentStr, 16); - RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(modulus, publicExponent); - PublicKey publicKey = keyFactory.generatePublic(rsaPublicKeySpec); - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.ENCRYPT_MODE, publicKey); - byte[] encryptData = cipher.doFinal(text.getBytes()); - return byte2hex(encryptData); - } catch (Exception ignored) { - } - return null; - } - - /** - * 字节数组转换为十六进制字符串 - * - * @param b 需要转换的字节数组 - * @return String 十六进制字符串 - */ - public static String byte2hex(byte[] b) { - if (b == null) { - throw new IllegalArgumentException( - "Argument b ( byte array ) is null! "); - } - StringBuilder hs = new StringBuilder(); - String stmp; - for (byte value : b) { - stmp = Integer.toHexString(value & 0xff); - if (stmp.length() == 1) { - hs.append("0").append(stmp); - } else { - hs.append(stmp); - } - } - return hs.toString(); - } -} diff --git a/app/src/main/java/top/yvyan/guettable/util/SerializeUtil.java b/app/src/main/java/top/yvyan/guettable/util/SerializeUtil.java deleted file mode 100644 index 61abbee..0000000 --- a/app/src/main/java/top/yvyan/guettable/util/SerializeUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -package top.yvyan.guettable.util; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.nio.charset.StandardCharsets; - -public class SerializeUtil { - /** - * 对象 -> 字符串 - * - * @param obj 对象 - * @return 序列化的字符串 - * @throws IOException IOException - */ - public static String serialize(Object obj) throws IOException { - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - ObjectOutputStream objectOutputStream; - objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); - objectOutputStream.writeObject(obj); - String string = byteArrayOutputStream.toString("ISO-8859-1"); - objectOutputStream.close(); - byteArrayOutputStream.close(); - return string; - } - - /** - * 字符串 -> 对象 - * - * @param str 序列化的字符串 - * @return 对象 - * @throws IOException IOException - * @throws ClassNotFoundException ClassNotFoundException - */ - public static Object serializeToObject(String str) throws IOException, ClassNotFoundException { - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(str.getBytes(StandardCharsets.ISO_8859_1)); - ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); - Object object = objectInputStream.readObject(); - objectInputStream.close(); - byteArrayInputStream.close(); - return object; - } -} diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 1488252..74fab16 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -91,7 +91,7 @@ tools:ignore="ContentDescription" /> - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/textbook_cardview.xml b/app/src/main/res/layout/textbook_cardview.xml deleted file mode 100644 index 3d9b8ba..0000000 --- a/app/src/main/res/layout/textbook_cardview.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - -- Gitee From 32f176cec11f9f199911b942bcf397228b7bba31 Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Sat, 18 Mar 2023 17:20:40 +0800 Subject: [PATCH 08/20] =?UTF-8?q?fix:=E7=89=B9=E6=AE=8A=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E6=97=A0=E6=B3=95=E7=99=BB=E5=BD=95=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/fetch/StaticService.java | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java b/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java index 367f136..4f31e18 100644 --- a/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java +++ b/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java @@ -116,7 +116,7 @@ public class StaticService { * @param account 学号 * @param password 密码 * @param MFACookie MFA Cookie - * @param TGTToken TGTToken + * @param TGTToken TGTToken * @return CAS Cookie * ERROR0 : 网络错误 * ERROR1 : 密码错误 @@ -124,12 +124,16 @@ public class StaticService { * ERROR5 : 2FA Needed */ public static String SSOLogin(Context context, String account, String password, String TGTToken, String MFACookie) { - HttpConnectionAndCode response = Net.getCASToken(context, account, password,TGTToken, MFACookie); + HttpConnectionAndCode response = Net.getCASToken(context, account, password, TGTToken, MFACookie); if (response.code != 0) { - if(response.code == 1 ) { - return (MFACookie != null ? (MFACookie + "; "+TGTToken) : "ERROR1"); + if (response.code == 1) { + if (MFACookie != null) { + return MFACookie + "; " + TGTToken; + } else { + return TGTToken; + } } - if(response.code == -8) { + if (response.code == -8) { return "ERROR1"; } return "ERROR0"; @@ -177,6 +181,7 @@ public class StaticService { /** * 通过ST令牌登录VPN + * * @param context context * @param ST ST令牌 * @param VPNToken 用于接收登录后的cookie @@ -185,10 +190,10 @@ public class StaticService { * -1 -- 登录失败 * -2 -- 发生异常 */ - public static int loginVPNST(Context context,String ST, String VPNToken) { - HttpConnectionAndCode response = Net.loginVPNST(context,ST,VPNToken); - if(response.code == 0 ) { - if(response.c.getURL().toString().contains("wengine-vpn-token-login")) { + public static int loginVPNST(Context context, String ST, String VPNToken) { + HttpConnectionAndCode response = Net.loginVPNST(context, ST, VPNToken); + if (response.code == 0) { + if (response.c.getURL().toString().contains("wengine-vpn-token-login")) { return 0; } } @@ -198,16 +203,16 @@ public class StaticService { /** * 向VPN添加Cookie * - * @param host 域 - * @param path 路径 - * @param cookie cookie - * @param VPNToken VPN Token + * @param host 域 + * @param path 路径 + * @param cookie cookie + * @param VPNToken VPN Token * @return 0 成功 */ - public static int CookieSet(Context context,String host, String path, String cookie, String VPNToken) { - HttpConnectionAndCode response = Net.CookieSet(context,host,path,cookie,VPNToken); - if(response.code == 0 ) { - if(response.comment.contains("success")) { + public static int CookieSet(Context context, String host, String path, String cookie, String VPNToken) { + HttpConnectionAndCode response = Net.CookieSet(context, host, path, cookie, VPNToken); + if (response.code == 0) { + if (response.comment.contains("success")) { return 0; } } @@ -225,9 +230,9 @@ public class StaticService { * -2 -- 教务登录失败 * -3 -- 发生异常 */ - public static int loginBkjwVPNST(Context context,String ST, String VPNToken) { - HttpConnectionAndCode response = Net.loginBkjwVPNST(context,ST,VPNToken); - if(response.code == 0 ) { + public static int loginBkjwVPNST(Context context, String ST, String VPNToken) { + HttpConnectionAndCode response = Net.loginBkjwVPNST(context, ST, VPNToken); + if (response.code == 0) { return 0; } return -1; -- Gitee From b39504e63de860a244252ddc0ffae34e48207aa8 Mon Sep 17 00:00:00 2001 From: wing <843862803@qq.com> Date: Sat, 18 Mar 2023 17:37:08 +0800 Subject: [PATCH 09/20] =?UTF-8?q?fix:=E7=89=B9=E6=AE=8A=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E6=97=A0=E6=B3=95=E7=99=BB=E5=BD=95=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/top/yvyan/guettable/service/fetch/StaticService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java b/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java index 4f31e18..5d9b6e8 100644 --- a/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java +++ b/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java @@ -127,6 +127,10 @@ public class StaticService { HttpConnectionAndCode response = Net.getCASToken(context, account, password, TGTToken, MFACookie); if (response.code != 0) { if (response.code == 1) { + String Location = response.c.getHeaderField("location"); + if (Location.contains("reAuthLoginView.do")) { + return "ERROR5;" + TGTToken + "; " + response.cookie; + } if (MFACookie != null) { return MFACookie + "; " + TGTToken; } else { -- Gitee From ec87283ae74b85e84ba371b884449ee56c8a3984 Mon Sep 17 00:00:00 2001 From: bbaa Date: Sun, 19 Mar 2023 13:54:56 +0800 Subject: [PATCH 10/20] fix typo --- .../main/java/top/yvyan/guettable/activity/LoginActivity.java | 2 +- .../java/top/yvyan/guettable/service/fetch/StaticService.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java index d4c51ee..b6abd18 100644 --- a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java +++ b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java @@ -137,7 +137,7 @@ public class LoginActivity extends Activity implements View.OnClickListener { String MultiFactorAuth = StaticService.VerifyPhoneOTP(this, OTP, CASCookie); if (MultiFactorAuth.contains("ERROR")) { if (MultiFactorAuth.equals("ERROR1")) { - showErrorToast(-4); + showErrorToast(-3); } else if (MultiFactorAuth.equals("ERROR2")) { showErrorToast(-2); } else { diff --git a/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java b/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java index 5d9b6e8..7212665 100644 --- a/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java +++ b/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java @@ -84,14 +84,14 @@ public class StaticService { } /** - * 发送手机验证码 + * 验证手机验证码 * * @param context context * @param CASCookie CAS Cookie * @param OTP OTP手机验证码 * @return 多因素身份验证令牌Cookie * ERROR0 : 网络错误 - * ERROR1 : 密码错误 + * ERROR1 : 验证码错误 * ERROR2 : 需要使用外网网址进行访问 */ public static String VerifyPhoneOTP(Context context, String OTP, String CASCookie) { -- Gitee From f0ec91095d49cb3844927b2e2da70f2605bdf3b1 Mon Sep 17 00:00:00 2001 From: bbaa Date: Sun, 19 Mar 2023 20:24:40 +0800 Subject: [PATCH 11/20] =?UTF-8?q?fix:=20=E9=87=8D=E5=AE=9A=E5=90=91?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E7=85=A7=E6=A0=B7=E8=BF=94=E5=9B=9E?= =?UTF-8?q?cookie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/top/yvyan/guettable/Http/Get.java | 15 ++++++++++++--- .../main/java/top/yvyan/guettable/Http/Post.java | 11 ++++++++++- .../top/yvyan/guettable/service/fetch/Net.java | 5 ++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/top/yvyan/guettable/Http/Get.java b/app/src/main/java/top/yvyan/guettable/Http/Get.java index 703f555..44b1d3d 100644 --- a/app/src/main/java/top/yvyan/guettable/Http/Get.java +++ b/app/src/main/java/top/yvyan/guettable/Http/Get.java @@ -104,11 +104,20 @@ public class Get { } try { resp_code = cnt.getResponseCode(); - if (redirect != null && !redirect && (resp_code >=300 && resp_code <400)) { - return new HttpConnectionAndCode(cnt, -7, ""); + if (redirect != null && !redirect && (resp_code >= 300 && resp_code < 400)) { + // 我们这里不考虑清除cookie的情况 (无视所有cookie参数) + StringBuilder cookie_builder = new StringBuilder(); + List cookies = cnt.getHeaderFields().get("Set-Cookie"); + if (cookies != null) { + cookie_builder.append("; "); + for (String cookie_resp : cookies) { + cookie_builder.append(cookie_resp.substring(0, cookie_resp.indexOf(";") + 1) + " "); + } + } + return new HttpConnectionAndCode(cnt, -7, "", cookie_builder.substring(0, cookie_builder.length() - 2), resp_code); } List encodings = cnt.getHeaderFields().get("content-encoding"); - if(resp_code < 400) { + if (resp_code < 400) { if (encodings != null && encodings.get(0).equals("gzip")) { in = new InputStreamReader(new GZIPInputStream(cnt.getInputStream())); } else { diff --git a/app/src/main/java/top/yvyan/guettable/Http/Post.java b/app/src/main/java/top/yvyan/guettable/Http/Post.java index b3d8c85..aea141c 100644 --- a/app/src/main/java/top/yvyan/guettable/Http/Post.java +++ b/app/src/main/java/top/yvyan/guettable/Http/Post.java @@ -123,7 +123,16 @@ public class Post { try { resp_code = cnt.getResponseCode(); if (redirect != null && !redirect && (resp_code >=300 && resp_code <400)) { - return new HttpConnectionAndCode(cnt, -7, ""); + // 我们这里不考虑清除cookie的情况 (无视所有cookie参数) + StringBuilder cookie_builder = new StringBuilder(); + List cookies = cnt.getHeaderFields().get("Set-Cookie"); + if (cookies != null) { + cookie_builder.append("; "); + for (String cookie_resp : cookies) { + cookie_builder.append(cookie_resp.substring(0, cookie_resp.indexOf(";") + 1) + " "); + } + } + return new HttpConnectionAndCode(cnt, -7, "", cookie_builder.substring(0, cookie_builder.length() - 2), resp_code); } List encodings = cnt.getHeaderFields().get("content-encoding"); if(resp_code < 400) { diff --git a/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java b/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java index 88066b6..b83d263 100644 --- a/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java +++ b/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java @@ -105,7 +105,7 @@ public class Net { null); if (loginParams.code != 0) { if(loginParams.code == -7) { - // 已登录 + // 已登录或多因子登录验证失效 return new HttpConnectionAndCode(loginParams.c,1,loginParams.comment,loginParams.cookie,loginParams.resp_code); } return new HttpConnectionAndCode(-5); @@ -140,8 +140,7 @@ public class Net { cookie_builder.append(cookie_resp.substring(0, cookie_resp.indexOf(";") + 1)+" "); } } - LoginRequest.cookie = cookie_builder.toString(); - LoginRequest.cookie = LoginRequest.cookie.substring(0, LoginRequest.cookie.length() - 2); + LoginRequest.cookie = cookie_builder.substring(0, cookie_builder.length() - 2); LoginRequest.code = 0; return LoginRequest; } -- Gitee From 5b3cd5e85fbe245c09482fa380e96bfc093561c9 Mon Sep 17 00:00:00 2001 From: bbaa Date: Mon, 20 Mar 2023 00:09:09 +0800 Subject: [PATCH 12/20] =?UTF-8?q?fix:=20=E9=94=99=E8=AF=AFcookie=E7=9A=84?= =?UTF-8?q?=E5=88=86=E9=9A=94=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/top/yvyan/guettable/Http/Get.java | 1 - .../java/top/yvyan/guettable/Http/Post.java | 1 - app/src/main/res/layout/login_smscode.xml | 115 ++++++++++++++++++ 3 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/layout/login_smscode.xml diff --git a/app/src/main/java/top/yvyan/guettable/Http/Get.java b/app/src/main/java/top/yvyan/guettable/Http/Get.java index 44b1d3d..0bbc3bc 100644 --- a/app/src/main/java/top/yvyan/guettable/Http/Get.java +++ b/app/src/main/java/top/yvyan/guettable/Http/Get.java @@ -109,7 +109,6 @@ public class Get { StringBuilder cookie_builder = new StringBuilder(); List cookies = cnt.getHeaderFields().get("Set-Cookie"); if (cookies != null) { - cookie_builder.append("; "); for (String cookie_resp : cookies) { cookie_builder.append(cookie_resp.substring(0, cookie_resp.indexOf(";") + 1) + " "); } diff --git a/app/src/main/java/top/yvyan/guettable/Http/Post.java b/app/src/main/java/top/yvyan/guettable/Http/Post.java index aea141c..a1db774 100644 --- a/app/src/main/java/top/yvyan/guettable/Http/Post.java +++ b/app/src/main/java/top/yvyan/guettable/Http/Post.java @@ -127,7 +127,6 @@ public class Post { StringBuilder cookie_builder = new StringBuilder(); List cookies = cnt.getHeaderFields().get("Set-Cookie"); if (cookies != null) { - cookie_builder.append("; "); for (String cookie_resp : cookies) { cookie_builder.append(cookie_resp.substring(0, cookie_resp.indexOf(";") + 1) + " "); } diff --git a/app/src/main/res/layout/login_smscode.xml b/app/src/main/res/layout/login_smscode.xml new file mode 100644 index 0000000..02367f9 --- /dev/null +++ b/app/src/main/res/layout/login_smscode.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +