examBeans = ScheduleData.getExamBeans();
for (ExamBean examBean : examBeans) {
if (examBean.getClassNum() < 1) {
examBean.setClassNum(1);
}
}
- 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();
- }
- }
+ ScheduleData.setExamBeans(examBeans);
}
private void openUpdate() {
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 153ecdfc818be28df200b4260376841e059a9b61..0000000000000000000000000000000000000000
--- 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 9e51ced4da68d38a3089cdd8b4a3237aebda524e..0000000000000000000000000000000000000000
--- 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/bean/TipInfo.java b/app/src/main/java/top/yvyan/guettable/bean/TipInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4081481880c2b0607b6f78196fadb55623f7a2c
--- /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/data/AccountData.java b/app/src/main/java/top/yvyan/guettable/data/AccountData.java
index 60733a277d0fa47062a8044ce444b15c425291fc..f7afa7d265c8bd4c05900e258077c97dad1eca2f 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
new file mode 100644
index 0000000000000000000000000000000000000000..d8a27c1fa7d69b56bcae5f95b81fe02d8c2b14de
--- /dev/null
+++ b/app/src/main/java/top/yvyan/guettable/data/BaseData.java
@@ -0,0 +1,34 @@
+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;
+
+/**
+ * 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/DetailClassData.java b/app/src/main/java/top/yvyan/guettable/data/DetailClassData.java
index 19ad022dd8fec50cab5e5903f70a7dccdfef578c..19d17d8deeab41234906a64c9ee58565d9339c3b 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/MoreData.java b/app/src/main/java/top/yvyan/guettable/data/MoreData.java
new file mode 100644
index 0000000000000000000000000000000000000000..82c954602866e244c8212c5eb00a850edad3a534
--- /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 86eaa643846d498dc70f0bc238e64299becfbb28..0000000000000000000000000000000000000000
--- 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 bead51de1b5c06478ed2f4134d9790f5228dceb4..e328c0c847ed7394d2b1d92c885ec768e1bd17e3 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,89 @@
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, 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 +93,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/data/TokenData.java b/app/src/main/java/top/yvyan/guettable/data/TokenData.java
index 3eb0d0ee9012d47ed1bba7b3456d9ffebc92ecb3..100619f35bb69c14cd6f337fcccc9f77b53d2fc3 100644
--- a/app/src/main/java/top/yvyan/guettable/data/TokenData.java
+++ b/app/src/main/java/top/yvyan/guettable/data/TokenData.java
@@ -1,18 +1,33 @@
package top.yvyan.guettable.data;
import android.annotation.SuppressLint;
+import android.app.Activity;
import android.content.Context;
+import android.content.ContextWrapper;
import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.TextView;
+
+import java.lang.reflect.*;
+
+import androidx.appcompat.app.AlertDialog;
import top.yvyan.guettable.R;
import top.yvyan.guettable.service.fetch.Net;
import top.yvyan.guettable.service.fetch.StaticService;
+import top.yvyan.guettable.util.ToastUtil;
public class TokenData {
@SuppressLint("StaticFieldLeak")
private static TokenData tokenData;
private final SharedPreferences.Editor editor;
- private final Context context;
+ private Context context;
+
+ private Object Caller;
private static final String SHP_NAME = "tokenData";
@@ -60,7 +75,6 @@ public class TokenData {
*/
public String getVpnToken() {
forceVPN = true;
- refresh();
//isVPN = Net.testNet(context) != 0;
return VPNToken;
}
@@ -83,6 +97,17 @@ public class TokenData {
if (tokenData == null) {
tokenData = new TokenData(context);
}
+ tokenData.context = context; // Update Context
+ tokenData.Caller = null;
+ return tokenData;
+ }
+
+ public static TokenData newInstance(Context context, Object Caller) {
+ if (tokenData == null) {
+ tokenData = new TokenData(context);
+ }
+ tokenData.context = context; // Update Context
+ tokenData.Caller = Caller;
return tokenData;
}
@@ -176,14 +201,31 @@ 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));
+ String CASCookie = TGTTokenStr.substring(TGTTokenStr.indexOf(";") + 1);
+ setTGTToken(CASCookie);
+ Activity activity = this.getActivity(context);
+ if (activity == null) return -3;
+ String phoneNumber = StaticService.reAuth_sendSMSCode(context, accountData.getUsername(), CASCookie);
+ if (!phoneNumber.contains("ERROR")) {
+ reAuth_showSMSCodeDialog(activity, phoneNumber, CASCookie);
+ } else {
+ if (phoneNumber.contains("ERROR3")) {
+ activity.runOnUiThread(() -> {
+ ToastUtil.showToast(context, context.getResources().getString(R.string.login_fail_SMSCodeSend) + phoneNumber.substring(7));
+ });
+ } else {
+ activity.runOnUiThread(() -> {
+ ToastUtil.showToast(context, context.getResources().getString(R.string.login_fail_SMSCodeSend) + "未知错误");
+ });
+ }
+ }
+ return -3;
} else {
setTGTToken(TGTTokenStr);
}
@@ -193,12 +235,96 @@ public class TokenData {
}
}
+ public Activity getActivity(Context context) {
+ if (context == null) {
+ return null;
+ } else if (context instanceof ContextWrapper) {
+ if (context instanceof Activity) {
+ return (Activity) context;
+ } else {
+ return getActivity(((ContextWrapper) context).getBaseContext());
+ }
+ }
+
+ return null;
+ }
+
+ private void reAuth_showSMSCodeDialog(Activity activity, String phoneNumber, String CasCookie) {
+ activity.runOnUiThread(() -> {
+ try {
+ AlertDialog dialog;
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+ dialog = builder.create();
+ dialog.show();
+ dialog.setCanceledOnTouchOutside(false);
+ dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+ dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+ dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+ Window window = dialog.getWindow();
+ window.setContentView(R.layout.login_smscode);
+ TextView phoneNumberView = window
+ .findViewById(R.id.et_phone);
+ phoneNumberView.setText(phoneNumber);
+ Button buttonYes = window.findViewById(R.id.btn_text_yes);
+ Button buttonCancel = window.findViewById(R.id.btn_text_cancel);
+ buttonCancel.setOnClickListener(view -> {
+ dialog.cancel();
+ });
+ buttonYes.setOnClickListener(view -> {
+ TextView SMSCode = window
+ .findViewById(R.id.et_smscode);
+ String SMSCodeOTP = SMSCode.getText().toString();
+ buttonYes.setText("正在登录");
+ buttonYes.setEnabled(false);
+ new Thread(() -> {
+ int State = reAuth_SMSCode(SMSCodeOTP, CasCookie);
+ activity.runOnUiThread(() -> {
+ if (State == 0) {
+ dialog.dismiss();
+ } else {
+ buttonYes.setText("登录");
+ buttonYes.setEnabled(true);
+ }
+ ToastUtil.showToast(activity, State == 0 ? "验证成功" : "验证码有误");
+ });
+ }).start();
+ });
+ } catch (Exception ignore) {
+
+ }
+ });
+ }
+
+ private int reAuth_SMSCode(String SMSCode, String CASCookie) {
+ try {
+ String MultiFactorAuth = StaticService.reAuth_SMSCode(context, SMSCode, CASCookie);
+ if (MultiFactorAuth.contains("ERROR")) {
+ return -1;
+ } else {
+ setMFACookie(MultiFactorAuth);
+ if (Caller != null) {
+ try {
+ // 反射尝试调用Update方法 (如果有)
+ Class ContextClass = Caller.getClass();
+ Method Update = ContextClass.getMethod("update");
+ Update.invoke(Caller);
+ } catch (Exception ignore) {
+
+ }
+ }
+ return 0;
+ }
+ } catch (Exception ignore) {
+ return -1;
+ }
+ }
+
/**
* bypass 2FA
*/
- private int bypass2FA(String password, String CASCookie) {
+ private int reAuth_Password(String password, String CASCookie) {
try {
- String MultiFactorAuth = StaticService.bypass2FA(context, password, CASCookie);
+ String MultiFactorAuth = StaticService.reAuth_Password(context, password, CASCookie);
if (MultiFactorAuth.contains("ERROR")) {
return -1;
} else {
@@ -215,7 +341,7 @@ public class TokenData {
}
public String getCASCookie() {
- return (MFACookie != null ? MFACookie : "") + (TGTToken != null ? ((MFACookie!=null ? "; " : "")+TGTToken) : "");
+ return (MFACookie != null ? MFACookie : "") + (TGTToken != null ? ((MFACookie != null ? "; " : "") + TGTToken) : "");
}
public String getTGTToken() {
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 96e229c0d2c2766b3247a1d615cc4c5b714e98bf..07d69ae5ab5d8f32c3609a5f5b356aebae2153d0 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;
@@ -38,8 +37,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,9 +52,7 @@ 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;
//记录切换的周次,不一定是当前周
int target;
@@ -73,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();
@@ -84,16 +81,14 @@ 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;
}
private void initData() {
generalData = GeneralData.newInstance(getActivity());
- scheduleData = ScheduleData.newInstance(getActivity());
singleSettingData = SingleSettingData.newInstance(getActivity());
- detailClassData = DetailClassData.newInstance();
settingData = SettingData.newInstance(getActivity());
}
@@ -138,8 +133,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(this.requireActivity());
ToastUtil.showToast(getActivity(), "设置第" + target + "周为当前周");
mTimetableView.changeWeekForce(target);
}
@@ -151,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) {
@@ -208,27 +203,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());
}
@@ -250,7 +245,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);
@@ -269,10 +264,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);
}
}
@@ -280,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/fragment/DayClassFragment.java b/app/src/main/java/top/yvyan/guettable/fragment/DayClassFragment.java
index 5ead4528e8777c5bd02875c0a70d8573a5d27b3b..e5dbcdb06b820ef8f0e683cee4c261d26a963de1 100644
--- a/app/src/main/java/top/yvyan/guettable/fragment/DayClassFragment.java
+++ b/app/src/main/java/top/yvyan/guettable/fragment/DayClassFragment.java
@@ -68,7 +68,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();
@@ -86,9 +85,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);
}
}
@@ -132,7 +131,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());
}
/**
@@ -172,7 +170,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) {
@@ -261,24 +259,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/fragment/MoreFragment.java b/app/src/main/java/top/yvyan/guettable/fragment/MoreFragment.java
index a876d3146b0308d0a8d04adea47f5bf728ff75a7..6cf9169c507d61c887be3b6558771c8ad443bb11 100644
--- a/app/src/main/java/top/yvyan/guettable/fragment/MoreFragment.java
+++ b/app/src/main/java/top/yvyan/guettable/fragment/MoreFragment.java
@@ -21,7 +21,6 @@ import top.yvyan.guettable.moreFun.GradesActivity;
import top.yvyan.guettable.moreFun.LibActivity;
import top.yvyan.guettable.moreFun.MoreUrlActivity;
import top.yvyan.guettable.moreFun.PlannedCoursesActivity;
-import top.yvyan.guettable.moreFun.QQGroupActivity;
import top.yvyan.guettable.moreFun.ResitActivity;
import top.yvyan.guettable.moreFun.SelectedCourseActivity;
import top.yvyan.guettable.service.CommFunc;
@@ -183,8 +182,7 @@ public class MoreFragment extends Fragment implements View.OnClickListener {
requireContext().getResources().getString(R.string.url_empty_room_vpn));
break;
case R.id.more_qq_group:
- intent = new Intent(getContext(), QQGroupActivity.class);
- startActivity(intent);
+ openBrowser(requireContext().getResources().getString(R.string.url_add_group));
break;
diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/BaseFuncActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/BaseFuncActivity.java
index bc34d570464441052c51e202af9860803f0f2bcd..9ec51ad5dccf7f4e861fd91322550d09d04b1b80 100644
--- a/app/src/main/java/top/yvyan/guettable/moreFun/BaseFuncActivity.java
+++ b/app/src/main/java/top/yvyan/guettable/moreFun/BaseFuncActivity.java
@@ -23,6 +23,10 @@ import top.yvyan.guettable.util.BackgroundUtil;
public abstract class BaseFuncActivity extends AppCompatActivity implements IMoreFun {
@SuppressLint("NonConstantResourceId")
+
+ protected boolean update = true;
+ protected int stateNum = -1;
+ @SuppressLint("NonConstantResourceId")
@BindView(R.id.state)
TextView state;
@SuppressLint("NonConstantResourceId")
@@ -34,9 +38,6 @@ public abstract class BaseFuncActivity extends AppCompatActivity implements IMor
@SuppressLint("NonConstantResourceId")
@BindView(R.id.func_base_constraintLayout)
ConstraintLayout header;
- @SuppressLint("NonConstantResourceId")
-
- protected boolean update = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -47,6 +48,7 @@ public abstract class BaseFuncActivity extends AppCompatActivity implements IMor
ButterKnife.bind(this);
more.setVisibility(View.GONE);
more.setOnClickListener(this::showPopMenu);
+ state.setOnClickListener(this::stateOnClick);
init();
header.getBackground().setAlpha(255);
BackgroundUtil.setFullAlphaStatus(this);
@@ -111,12 +113,21 @@ public abstract class BaseFuncActivity extends AppCompatActivity implements IMor
@Override
public void updateView(String hint, int stateNum) {
+ this.stateNum = stateNum;
state.setText(hint);
if (stateNum == 5 && update) {
showContent();
}
}
+ protected void stateOnClick(View view) {
+ if (this.stateNum != 5) {
+ if (this.stateNum == -3) {
+ this.init(); // 调用init方法重新获取验证码
+ }
+ }
+ }
+
/**
* 子类init (不包含设置内容视图)
*/
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 7d169f8dc0d2c52c3f26cd59849b562b2484dc17..d2d7c8535e71b3fdcd359aa4be4d822b19a45ae2 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 3086f2438c5b9b37f9e57eb5e55c188dcd36950e..fb74955db6bd5991ca25081b2c7bc099140eccc6 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 1a82385305737808d8c73950769078d59533baf4..3ee922b6b449f97829b8ac7dcf9f9f5c0e7791da 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 301fcab0e8362bc84e8b666979d1a4fe26c5b38a..76eb4c436a03d723cee1a980290bd5d75c5647f1 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 4e04b0b3c60306a93316c52a28a4a667b9b6f9da..519f2680f7d8a51182e37136782f677601572cea 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 d7b3c927ce374a5fd1fbe9cf0a339d8f7fdee1f5..3484ba1abd2c9b2e22adc417e90063bb160e87f7 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/MoreUrlActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/MoreUrlActivity.java
index 59c5c6cb8c827f114a0c642384e2809e9410304d..ff06c642d587df2f6528b4cef14f805fd18dc4d3 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/java/top/yvyan/guettable/moreFun/PlannedCoursesActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/PlannedCoursesActivity.java
index b413ee4fb808306d01f752e4b90619e8b6a227b8..6632af2611f297ecb2dabe6bf8b4cb3fa40746b0 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/QQGroupActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/QQGroupActivity.java
deleted file mode 100644
index 0c4527cb3f48dc2b7ff1cc644ec54d32ad4c05f5..0000000000000000000000000000000000000000
--- a/app/src/main/java/top/yvyan/guettable/moreFun/QQGroupActivity.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package top.yvyan.guettable.moreFun;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.constraintlayout.widget.ConstraintLayout;
-
-import com.umeng.analytics.MobclickAgent;
-import com.umeng.cconfig.UMRemoteConfig;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import top.yvyan.guettable.R;
-import top.yvyan.guettable.data.SingleSettingData;
-import top.yvyan.guettable.util.AppUtil;
-import top.yvyan.guettable.util.BackgroundUtil;
-import top.yvyan.guettable.util.DialogUtil;
-
-public class QQGroupActivity extends AppCompatActivity {
- private String setting;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- SingleSettingData singleSettingData = SingleSettingData.newInstance(this);
- BackgroundUtil.setPageTheme(this, singleSettingData.getThemeId());
- setContentView(R.layout.activity_q_q_group);
-
- ConstraintLayout header = findViewById(R.id.func_base_constraintLayout);
- header.getBackground().setAlpha(255);
-
- BackgroundUtil.setFullAlphaStatus(this);
-
- TextView title = findViewById(R.id.title);
- title.setText(getString(R.string.moreFun_qqGroup));
- AppUtil.reportFunc(getApplicationContext(), getString(R.string.moreFun_qqGroup));
-
- setting = UMRemoteConfig.getInstance().getConfigValue("groupSetting");
- }
-
- public void doBack(View view) {
- finish();
- }
-
- public void report(Context context, String funcName) {
- Map funcMap = new HashMap<>();
- funcMap.put("name", funcName);
- MobclickAgent.onEventObject(context, "addGroup", funcMap);
- }
-
- public void addGroup(String name, String key, int num) {
- report(this, name);
- if (setting.charAt(num) == '1') {
- DialogUtil.showTextDialog(this, "该群因违反协议,已被禁止!");
- } else {
- AppUtil.joinQQGroup(key, this);
- }
- }
-
- public void guetClassTable(View view) {
- addGroup(getResources().getString(R.string.text_guet_class_table), getResources().getString(R.string.key_guet_class_table), 0);
- }
-
- public void guetClassTable2(View view) {
- addGroup(getResources().getString(R.string.text_guet_class_table2), getResources().getString(R.string.key_guet_class_table2), 4);
- }
-
- public void guetFind3(View view) {
- addGroup(getResources().getString(R.string.text_guet_find_3), getResources().getString(R.string.key_guet_find_3), 1);
- }
-
- public void stdioMusic(View view) {
- addGroup(getResources().getString(R.string.text_stdio_music), getResources().getString(R.string.key_stdio_music), 3);
- }
-
-}
\ No newline at end of file
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 72b9811764d122049d187fbbaa62bb636d08e240..c09107233c5c928f6aebd173186d6fdbfaa04124 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 99f6b9d128a2d6ad3c882a5ea9b2a1b5af8d550f..58a7124e64608fd661e3740e0a64e7b5f1fafd5a 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 28f7b6df858bb4c56848ce7a6530236110481acc..91316266a5de12f3002eb4d9bd8d6893e5a82432 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,9 +39,8 @@ 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);
+ tokenData = TokenData.newInstance(activity,this);
settingData = SettingData.newInstance(activity);
init();
}
@@ -74,8 +72,8 @@ public class AutoUpdate {
* 启动同步
*/
public void update() {
- // 判断状态是否符合;合适的状态:就绪 网络错误 同步成功(点击同步)
- if (state == 0 || state == -2 || state == 5) {
+ // 判断状态是否符合;合适的状态:就绪 登录失效 网络错误 同步成功(点击同步)
+ if (state == 0 || state == -2 || state == -3 || state == 5) {
update_thread();
}
}
@@ -104,6 +102,9 @@ public class AutoUpdate {
case -2:
text = "网络错误";
break;
+ case -3:
+ text = "登录失效(点击重试)";
+ break;
case 91:
text = "尝试同步理论课";
break;
@@ -153,7 +154,7 @@ public class AutoUpdate {
);
if (getClass != null) {
courseBeans = getClass;
- scheduleData.setCourseBeans(courseBeans);
+ ScheduleData.setCourseBeans(courseBeans);
} else {
updateView(92);
state = tokenData.refresh();
@@ -170,7 +171,7 @@ public class AutoUpdate {
);
if (getClass != null) {
courseBeans = getClass;
- scheduleData.setCourseBeans(courseBeans);
+ ScheduleData.setCourseBeans(courseBeans);
} else {
updateView(3);
return;
@@ -186,7 +187,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 +201,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/service/CommFunc.java b/app/src/main/java/top/yvyan/guettable/service/CommFunc.java
index f6fa2cfb20ad01ef399357a57bdb1396f16d5f16..7db6624cd080a0b17020216b7c1de85dd87c1611 100644
--- a/app/src/main/java/top/yvyan/guettable/service/CommFunc.java
+++ b/app/src/main/java/top/yvyan/guettable/service/CommFunc.java
@@ -106,7 +106,16 @@ public class CommFunc {
final AlertDialog[] dialog = new AlertDialog[1];
activity.runOnUiThread(() -> dialog[0] = DialogUtil.setTextDialog(activity, "自动登录中...(最长需要15s)", "跳过", iDialogService, true));
- tokenData.refresh();
+ int LoginState = tokenData.refresh();
+ if (LoginState == -3) {
+ activity.runOnUiThread(() -> {
+ if (dialog[0] != null && dialog[0].isShowing()) {
+ dialog[0].dismiss();
+ }
+ ToastUtil.showToast(activity, "登录状态丢失,请输入验证码后稍后重试");
+ });
+ return;
+ }
if (!noLogin[0]) {
activity.runOnUiThread(() -> {
if (dialog[0] != null && dialog[0].isShowing()) {
@@ -151,7 +160,17 @@ public class CommFunc {
final AlertDialog[] dialog = new AlertDialog[1];
activity.runOnUiThread(() -> dialog[0] = DialogUtil.setTextDialog(activity, "自动登录中...(最长需要15s)", "跳过", iDialogService, true));
- tokenData.refresh();
+ int LoginState = tokenData.refresh();
+ if (LoginState == -3) {
+ activity.runOnUiThread(() -> {
+ if (dialog[0] != null && dialog[0].isShowing()) {
+ dialog[0].dismiss();
+ }
+ ToastUtil.showToast(activity, "登录状态丢失,请输入验证码后稍后重试");
+ });
+ return;
+ }
+
if (TokenData.isVPN()) {
tokenData.setVPNCASCookie();
}
@@ -204,7 +223,16 @@ public class CommFunc {
};
final AlertDialog[] dialog = new AlertDialog[1];
activity.runOnUiThread(() -> dialog[0] = DialogUtil.setTextDialog(activity, "自动建立连接中...(最长需要15s)", "跳过", iDialogService, true));
-
+ int LoginState = tokenData.refresh();
+ if (LoginState == -3) {
+ activity.runOnUiThread(() -> {
+ if (dialog[0] != null && dialog[0].isShowing()) {
+ dialog[0].dismiss();
+ }
+ ToastUtil.showToast(activity, "登录状态丢失,请输入验证码后稍后重试");
+ });
+ return;
+ }
String token = tokenData.getVpnToken();
tokenData.setVPNCASCookie();
if (!noLogin[0]) {
@@ -272,7 +300,16 @@ public class CommFunc {
};
final AlertDialog[] dialog = new AlertDialog[1];
activity.runOnUiThread(() -> dialog[0] = DialogUtil.setTextDialog(activity, "自动建立连接中...(最长需要15s)", "跳过", iDialogService, true));
-
+ int LoginState = tokenData.refresh();
+ if (LoginState == -3) {
+ activity.runOnUiThread(() -> {
+ if (dialog[0] != null && dialog[0].isShowing()) {
+ dialog[0].dismiss();
+ }
+ ToastUtil.showToast(activity, "登录状态丢失,请输入验证码后稍后重试");
+ });
+ return;
+ }
String token = tokenData.getVpnToken();
tokenData.setVPNCASCookie();
if (!noLogin[0]) {
diff --git a/app/src/main/java/top/yvyan/guettable/service/MoreFunService.java b/app/src/main/java/top/yvyan/guettable/service/MoreFunService.java
index 62a69f88e992565092a88be4a06929069e3e4e6a..4d615af24040b7ef3b65e2b953fcc2164d071fd0 100644
--- a/app/src/main/java/top/yvyan/guettable/service/MoreFunService.java
+++ b/app/src/main/java/top/yvyan/guettable/service/MoreFunService.java
@@ -18,34 +18,34 @@ public class MoreFunService {
this.activity = activity;
this.iMoreFun = iMoreFun;
accountData = AccountData.newInstance(activity);
- tokenData = TokenData.newInstance(activity);
+ tokenData = TokenData.newInstance(activity,this);
}
public void update() {
new Thread(() -> {
try {
if (accountData.getIsLogin()) {
- setView(91); //显示:尝试同步
+ updateView(91); //显示:尝试同步
int state;
state = iMoreFun.updateData(tokenData.getCookie());
if (state == 5 || state == -2) { //同步成功或网络错误
- setView(state);
+ updateView(state);
return;
}
- setView(92); //显示:正在登录
+ updateView(92); //显示:正在登录
state = tokenData.refresh();
if (state == -2) {
state = tokenData.refresh();
}
if (state != 0) {
- setView(state);
+ updateView(state);
return;
}
- setView(93); //显示:正在同步
+ updateView(93); //显示:正在同步
state = iMoreFun.updateData(tokenData.getCookie());
- setView(state);
+ updateView(state);
} else {
- setView(2);
+ updateView(2);
}
} catch (Exception e) {
UMCrash.generateCustomLog(e, "MoreFunService");
@@ -69,7 +69,7 @@ public class MoreFunService {
* 92 : 正在登录
* 93 : 正在同步
*/
- private void setView(int state) {
+ private void updateView(int state) {
String hint;
switch (state) {
case 2:
@@ -81,6 +81,9 @@ public class MoreFunService {
case -2:
hint = "网络错误";
break;
+ case -3:
+ hint = "登录失效(点击重试)";
+ break;
case 91:
hint = "尝试同步";
break;
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 79166782124b59b01bacd6a1cbefaf83ad693f0b..1d9518f8bd8d8cd1113f3cfddcb8fb6981825da9 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;
}
@@ -160,10 +159,10 @@ public class Net {
* @param account account
* @return Response
*/
- public static HttpConnectionAndCode sendPhoneOTP(Context context, String account, String CASCookie) {
+ public static HttpConnectionAndCode reAuth_sendSMSCode(Context context, String account, String CASCookie) {
Resources resources = context.getResources();
return Post.post(
- resources.getString(R.string.url_SendPhoneOTP),
+ resources.getString(R.string.url_SendSMSCode),
null,
resources.getString(R.string.user_agent),
resources.getString(R.string.SSO_referer),
@@ -185,7 +184,7 @@ public class Net {
* @param OTP OTP
* @return Response
*/
- public static HttpConnectionAndCode verifyPhoneOTP(Context context, String OTP, String CASCookie) {
+ public static HttpConnectionAndCode reAuth_SMSCode(Context context, String OTP, String CASCookie) {
Resources resources = context.getResources();
return Post.post(
resources.getString(R.string.url_ReAuth),
@@ -209,7 +208,7 @@ public class Net {
* @param CASCookie CAS Cookie
* @return Response
*/
- public static HttpConnectionAndCode bypass2FA(Context context, String password, String CASCookie) {
+ public static HttpConnectionAndCode reAuth_Password(Context context, String password, String CASCookie) {
Resources resources = context.getResources();
try {
HttpConnectionAndCode MFAParams = Get.get(
@@ -599,7 +598,7 @@ public class Net {
}
/**
- * 同步有效课程
+ * 同步有效学分
*
* @param context context
* @param cookie 登录后的cookie
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 367f13667146d22919e7d35e0356c988d3b468d1..9684425bb3d112a004dcefbf1463d379d2305d6b 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
@@ -48,8 +48,8 @@ public class StaticService {
* ERROR2 : 需要使用外网网址进行访问
* ERROR3 : 验证码发送CD
*/
- public static String SendPhoneOTP(Context context, String account, String CASCookie) {
- HttpConnectionAndCode response = Net.sendPhoneOTP(context, account, CASCookie);
+ public static String reAuth_sendSMSCode(Context context, String account, String CASCookie) {
+ HttpConnectionAndCode response = Net.reAuth_sendSMSCode(context, account, CASCookie);
if (response.code != 0) {
if (response.code == -5) {
return "ERROR2";
@@ -68,8 +68,8 @@ public class StaticService {
return "ERROR0";
}
- public static String bypass2FA(Context context, String Password, String CASCookie) {
- HttpConnectionAndCode response = Net.bypass2FA(context, Password, CASCookie);
+ public static String reAuth_Password(Context context, String Password, String CASCookie) {
+ HttpConnectionAndCode response = Net.reAuth_Password(context, Password, CASCookie);
if (response.code != 0) {
if (response.code == -5) {
return "ERROR2";
@@ -84,18 +84,18 @@ public class StaticService {
}
/**
- * 发送手机验证码
+ * 验证手机验证码
*
* @param context context
* @param CASCookie CAS Cookie
- * @param OTP OTP手机验证码
+ * @param SMSCode OTP手机验证码
* @return 多因素身份验证令牌Cookie
* ERROR0 : 网络错误
- * ERROR1 : 密码错误
+ * ERROR1 : 验证码错误
* ERROR2 : 需要使用外网网址进行访问
*/
- public static String VerifyPhoneOTP(Context context, String OTP, String CASCookie) {
- HttpConnectionAndCode response = Net.verifyPhoneOTP(context, OTP, CASCookie);
+ public static String reAuth_SMSCode(Context context, String SMSCode, String CASCookie) {
+ HttpConnectionAndCode response = Net.reAuth_SMSCode(context, SMSCode, CASCookie);
if (response.code != 0) {
if (response.code == -5) {
return "ERROR2";
@@ -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,20 @@ 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) {
+ String Location = response.c.getHeaderField("location");
+ if (Location.contains("reAuthLoginView.do")) {
+ return "ERROR5;" + TGTToken + "; " + response.cookie;
+ }
+ if (MFACookie != null) {
+ return MFACookie + "; " + TGTToken;
+ } else {
+ return TGTToken;
+ }
}
- if(response.code == -8) {
+ if (response.code == -8) {
return "ERROR1";
}
return "ERROR0";
@@ -177,6 +185,7 @@ public class StaticService {
/**
* 通过ST令牌登录VPN
+ *
* @param context context
* @param ST ST令牌
* @param VPNToken 用于接收登录后的cookie
@@ -185,10 +194,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 +207,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 +234,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;
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 0000000000000000000000000000000000000000..548c64fda4b6b7814728e2f3b18c30c5dd76b491
--- /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/java/top/yvyan/guettable/util/RSAUtil.java b/app/src/main/java/top/yvyan/guettable/util/RSAUtil.java
deleted file mode 100644
index 171abf28390384bf88f4161cb2ad28ce8d332abd..0000000000000000000000000000000000000000
--- 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 61abbee8d4f99e93f32f14f37858315f476c45ae..0000000000000000000000000000000000000000
--- 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/java/top/yvyan/guettable/widget/WidgetService.java b/app/src/main/java/top/yvyan/guettable/widget/WidgetService.java
index d0ee3036dcf0205cfb626edeb4121286da3e2d77..001d598a9df2ea6b3cf8422a536a72872b593b86 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 2c0a8721f3af2c64c401b3bede7ebaf988fbb9dc..118d6d42ea7d556b8c6860391b630653bac4e6e2 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/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 0000000000000000000000000000000000000000..dbcadadd6578a6eb1c0a354d4cb5d5e49ef24db1
--- /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 0000000000000000000000000000000000000000..75c5deed14b3a58716b95495144689a82d4a2820
--- /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 0000000000000000000000000000000000000000..f684094994d7b52a7a4383a0342a6b3e6fbe1756
--- /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/activity_about.xml b/app/src/main/res/layout/activity_about.xml
index ad01191d6e003393f16374dcd22b825fb624fd65..e20cfd2eff7b33ecf46ce1c076aaf293d758d573 100644
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -443,6 +443,44 @@
android:layout_height="0.1dp"
android:background="@color/xui_config_color_gray_9" />
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 1488252857b117e4efe5aa126190410e5969bbe0..74fab167392ee6c09d791fb6ca59ee760535828e 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/dialog_guide.xml b/app/src/main/res/layout/dialog_guide.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aeeb1d1eee84aead21810ec3daf12447530283bb
--- /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/layout/login_phoneotp.xml b/app/src/main/res/layout/login_smscode.xml
similarity index 88%
rename from app/src/main/res/layout/login_phoneotp.xml
rename to app/src/main/res/layout/login_smscode.xml
index ddf08e09df91c16ff2add6c2980efe3ad1a6e0a7..4fd9ef284f79a19409644f5671e58ab2152e6ec2 100644
--- a/app/src/main/res/layout/login_phoneotp.xml
+++ b/app/src/main/res/layout/login_smscode.xml
@@ -19,7 +19,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="8dp"
- android:text="@string/login_2fa_phoneotp"
+ android:text="@string/login_2fa_smscode"
android:textSize="20sp" />
+
+
diff --git a/app/src/main/res/layout/score_cardview.xml b/app/src/main/res/layout/score_cardview.xml
index 8b1bcd4b95b5c2975974885bf7babd3de6ebe1b9..9f74fdeefd300634f6c6e3dd6ff4994e319742f4 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/layout/teacher_cardview.xml b/app/src/main/res/layout/teacher_cardview.xml
deleted file mode 100644
index 37d47fb68f824e6cb27582ab2898bf02cdd4a153..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/teacher_cardview.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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 3d9b8bacfe2770bdc1786991441e38d166627b79..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/textbook_cardview.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index d8a4a3a96be6f509aa71969e0cd338c528354899..b1cba403653eddb4befa6dd813eb444ec73a9f60 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -17,4 +17,6 @@
#3396D8
#7F4073
+
+ #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 4db8c59062cb60bac199917d01af9728a1772c39..cd2711c27876cb797f7e68e11a7318c0fb1829c9 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -7,4 +7,10 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
-->
0dp
+ 5dp
+ 8dp
+ 10dp
+ 16dp
+ 20dp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 226bac8d19d3b446eaed047a29b6ca820c23e613..d108bc436367ec80cb7c2cbee807b646dfa0cb8c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5,7 +5,7 @@
https://v.guet.edu.cn/login
https://v.guet.edu.cn
https://cas.guet.edu.cn/authserver/login
- https://cas.guet.edu.cn/authserver/dynamicCode/getDynamicCodeByReauth.do
+ https://cas.guet.edu.cn/authserver/dynamicCode/getDynamicCodeByReauth.do
https://cas.guet.edu.cn/authserver/reAuthCheck/reAuthSubmit.do
https://cas.guet.edu.cn/authserver/reAuthCheck/reAuthLoginView.do?isMultifactor=true&service=http%3A%2F%2Ficampus.guet.edu.cn%2FGuetAccount%2FCasLogin
application/x-www-form-urlencoded;charset=UTF-8
@@ -49,6 +49,7 @@
https://v.guet.edu.cn/http/77726476706e69737468656265737421e7e056d22028645a661cc7af96/
https://cas.guet.edu.cn/retrieve-password/retrievePassword/index.html#/
https://cas.guet.edu.cn/retrieve-password/accountActivation/index.html#/
+ https://guettableweb.yvyan.top/
桂电校歌
https://music.163.com/#/song?id=469744200
@@ -77,19 +78,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
- 桂电课程表交流群②
- l-RTk_x9Bu0TFmOIRDLnVMIOlYxVfajs
- 桂电人失物招领3群(官方)
- MENv-n3_z8D6h4F9nyn-oiK-Z-FBM5Pr
- 校园广播电台点歌群(官方)
- 0uf7sem6bkCUjKTKR8CJp4rFRfO182tq
若您有面向同学免费开放的非盈利群聊,能够切实为同学提供帮助,我们将免费为您在这里展示和宣传,欢迎加群(桂电课程表交流群)合作!
@@ -118,7 +106,7 @@
验证码错误,登录失败,请点击右上角问号查看帮助
密码错误,登录失败,请点击右上角问号查看帮助
教务密码错误,登录失败,请点击右上角问号查看帮助
- 验证码发送失败:
+ 验证码发送失败:
获取个人信息失败,请稍后重试,请点击右上角问号查看帮助
即将为您打开修改智慧校园密码的网页,请连接校园网。\n\n 登录成功后,输入原密码和新密码(需要同时包含大小写字母、数字和特殊字符)确认即可。\n\n Tip:本次只会修改智慧校园登录密码,不会修改教务系统的密码,密码修改后可能需要一段儿时间才会生效。
请输入智慧校园密码进行登录(建议使用校园网进行登录和数据同步!)。
@@ -128,7 +116,7 @@
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41
"; "
- Casual | 就这 | ୧⍤⃝ⓍⓅ乏了 | 我终究不是个好人 | 🍓 | sin² | 沉山浮阳 | 迷 | 稚隳
+ Casual | 就这 | ୧⍤⃝ⓍⓅ乏了 | 我终究不是个好人 | 🍓 | sin² | 沉山浮阳 | 迷 | 稚隳 | azio
/student/GetSctCourse
@@ -186,8 +174,9 @@
请输入智慧校园密码
记住密码
登录
- 登录二次验证-手机验证码
- 请输入手机验证码
+ 取消
+ 登录二次验证-手机验证码
+ 请输入手机验证码
验证码已发送至:
请输入验证码
发送短信
@@ -210,5 +199,5 @@
开源引用
隐私政策
声明
-
+ 清除多因子登录可信设备状态
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 37c1339644996f62b4fde4970f590fcf8fcfe623..f1b3e5eb59c65b1caee35961b8509b6a91133a62 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" }