|
@@ -0,0 +1,265 @@
|
|
|
+package org.brynhild.graduation.activity.common
|
|
|
+
|
|
|
+import android.graphics.Color
|
|
|
+import android.os.Bundle
|
|
|
+import android.view.LayoutInflater
|
|
|
+import android.widget.PopupMenu
|
|
|
+import android.widget.Toast
|
|
|
+import androidx.appcompat.app.AlertDialog
|
|
|
+import com.google.gson.Gson
|
|
|
+import com.zhuangfei.timetable.listener.ISchedule
|
|
|
+import com.zhuangfei.timetable.listener.IWeekView
|
|
|
+import com.zhuangfei.timetable.listener.OnSlideBuildAdapter
|
|
|
+import com.zhuangfei.timetable.model.Schedule
|
|
|
+import org.brynhild.graduation.R
|
|
|
+import org.brynhild.graduation.common.config.LoginConfiguration
|
|
|
+import org.brynhild.graduation.common.constant.AccountConstant
|
|
|
+import org.brynhild.graduation.common.transfer.Result
|
|
|
+import org.brynhild.graduation.common.transfer.handler.ResponseHandler
|
|
|
+import org.brynhild.graduation.common.transfer.utils.ServiceCreator
|
|
|
+import org.brynhild.graduation.common.transfer.vo.timetable.AdminAddTimeTable
|
|
|
+import org.brynhild.graduation.common.transfer.vo.timetable.QueryTimeTableRequest
|
|
|
+import org.brynhild.graduation.common.transfer.vo.user.AdminModifyClass
|
|
|
+import org.brynhild.graduation.common.utils.JsonUtils
|
|
|
+import org.brynhild.graduation.databinding.ActivityTimetableBinding
|
|
|
+import org.brynhild.graduation.databinding.AdminAddTimetableDialogBinding
|
|
|
+import org.brynhild.graduation.databinding.AdminModifyClassDialogBinding
|
|
|
+import org.brynhild.graduation.network.entiity.ClassEntity
|
|
|
+import org.brynhild.graduation.network.entiity.TimeTableInfo
|
|
|
+import org.brynhild.graduation.service.http.AdminService
|
|
|
+import org.brynhild.graduation.timetable.model.SubjectRepertory
|
|
|
+import retrofit2.Call
|
|
|
+import retrofit2.Callback
|
|
|
+import retrofit2.Response
|
|
|
+
|
|
|
+class TimetableActivity : BaseActivity() {
|
|
|
+ private lateinit var binding:ActivityTimetableBinding
|
|
|
+ private lateinit var classEntity: ClassEntity
|
|
|
+ private val subjects=ArrayList<TimeTableInfo>()
|
|
|
+
|
|
|
+ private fun loadTimeTableData(){
|
|
|
+ when(LoginConfiguration.userInfo!!.user.type){
|
|
|
+ AccountConstant.ADMIN->{
|
|
|
+ val service=ServiceCreator.create(AdminService::class.java)
|
|
|
+ val data=QueryTimeTableRequest(null,null,null,null,null,null,"${classEntity.id}",null,null,null)
|
|
|
+ service.queryTimeTable(LoginConfiguration.userInfo!!.token,data).enqueue(object :Callback<org.brynhild.graduation.common.transfer.Result>{
|
|
|
+ override fun onResponse(call: Call<Result>, response: Response<Result>) {
|
|
|
+ ResponseHandler.handle(response,{
|
|
|
+ val gson=Gson()
|
|
|
+ for(item in it.data as ArrayList<*>){
|
|
|
+ val json=gson.toJson(item)
|
|
|
+ val timetable=JsonUtils.fromJson<TimeTableInfo>(json)
|
|
|
+ if(timetable!=null){
|
|
|
+ subjects.add(timetable)
|
|
|
+ }
|
|
|
+ }
|
|
|
+// Toast.makeText(this@TimetableActivity,"${subjects.size}",Toast.LENGTH_SHORT).show()
|
|
|
+// binding.idTimetableView.updateDateView()
|
|
|
+ initTimetableView()
|
|
|
+ },{
|
|
|
+ ResponseHandler.showMessage(it)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ override fun onFailure(call: Call<Result>, t: Throwable) {
|
|
|
+ t.printStackTrace()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ AccountConstant.TEACHER->{
|
|
|
+
|
|
|
+ }
|
|
|
+ AccountConstant.USER->{
|
|
|
+
|
|
|
+ }
|
|
|
+ else->{
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
+ super.onCreate(savedInstanceState)
|
|
|
+ binding=ActivityTimetableBinding.inflate(LayoutInflater.from(this))
|
|
|
+ setContentView(binding.root)
|
|
|
+
|
|
|
+ val json = intent.getStringExtra("classEntity")
|
|
|
+
|
|
|
+
|
|
|
+ binding.idMore.setOnClickListener {
|
|
|
+ showPopMenu()
|
|
|
+ }
|
|
|
+
|
|
|
+// subjects.addAll()
|
|
|
+ binding.idLayout.setOnClickListener {
|
|
|
+ when(it.id){
|
|
|
+ R.id.id_layout ->{
|
|
|
+ if(binding.idWeekview.isShowing){
|
|
|
+ binding.idWeekview.isShow(false)
|
|
|
+ binding.idTitle.setTextColor(resources.getColor(com.zhuangfei.android_timetableview.sample.R.color.app_course_textcolor_blue))
|
|
|
+ val cur=binding.idTimetableView.curWeek()
|
|
|
+ binding.idTimetableView.onDateBuildListener()
|
|
|
+ .onUpdateDate(cur,cur)
|
|
|
+ binding.idTimetableView.changeWeekOnly(cur)
|
|
|
+ }else{
|
|
|
+ binding.idWeekview.isShow(true)
|
|
|
+ binding.idTitle.setTextColor(resources.getColor(com.zhuangfei.android_timetableview.sample.R.color.app_red))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ initTimetableView()
|
|
|
+
|
|
|
+ if(json!=null){
|
|
|
+ classEntity= JsonUtils.fromJson<ClassEntity>(json)!!
|
|
|
+ loadTimeTableData()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun initTimetableView(){
|
|
|
+ with(binding.idWeekview) {
|
|
|
+ source(subjects)
|
|
|
+ callback { week ->
|
|
|
+ val cur = binding.idTimetableView.curWeek()
|
|
|
+ binding.idTimetableView.onDateBuildListener()
|
|
|
+ .onUpdateDate(cur, week)
|
|
|
+ binding.idTimetableView.changeWeekOnly(week)
|
|
|
+ }
|
|
|
+ callback(IWeekView.OnWeekLeftClickedListener {
|
|
|
+ val itemCount=binding.idWeekview.itemCount()
|
|
|
+ val items= mutableListOf<String>()
|
|
|
+ for(i in 1..itemCount){
|
|
|
+ items.add("第${i}周")
|
|
|
+ }
|
|
|
+ var target=-1
|
|
|
+ val builder= AlertDialog.Builder(this@TimetableActivity)
|
|
|
+ with(builder) {
|
|
|
+ title="设置当前周"
|
|
|
+ setSingleChoiceItems(items.toTypedArray(),binding.idTimetableView.curWeek()-1
|
|
|
+ ) { _, p1 -> target = p1 }
|
|
|
+ setPositiveButton("设置为当前周"
|
|
|
+ ) { _, _ ->
|
|
|
+ if (target != -1) {
|
|
|
+ binding.idWeekview.curWeek(target + 1).updateView()
|
|
|
+ binding.idTimetableView.changeWeekForce(target + 1)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ setNegativeButton("取消",null)
|
|
|
+ create()
|
|
|
+ }.show()
|
|
|
+ })
|
|
|
+ isShow(false)
|
|
|
+ }.showView()
|
|
|
+
|
|
|
+
|
|
|
+ with(binding.idTimetableView) {
|
|
|
+ source(subjects)
|
|
|
+ curWeek(LoginConfiguration.timetableConfig!!.week)
|
|
|
+ curTerm("一个学期罢了")
|
|
|
+ maxSlideItem(11)
|
|
|
+ monthWidthDp(50)
|
|
|
+ callback(ISchedule.OnItemClickListener { v, scheduleList ->
|
|
|
+ display(scheduleList)
|
|
|
+ })
|
|
|
+ callback(ISchedule.OnItemLongClickListener { v, day, start ->
|
|
|
+ Toast.makeText(this@TimetableActivity,"长按:周${day},第${start}节",Toast.LENGTH_SHORT).show()
|
|
|
+ })
|
|
|
+ callback(ISchedule.OnWeekChangedListener {
|
|
|
+ binding.idTitle.text = "第${it}周"
|
|
|
+ })
|
|
|
+ callback(ISchedule.OnFlaglayoutClickListener { day, start ->
|
|
|
+ binding.idTimetableView.hideFlaglayout()
|
|
|
+ val dialogLayout= AdminAddTimetableDialogBinding.inflate(LayoutInflater.from(this@TimetableActivity))
|
|
|
+ AlertDialog.Builder(this@TimetableActivity)
|
|
|
+ .setTitle("添加课程")
|
|
|
+ .setView(dialogLayout.root)
|
|
|
+ .setPositiveButton("确认添加"){_,_->
|
|
|
+ val service= ServiceCreator.create(AdminService::class.java)
|
|
|
+ val data= AdminAddTimeTable(
|
|
|
+ dialogLayout.areaId.text.toString().toLongOrNull(),
|
|
|
+ start,
|
|
|
+ dialogLayout.week.text.toString(),
|
|
|
+ dialogLayout.step.text.toString().toIntOrNull(),
|
|
|
+ day,
|
|
|
+ dialogLayout.teacher.text.toString().toLongOrNull(),
|
|
|
+ "${classEntity.id}",
|
|
|
+ dialogLayout.courseId.text.toString().toLongOrNull(),
|
|
|
+ LoginConfiguration.timetableConfig!!.year,
|
|
|
+ LoginConfiguration.timetableConfig!!.term
|
|
|
+ )
|
|
|
+ service.addTimeTable(LoginConfiguration.userInfo!!.token,data).enqueue(object :
|
|
|
+ Callback<Result> {
|
|
|
+ override fun onResponse(
|
|
|
+ call: Call<Result>,
|
|
|
+ response: Response<Result>
|
|
|
+ ) {
|
|
|
+ ResponseHandler.handle(response,{
|
|
|
+ finish()
|
|
|
+ },{
|
|
|
+ ResponseHandler.showMessage(it)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onFailure(call: Call<Result>, t: Throwable) {
|
|
|
+ t.printStackTrace()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ .setNegativeButton("取消添加"){_,_->
|
|
|
+
|
|
|
+ }
|
|
|
+ .show()
|
|
|
+// Toast.makeText(this@TimetableActivity,"点击了旗标:周${day+1},第${start}节",Toast.LENGTH_SHORT).show()
|
|
|
+ })
|
|
|
+ }.showView()
|
|
|
+
|
|
|
+// val time= mutableListOf("08:00","08:55","10:10","11:05","14:00","14:55","16:10","17:05","19:00","19:55","20:50").toTypedArray()
|
|
|
+ val listener=binding.idTimetableView.onSlideBuildListener() as OnSlideBuildAdapter
|
|
|
+ listener.times=LoginConfiguration.timetableConfig!!.times.toTypedArray()
|
|
|
+ listener.setTimeTextColor(Color.BLACK)
|
|
|
+ binding.idTimetableView.updateSlideView()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onStart() {
|
|
|
+ super.onStart()
|
|
|
+ binding.idTimetableView.onDateBuildListener()
|
|
|
+ .onHighLight()
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun display(list:List<Schedule>){
|
|
|
+ val builder=StringBuilder()
|
|
|
+ for (item in list){
|
|
|
+ builder.append(item.name).append("、")
|
|
|
+ }
|
|
|
+ Toast.makeText(this,builder.toString(),Toast.LENGTH_SHORT).show()
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun showPopMenu(){
|
|
|
+ val menu=PopupMenu(this,binding.idMore)
|
|
|
+ menu.menuInflater.inflate(R.menu.timetable_menu,menu.menu)
|
|
|
+ menu.setOnMenuItemClickListener {
|
|
|
+ when(it.itemId){
|
|
|
+ R.id.showAllCourse ->{
|
|
|
+ binding.idTimetableView.isShowNotCurWeek(true).updateView()
|
|
|
+ }
|
|
|
+ R.id.showCurrentCourse ->{
|
|
|
+ binding.idTimetableView.isShowNotCurWeek(false).updateView()
|
|
|
+ }
|
|
|
+ R.id.showTime ->{
|
|
|
+ val time= mutableListOf("08:00","08:55","10:10","11:05","14:00","14:55","16:10","17:05","19:00","19:55","20:50").toTypedArray()
|
|
|
+ val listener=binding.idTimetableView.onSlideBuildListener() as OnSlideBuildAdapter
|
|
|
+ listener.times=time
|
|
|
+ listener.setTimeTextColor(Color.BLACK)
|
|
|
+ binding.idTimetableView.updateSlideView()
|
|
|
+ }
|
|
|
+ R.id.hiddenTime ->{
|
|
|
+ binding.idTimetableView.callback(OnSlideBuildAdapter())
|
|
|
+ binding.idTimetableView.updateSlideView()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ true
|
|
|
+ }
|
|
|
+ menu.show()
|
|
|
+ }
|
|
|
+}
|