| @@ -0,0 +1,6 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <project version="4"> | |||
| <component name="VcsDirectoryMappings"> | |||
| <mapping directory="$PROJECT_DIR$" vcs="Git" /> | |||
| </component> | |||
| </project> | |||
| @@ -0,0 +1,60 @@ | |||
| package com.xkl.cdl.module.center_learn | |||
| import android.os.Bundle | |||
| import androidx.fragment.app.Fragment | |||
| import android.view.LayoutInflater | |||
| import android.view.View | |||
| import android.view.ViewGroup | |||
| import com.xkl.cdl.R | |||
| // TODO: Rename parameter arguments, choose names that match | |||
| // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER | |||
| private const val ARG_PARAM1 = "param1" | |||
| private const val ARG_PARAM2 = "param2" | |||
| /** | |||
| * A simple [Fragment] subclass. | |||
| * Use the [LearnCenterFragment.newInstance] factory method to | |||
| * create an instance of this fragment. | |||
| */ | |||
| class LearnCenterFragment : Fragment() { | |||
| // TODO: Rename and change types of parameters | |||
| private var param1: String? = null | |||
| private var param2: String? = null | |||
| override fun onCreate(savedInstanceState: Bundle?) { | |||
| super.onCreate(savedInstanceState) | |||
| arguments?.let { | |||
| param1 = it.getString(ARG_PARAM1) | |||
| param2 = it.getString(ARG_PARAM2) | |||
| } | |||
| } | |||
| override fun onCreateView( | |||
| inflater: LayoutInflater, container: ViewGroup?, | |||
| savedInstanceState: Bundle? | |||
| ): View? { | |||
| // Inflate the layout for this fragment | |||
| return inflater.inflate(R.layout.fragment_learn_center, container, false) | |||
| } | |||
| companion object { | |||
| /** | |||
| * Use this factory method to create a new instance of | |||
| * this fragment using the provided parameters. | |||
| * | |||
| * @param param1 Parameter 1. | |||
| * @param param2 Parameter 2. | |||
| * @return A new instance of fragment LearnCenterFragment. | |||
| */ | |||
| // TODO: Rename and change types and number of parameters | |||
| @JvmStatic | |||
| fun newInstance(param1: String, param2: String) = | |||
| LearnCenterFragment().apply { | |||
| arguments = Bundle().apply { | |||
| putString(ARG_PARAM1, param1) | |||
| putString(ARG_PARAM2, param2) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,12 @@ | |||
| package com.xkl.cdl.module.main | |||
| import androidx.appcompat.app.AppCompatActivity | |||
| import android.os.Bundle | |||
| import com.xkl.cdl.R | |||
| class MainActivity : AppCompatActivity() { | |||
| override fun onCreate(savedInstanceState: Bundle?) { | |||
| super.onCreate(savedInstanceState) | |||
| setContentView(R.layout.activity_main) | |||
| } | |||
| } | |||
| @@ -0,0 +1,60 @@ | |||
| package com.xkl.cdl.module.memo | |||
| import android.os.Bundle | |||
| import androidx.fragment.app.Fragment | |||
| import android.view.LayoutInflater | |||
| import android.view.View | |||
| import android.view.ViewGroup | |||
| import com.xkl.cdl.R | |||
| // TODO: Rename parameter arguments, choose names that match | |||
| // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER | |||
| private const val ARG_PARAM1 = "param1" | |||
| private const val ARG_PARAM2 = "param2" | |||
| /** | |||
| * A simple [Fragment] subclass. | |||
| * Use the [MemoFragment.newInstance] factory method to | |||
| * create an instance of this fragment. | |||
| */ | |||
| class MemoFragment : Fragment() { | |||
| // TODO: Rename and change types of parameters | |||
| private var param1: String? = null | |||
| private var param2: String? = null | |||
| override fun onCreate(savedInstanceState: Bundle?) { | |||
| super.onCreate(savedInstanceState) | |||
| arguments?.let { | |||
| param1 = it.getString(ARG_PARAM1) | |||
| param2 = it.getString(ARG_PARAM2) | |||
| } | |||
| } | |||
| override fun onCreateView( | |||
| inflater: LayoutInflater, container: ViewGroup?, | |||
| savedInstanceState: Bundle? | |||
| ): View? { | |||
| // Inflate the layout for this fragment | |||
| return inflater.inflate(R.layout.fragment_memo, container, false) | |||
| } | |||
| companion object { | |||
| /** | |||
| * Use this factory method to create a new instance of | |||
| * this fragment using the provided parameters. | |||
| * | |||
| * @param param1 Parameter 1. | |||
| * @param param2 Parameter 2. | |||
| * @return A new instance of fragment MemoFragment. | |||
| */ | |||
| // TODO: Rename and change types and number of parameters | |||
| @JvmStatic | |||
| fun newInstance(param1: String, param2: String) = | |||
| MemoFragment().apply { | |||
| arguments = Bundle().apply { | |||
| putString(ARG_PARAM1, param1) | |||
| putString(ARG_PARAM2, param2) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,60 @@ | |||
| package com.xkl.cdl.module.my | |||
| import android.os.Bundle | |||
| import androidx.fragment.app.Fragment | |||
| import android.view.LayoutInflater | |||
| import android.view.View | |||
| import android.view.ViewGroup | |||
| import com.xkl.cdl.R | |||
| // TODO: Rename parameter arguments, choose names that match | |||
| // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER | |||
| private const val ARG_PARAM1 = "param1" | |||
| private const val ARG_PARAM2 = "param2" | |||
| /** | |||
| * A simple [Fragment] subclass. | |||
| * Use the [MyFragment.newInstance] factory method to | |||
| * create an instance of this fragment. | |||
| */ | |||
| class MyFragment : Fragment() { | |||
| // TODO: Rename and change types of parameters | |||
| private var param1: String? = null | |||
| private var param2: String? = null | |||
| override fun onCreate(savedInstanceState: Bundle?) { | |||
| super.onCreate(savedInstanceState) | |||
| arguments?.let { | |||
| param1 = it.getString(ARG_PARAM1) | |||
| param2 = it.getString(ARG_PARAM2) | |||
| } | |||
| } | |||
| override fun onCreateView( | |||
| inflater: LayoutInflater, container: ViewGroup?, | |||
| savedInstanceState: Bundle? | |||
| ): View? { | |||
| // Inflate the layout for this fragment | |||
| return inflater.inflate(R.layout.fragment_my, container, false) | |||
| } | |||
| companion object { | |||
| /** | |||
| * Use this factory method to create a new instance of | |||
| * this fragment using the provided parameters. | |||
| * | |||
| * @param param1 Parameter 1. | |||
| * @param param2 Parameter 2. | |||
| * @return A new instance of fragment MyFragment. | |||
| */ | |||
| // TODO: Rename and change types and number of parameters | |||
| @JvmStatic | |||
| fun newInstance(param1: String, param2: String) = | |||
| MyFragment().apply { | |||
| arguments = Bundle().apply { | |||
| putString(ARG_PARAM1, param1) | |||
| putString(ARG_PARAM2, param2) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,60 @@ | |||
| package com.xkl.cdl.module.statics | |||
| import android.os.Bundle | |||
| import androidx.fragment.app.Fragment | |||
| import android.view.LayoutInflater | |||
| import android.view.View | |||
| import android.view.ViewGroup | |||
| import com.xkl.cdl.R | |||
| // TODO: Rename parameter arguments, choose names that match | |||
| // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER | |||
| private const val ARG_PARAM1 = "param1" | |||
| private const val ARG_PARAM2 = "param2" | |||
| /** | |||
| * A simple [Fragment] subclass. | |||
| * Use the [StaticsFragment.newInstance] factory method to | |||
| * create an instance of this fragment. | |||
| */ | |||
| class StaticsFragment : Fragment() { | |||
| // TODO: Rename and change types of parameters | |||
| private var param1: String? = null | |||
| private var param2: String? = null | |||
| override fun onCreate(savedInstanceState: Bundle?) { | |||
| super.onCreate(savedInstanceState) | |||
| arguments?.let { | |||
| param1 = it.getString(ARG_PARAM1) | |||
| param2 = it.getString(ARG_PARAM2) | |||
| } | |||
| } | |||
| override fun onCreateView( | |||
| inflater: LayoutInflater, container: ViewGroup?, | |||
| savedInstanceState: Bundle? | |||
| ): View? { | |||
| // Inflate the layout for this fragment | |||
| return inflater.inflate(R.layout.fragment_statics, container, false) | |||
| } | |||
| companion object { | |||
| /** | |||
| * Use this factory method to create a new instance of | |||
| * this fragment using the provided parameters. | |||
| * | |||
| * @param param1 Parameter 1. | |||
| * @param param2 Parameter 2. | |||
| * @return A new instance of fragment StaticsFragment. | |||
| */ | |||
| // TODO: Rename and change types and number of parameters | |||
| @JvmStatic | |||
| fun newInstance(param1: String, param2: String) = | |||
| StaticsFragment().apply { | |||
| arguments = Bundle().apply { | |||
| putString(ARG_PARAM1, param1) | |||
| putString(ARG_PARAM2, param2) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| <?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" | |||
| xmlns:tools="http://schemas.android.com/tools" | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| tools:context=".module.main.MainActivity"> | |||
| </androidx.constraintlayout.widget.ConstraintLayout> | |||
| @@ -0,0 +1,14 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||
| xmlns:tools="http://schemas.android.com/tools" | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| tools:context=".module.center_learn.LearnCenterFragment"> | |||
| <!-- TODO: Update blank fragment layout --> | |||
| <TextView | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| android:text="@string/hello_blank_fragment" /> | |||
| </FrameLayout> | |||
| @@ -0,0 +1,14 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||
| xmlns:tools="http://schemas.android.com/tools" | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| tools:context=".module.memo.MemoFragment"> | |||
| <!-- TODO: Update blank fragment layout --> | |||
| <TextView | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| android:text="@string/hello_blank_fragment" /> | |||
| </FrameLayout> | |||
| @@ -0,0 +1,14 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||
| xmlns:tools="http://schemas.android.com/tools" | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| tools:context=".module.my.MyFragment"> | |||
| <!-- TODO: Update blank fragment layout --> | |||
| <TextView | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| android:text="@string/hello_blank_fragment" /> | |||
| </FrameLayout> | |||
| @@ -0,0 +1,14 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||
| xmlns:tools="http://schemas.android.com/tools" | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| tools:context=".module.statics.StaticsFragment"> | |||
| <!-- TODO: Update blank fragment layout --> | |||
| <TextView | |||
| android:layout_width="match_parent" | |||
| android:layout_height="match_parent" | |||
| android:text="@string/hello_blank_fragment" /> | |||
| </FrameLayout> | |||
| @@ -0,0 +1 @@ | |||
| /build | |||
| @@ -0,0 +1,45 @@ | |||
| plugins { | |||
| id 'com.android.library' | |||
| id 'kotlin-android' | |||
| id 'kotlin-kapt' | |||
| } | |||
| android { | |||
| compileSdk rootProject.ext.android.compile_sdk_version | |||
| buildToolsVersion rootProject.ext.android.build_tools_version | |||
| defaultConfig { | |||
| minSdk rootProject.ext.android.min_sdk_version | |||
| targetSdk rootProject.ext.android.target_sdk_version | |||
| versionCode 1 | |||
| versionName "1.0" | |||
| testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | |||
| consumerProguardFiles "consumer-rules.pro" | |||
| } | |||
| buildTypes { | |||
| release { | |||
| minifyEnabled false | |||
| proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | |||
| } | |||
| } | |||
| compileOptions { | |||
| sourceCompatibility JavaVersion.VERSION_1_8 | |||
| targetCompatibility JavaVersion.VERSION_1_8 | |||
| } | |||
| kotlinOptions { | |||
| jvmTarget = '1.8' | |||
| } | |||
| viewBinding{ | |||
| enabled true | |||
| } | |||
| dataBinding{ | |||
| enabled true | |||
| } | |||
| } | |||
| dependencies { | |||
| rootProject.ext.dependencies_required.each{ k,v -> implementation v} | |||
| testImplementation rootProject.ext.dependencies_testImplementation.junit | |||
| rootProject.ext.dependencies_androidTestImplementation.each{ k,v -> androidTestImplementation v} | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| # Add project specific ProGuard rules here. | |||
| # You can control the set of applied configuration files using the | |||
| # proguardFiles setting in build.gradle. | |||
| # | |||
| # For more details, see | |||
| # http://developer.android.com/guide/developing/tools/proguard.html | |||
| # If your project uses WebView with JS, uncomment the following | |||
| # and specify the fully qualified class name to the JavaScript interface | |||
| # class: | |||
| #-keepclassmembers class fqcn.of.javascript.interface.for.webview { | |||
| # public *; | |||
| #} | |||
| # Uncomment this to preserve the line number information for | |||
| # debugging stack traces. | |||
| #-keepattributes SourceFile,LineNumberTable | |||
| # If you keep the line number information, uncomment this to | |||
| # hide the original source file name. | |||
| #-renamesourcefileattribute SourceFile | |||
| @@ -0,0 +1,24 @@ | |||
| package com.suliang.common | |||
| import androidx.test.platform.app.InstrumentationRegistry | |||
| import androidx.test.ext.junit.runners.AndroidJUnit4 | |||
| import org.junit.Test | |||
| import org.junit.runner.RunWith | |||
| import org.junit.Assert.* | |||
| /** | |||
| * Instrumented test, which will execute on an Android device. | |||
| * | |||
| * See [testing documentation](http://d.android.com/tools/testing). | |||
| */ | |||
| @RunWith(AndroidJUnit4::class) | |||
| class ExampleInstrumentedTest { | |||
| @Test | |||
| fun useAppContext() { | |||
| // Context of the app under test. | |||
| val appContext = InstrumentationRegistry.getInstrumentation().targetContext | |||
| assertEquals("com.suliang.common.test", appContext.packageName) | |||
| } | |||
| } | |||
| @@ -0,0 +1,5 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | |||
| package="com.suliang.common"> | |||
| </manifest> | |||
| @@ -0,0 +1,48 @@ | |||
| package com.suliang.common.base.activity | |||
| import android.os.Bundle | |||
| import androidx.appcompat.app.AppCompatActivity | |||
| import androidx.databinding.DataBindingUtil | |||
| import androidx.databinding.ViewDataBinding | |||
| import androidx.databinding.ViewDataBindingKtx | |||
| import java.lang.reflect.Method | |||
| import java.lang.reflect.ParameterizedType | |||
| /** | |||
| * 基类Activity | |||
| */ | |||
| abstract class BaseActivity<VB : ViewDataBinding> : AppCompatActivity() { | |||
| lateinit var databinding: VB | |||
| override fun onCreate(savedInstanceState: Bundle?) { | |||
| super.onCreate(savedInstanceState) | |||
| setLayoutBefore() | |||
| initBinding() | |||
| setLayoutAfter() | |||
| } | |||
| /** 布局前操作 : 空实现 */ | |||
| public fun setLayoutBefore() { | |||
| } | |||
| /** | |||
| * 实例化 binding和 设置布局 | |||
| */ | |||
| private fun initBinding() { | |||
| // https://www.jianshu.com/p/e3d2421a0277 | |||
| // val genericSuperClass = this::class.java.genericSuperclass as ParameterizedType //超类 | |||
| // val type = genericSuperClass.actualTypeArguments[0].javaClass | |||
| // val infate: Method = type.getDeclaredMethod("inflate") | |||
| } | |||
| /** | |||
| * 布局后操作:空实现 | |||
| */ | |||
| public fun setLayoutAfter() { | |||
| } | |||
| public abstract fun layoutRes(): Int | |||
| } | |||
| @@ -0,0 +1,4 @@ | |||
| package com.suliang.common.base.fragment | |||
| class BaseFragment { | |||
| } | |||
| @@ -0,0 +1,18 @@ | |||
| package com.suliang.common.util | |||
| import android.app.Application | |||
| import java.lang.Exception | |||
| /** | |||
| * 用于获取全局Applicaiton | |||
| */ | |||
| object AppGlobals { | |||
| val application by lazy { | |||
| try { | |||
| val currentApplication = Class.forName("android.app.ActivityThread").getDeclaredMethod("currentApplication") | |||
| currentApplication.invoke(null, null) as Application | |||
| }catch (e:Exception){ | |||
| throw RuntimeException("AppGlobals获取Application异常") | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,200 @@ | |||
| package com.suliang.common.util | |||
| import java.io.File | |||
| /** | |||
| * author suliang | |||
| * create 2020/12/11 9:43 | |||
| * Describe: 常量类 | |||
| */ | |||
| object Constants { | |||
| const val PLATFORM = "android" //平台 | |||
| const val YOUTH_VERSION = 1 //青少版 | |||
| const val CHILDREN_VERSION = 2 //幼儿版 | |||
| // public static final String ENVIRONMENT_PRODUCTION = "production" ; //正式环境 | |||
| // public static final String ENVIRONMENT_DEVELOPMENT = "development"; //开发环境 | |||
| // public static final String ENVIRONMENT_TEST = "test"; //测试环境 | |||
| const val ACCOUNT = "account" | |||
| const val USER_INFO = "userinfo" | |||
| const val TOKEN = "token" | |||
| /** 默认发音 */ | |||
| const val DEFAULT_SOUND = "default_sound" | |||
| /** 更换fragment中的颜色 */ | |||
| const val ACTION_NOTIFY_FRAGMENT_SKIN = "notify_skin" | |||
| //项目subjectId | |||
| const val SUBJECT_ENGLISH: Long = 3 //英语 | |||
| const val SUBJECT_CHINESE: Long = 1 //语文 | |||
| //课程类型的coursepack --> categoryId | |||
| const val CATEGORY_ENGLISH_WORD: Long = 1 //英语: 单词速记 | |||
| const val CATEGORY_ENGLISH_SOUNDMARK: Long = 4 //英语: 音标 | |||
| const val CATEGORY_ENGLISH_SPOKEN: Long = 13 //英语: 口语 | |||
| const val CATEGORY_CHINESE_COMPOSITION: Long = 2 //语文: 作文 | |||
| const val CATEGORY_CHINESE_LITERACY: Long = 3 //语文: 识字 | |||
| const val CATEGORY_CHINESE_PINYIN: Long = 5 //语文: 拼音 | |||
| //项目的课程类型: course --> typeId | |||
| const val COURSE_TYPE_DISCERN = 1 //认读、口语 | |||
| const val COURSE_TYPE_VOICE = 2 //辨音 | |||
| const val COURSE_TYPE_SPELL = 3 //拼写 | |||
| const val COURSE_TYPE_POINTS = 4 //作文知识点 | |||
| const val COURSE_TYPE_LITERACY = 5 //识字 | |||
| const val COURSE_TYPE_SOUNDMARK = 6 //音标 | |||
| const val COURSE_TYPE_PINYIN = 7 //拼音 | |||
| const val COURSE_TYPE_SPOKEN = 8 //口语 | |||
| //作文课时类型 | |||
| const val COMPOSITION_TYPE_VIDEO = 1 //视频 | |||
| const val COMPOSITION_TYPE_KNOWLEDGE = 2 //知识点学习 | |||
| const val COMPOSITION_TYPE_EXAM = 3 //知识点测试 | |||
| const val COMPOSITION_TYPE_READING = 4 //课堂练习 | |||
| const val COMPOSITION_TYPE_TASK = 5 //课外练习 | |||
| //口语课时类型 | |||
| const val SPOKEN_LESSON_TYPE_WORD = 1 //口语词汇 | |||
| const val SPOKEN_LESSON_TYPE_SENTENCE = 2 //口语句型 | |||
| const val SPOKEN_LESSON_TYPE_DIALOGUE = 3 //口语对话 | |||
| //课程包过期信息状态值 | |||
| const val EXPIRY_NOMAL = 1 //正常态 | |||
| const val EXPIRY_WILL_OVER = 2 //快过期 小于39天 | |||
| const val EXPIRY_OVER = 3 //已过期 | |||
| //课程包内容是否下载状态值 | |||
| const val CONTENT_NOT_DOWN = 0 //未下载 | |||
| const val CONTENT_DOWNING = 1 //下载中 | |||
| const val CONTENT_NOMAL = 2 //正常态(已下载) | |||
| val FILE_ENGLISH = "english" + File.separator + "pack" //英语项目包 | |||
| val FILE_CHINESE = "chinese" + File.separator + "pack" //作文项目包 | |||
| //课程数据包解压后保存的名称 | |||
| const val DBFILENAME = "course_data.db" | |||
| const val FILE_VOICE = "voice" //音频地址 | |||
| const val VOICE_COMMON_KONGGE = "kongge.mp3" | |||
| const val VOICE_COMMON_MISTAKE = "mistake.mp3" | |||
| const val VOICE_COMMON_DI = "di.mp3" //叮咚 | |||
| const val FILE_UPLOAD_FAIL = "error" //上传失败地址 | |||
| const val FILE_IMG = "glide" //图片缓存地址 | |||
| /********发音默认type */ | |||
| const val SOUND_TYPE_US = 1 //美 | |||
| const val SOUND_TYPE_UK = 2 //英 | |||
| const val SOUND_TYPE_CN = 3 //中文 | |||
| const val TEST_QUEST_TYPE_FIELD = 1 //测试题选项类型 :字段名 | |||
| const val TEST_QUEST_TYPE_ID = 2 //测试题选项类型: 选项id | |||
| // 分组(1:普通测试(词汇测试,不做redis统计关联) 2:章节学前测试 3:章节学后测试 4:学前总测试 5:学后总测试 6:备忘录测试(不做redis统计关联);7:作文知识点测试,8:服务中心的课程测试) | |||
| const val TEST_TYPE_NORMAL = 1 //普通测试(词汇测试,不做redis统计关联) | |||
| const val TEST_TYPE_BEFORE = 2 //学前测试 | |||
| const val TEST_TYPE_AFTER = 3 //学后测试 | |||
| const val TEST_TYPE_BEFORE_TOTAL = 4 //学前总测试 | |||
| const val TEST_TYPE_AFTER_TOTAL = 5 //学后总测试 | |||
| const val TEST_TYPE_MEMO = 6 //备忘录测试 | |||
| const val TEST_TYPE_COMPOSITION = 7 //作文知识点测试 | |||
| const val TEST_TYPE_SERVICE_CENTER = 8 //服务中心的课程测试 | |||
| const val TEST_DB_DATA_WORD = 1 // data_word | |||
| const val TEST_DB_DATA_EXAM = 2 // data_exam | |||
| const val TEST_CORRECT = 1 //答题正确 | |||
| const val TEST_ERROR = -1 //答题错误 | |||
| const val TEST_UNANSWER = 0 //答题未答 | |||
| const val TEST_TO_NEXT_TIME_CORRECT = 500 //认读辨音 正确 0.5秒跳下一题 | |||
| const val TEST_TO_NEXT_TIME_ERROR = 2000 //认读辨音 答错 2秒 | |||
| const val TEST_TO_NEXT_TIME_UNANSWER = 2000 //认读辨音 未答 2秒 | |||
| const val TEST_TO_NEXT_TIME_SPELL = 1500 //辨音错误到下一题需要1.5秒 | |||
| const val TEST_WORD_COUNT_DOWN_TIME_DISCERN = 6000 //认读单个单词倒计时时间 6秒 | |||
| const val TEST_WORD_COUNT_DOWN_TIME_SPELL_SINGLE = 1600 //拼写单个单词字母的倒计时时间 | |||
| const val TEST_WORD_COUNT_DOWN_TOME_COMPOSITION = 15000 //作文测试倒计时时间 | |||
| const val SCORE_1 = 80 //小于score_1 悲伤 | |||
| const val SCORE_2 = 90 //大于等于score1 小于 score_2 加油 | |||
| const val SCORE_SPOKEN_DIALOGUE_1 = 60 //口语对话练习课时后测试通过标准 80以上优秀,中间良好 | |||
| const val TEST_COUNT_TOTAL = 25 //总测试 50题 | |||
| const val TEST_COUNT_NORAM = 20 //章节测试 25题 | |||
| const val TEST_COUNT_VOCABULARY = 100 //词汇量测试 | |||
| //测试的题目类型 | |||
| const val TEST_QUEST_TYPE_CHOICE = 1 //选择题 | |||
| const val TEST_QUEST_TYPE_GAP_FILLING = 2 //填空题 | |||
| const val TEST_QUEST_TYPE_JUDGE = 3 //判断题 | |||
| const val TEST_QUEST_TYPE_SPOKEN_DIALOGUE = 4 //口语对话测试 | |||
| //课时状态 | |||
| const val LESSON_STATE_NORMAL = 0 //普通状态 | |||
| // public static final int LESSON_STATE_SELECT = 1 ; //选中状态 | |||
| const val LESSON_STATE_LOCKED = 1 //锁定状态 | |||
| //答题左侧按钮状态 | |||
| const val ANSWER = 0 //答案 | |||
| const val CORRECT = 1 //正确 | |||
| const val NEXT = 2 //下一条 | |||
| //有效时间 : 18秒 | |||
| const val VALID_TIME: Long = 18000 | |||
| //最后一课时 虚拟下一课时标记(主要用于判断最后一课时学后测试是否有通过) | |||
| const val LAST_LESSON_NEXT_FLAG = "-1_-1" | |||
| //学习 | |||
| const val LEARN_FLAG = 1 | |||
| //复习 | |||
| const val REVIEW_FLAG = 2 | |||
| //拼写中 | |||
| const val STATE_SPELLING = 1 | |||
| //纠错中 | |||
| const val STATE_MODIFYING = 2 | |||
| //不可操作状态 | |||
| const val STATE_UNENABLE = 3 | |||
| //拼写结果: 全对 | |||
| const val RESULT_ALL_RIGHT = 1 | |||
| //拼写结果:错误;可容错 | |||
| const val RESULT_ERROR_CAN_MODIFY = 2 | |||
| //拼写结果: 错误,无容错 | |||
| const val RESULT_ERROR = 3 | |||
| //拼写修改完成 | |||
| const val RESULT_MODIFY_OVER = 4 | |||
| // 0: 自己按顺序加载状态页 1复习页 2学前总测页 3 目录页 4学后总测未测 5、学后总测未通过 6、学后总测已通过 | |||
| const val PAGE_LOADING_NORAML = 0 | |||
| const val PAGE_LOADING_REVIEW = 1 | |||
| const val PAGE_LOADING_BEFORE = 2 | |||
| const val PAGE_LOADING_CATALOG = 3 | |||
| const val PAGE_LOADING_AFTER_NOT = 4 | |||
| const val PAGE_LOADING_AFTER_NO_PASS = 5 | |||
| const val PAGE_LOADING_AFTER_PASS = 6 | |||
| //收藏类型 | |||
| const val COMPOSITON_COLLECT_VIDEO_BLACK_BOOK = 1 //收藏类型:视频版本 | |||
| const val COMPOSITON_COLLECT_READING = 2 //阅读材料 | |||
| //模块联通通知类型 | |||
| const val NOTIFY_ENGLISH_REVIEW = 1 //英语有复习 | |||
| const val NOTIFY_ENGLISH_ERROR = 2 //英语学习有错误 | |||
| const val NOTIFY_COMPOSITION_REVIEW = 3 //作文有复习 | |||
| const val NOTIFY_COMPOSITION_ERROR = 4 //作文学习有错误 | |||
| const val NOTIFY_LEARN_RECORD_CHANGE = 5 //学习记录有变化 | |||
| //游戏 | |||
| const val GAME_GAPFILLING = 1 //填空 | |||
| const val GAME_CHOOSE = 2 //消消乐 | |||
| const val GAME_TRANSLATE = 3 //翻译排序 | |||
| //口语自动播放模式 | |||
| const val SPOKEN_AUTO_PLAY_MODEL = 1 //自动播放模式 | |||
| const val SPOKEN_AUTO_FLOWER_MODEL = 2 //跟读模式 | |||
| //收藏本: 句子type 2 | |||
| const val COLLECT_TYPE_SENTENCE: Long = 2 | |||
| } | |||
| @@ -0,0 +1,17 @@ | |||
| package com.suliang.common | |||
| import org.junit.Test | |||
| import org.junit.Assert.* | |||
| /** | |||
| * Example local unit test, which will execute on the development machine (host). | |||
| * | |||
| * See [testing documentation](http://d.android.com/tools/testing). | |||
| */ | |||
| class ExampleUnitTest { | |||
| @Test | |||
| fun addition_isCorrect() { | |||
| assertEquals(4, 2 + 2) | |||
| } | |||
| } | |||