diff --git a/app/build.gradle b/app/build.gradle index 77ae473..324c2a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { // minSdkVersion 26 minSdkVersion 21 targetSdkVersion 25 - versionCode 30005 - versionName "3.0.5" + versionCode 30102 + versionName "3.1.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // ndk { @@ -79,6 +79,7 @@ android { buildConfigField "String", "MP_ID",'"4"' buildConfigField "String", "ENV_NAME",'"qbj"' buildConfigField "String", "APP_ID",'"701"' + resValue "string","app_name","电子班牌" } cszxy { @@ -94,6 +95,7 @@ android { buildConfigField "String", "MP_ID",'"2"' buildConfigField "String", "ENV_NAME",'"cszxy"' buildConfigField "String", "APP_ID",'"701"' + resValue "string","app_name","电子班牌" } kz { @@ -109,6 +111,7 @@ android { buildConfigField "String", "MP_ID",'"101"' buildConfigField "String", "ENV_NAME",'"kz"' buildConfigField "String", "APP_ID",'"7011"' + resValue "string","app_name","电子班牌" } debug { @@ -133,6 +136,7 @@ android { buildConfigField "String", "MP_ID",'"2"' buildConfigField "String", "ENV_NAME",'"qbj"' buildConfigField "String", "APP_ID",'"602"' + resValue "string","app_name","电子班牌(live)" } yzx_test { diff --git a/app/src/main/java/com/yzx/ebrand/MainActivity.kt b/app/src/main/java/com/yzx/ebrand/MainActivity.kt index 90d9813..1f1985e 100644 --- a/app/src/main/java/com/yzx/ebrand/MainActivity.kt +++ b/app/src/main/java/com/yzx/ebrand/MainActivity.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.app.Dialog import android.content.Context import android.content.Intent +import android.net.Uri import android.os.Handler import android.os.Looper import android.util.Log @@ -473,7 +474,7 @@ class MainActivity : BaseActivity(), NetworkUtils.OnNetworkStatus } checkVersion() checkAuto() - initWs() +// initWs() } private fun checkVersion(userCheck: Boolean = false): Unit { @@ -501,9 +502,11 @@ class MainActivity : BaseActivity(), NetworkUtils.OnNetworkStatus res.data.type == 1 -> { //强制升级 updateApp(res.data) } + curr - lastTipTime > 24 * 60 * 60 * 1000 -> { //非强制一天以内提示一次 updateApp(res.data) } + userCheck -> { // updateApp(res.data) } @@ -522,59 +525,83 @@ class MainActivity : BaseActivity(), NetworkUtils.OnNetworkStatus } + private fun updateAppKz(version: Version) { + val tipDialog = QMUIDialog.MessageDialogBuilder(this) + .setTitle("检测到新版本?") + .setMessage(version.explain) + .setCanceledOnTouchOutside(false) + .setCancelable(false) + if (version.type == 0) { + tipDialog.addAction("暂不升级") { dialog, index -> + dialog.dismiss() + } + } + tipDialog.addAction("立即升级") { dialog, index -> + val intent = Intent(Intent.ACTION_VIEW,Uri.parse(version.app_src)) + startActivity(intent) + } + tipDialog.create() + val dia = tipDialog.show() + dia.hideNavigationBar() + } private fun updateApp(version: Version) { - AllenVersionChecker - .getInstance() - .downloadOnly( - UIData.create() - .setTitle("检测到新版本") - .setContent(version.explain) - .setDownloadUrl(version.app_src) - ) - .setCustomVersionDialogListener { context, versionBundle -> - val dialog = BaseDialog(context, R.style.BaseDialog, R.layout.version_dialog) - val title = dialog.find(R.id.tv_title) - title.text = "检测到新版本" - val content = dialog.find(R.id.tv_msg) - content.text = version.explain - val cancelBtn = dialog.find(R.id.cancel_btn) - if (version.type == 1) { - cancelBtn.visibility = View.GONE + if (Config.ENV_NAME == "kz") { + this.updateAppKz(version) + } else { + AllenVersionChecker + .getInstance() + .downloadOnly( + UIData.create() + .setTitle("检测到新版本") + .setContent(version.explain) + .setDownloadUrl(version.app_src) + ) + .setCustomVersionDialogListener { context, versionBundle -> + val dialog = BaseDialog(context, R.style.BaseDialog, R.layout.version_dialog) + val title = dialog.find(R.id.tv_title) + title.text = "检测到新版本" + val content = dialog.find(R.id.tv_msg) + content.text = version.explain + val cancelBtn = dialog.find(R.id.cancel_btn) + if (version.type == 1) { + cancelBtn.visibility = View.GONE + } + dialog.hideNavigationBar() + return@setCustomVersionDialogListener dialog } - dialog.hideNavigationBar() - return@setCustomVersionDialogListener dialog - } - .setOnCancelListener { - SPUtils.getInstance().put("last_tip_time${version.version_code}", Date().time) - } - .setCustomDownloadingDialogListener(object : CustomDownloadingDialogListener { - @SuppressLint("SetTextI18n") - override fun updateUI(dialog: Dialog?, progress: Int, versionBundle: UIData?) { - val tvProgress: TextView = dialog!!.findViewById(R.id.tv_progress) - val progressBar: ContentLoadingProgressBar = dialog.findViewById(R.id.pb) - progressBar.progress = progress - tvProgress.text = "$progress%" - - Log.d("checkVersion", "onSuccess: ${progress}") + .setOnCancelListener { + SPUtils.getInstance().put("last_tip_time${version.version_code}", Date().time) } + .setCustomDownloadingDialogListener(object : CustomDownloadingDialogListener { + @SuppressLint("SetTextI18n") + override fun updateUI(dialog: Dialog?, progress: Int, versionBundle: UIData?) { + val tvProgress: TextView = dialog!!.findViewById(R.id.tv_progress) + val progressBar: ContentLoadingProgressBar = dialog.findViewById(R.id.pb) + progressBar.progress = progress + tvProgress.text = "$progress%" + + Log.d("checkVersion", "onSuccess: ${progress}") + } - override fun getCustomDownloadingDialog( - context: Context?, - progress: Int, - versionBundle: UIData? - ): Dialog { - val downDialog = BaseDialog( - context!!, - R.style.BaseDialog, - R.layout.download_dialog - ) - downDialog.hideNavigationBar() - return downDialog - } + override fun getCustomDownloadingDialog( + context: Context?, + progress: Int, + versionBundle: UIData? + ): Dialog { + val downDialog = BaseDialog( + context!!, + R.style.BaseDialog, + R.layout.download_dialog + ) + downDialog.hideNavigationBar() + return downDialog + } + + }) + .executeMission(this) + } - }) - .executeMission(this) } override fun onLeaveIDsSuccess(list: MutableList) { @@ -608,7 +635,7 @@ class MainActivity : BaseActivity(), NetworkUtils.OnNetworkStatus } override fun onStop() { - mHandler.removeCallbacks(runnable) +// mHandler.removeCallbacks(runnable) super.onStop() EventBus.getDefault().unregister(this) } @@ -622,12 +649,15 @@ class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) { 0 -> { return ClassBrandFragment.getNewInstance() } + 1 -> { return ChangeFragment.getNewInstance() } + 2 -> { return VisitorFragment.getNewInstance() } + 3 -> { return MyFragment.getNewInstance() } diff --git a/app/src/main/java/com/yzx/ebrand/config/YzxInterface.kt b/app/src/main/java/com/yzx/ebrand/config/YzxInterface.kt index 61c0c75..bccf171 100644 --- a/app/src/main/java/com/yzx/ebrand/config/YzxInterface.kt +++ b/app/src/main/java/com/yzx/ebrand/config/YzxInterface.kt @@ -49,4 +49,7 @@ object YzxInterface { const val INTERFACE_CLASS_BRAND_ACTIVE_INFO = "/edu/electronicClassBoard/getClassDynamics" //班级动态 const val INTERFACE_CLASS_BRAND_TIME_TABLE_INFO = "/edu/electronicClassBoard/getTodayClassSchedule" //今日课表 const val INTERFACE_GET_VOTE_TEA_CLASS= "/edu/vote/getMyClassList" //班主任获取自己的班级 + const val INTERFACE_CEE_GET_SET_GRADE_CLASS= "/cee/collegeEntranceExamination/courseSchedule/getGradeClassListByCourseScheduleId" //课表 + const val INTERFACE_SCHEDULE_GET_COURSE_TIMETABLE= "/edu/electronicClassBoard/getCourseTimetable"//获取课表 + const val INTERFACE_SCHEDULE_GET_COURSE_TIMETABLE_TEA= "/edu/electronicClassBoard/getCourseTimetableTeacherInfo"//获取课表任课老师 } diff --git a/app/src/main/java/com/yzx/ebrand/fragment/ClassBrandFragment.kt b/app/src/main/java/com/yzx/ebrand/fragment/ClassBrandFragment.kt index 386fd76..397c137 100644 --- a/app/src/main/java/com/yzx/ebrand/fragment/ClassBrandFragment.kt +++ b/app/src/main/java/com/yzx/ebrand/fragment/ClassBrandFragment.kt @@ -1,11 +1,13 @@ package com.yzx.ebrand.fragment import android.annotation.SuppressLint +import android.app.ActionBar.LayoutParams import android.graphics.Color import android.os.Handler import android.os.Looper import android.view.LayoutInflater import android.view.View +import android.widget.LinearLayout import com.blankj.utilcode.util.ActivityUtils import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.SPUtils @@ -32,8 +34,13 @@ import kotlinx.android.synthetic.main.layout_brand_image_info.* import kotlinx.android.synthetic.main.layout_brand_tea_info.* import kotlinx.android.synthetic.main.layout_brand_timetable_info.* import kotlinx.android.synthetic.main.layout_class_active_item.view.* +import kotlinx.android.synthetic.main.layout_class_empty.view.emptyMsg import kotlinx.android.synthetic.main.layout_class_tea_item.view.* import kotlinx.android.synthetic.main.layout_time_table_item.view.* +import kotlinx.android.synthetic.main.timetable_cell1.view.cell1 +import kotlinx.android.synthetic.main.timetable_cell2.view.ttSubjectName +import kotlinx.android.synthetic.main.timetable_cell2.view.ttTeaName +import kotlinx.android.synthetic.main.timetable_row.view.row import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -185,17 +192,19 @@ class ClassBrandFragment : BaseFragment(), ClassBrandView { } - private fun getClassInfo(){ + private fun getClassInfo() { mPresenter?.getClassInfo(currClass.class_id.toString()) - LogUtils.d("请求时间",TimeUtils.getNowString()) + LogUtils.d("请求时间", TimeUtils.getNowString()) } private fun getOtherData() { mPresenter?.getImageInfo(currClass.class_id.toString()) unitName.postDelayed({ - mPresenter?.getTeaList(currClass.class_id.toString()) - mPresenter?.getTimeTable(currClass.class_id.toString()) +// mPresenter?.getTeaList(currClass.class_id.toString()) + mPresenter?.getTeaListV2(currClass.class_id.toString()) mPresenter?.getActiveInfo(currClass.class_id.toString()) +// mPresenter?.getTimeTable(currClass.class_id.toString()) + mPresenter?.getTimeTableV2(currClass.class_id.toString(), currClass.grade_id.toString()) }, 300) } @@ -215,7 +224,7 @@ class ClassBrandFragment : BaseFragment(), ClassBrandView { getOtherData() mClassInfoHandler.removeCallbacks(mClassInfoRunnable) getClassInfo() - mClassInfoHandler.postDelayed(mClassInfoRunnable,mClassInfoLoopTime) + mClassInfoHandler.postDelayed(mClassInfoRunnable, mClassInfoLoopTime) classNameTv.text = "${currClass.grade_name}${currClass.class_name}" classStar.setStar(currClass.star_num) classSwIcon.visibility = if (list.size > 1) { @@ -270,7 +279,28 @@ class ClassBrandFragment : BaseFragment(), ClassBrandView { leaveCountTv.text = "请假:${info.leave_num}人" mClassInfoHandler.removeCallbacks(mClassInfoRunnable) - mClassInfoHandler.postDelayed(mClassInfoRunnable,mClassInfoLoopTime) + mClassInfoHandler.postDelayed(mClassInfoRunnable, mClassInfoLoopTime) + } + } + + override fun onTeaListSuccessV2(list: MutableList) { + classTeaListLL.removeAllViews() + list.forEachIndexed { index, it -> + val itemView = + LayoutInflater.from(activity).inflate(R.layout.layout_class_tea_item, null, false) + if (index % 2 == 0) { + itemView.setBackgroundColor(Color.parseColor("#5682ff")) + } else { + itemView.setBackgroundColor(Color.parseColor("#005682ff")) + } + itemView.teaSubjectNameTv.text = it.subject_name + itemView.teaUserNameTv.text = it.user_name + classTeaListLL.addView(itemView) + } + if (list.size == 0) { + val emptyView = + LayoutInflater.from(activity).inflate(R.layout.layout_class_empty, null, false) + classTeaListLL.addView(emptyView) } } @@ -321,6 +351,110 @@ class ClassBrandFragment : BaseFragment(), ClassBrandView { } } + override fun onTimeTableSuccessV2(list: MutableList) { + + timeTableLL.removeAllViews() + if (list.size == 0) { + val emptyView = + LayoutInflater.from(activity).inflate(R.layout.layout_class_empty, null, false) + val layoutParams = LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 500) + emptyView.layoutParams = layoutParams + emptyView.emptyMsg.text = "暂无课表信息" + timeTableLL.addView(emptyView) + return + } + val weekList = mutableListOf() + val periodList = mutableListOf() + list.forEach { + if (weekList.indexOf(it.week_name) == -1) { + weekList.add(it.week_name) + } + if (periodList.indexOf(it.period_name) == -1) { + periodList.add(it.period_name) + } + } + val timetableList = mutableListOf() + periodList.forEach { period -> + val tempList = list.filter { + return@filter it.period_name == period + } + val tempObj = LessonObj() + tempObj.period_name = period + weekList.forEach { week -> + val subjectList = tempList.filter { + return@filter it.week_name == week && it.subject_name?.isNotEmpty() == true + } + val lessonSubject = LessonSubject() + lessonSubject.week_name = week + lessonSubject.list.addAll(subjectList) + tempObj.list.add(lessonSubject) + } + timetableList.add(tempObj) + } + + + val weekItemView = + LayoutInflater.from(activity).inflate(R.layout.timetable_row, null, false) +// weekItemView.setBackgroundColor(Color.parseColor("#33ffffff")) + weekList.forEach { week -> + val itemCell1View = + LayoutInflater.from(activity).inflate(R.layout.timetable_cell1, null, false) + itemCell1View.cell1.removeAllViews() + val itemCell2View = + LayoutInflater.from(activity).inflate(R.layout.timetable_cell2, null, false) + itemCell2View.ttSubjectName.text = week + itemCell2View.ttTeaName.visibility = View.GONE + itemCell1View.cell1.addView(itemCell2View) + val layoutParams = LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT) + layoutParams.weight = 1F + itemCell1View.layoutParams = layoutParams + weekItemView.row.addView(itemCell1View) + } + timeTableLL.addView(weekItemView) + + timetableList.forEachIndexed { index, it -> + val itemRow = + LayoutInflater.from(activity).inflate(R.layout.timetable_row, null, false) + if (index % 2 == 0) { + itemRow.setBackgroundColor(Color.parseColor("#33ffffff")) + } else { + itemRow.setBackgroundColor(Color.parseColor("#00ffffff")) + } + itemRow.ttSubjectName.text = it.period_name + itemRow.ttTeaName.visibility = View.GONE + val obj = it.list.find { return@find it.list.size > 0 } + if (obj != null) { + it.list.forEach { lessonSubject -> + val itemCell1View = + LayoutInflater.from(activity).inflate(R.layout.timetable_cell1, null, false) + itemCell1View.cell1.removeAllViews() + lessonSubject.list.forEach { timeTableV2 -> + if (timeTableV2.subject_name?.isNotEmpty() == true) { + val itemCell2View = + LayoutInflater.from(activity) + .inflate(R.layout.timetable_cell2, null, false) + itemCell2View.ttSubjectName.text = timeTableV2.subject_name + if (timeTableV2.teacher_name?.isNotEmpty() == true) { + itemCell2View.ttTeaName.text = "(${timeTableV2.teacher_name})" + } else { + itemCell2View.ttTeaName.visibility = View.GONE + } + itemCell1View.cell1.addView(itemCell2View) + } + + } + val layoutParams = LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT) + layoutParams.weight = 1F + itemCell1View.layoutParams = layoutParams + itemRow.row.addView(itemCell1View) + } + } + + + timeTableLL.addView(itemRow) + } + } + private fun previewActiveImg(item: ClassActiveInfo, view: View) { val list = item.getImgUrls() if (list.size <= 0) { @@ -390,6 +524,7 @@ class ClassBrandFragment : BaseFragment(), ClassBrandView { when { list.size == 0 -> { imgEmpty.visibility = View.VISIBLE + imgEmpty.emptyMsg.text = "暂无班级风采信息" styleImgBox.visibility = View.GONE } @@ -441,7 +576,7 @@ class ClassBrandFragment : BaseFragment(), ClassBrandView { // styleImgBox.removeCallbacks(null) // this.loopImg(list) mTimeHandler.removeCallbacks(timeRunnable) - mTimeHandler.postDelayed(timeRunnable,6000) + mTimeHandler.postDelayed(timeRunnable, 6000) } } @@ -458,7 +593,6 @@ class ClassBrandFragment : BaseFragment(), ClassBrandView { } - private fun loopImg(list: MutableList) { if (this.imgIndex + 3 > list.size - 1) { this.imgIndex = list.size - 1 - 3 diff --git a/app/src/main/java/com/yzx/ebrand/model/CBClassInfo.kt b/app/src/main/java/com/yzx/ebrand/model/CBClassInfo.kt index 680f6ce..0f78ed5 100644 --- a/app/src/main/java/com/yzx/ebrand/model/CBClassInfo.kt +++ b/app/src/main/java/com/yzx/ebrand/model/CBClassInfo.kt @@ -36,7 +36,21 @@ data class TimeTable( val subject_id: String = "", val subject_name: String = "", ) +data class TimeTableV2( + val period_name: String = "", + val subject_name: String ?= "", + val week_name: String = "", + val teacher_name: String ?= "", +) +data class LessonSubject( + var week_name: String = "", + val list: MutableList = mutableListOf() +) +data class LessonObj( + var period_name: String = "", + val list: MutableList = mutableListOf() +) data class ClassActiveInfo( val add_time: Int = 0, val user_name: String = "", @@ -73,4 +87,9 @@ data class HeadClassInfo( val grade_id: Int = 0, val grade_name: String = "", val star_num: Int = 0, -) \ No newline at end of file +) + +data class TimetableTea( + val subject_name: String = "", + val user_name: String = "", +) diff --git a/app/src/main/java/com/yzx/ebrand/presenter/ClassBrandPresenter.kt b/app/src/main/java/com/yzx/ebrand/presenter/ClassBrandPresenter.kt index 3eb4415..584b9ac 100644 --- a/app/src/main/java/com/yzx/ebrand/presenter/ClassBrandPresenter.kt +++ b/app/src/main/java/com/yzx/ebrand/presenter/ClassBrandPresenter.kt @@ -11,6 +11,7 @@ import com.yzx.ebrand.model.ClassStylePic import com.yzx.ebrand.model.ClassTeaInfo import com.yzx.ebrand.model.HeadClassInfo import com.yzx.ebrand.model.TimeTable +import com.yzx.ebrand.model.TimeTableV2 import com.yzx.ebrand.model.User import com.yzx.ebrand.presenter.base.BasePresenter import com.yzx.ebrand.presenter.base.IView @@ -92,6 +93,31 @@ class ClassBrandPresenter(view: ClassBrandView) : BasePresenter( }) } + fun getTeaListV2(class_id: String){ + if(User.getUser().token.isEmpty()){ + return + } + val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_SCHEDULE_GET_COURSE_TIMETABLE_TEA}" + OkGo.post>(url) + .tag(this) + .params("class_id", class_id) + .execute(object : JsonCallBack>() { + + override fun onSuccess(response: Response>?) { + LogUtils.d(response) + if (response?.isSuccessful == true) { + mView?.onTeaListSuccessV2(response.body().list) + } + } + + override fun onError(response: Response>?) { + super.onError(response) + LogUtils.d(response) +// mView?.onListError(response?.body()?.msg ?: "") + } + }) + } + fun getTimeTable(class_id: String){ if(User.getUser().token.isEmpty()){ return @@ -116,6 +142,31 @@ class ClassBrandPresenter(view: ClassBrandView) : BasePresenter( }) } + fun getTimeTableV2(class_id: String,grade_id:String){ + if(User.getUser().token.isEmpty()){ + return + } + val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_SCHEDULE_GET_COURSE_TIMETABLE}" + OkGo.post>(url) + .tag(this) + .params("class_id", class_id) + .params("grade_id", grade_id) + .execute(object : JsonCallBack>() { + + override fun onSuccess(response: Response>?) { + LogUtils.d(response) + if (response?.isSuccessful == true) { + mView?.onTimeTableSuccessV2(response.body().list) + } + } + + override fun onError(response: Response>?) { + super.onError(response) + LogUtils.d(response) + } + }) + } + fun getActiveInfo(class_id:String){ if(User.getUser().token.isEmpty()){ return @@ -169,8 +220,11 @@ interface ClassBrandView : IView { fun onHeadClassSuccess(list:MutableList) fun onAvatarSuccess(identity:String,head_portrait:String) fun onClassInfoSuccess(info: CBClassInfo) - fun onTeaListSuccess(list:MutableList) fun onTimeTableSuccess(list:MutableList) + fun onTeaListSuccess(list:MutableList) + fun onTeaListSuccessV2(list:MutableList) + + fun onTimeTableSuccessV2(list:MutableList) fun onActiveInfoSuccess(list:MutableList) fun onImageInfoSuccess(list: MutableList) } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_class_brand.xml b/app/src/main/res/layout/fragment_class_brand.xml index 33a1f9b..7bf6b33 100644 --- a/app/src/main/res/layout/fragment_class_brand.xml +++ b/app/src/main/res/layout/fragment_class_brand.xml @@ -71,7 +71,7 @@ + android:layout_height="32dp" /> @@ -111,13 +111,17 @@ + android:layout_height="90dp" + android:clipChildren="false" + android:clipToPadding="false"> @@ -143,22 +147,57 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" - android:orientation="vertical" - android:paddingHorizontal="@dimen/d_20" - android:paddingBottom="@dimen/d_20"> + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + - - - + + + + + - - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_brand_active_info.xml b/app/src/main/res/layout/layout_brand_active_info.xml index 2bff239..77c9984 100644 --- a/app/src/main/res/layout/layout_brand_active_info.xml +++ b/app/src/main/res/layout/layout_brand_active_info.xml @@ -2,7 +2,6 @@ - + + + + + + + + + + + android:visibility="visible" /> - @@ -54,11 +47,18 @@ + diff --git a/app/src/main/res/layout/layout_brand_timetable_info.xml b/app/src/main/res/layout/layout_brand_timetable_info.xml index 2281a3b..299f044 100644 --- a/app/src/main/res/layout/layout_brand_timetable_info.xml +++ b/app/src/main/res/layout/layout_brand_timetable_info.xml @@ -1,23 +1,22 @@ + android:orientation="vertical"> - + + + + + + + + + + + android:orientation="vertical" + android:paddingVertical="@dimen/d_15"> + diff --git a/app/src/main/res/layout/layout_class_empty.xml b/app/src/main/res/layout/layout_class_empty.xml index 9667e9a..cd60a73 100644 --- a/app/src/main/res/layout/layout_class_empty.xml +++ b/app/src/main/res/layout/layout_class_empty.xml @@ -9,6 +9,7 @@ android:layout_height="129dp" android:src="@mipmap/empty_view_img"/> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/timetable_cell2.xml b/app/src/main/res/layout/timetable_cell2.xml new file mode 100644 index 0000000..d35352a --- /dev/null +++ b/app/src/main/res/layout/timetable_cell2.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/timetable_row.xml b/app/src/main/res/layout/timetable_row.xml new file mode 100644 index 0000000..8f16aeb --- /dev/null +++ b/app/src/main/res/layout/timetable_row.xml @@ -0,0 +1,14 @@ + + + + + + \ 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 6d84aaf..7a7d404 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,4 @@ - 电子班牌 检测到新版本 解决了若干bug