From c42258b3bdc3527b74e05bbd917ceaa458cc205a Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期五, 08 八月 2025 11:25:48 +0800
Subject: [PATCH] save

---
 app/src/main/res/layout/activity_schedul_new.xml                      |   22 ++
 app/src/main/java/com/dollearn/student/network/Apis.kt                |    1 
 app/src/main/java/com/dollearn/student/ui/home/WeekSelectActivity.kt  |    2 
 app/src/main/java/com/dollearn/student/ui/home/ScheduleActivityNew.kt |  206 +++++++++++++++++++++++++---
 app/src/main/AndroidManifest.xml                                      |    2 
 app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt          |    2 
 app/src/main/java/com/dollearn/student/dialog/GameTypeDialog.kt       |   67 +++++++++
 app/src/main/res/layout/dialog_game_type.xml                          |   66 +++++++++
 app/build.gradle                                                      |    4 
 app/src/main/res/drawable/bg_black_line_10dp.xml                      |    5 
 10 files changed, 341 insertions(+), 36 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index ee67782..1aa6d09 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,8 +10,8 @@
         applicationId "com.dollearn.student"
         minSdkVersion 21
         targetSdkVersion 30
-        versionCode 1
-        versionName "1.0"
+        versionCode 4
+        versionName "1.3"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
 
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ccb4b4..bc6b390 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -102,6 +102,8 @@
             android:screenOrientation="landscape"/>
         <activity android:name=".ui.home.SuperListenActivity"  android:label="自主游戏1—超级听力"
             android:screenOrientation="landscape"/>
+        <activity android:name=".ui.home.ScheduleActivityNew"
+            android:screenOrientation="landscape"/>
 
     </application>
 
diff --git a/app/src/main/java/com/dollearn/student/dialog/GameTypeDialog.kt b/app/src/main/java/com/dollearn/student/dialog/GameTypeDialog.kt
new file mode 100644
index 0000000..ed011cf
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/dialog/GameTypeDialog.kt
@@ -0,0 +1,67 @@
+package com.dollearn.student.dialog
+
+import android.os.Bundle
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.DialogFragment
+import cn.sinata.xldutils.utils.screenWidth
+import com.dollearn.student.R
+import kotlinx.android.synthetic.main.dialog_game_type.*
+import org.jetbrains.anko.wrapContent
+
+class GameTypeDialog: DialogFragment() {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
+        inflater.inflate(R.layout.dialog_game_type,container,false)
+
+    private val isStory by lazy { arguments?.getBoolean("isStory",false)?:false } //true 是故事类型选择
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setStyle(STYLE_NO_FRAME, R.style.FadeDialog)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        dialog?.window?.setLayout((screenWidth()*0.45).toInt(), wrapContent)
+        dialog?.window?.setGravity(Gravity.CENTER)
+        dialog?.setCanceledOnTouchOutside(false)
+    }
+
+
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        if (isStory){
+            tv_title.text = "请选择故事类型"
+            tv_1.text = "自主故事1—看图配音"
+            tv_2.text = "自主故事2—框架记忆"
+        }
+
+        tv_cancel.setOnClickListener {
+            dismissAllowingStateLoss()
+        }
+
+        tv_1.setOnClickListener {
+            callback?.onOk(1)
+            dismissAllowingStateLoss()
+        }
+
+        tv_2.setOnClickListener {
+            callback?.onOk(2)
+            dismissAllowingStateLoss()
+        }
+    }
+
+
+    interface OnClickCallback{
+        fun onOk(d:Int)
+    }
+
+    private var callback:OnClickCallback? = null
+
+    fun setCallback(callback:OnClickCallback){
+        this.callback = callback
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/network/Apis.kt b/app/src/main/java/com/dollearn/student/network/Apis.kt
index a111009..f0dc34b 100644
--- a/app/src/main/java/com/dollearn/student/network/Apis.kt
+++ b/app/src/main/java/com/dollearn/student/network/Apis.kt
@@ -5,6 +5,7 @@
 
 //    private const val TEST_URL = "http://vwpmxwbhv59i.guyubao.com/" //周帅内网
     private const val TEST_URL = "https://dollearn.com/api/" //外网
+//    private const val TEST_URL = "http://192.168.110.64:9000/" //外网
     private const val LINE_URL = "http://8.137.22.229:56666/" //正式服
     val BASE_URL = if (isTest) TEST_URL else LINE_URL
 
diff --git a/app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt
index 7086247..a041af1 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt
@@ -103,8 +103,8 @@
             ResultActivity.startResult(this,day,week,season,4,totalCount,rightCount,data!!.data.integral,time,data!!.data.id)
             finish()
         }else{
-            view_pager.setCurrentItem(view_pager.currentItem+1,true)
             (fragments[view_pager.currentItem+1] as QAFragment).recover()
+            view_pager.setCurrentItem(view_pager.currentItem+1,true)
             tv_last.visible()
             indexAdapter.notifyDataSetChanged()
         }
