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