diff --git a/app/src/main/java/com/dollearn/student/ui/home/ScheduleActivityNew.kt b/app/src/main/java/com/dollearn/student/ui/home/ScheduleActivityNew.kt
index 9795042..e3e23ed 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/ScheduleActivityNew.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/ScheduleActivityNew.kt
@@ -1,73 +1,225 @@
 package com.dollearn.student.ui.home
 
-import androidx.fragment.app.Fragment
+import android.widget.TextView
+import androidx.core.os.bundleOf
+import cn.sinata.xldutils.utils.myToast
+import cn.sinata.xldutils.utils.showAllowingStateLoss
 import com.dollearn.student.R
+import com.dollearn.student.dialog.GameTypeDialog
+import com.dollearn.student.dialog.TipDialog
+import com.dollearn.student.network.Apis
 import com.dollearn.student.network.HttpManager
 import com.dollearn.student.network.request
 import com.dollearn.student.ui.TransparentStatusBarActivity
 import com.dollearn.student.utils.Const
+import com.dollearn.student.utils.event.EmptyEvent
 import com.dollearn.student.utils.event.IntEvent
-import kotlinx.android.synthetic.main.activity_schedul.*
+import com.dollearn.student.utils.extention.clickDelay
+import kotlinx.android.synthetic.main.activity_schedul_new.*
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
+import org.jetbrains.anko.backgroundResource
+import org.jetbrains.anko.browse
+import org.jetbrains.anko.startActivity
+import org.jetbrains.anko.startActivityForResult
 
 class ScheduleActivityNew :TransparentStatusBarActivity(){
     override fun setContentView() = R.layout.activity_schedul_new
 
-    private val titles = arrayOf("Day 1", "Day 2", "Day 3", "Day 4", "Day 5", "自主游戏", "听故事")
-    private val frags = arrayListOf<Fragment>()
-
     val week by lazy { intent.getIntExtra("week",0) }
     val season by lazy { intent.getIntExtra("season",0) }
 
-    var currentDay = 1
+    val dailyViews by lazy { arrayListOf(cl_1,cl_2,cl_3,cl_4,cl_5,cl_6,cl_7) }
 
     override fun initClick() {
+        cl_1.clickDelay {
+            showDialog("加载题目...")
+            HttpManager.listenSelectPicture(season, week, 1).request(this,false, {_,data->
+                startActivityForResult<ListenActivity>(1,"data" to data,"day" to 1,"week" to week,"season" to season)
+                EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+            }){_,msg->
+                handleError(msg)
+            }
+        }
+        cl_2.clickDelay {
+            showDialog("加载题目...")
+            HttpManager.pictureSelectVoice(season, week, 2).request(this,false, {_,data->
+                startActivityForResult<ChooseVoiceActivity>(1,"data" to data,"day" to 2,"week" to week,"season" to season)
+                EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+
+            }){_,msg->
+                handleError(msg)
+            }
+        }
+        cl_3.clickDelay {
+            showDialog("加载题目...")
+            HttpManager.induceExclude(season, week, 3).request(this,false, {_,data->
+                startActivityForResult<IncludeActivity>(1,"data" to data,"day" to 3,"week" to week,"season" to season)
+                EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+
+            }){_,msg->
+                handleError(msg)
+            }
+        }
+        cl_4.clickDelay {
+            showDialog("加载题目...")
+            HttpManager.questionsAndAnswers(season, week, 4).request(this,false, {_,data->
+                startActivityForResult<QAActivity>(1,"data" to data,"day" to 4,"week" to week,"season" to season)
+                EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+
+            }){_,msg->
+                handleError(msg)
+            }
+        }
+        cl_5.clickDelay {
+            showDialog("加载题目...")
+            HttpManager.pictureMateVoice(season, week, 5).request(this,false,{_,data->
+                startActivityForResult<MatchActivity>(1,"data" to data,"day" to 5,"week" to week,"season" to season)
+                EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+
+            }){_,msg->
+                handleError(msg)
+            }
+        }
+        cl_6.clickDelay {
+            val gameTypeDialog = GameTypeDialog()
+            gameTypeDialog.setCallback(object :GameTypeDialog.OnClickCallback{
+                override fun onOk(d: Int) {
+                    if (d == 1){
+                        HttpManager.userGameDifficulty(week).request(this@ScheduleActivityNew){_,data->
+                            startActivity<SuperListenActivity>("week" to week,"season" to season,"level" to (data?:0))
+                            EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+                        }
+                    }else{
+                        showDialog("加载题目...")
+                        HttpManager.gameMemory(season, week).request(this@ScheduleActivityNew){_,data->
+                            startActivity<MemoryActivity>("data" to data,"week" to week,"season" to season)
+                            EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+
+                        }
+                    }
+                }
+            })
+            gameTypeDialog.show(supportFragmentManager,"game")
+        }
+        cl_7.clickDelay {
+            val gameTypeDialog = GameTypeDialog()
+            gameTypeDialog.arguments = bundleOf("isStory" to true)
+            gameTypeDialog.setCallback(object :GameTypeDialog.OnClickCallback{
+                override fun onOk(d: Int) {
+                    if (d == 1){
+                        showDialog("加载题目...")
+                        HttpManager.lookPictureDbu(season, week).request(this@ScheduleActivityNew){_,data->
+                            startActivity<LookImgActivity>("data" to data,"week" to week,"season" to season)
+                            EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+                        }
+                    }else{
+                        showDialog("加载题目...")
+                        HttpManager.frameworkMemory(season, week).request(this@ScheduleActivityNew){_,data->
+                            startActivity<ListenStoryActivity>("data" to data,"week" to week,"season" to season)
+                            EventBus.getDefault().post(EmptyEvent(Const.EventCode.START_TIMER))
+
+                        }
+                    }
+                }
+            })
+            gameTypeDialog.show(supportFragmentManager,"game")
+        }
     }
 
     override fun initView() {
         title = ""
-        getSchedule()
         EventBus.getDefault().register(this)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        getSchedule()
     }
 
     private fun getSchedule(){
         HttpManager.studySchedule(week,1).request(this){_,data->
             data?.apply {
-                currentDay = day
                 initTab(if (computeSchedule == 100) 7 else day)
+                tv_current.text = "当前周目:第 ${week} 周"
+                tv_progress.text = "${computeSchedule}%"
+                tv_total.text = "${totalStudy}小时"
+                tv_today.text = "${todayStudy}小时"
+                progress_bar.progress = computeSchedule
+                formatProgress(listen,tv_state)
+                formatProgress(look,tv_state_2)
+                formatProgress(induction,tv_state_3)
+                formatProgress(answer,tv_state_4)
+                formatProgress(pair,tv_state_5)
             }
         }
     }
 
     private fun initTab(day:Int) {
-        titles.forEachIndexed { index, s ->
-            if (index<5){
-                frags.add(DailyFragment.newInstance(index+1))
-            }else
-                frags.add(WeekendFragment.newInstance(index+1))
+        //设置是否可点击
+        dailyViews.forEachIndexed { index, constraintLayout ->
+            if (index in day until 6){
+                dailyViews[index].isEnabled = false
+                dailyViews[index].alpha = 0.5f
+            }else{
+                dailyViews[index].isEnabled = true
+                dailyViews[index].alpha = 1f
+            }
         }
-        tab_bar.setViewPager(view_pager, titles,this,frags)
-        tab_bar.currentTab = currentDay-1
-        view_pager.offscreenPageLimit = day
-        //设置不可点击的day
-        (day until 6).forEach {
-            tab_bar.getTitleView(it).isEnabled = false
-        }
-        if (tab_bar.currentTab == 0)
-            tab_bar.updateTabStyles()
     }
 
-    fun unLockNext(day: Int){
-        currentDay = day
-        tab_bar.getTitleView(day - 1).isEnabled = true
-        tab_bar.currentTab = currentDay-1
+    private fun formatProgress(progress:Int,tv: TextView){
+        tv.text =  when(progress){
+            -1, 0->{
+                tv.backgroundResource = R.drawable.bg_red_9dp
+                "未完成"
+            }
+            100->{
+                tv.backgroundResource = R.drawable.bg_blue_9dp
+                "已完成"
+            }
+            else->{
+                tv.backgroundResource = R.drawable.bg_pink_9dp
+                "剩余:${progress}%"
+            }
+        }
+    }
+
+    private fun handleError(msg:String){
+        if (msg.contains("会员")){
+            val tipDialog = TipDialog()
+            tipDialog.arguments = bundleOf("msg" to msg,"ok" to "成为会员")
+            tipDialog.setCallback(object : TipDialog.OnClickCallback{
+                override fun onOk() {
+                    browse(Apis.SHARE_URL,true)
+                }
+
+                override fun onCancel() {
+                }
+            })
+            tipDialog.showAllowingStateLoss(supportFragmentManager,"vip")
+        }else{
+            myToast(msg)
+        }
     }
 
     @Subscribe
     fun nextSubject(e: IntEvent){
         if (e.code == Const.EventCode.NEXT_SUBJECT){
-            (frags[view_pager.currentItem] as DailyFragment).nextSubject(e.i)
+            when(e.i){
+                2->{
+                    cl_2.callOnClick()
+                }
+                3->{
+                    cl_3.callOnClick()
+                }
+                4->{
+                    cl_4.callOnClick()
+                }
+                5->{
+                    cl_5.callOnClick()
+                }
+            }
         }
     }
 
diff --git a/app/src/main/java/com/dollearn/student/ui/home/WeekSelectActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/WeekSelectActivity.kt
index fc273e8..ffbf228 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/WeekSelectActivity.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/WeekSelectActivity.kt
@@ -32,7 +32,7 @@
 
         weekAdapter.setOnItemClickListener { view, position ->
             if (weeks[position].canStudy)
-                startActivity<ScheduleActivity>("week" to weeks[position].week,"season" to seasonAdapter.checked+1)
+                startActivity<ScheduleActivityNew>("week" to weeks[position].week,"season" to seasonAdapter.checked+1)
             else{
                 val msg = if (seasonAdapter.checked == 0||weeks[0].canStudy) "请先完成上一周目学习后再试" else "请先完成上一季度学习后再试"
                 val tipDialog = TipDialog()
diff --git a/app/src/main/res/drawable/bg_black_line_10dp.xml b/app/src/main/res/drawable/bg_black_line_10dp.xml
new file mode 100644
index 0000000..3d7bb84
--- /dev/null
+++ b/app/src/main/res/drawable/bg_black_line_10dp.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="16dp"/>
+    <stroke android:color="@color/textColor" android:width="2dp"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_schedul_new.xml b/app/src/main/res/layout/activity_schedul_new.xml
index 237d76c..f630538 100644
--- a/app/src/main/res/layout/activity_schedul_new.xml
+++ b/app/src/main/res/layout/activity_schedul_new.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:background="@color/colorRed"
     android:layout_height="match_parent"
     xmlns:app="http://schemas.android.com/apk/res-auto">
     <androidx.constraintlayout.widget.ConstraintLayout
@@ -184,6 +183,7 @@
         app:layout_constraintTop_toBottomOf="@id/cl_top"
         app:layout_constraintBottom_toBottomOf="parent"
         android:layout_marginTop="10dp"
+        android:scrollbars="none"
         app:layout_constraintStart_toStartOf="@id/cl_top"
         app:layout_constraintEnd_toStartOf="@id/center">
         <LinearLayout
@@ -443,7 +443,7 @@
                     android:id="@+id/tv_name_6"
                     android:layout_marginTop="16dp"
                     android:textColor="@color/textColor"
-                    android:text="自主游戏1- 超级听力"/>
+                    android:text=""/>
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
@@ -458,11 +458,24 @@
                     android:layout_marginTop="9dp"
                     android:textSize="12sp"
                     android:textStyle="bold"/>
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    app:layout_constraintTop_toTopOf="parent"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintStart_toEndOf="@id/tv_d6"
+                    android:layout_marginStart="24dp"
+                    android:textSize="16sp"
+                    android:textStyle="bold"
+                    android:textColor="@color/textColor"
+                    android:text="自主游戏"/>
+
             </androidx.constraintlayout.widget.ConstraintLayout>
             <androidx.constraintlayout.widget.ConstraintLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:id="@+id/cl_7"
+                android:layout_marginBottom="20dp"
                 android:layout_marginTop="10dp"
                 android:background="@drawable/bg_white_8dp">
                 <TextView
@@ -476,7 +489,7 @@
                     android:layout_marginStart="30dp"
                     app:layout_constraintTop_toTopOf="parent"
                     app:layout_constraintBottom_toBottomOf="parent"
-                    android:text="第 7 天"/>
+                    android:text="听故事"/>
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
@@ -487,8 +500,7 @@
                     android:textStyle="bold"
                     android:id="@+id/tv_name_7"
                     android:layout_marginTop="16dp"
-                    android:textColor="@color/textColor"
-                    android:text="自主游戏2-超级记忆"/>
+                    android:textColor="@color/textColor"/>
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/dialog_game_type.xml b/app/src/main/res/layout/dialog_game_type.xml
new file mode 100644
index 0000000..e47ef68
--- /dev/null
+++ b/app/src/main/res/layout/dialog_game_type.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingBottom="20dp"
+    android:background="@drawable/bg_white_10dp">
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="22dp"
+        android:layout_marginEnd="14dp"
+        android:gravity="center"
+        android:text="请选择游戏类型"
+        android:textColor="@color/textColor"
+        android:textSize="18sp"
+        android:textStyle="bold"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/tv_1"
+        android:gravity="center"
+        android:paddingVertical="20dp"
+        android:textSize="18sp"
+        android:layout_marginHorizontal="40dp"
+        android:textStyle="bold"
+        android:background="@drawable/bg_black_line_10dp"
+        android:textColor="@color/textColor"
+        app:layout_constraintTop_toBottomOf="@id/tv_title"
+        android:layout_marginTop="20dp"
+        android:text="自主游戏1-超级听力"/>
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/tv_2"
+        android:gravity="center"
+        android:paddingVertical="20dp"
+        android:textSize="16sp"
+        android:layout_marginHorizontal="40dp"
+        android:textStyle="bold"
+        android:background="@drawable/bg_black_line_10dp"
+        android:textColor="@color/textColor"
+        app:layout_constraintTop_toBottomOf="@id/tv_1"
+        android:layout_marginTop="18sp"
+        android:text="自主游戏2-超级记忆"/>
+
+    <TextView
+        android:id="@+id/tv_cancel"
+        android:layout_width="90dp"
+        android:layout_height="40dp"
+        android:gravity="center"
+        android:text="关闭"
+        android:textColor="@color/textColor"
+        android:textSize="15sp"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_marginTop="20dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:textStyle="bold"
+        android:background="@drawable/bg_blue_line_4dp"
+        app:layout_constraintTop_toBottomOf="@id/tv_2" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file

--
Gitblit v1.7.1