diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
deleted file mode 100644
index a411cf0..0000000
--- a/.idea/deploymentTargetDropDown.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index ce09820..9398632 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -36,5 +36,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index cf88d0f..ef4ea95 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,10 +3,26 @@
diff --git a/app/build.gradle b/app/build.gradle
index ab97ec3..9649139 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,17 +33,25 @@ android {
v2SigningEnabled false
}
release {
- storeFile file("../buildKey/wenote.jks")
- keyAlias 'wetao'
- keyPassword 'lhb@123'
- storePassword 'lhb@123'
+// storeFile file("../buildKey/wenote.jks")
+// keyAlias 'wetao'
+// keyPassword 'lhb@123'
+// storePassword 'lhb@123'
+ keyAlias ALIAS_NAME
+ keyPassword ALIAS_PWD
+ storeFile file(KEY_PATH)
+ storePassword KEY_PWD
v2SigningEnabled false
}
debug {
- storeFile file("../buildKey/wenote.jks")
- keyAlias 'wetao'
- keyPassword 'lhb@123'
- storePassword 'lhb@123'
+// storeFile file("../buildKey/wenote.jks")
+// keyAlias 'wetao'
+// keyPassword 'lhb@123'
+// storePassword 'lhb@123'
+ keyAlias ALIAS_NAME
+ keyPassword ALIAS_PWD
+ storeFile file(KEY_PATH)
+ storePassword KEY_PWD
v2SigningEnabled false
}
}
@@ -58,6 +66,7 @@ android {
// shrinkResources false
buildConfigField "String", "BASE_URL", '"https://oa.qbjjyyun.net/api"'
buildConfigField "String", "M_URL", '"https://m.qbjjyyun.net"'
+ buildConfigField "String", "OA_URL", '"https://oa.qbjjyyun.net"'
buildConfigField "String", "APP_NAME", '"家校互通"'
// buildConfigField "String", "BASE_URL", '"http://192.168.69.99:9009"'
@@ -72,10 +81,13 @@ android {
signingConfig signingConfigs.release
// 移除无用的resource文件
shrinkResources false
- buildConfigField "String", "BASE_URL", '"http://192.168.69.99:9009"'
- buildConfigField "String", "M_URL", '"http://192.168.69.112:8098"'
-// buildConfigField "String", "BASE_URL", '"https://oa.live.educlouddata.com"'
-// buildConfigField "String", "M_URL", '"https://m.live.educlouddata.com/"'
+// buildConfigField "String", "BASE_URL", '"http://192.168.69.99:9009"'
+// buildConfigField "String", "M_URL", '"http://192.168.69.112:8098"'
+// buildConfigField "String", "BASE_URL", '"https://oa.qbjjyyun.net/api"'
+// buildConfigField "String", "OA_URL", '"https://oa.live.educlouddata.com"'
+ buildConfigField "String", "OA_URL", '"http://192.168.69.114:3000"'
+ buildConfigField "String", "M_URL", '"https://m.live.educlouddata.com/"'
+ buildConfigField "String", "BASE_URL", '"https://oa.live.educlouddata.com/api"'
buildConfigField "String", "APP_NAME", '"家校互通(开发)"'
}
@@ -171,4 +183,7 @@ dependencies {
implementation 'es.voghdev.pdfviewpager:library:1.1.2'
implementation 'io.github.h07000223:flycoTabLayout:3.0.0'
+ implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
+
+ api 'com.tencent.tbs:tbssdk:44181'
}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index f633c77..d2dbc10 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -90,3 +90,15 @@
-dontwarn io.bugtags.**
-dontwarn org.apache.http.**
-dontwarn android.net.http.AndroidHttpClient
+
+# x5
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ad09147..062ea7b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,8 @@
+ package="com.yzx.escreen"
+ android:installLocation="internalOnly">
@@ -15,6 +16,7 @@
+
-
-
-
+
+
+ android:screenOrientation="landscape" />
@@ -62,6 +64,19 @@
android:resource="@xml/provider_paths"
tools:replace="name,resource" />
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/App.kt b/app/src/main/java/com/yzx/escreen/App.kt
index 7776271..88094bc 100644
--- a/app/src/main/java/com/yzx/escreen/App.kt
+++ b/app/src/main/java/com/yzx/escreen/App.kt
@@ -4,10 +4,13 @@ import android.app.Application
import com.blankj.utilcode.util.Utils
import com.lzy.okgo.OkGo
import com.lzy.okgo.model.HttpHeaders
+import com.tencent.smtt.export.external.TbsCoreSettings
+import com.tencent.smtt.sdk.QbSdk
import com.umeng.analytics.MobclickAgent
import com.umeng.commonsdk.UMConfigure
import com.yzx.escreen.model.User
+
class App : Application() {
@@ -42,6 +45,27 @@ class App : Application() {
)
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO)
+ // 在调用TBS初始化、创建WebView之前进行如下配置
+ val map = HashMap()
+ map[TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER] = true
+ map[TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE] = true
+ QbSdk.initTbsSettings(map)
+ //腾讯x5内核
+ QbSdk.initX5Environment(this, object : QbSdk.PreInitCallback {
+ override fun onCoreInitFinished() {
+ }
+
+ /**
+ * 预初始化结束
+ * 由于X5内核体积较大,需要依赖网络动态下发,所以当内核不存在的时候,默认会回调false,此时将会使用系统内核代替
+ * @param isX5 是否使用X5内核
+ */
+ override fun onViewInitFinished(isX5: Boolean) {
+ }
+ })
+ QbSdk.setDownloadWithoutWifi(true)
+
+
}
diff --git a/app/src/main/java/com/yzx/escreen/MainActivity.kt b/app/src/main/java/com/yzx/escreen/MainActivity.kt
index 6997af7..5ba95de 100644
--- a/app/src/main/java/com/yzx/escreen/MainActivity.kt
+++ b/app/src/main/java/com/yzx/escreen/MainActivity.kt
@@ -2,9 +2,20 @@ package com.yzx.escreen
import android.annotation.SuppressLint
import android.content.Intent
+import android.view.KeyEvent
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.Fragment
+import androidx.viewpager2.adapter.FragmentStateAdapter
+import androidx.viewpager2.widget.ViewPager2
import com.flyco.tablayout.listener.CustomTabEntity
+import com.flyco.tablayout.listener.OnTabSelectListener
+import com.yzx.escreen.activity.WebActivity
import com.yzx.escreen.activity.base.BaseActivity
+import com.yzx.escreen.config.Config
+import com.yzx.escreen.fragment.HomeFragment
+import com.yzx.escreen.fragment.MyFragment
import com.yzx.escreen.model.TabEntity
+import com.yzx.escreen.model.User
import com.yzx.escreen.presenter.base.BasePresenter
import kotlinx.android.synthetic.main.activity_main.*
@@ -21,10 +32,31 @@ class MainActivity : BaseActivity>() {
override fun initView() {
+ if (!User.isLogin()) {
+ WebActivity.active(this, "${Config.OA_URL}/login")
+ finish()
+ }
val tabData = arrayListOf()
- tabData.add(TabEntity("首页",R.mipmap.home_select,R.mipmap.home_unselect))
- tabData.add(TabEntity("我的",R.mipmap.my_select,R.mipmap.my_unselect))
+ tabData.add(TabEntity("首页", R.mipmap.home_select, R.mipmap.home_unselect))
+ tabData.add(TabEntity("我的", R.mipmap.my_select, R.mipmap.my_unselect))
tabLayout.setTabData(tabData)
+
+ viewPager2.adapter = HomePagerAdapter(this)
+ viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
+ override fun onPageSelected(position: Int) {
+ super.onPageSelected(position)
+ tabLayout.currentTab = position
+ }
+ })
+ tabLayout.setOnTabSelectListener(object : OnTabSelectListener {
+ override fun onTabSelect(position: Int) {
+ viewPager2.currentItem = position
+ }
+
+ override fun onTabReselect(position: Int) {
+ }
+
+ })
}
override fun initData() {
@@ -32,14 +64,40 @@ class MainActivity : BaseActivity>() {
}
- override fun initPresenter(): BasePresenter<*>? {
+ override fun initPresenter(): BasePresenter<*>? {
return null
}
@SuppressLint("SetTextI18n")
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
+ }
+ override fun onBackPressed() {
+// super.onBackPressed()
}
+ override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
+ if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME) {
+ return true
+ }
+ return super.onKeyUp(keyCode, event)
+ }
}
+
+class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) {
+ override fun getItemCount(): Int = 2
+
+ override fun createFragment(position: Int): Fragment {
+ when (position) {
+ 0 -> {
+ return HomeFragment.getNewInstance()
+ }
+ 1 -> {
+ return MyFragment.getNewInstance()
+ }
+ }
+ return HomeFragment.getNewInstance()
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/activity/HomeActivity.kt b/app/src/main/java/com/yzx/escreen/activity/HomeActivity.kt
index 9788503..0b31bc9 100644
--- a/app/src/main/java/com/yzx/escreen/activity/HomeActivity.kt
+++ b/app/src/main/java/com/yzx/escreen/activity/HomeActivity.kt
@@ -30,8 +30,8 @@ import com.yzx.escreen.model.BaseBean
import com.yzx.escreen.model.HomeItem
import com.yzx.escreen.model.User
import com.yzx.escreen.model.Version
-import com.yzx.escreen.presenter.base.BasePresenter
import com.yzx.escreen.widget.BaseDialog
+import com.yzx.escreen.presenter.base.BasePresenter
import kotlinx.android.synthetic.main.activity_home.*
import org.jetbrains.anko.find
import org.jetbrains.anko.startActivity
@@ -156,7 +156,7 @@ class HomeActivity : BaseActivity>(), NetworkUtils.OnNetworkSta
val user = User.getUser()
if (user.user_id != 0) {
userNameTv.text = "你好,${user.user_name}"
- userInfoTv.text = "${user.school_name} | ${user.grade_name}${user.class_name}"
+// userInfoTv.text = "${user.school_name} | ${user.grade_name}${user.class_name}"
userInfoTv.visibility = View.VISIBLE
loginBtn.visibility = View.GONE
switchBtn.visibility = if (User.getUnitCount() > 1) {
diff --git a/app/src/main/java/com/yzx/escreen/activity/WebActivity.kt b/app/src/main/java/com/yzx/escreen/activity/WebActivity.kt
index 932b4e4..10c7b45 100644
--- a/app/src/main/java/com/yzx/escreen/activity/WebActivity.kt
+++ b/app/src/main/java/com/yzx/escreen/activity/WebActivity.kt
@@ -6,13 +6,12 @@ import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.content.Intent
-import android.net.http.SslError
import android.os.Build
import android.text.TextUtils
import android.util.Log
import android.view.View
import android.view.ViewGroup
-import android.webkit.*
+import android.webkit.JavascriptInterface
import android.widget.LinearLayout
import android.widget.TextView
import androidx.annotation.RequiresApi
@@ -27,6 +26,15 @@ import com.google.gson.reflect.TypeToken
import com.lzy.okgo.OkGo
import com.lzy.okgo.callback.StringCallback
import com.lzy.okgo.model.Response
+import com.tencent.smtt.export.external.interfaces.JsResult
+import com.tencent.smtt.export.external.interfaces.SslError
+import com.tencent.smtt.export.external.interfaces.SslErrorHandler
+import com.tencent.smtt.export.external.interfaces.WebResourceRequest
+import com.tencent.smtt.sdk.WebChromeClient
+import com.tencent.smtt.sdk.WebSettings
+import com.tencent.smtt.sdk.WebView
+import com.tencent.smtt.sdk.WebViewClient
+import com.yzx.escreen.MainActivity
import com.yzx.escreen.R
import com.yzx.escreen.activity.base.BaseActivity
import com.yzx.escreen.config.Config
@@ -197,7 +205,7 @@ class WebActivity : BaseActivity>() {
ViewGroup.LayoutParams.MATCH_PARENT
)
webLayout.addView(webView)
- webView.addJavascriptInterface(YzxJavascriptInterface(this), "YZX")
+ webView.addJavascriptInterface(YzxJavascriptInterface(this), "YZX_SCREEN")
val userAgent = webView.settings.userAgentString
webView.settings.apply {
allowFileAccess = true
@@ -215,10 +223,8 @@ class WebActivity : BaseActivity>() {
domStorageEnabled = true
setAppCacheMaxSize(1024 * 1024 * 8)
setAppCachePath(ctx.cacheDir.absolutePath)
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
- }
- userAgentString = "$userAgent app/ebook"
+ mixedContentMode = android.webkit.WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE
+ userAgentString = "$userAgent app/escreen"
}
webView.webViewClient = object : WebViewClient() {
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
@@ -298,7 +304,7 @@ class WebActivity : BaseActivity>() {
override fun onResume() {
super.onResume()
webView.onResume()
- checkVersion()
+// checkVersion()
}
override fun onPause() {
@@ -353,50 +359,7 @@ class YzxJavascriptInterface(var ctx: Activity) {
* 获取电子书的clientId
*/
@JavascriptInterface
- fun getClientId(): Int = 601
-
- /**
- * 跳转到电子书页面
- */
- @JavascriptInterface
- fun bookPage(
- title: String,
- identity: String,
- key: String,
- name: String,
- index: Int,
- type: Int
- ) {
-
- }
-
- /**
- * 跳转到笔记页面
- * @param title 展示的title
- * @param note_info 笔记得json,新的笔记 传"" ,老的笔记 传 [{"BGid":0,"identity":"fileb","key":"a92511a457cdc444bb274e5dee29c487"}]
- * @param can_add_page 是否可以新加纸,1可以,0不可以
- */
- @JavascriptInterface
- fun notePage(
- title: String,
- note_info: String,
- can_add_page: Int = 1
- ) {
-
- }
-
- /**
- * 跳转到笔记页面
- * @param title 展示的title
- * @param note_info 笔记得json,新的笔记 传"" ,老的笔记 传 [{"BGid":0,"identity":"fileb","key":"a92511a457cdc444bb274e5dee29c487"}]
- */
- @JavascriptInterface
- fun notePage(
- title: String,
- note_info: String
- ) {
-
- }
+ fun getClientId(): Int = 602
/**
* 提示
@@ -434,7 +397,7 @@ class YzxJavascriptInterface(var ctx: Activity) {
@JavascriptInterface
fun toHome() {
- ctx.startActivity()
+ ctx.startActivity()
}
@JavascriptInterface
@@ -457,15 +420,6 @@ class YzxJavascriptInterface(var ctx: Activity) {
ctx.startActivity()
}
- @JavascriptInterface
- fun readPage(bookTaskId: String) {
-
- }
-
- @JavascriptInterface
- fun readPage(bookTaskId: String, readTaskId: String) {
-
- }
}
diff --git a/app/src/main/java/com/yzx/escreen/activity/base/BaseActivity.kt b/app/src/main/java/com/yzx/escreen/activity/base/BaseActivity.kt
index 28cf719..521cc31 100644
--- a/app/src/main/java/com/yzx/escreen/activity/base/BaseActivity.kt
+++ b/app/src/main/java/com/yzx/escreen/activity/base/BaseActivity.kt
@@ -1,6 +1,8 @@
package com.yzx.escreen.activity.base
import android.os.Bundle
+import android.view.View
+import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import com.gyf.immersionbar.ktx.immersionBar
import com.yzx.escreen.R
@@ -45,10 +47,11 @@ abstract class BaseActivity> : AppCompatActivity() {
initView()
initData()
setStatusBar()
+ hideBottomUIMenu()
}
open fun setStatusBar() {
- immersionBar {
+ immersionBar {
statusBarColor(R.color.white)
fitsSystemWindows(true)
statusBarDarkFont(true, 0.2f)
@@ -58,7 +61,12 @@ abstract class BaseActivity> : AppCompatActivity() {
}
-
+ private fun hideBottomUIMenu() {
+ val params: WindowManager.LayoutParams = window.attributes
+ params.systemUiVisibility =
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE
+ window.attributes = params
+ }
override fun onBackPressed() {
diff --git a/app/src/main/java/com/yzx/escreen/adapter/HomeDialogStepAdapter.kt b/app/src/main/java/com/yzx/escreen/adapter/HomeDialogStepAdapter.kt
new file mode 100644
index 0000000..109d0b6
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/adapter/HomeDialogStepAdapter.kt
@@ -0,0 +1,78 @@
+package com.yzx.escreen.adapter
+
+import android.annotation.SuppressLint
+import android.view.View
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.chad.library.adapter.base.viewholder.BaseViewHolder
+import com.yzx.escreen.R
+import com.yzx.escreen.model.LeaveActivity
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toTime
+import kotlinx.android.synthetic.main.layout_leave_step.view.*
+import org.jetbrains.anko.dip
+
+class HomeDialogStepAdapter(list: MutableList) :
+ BaseQuickAdapter(R.layout.layout_leave_step, list) {
+
+ @SuppressLint("SetTextI18n")
+ override fun convert(holder: BaseViewHolder, item: LeaveActivity) {
+ if (item.is_approve == 0) {
+ holder.itemView.addUserName.visibility = View.VISIBLE
+ holder.itemView.addUserName.text = item.add_user_name
+ holder.itemView.approvalComments.visibility = View.GONE
+ } else {
+ holder.itemView.addUserName.visibility = View.GONE
+ holder.itemView.approvalComments.visibility = View.VISIBLE
+ var str = "审批人:${item.add_user_name}"
+ if (item.approval_comments != null && item.approval_comments.isNotEmpty()) {
+ str += "。${item.approval_comments}"
+ }
+ holder.itemView.approvalComments.text = str
+ }
+ if (item.add_user_type_name.isNullOrBlank()) {
+ holder.itemView.addUserTypeName.visibility = View.GONE
+ } else {
+ holder.itemView.addUserTypeName.visibility = View.VISIBLE
+ holder.itemView.addUserTypeName.text = "(${item.add_user_type_name})"
+ }
+ holder.itemView.activityName.text = item.activity_name
+
+ if (item.is_approve == 1 && item.approval_status > 0) {
+ holder.itemView.statusName.visibility = View.VISIBLE
+ holder.itemView.statusName.text = when (item.approval_status) {
+ 1 -> "(待审批)"
+ 2 -> "(通过)"
+ 3 -> "(拒绝)"
+ else -> ""
+ }
+ } else {
+ holder.itemView.statusName.visibility = View.GONE
+ }
+
+ if (item?.sign_key != null && item?.sign_key?.isNotEmpty()) {
+ holder.itemView.signImg.visibility = View.VISIBLE
+ holder.itemView.signImg.setSrc(item.sign_identity, item.sign_key)
+ } else {
+ holder.itemView.signImg.visibility = View.GONE
+ }
+
+ if (item.is_approve == 0 || item.approval_status > 1) {
+ holder.itemView.stepTime.visibility = View.VISIBLE
+ holder.itemView.stepTime.text = item.add_time.toTime()
+ } else {
+ holder.itemView.stepTime.visibility = View.GONE
+ }
+
+ if (holder.adapterPosition == 0) {
+ holder.itemView.line1.setBackgroundResource(R.color.transparent)
+ } else {
+ holder.itemView.line1.setBackgroundResource(R.color.gray_1)
+ }
+
+ if (holder.adapterPosition == data.size - 1) {
+ holder.itemView.contentLayout.setPadding(0, 0, 0, 0)
+ } else {
+ holder.itemView.contentLayout.setPadding(0, 0, 0, holder.itemView.contentLayout.dip(40))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/adapter/HomeListAdapter.kt b/app/src/main/java/com/yzx/escreen/adapter/HomeListAdapter.kt
new file mode 100644
index 0000000..f206d5b
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/adapter/HomeListAdapter.kt
@@ -0,0 +1,55 @@
+package com.yzx.escreen.adapter
+
+import android.annotation.SuppressLint
+import android.graphics.Color
+import android.view.View
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.chad.library.adapter.base.viewholder.BaseViewHolder
+import com.yzx.escreen.R
+import com.yzx.escreen.model.StuLeave
+import com.yzx.escreen.utils.durationStr
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toTime
+import kotlinx.android.synthetic.main.layout_leave_table.view.*
+import org.jetbrains.anko.textColor
+
+class HomeListAdapter(list: MutableList) :
+ BaseQuickAdapter(R.layout.layout_leave_table, list) {
+
+ @SuppressLint("SetTextI18n")
+ override fun convert(holder: BaseViewHolder, item: StuLeave) {
+ holder.itemView.studentName.text = item.leave_student_name
+ if (item.face_key.isNullOrBlank()) {
+ holder.itemView.faceEmpty.visibility = View.VISIBLE
+ holder.itemView.faceImg.visibility = View.GONE
+ } else {
+ holder.itemView.faceImg.visibility = View.VISIBLE
+ holder.itemView.faceEmpty.visibility = View.GONE
+ holder.itemView.faceImg.setSrc(item.face_identity, item.face_key)
+ }
+ holder.itemView.className.text = "${item.grade_name}${item.class_name}"
+ holder.itemView.typeName.text = item.leave_request_type_name
+ holder.itemView.leaveTime.text =
+ "${item.start_time.toTime()} -- -- ${item.end_time.toTime()}"
+ holder.itemView.durationStrName.text = (item.end_time - item.start_time).durationStr()
+ holder.itemView.statusName.text = when (item.status) {
+ 1 -> "待处理"
+ 2 -> "已确认"
+ 3 -> "已拒绝"
+ else -> "--"
+ }
+ holder.itemView.statusName.textColor = when (item.status) {
+ 1 -> Color.parseColor("#333333")
+ 2 -> Color.parseColor("#3c7ef6")
+ 3 -> Color.parseColor("#ff4040")
+ else -> Color.parseColor("#333333")
+ }
+ holder.itemView.applyTime.text = item.add_time.toTime()
+
+ holder.itemView.bottomLine.visibility = if (holder.adapterPosition == data.size - 1) {
+ View.GONE
+ } else {
+ View.VISIBLE
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/config/Config.kt b/app/src/main/java/com/yzx/escreen/config/Config.kt
index 2122ba7..9d6b5c3 100644
--- a/app/src/main/java/com/yzx/escreen/config/Config.kt
+++ b/app/src/main/java/com/yzx/escreen/config/Config.kt
@@ -6,4 +6,5 @@ object Config {
var BASE_URL = BuildConfig.BASE_URL
var APP_NAME = BuildConfig.APP_NAME
var M_URL = BuildConfig.M_URL
+ var OA_URL = BuildConfig.OA_URL
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt b/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt
new file mode 100644
index 0000000..2e2f203
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt
@@ -0,0 +1,51 @@
+package com.yzx.webebook.config
+
+object YzxInterface {
+
+ const val FILE_UPLOAD_URL = "https://fileupload.oa.qbjjyyun.net/edufile/fileUpload"
+
+ const val INTERFACE_REFRESH_TOKEN = "/login/user2/refreshToken"// 刷新token
+ const val INTERFACE_GET_HOMEWORK_LIST = "/parent/weixin/getwxHomeworksByme"//获取家庭作业列表
+
+ const val INTERFACE_EBOOK_NOTEBOOK_GET_LIST = "/parent/notebook/getMyNotebookList"//获取笔记本列表
+ const val INTERFACE_EBOOK_NOTEBOOK_RESET_NAME = "/parent/notebook/renameMyNotebook"//重命名笔记本
+ const val INTERFACE_EBOOK_NOTEBOOK_DEL_NOTEBOOK = "/parent/notebook/deleteMyNotebook"//删除笔记本
+ const val INTERFACE_EBOOK_NOTEBOOK_INSET_NOTEBOOK = "/parent/notebook/createMyNotebook"//新建笔记本
+ const val INTERFACE_EBOOK_NOTEBOOK_UPDATE_NOTEBOOK = "/parent/notebook/updateMyNotebook"//编辑笔记本
+ const val INTERFACE_EBOOK_NOTEBOOK_TAG_LIST = "/parent/notebook/getNoteTagList"//笔记标签
+ const val INTERFACE_EBOOK_NOTEBOOK_TAG_ADD = "/parent/notebook/insertNoteTag"//添加笔记标签
+
+ const val INTERFACE_PREPARE_TEAM_COMMENT = "/parent/teacherPrePareLesson/getCommentDetailsByTeamId"
+ const val INTERFACE_PREPARE_TEAM_INPUT = "/parent/teacherPrePareLesson/inputContent"
+ const val INTERFACE_PREPARE_STU_RUSH = "/parent/teacherPrePareLesson/studentRush"
+ const val INTERFACE_PREPARE_RECORD_LIST = "/parent/teacherPrePareLesson/getInteractiveRecordList"
+ const val INTERFACE_PREPARE_MY_TEAMS = "/parent/teacherPrePareLesson/getMyTeams"
+ const val INTERFACE_PREPARE_MY_NEW_TEAM = "/parent/teacherPrePareLesson/getMyNewTeam"
+
+
+ const val INTERFACE_EXERCISES_LIST = "/parent/teacherPrePareLesson/issueExercisesListByStudent" // 练习题列表
+ const val INTERFACE_QUESTION_GET_RESOURCE_CATEGORY_LIST= "/parent/questionBank/getResourceCategoryAllListBySuperId"//获取公共资源层级
+ const val INTERFACE_QUESTION_REAL_GRADE= "/parent/common/getGradesByPeriodType"//根据学段(type:1小学,2初中,3高中 resource_category_id)获取对应年级接口
+ const val INTERFACE_QUESTION_GET_INFO = "/parent/studentAfterClassPractice/getQuestionBankById"//获取试题信息
+ const val INTERFACE_QUESTION_GET_LAST_PRACTICE = "/parent/studentAfterClassPractice/getLastPractice"//获取上次练习到第几题
+ const val INTERFACE_QUESTION_GET_PRACTICE_CURR_NUM = "/parent/studentAfterClassPractice/getPracticeCurrNum"//获取当前练习次数
+ const val INTERFACE_QUESTION_GET_PRACTICE_BY_TYPE = "/parent/studentAfterClassPractice/getCurrPracticeCorrectRate"//获取本次练习的正确率
+ const val INTERFACE_QUESTION_POST_PRACTICE = "/parent/studentAfterClassPractice/insertStudentAfterClassPractice"//插入一条学生课后练习题
+ const val INTERFACE_QUESTION_GET_PRACTICE_IDS = "/parent/studentAfterClassPractice/getQuestionBankIdsByType"//按练习类型获取试题Ids
+ const val INTERFACE_QUESTION_POST_COLLECT = "/parent/studentAfterClassPractice/collectQuestionBankById"//收藏(取消)试题
+ const val INTERFACE_QUESTION_GET_PRACTICE_STAT = "/parent/studentAfterClassPractice/getPracticeStat"//获取练习统计
+ const val INTERFACE_QUESTION_GET_KNOWLEDGE_POINT = "/parent/questionBank/getKnowledgePoint"//获取知识点
+
+ const val INTERFACE_NEW_WORD_GET_BOOK_LIST = "/parent/learningNewWords/getBooksList"//教材列表
+ const val INTERFACE_NEW_WORD_GET_BOOK_RES_CATE_LIST = "/parent/learningNewWords/getBooksResourceCatalogList"//获取课本资源目录
+ const val INTERFACE_INTERFACE_NEW_WORD_LIST= "/parent/learningNewWords/getNewWordsList" // 生字-列表
+ const val INTERFACE_NEW_WORD_ADD_RECORD= "/parent/learningNewWords/insertPracticeRecord" // 生字-提交记录
+ const val INTERFACE_NEW_WORD_GET_RECORD= "/parent/learningNewWords/getPracticeRecordsList" // 练习记录
+
+
+ const val INTERFACE_GET_STU_LEAVE_LIST= "/edu/attendance/teacher/listStudentLeaveRequest"//获取学生请假列表
+ const val INTERFACE_GET_STU_LEAVE_INFO_DETAIL= "/edu/attendance/getStudentLeaveRequestDetail" //获取学生的请假信息详情
+ const val INTERFACE_GET_TEACHER_INFO= "/rights/teacherWork/getTeacherByUserId"//获取人员信息
+ const val INTERFACE_STUDENT_GET_SHOW_BOX_LIST= "/edu/attendance/student/getStudentLeaveIds" //获取需要弹出的数据
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt
new file mode 100644
index 0000000..ec36eb7
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt
@@ -0,0 +1,311 @@
+package com.yzx.escreen.fragment
+
+import android.annotation.SuppressLint
+import android.content.res.ColorStateList
+import android.graphics.Color
+import android.os.Handler
+import android.os.Looper
+import android.view.KeyEvent
+import android.view.View
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.blankj.utilcode.util.SPUtils
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+import com.yzx.escreen.R
+import com.yzx.escreen.activity.WebActivity
+import com.yzx.escreen.adapter.HomeDialogStepAdapter
+import com.yzx.escreen.fragment.base.BaseFragment
+import com.yzx.escreen.model.Pager
+import com.yzx.escreen.model.StuLeave
+import com.yzx.escreen.adapter.HomeListAdapter
+import com.yzx.escreen.model.LeaveID
+import com.yzx.escreen.presenter.HomePresenter
+import com.yzx.escreen.presenter.HomeView
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toTime
+import com.yzx.escreen.widget.BaseDialog
+import kotlinx.android.synthetic.main.fragment_home.*
+import org.jetbrains.anko.find
+import org.jetbrains.anko.support.v4.act
+import org.jetbrains.anko.support.v4.ctx
+import org.jetbrains.anko.textColor
+
+class HomeFragment : BaseFragment(), HomeView {
+
+ companion object {
+
+ @JvmStatic
+ fun getNewInstance() =
+ HomeFragment()
+ }
+
+ private val mAdapter: HomeListAdapter by lazy {
+ val list = mutableListOf()
+ HomeListAdapter(list)
+ }
+
+ private var mPager = Pager()
+ var list = mutableListOf()
+ private val statusBtnList = mutableListOf()
+ var keyword: String = ""
+ var status: String = ""
+ private var isLoading = false
+ private val mShowList = mutableListOf()
+ private val mShowDialogList = mutableListOf()
+
+
+ private val mHandler = Handler(Looper.getMainLooper())
+ private val runnable = object : Runnable {
+ override fun run() {
+ mPresenter?.getLeaveShowIds()
+ mHandler.postDelayed(this, 2000)
+ }
+ }
+
+ override val inflateId: Int
+ get() = R.layout.fragment_home
+
+ override fun initView() {
+ recyclerView.layoutManager =
+ LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ recyclerView.adapter = mAdapter
+ mAdapter.setEmptyView(R.layout.layout_empty)
+ preTxtBtn.setOnClickListener { pre() }
+ nextTxtBtn.setOnClickListener { next() }
+ allBtn.setOnClickListener { changeStatus(0) }
+ status1Btn.setOnClickListener { changeStatus(1) }
+ status2Btn.setOnClickListener { changeStatus(2) }
+ status3Btn.setOnClickListener { changeStatus(3) }
+ statusBtnList.add(allBtn)
+ statusBtnList.add(status1Btn)
+ statusBtnList.add(status2Btn)
+ statusBtnList.add(status3Btn)
+ keywordInput.setOnKeyListener { _, keyCode, _ ->
+ if (!isLoading) {
+ if (keyCode == KeyEvent.KEYCODE_ENTER) {
+ keyword = keywordInput.text.toString()
+ initData()
+ }
+ }
+ false
+ }
+ clearBtn.setOnClickListener {
+ keyword = ""
+ keywordInput.setText("")
+ initData()
+ }
+
+ mAdapter.setOnItemClickListener { adapter, view, position ->
+ mPresenter?.getDetail(mAdapter.getItem(position).id)
+ }
+
+
+ switchBtn.setOnCheckedChangeListener { buttonView, isChecked ->
+ SPUtils.getInstance().put("auto_show_leave", isChecked)
+ changeSwitchBtnTxt(isChecked)
+ if (!isChecked) {
+ mHandler.removeCallbacks(runnable)
+ } else {
+ mHandler.postDelayed(runnable, 2000)
+ }
+ }
+ val isAutoShowLeave = SPUtils.getInstance().getBoolean("auto_show_leave", false)
+ switchBtn.isChecked = isAutoShowLeave
+ changeSwitchBtnTxt(isAutoShowLeave)
+ if (isAutoShowLeave) {
+ mHandler.postDelayed(runnable, 2000)
+ }
+ switchBtnTxt.setOnClickListener {
+ switchBtn.isChecked = !switchBtn.isChecked
+ }
+ }
+
+ private fun changeSwitchBtnTxt(isChecked: Boolean) {
+ if (isChecked) {
+ switchBtnTxt.setTextColor(ctx.resources.getColor(R.color.green2))
+ } else {
+ switchBtnTxt.setTextColor(ctx.resources.getColor(R.color.black_3))
+ }
+ }
+
+ @SuppressLint("SetTextI18n")
+ private fun showLeaveDialog(detail: StuLeave) {
+ val adapter = HomeDialogStepAdapter(mutableListOf())
+ val dialog = BaseDialog(act, R.style.BaseDialog, R.layout.dialog_leave)
+ //处理弹窗显示
+ dialog.find(R.id.leave_student_name).text = detail.leave_student_name
+ if (detail.face_key.isNotEmpty()) {
+ val img = dialog.find(R.id.face_img)
+ img.setSrc(detail.face_identity, detail.face_key)
+ img.visibility = View.VISIBLE
+ dialog.find(R.id.face_empty).visibility = View.GONE
+ } else {
+ dialog.find(R.id.face_empty).visibility = View.VISIBLE
+ dialog.find(R.id.face_img).visibility = View.GONE
+ }
+ dialog.find(R.id.class_name).text = "${detail.grade_name}${detail.class_name}"
+ dialog.find(R.id.leave_request_type_name).text = detail.leave_request_type_name
+ dialog.find(R.id.add_time).text =
+ "${detail.start_time.toTime()} - ${detail.end_time.toTime()}"
+ dialog.find(R.id.leave_request_reason).text = detail.leave_request_reason
+ dialog.find(R.id.statusImg).setSrc(
+ when (detail.status) {
+ 1 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_wait.png"
+ 2 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_pass.png"
+ 3 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_nopass.png"
+ else -> ""
+ }
+ )
+
+ dialog.find(R.id.stepRecycler)
+ val recyclerView = dialog.find(R.id.stepRecycler)
+ recyclerView.layoutManager =
+ LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ recyclerView.adapter = adapter
+ adapter.setList(detail.getStep())
+
+ dialog.find(R.id.closeBtn).setOnClickListener {
+ dialog.hide()
+ val index = mShowList.indexOfFirst { it.id == detail.id }
+ if (index >= 0) {
+ mShowList.removeAt(index)
+ }
+ val dialogIndex = mShowDialogList.indexOfFirst { it.getLeaveId() == detail.id }
+ if (index >= 0) {
+ mShowDialogList.removeAt(dialogIndex)
+ }
+ }
+ dialog.show()
+ dialog.setLeaveId(detail.id)
+ mShowDialogList.add(dialog)
+ }
+
+ private fun changeStatusBtn(idx: Int) {
+ statusBtnList.forEachIndexed { index, button ->
+ if (index == idx) {
+ button.textColor = Color.parseColor("#ffffff")
+ button.setBackgroundColor(Color.parseColor("#3ca0e9"))
+ button.setStrokeColors(ColorStateList.valueOf(Color.parseColor("#3ca0e9")))
+ } else {
+ button.textColor = Color.parseColor("#808080")
+ button.setBackgroundColor(Color.parseColor("#ffffff"))
+ button.setStrokeColors(ColorStateList.valueOf(Color.parseColor("#dcdee0")))
+ }
+ }
+ }
+
+ private fun changeStatus(status: Int) {
+ if (isLoading) {
+ return
+ }
+ changeStatusBtn(status)
+ this.status = if (status == 0) {
+ ""
+ } else {
+ "${status}"
+ }
+ initData()
+ }
+
+ override fun initData() {
+
+ mPager.page_no = 1
+ isLoading = true
+ mPresenter?.getLeaveList(mPager.page_no, keyword, status)
+ }
+
+ private fun refreshData() {
+ if (isLoading) {
+ return
+ }
+ isLoading = true
+ mPresenter?.getLeaveList(mPager.page_no, keyword, status)
+ }
+
+ private fun pre() {
+ if (isLoading) {
+ return
+ }
+ if (mPager.page_no <= 1) {
+ } else {
+ isLoading = true
+ mPresenter?.getLeaveList(mPager.page_no - 1, keyword, status)
+ }
+ }
+
+ private fun next() {
+ if (isLoading) {
+ return
+ }
+ if (mPager.page_no >= mPager.total_pages) {
+ } else {
+ isLoading = true
+ mPresenter?.getLeaveList(mPager.page_no + 1, keyword, status)
+ }
+ }
+
+ override fun initPresenter(): HomePresenter = HomePresenter(this)
+
+ @SuppressLint("SetTextI18n")
+ override fun onLeaveListSuccess(list: MutableList, pager: Pager) {
+ mAdapter.setList(list)
+ mPager = pager
+ pageTv.text = "${pager.page_no} / ${pager.total_pages}"
+ totalTv.text = "共${pager.total_count}条"
+
+ val disabledColor = Color.parseColor("#666666")
+ val color = Color.parseColor("#3ca0e9")
+ if (pager.page_no <= 1) {
+ preTxtBtn.textColor = disabledColor
+ } else {
+ preTxtBtn.textColor = color
+ }
+
+ if (pager.page_no >= pager.total_pages) {
+ nextTxtBtn.textColor = disabledColor
+ } else {
+ nextTxtBtn.textColor = color
+ }
+ isLoading = false
+
+ pageTv.postDelayed({
+ refreshData()
+ }, 30 * 1000)
+ }
+
+ override fun onLeaveListError(error: String) {
+ isLoading = false
+ }
+
+ override fun onLeaveDetailSuccess(detail: StuLeave) {
+ val item = mShowList.find { it.id == detail.id }
+ if (item != null) {
+ //替换新的数据
+ val index = mShowList.indexOf(item)
+ mShowList[index] = detail
+
+ //移除原本的dialog
+ val dialogIndex = mShowDialogList.indexOfFirst { it.getLeaveId() == item.id }
+ if (dialogIndex > -1) {
+ mShowDialogList[dialogIndex].hide()
+ mShowDialogList.removeAt(dialogIndex)
+ }
+
+ } else {
+ mShowList.add(detail)
+ }
+ showLeaveDialog(detail)
+ }
+
+ override fun onLeaveDetailError(error: String) {
+
+ }
+
+ override fun onLeaveIDsSuccess(list: MutableList) {
+ for (leaveID in list) {
+ mPresenter?.getDetail(leaveID.id)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/fragment/MyFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/MyFragment.kt
new file mode 100644
index 0000000..e4e3ecb
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/fragment/MyFragment.kt
@@ -0,0 +1,125 @@
+package com.yzx.escreen.fragment
+
+import android.text.InputType
+import com.blankj.utilcode.util.LogUtils
+import com.blankj.utilcode.util.ScreenUtils
+import com.blankj.utilcode.util.ToastUtils
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog
+import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction
+import com.yzx.escreen.MainActivity
+import com.yzx.escreen.R
+import com.yzx.escreen.activity.WebActivity
+import com.yzx.escreen.config.Config
+import com.yzx.escreen.fragment.base.BaseFragment
+import com.yzx.escreen.model.TeacherInfo
+import com.yzx.escreen.model.User
+import com.yzx.escreen.presenter.MyPresenter
+import com.yzx.escreen.presenter.MyView
+import kotlinx.android.synthetic.main.activity_home.*
+import kotlinx.android.synthetic.main.fragment_my.*
+import org.jetbrains.anko.startActivity
+import kotlin.system.exitProcess
+
+class MyFragment : BaseFragment(), MyView {
+
+ companion object {
+
+ @JvmStatic
+ fun getNewInstance() =
+ MyFragment()
+ }
+
+ private var count = 0
+ private val run = Runnable {
+ count = 0
+ }
+
+ override val inflateId: Int
+ get() = R.layout.fragment_my
+
+ override fun initView() {
+ sysExitBtn.setOnClickListener {
+ count++
+ sysExitBtn.removeCallbacks(run)
+ sysExitBtn.postDelayed(run, 1000)
+ if (count >= 5) {
+ showExitDialog()
+ }
+ }
+ }
+
+ private fun showExitDialog() {
+ val builder = QMUIDialog.EditTextDialogBuilder(activity)
+
+ builder.setPlaceholder("输入密码")
+ .setTitle("请输入密码")
+ .setInputType(InputType.TYPE_CLASS_PHONE)
+ .addAction("取消"
+ ) { dialog, index -> dialog?.dismiss() }
+ .addAction("确定"
+ ) { dialog, index ->
+ val text = builder.editText.text
+ LogUtils.d(text)
+ LogUtils.d("112233".equals(text))
+ if("112233" == text.toString()){
+ activity?.finish()
+ exitProcess(0)
+ }else{
+ ToastUtils.showShort("密码不正确")
+ }
+ }
+ .setCancelable(false)
+ .setCanceledOnTouchOutside(false)
+ .show()
+ }
+
+ override fun initData() {
+ mPresenter?.getTeacherInfo(User.getUser().user_id)
+ density.text =
+ "density:${ScreenUtils.getScreenDensity()},dpi:${ScreenUtils.getScreenDensityDpi()}"
+
+ logoutBtn.setOnClickListener {
+ activity?.apply {
+ User.clearUserInfo()
+ WebActivity.active(this, "${Config.OA_URL}/login?logout=1")
+ finish()
+ }
+ }
+ }
+
+ override fun initPresenter(): MyPresenter = MyPresenter(this)
+ override fun onUserInfoSuccess(info: TeacherInfo) {
+ userName.text = info.teacher_name
+ sex.text = if (info.sex == 1) {
+ "男"
+ } else {
+ "女"
+ }
+ phone.text = info.phone
+ idCard.text = info.card_no
+
+ if (info.teacherUnits.isNotEmpty()) {
+ val unit = info.teacherUnits[0]
+ if (unit.teacherUnitGroups.isNotEmpty()) {
+ val group = unit.teacherUnitGroups[0]
+ unitName.text = unit.unit_name
+ groupName.text = group.group_name
+ jobType.text = group.job_type_name
+ isLeader.text = if (group.is_leader == 0) {
+ "是"
+ } else {
+ "否"
+ }
+ jobName.text = group.job_name
+ }
+
+
+ }
+
+ }
+
+ override fun onUserInfoError(error: String) {
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/fragment/base/BaseFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/base/BaseFragment.kt
new file mode 100644
index 0000000..1a16a5e
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/fragment/base/BaseFragment.kt
@@ -0,0 +1,59 @@
+package com.yzx.escreen.fragment.base
+
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import com.yzx.escreen.presenter.base.BasePresenter
+
+/**
+ * fragment 基类
+ */
+abstract class BaseFragment> : Fragment() {
+
+ /**
+ * 当前页面需要加载的layoutId,等价setContentView
+ */
+ abstract val inflateId: Int
+
+ /**
+ * 初始化视图操作在这里执行,执行时机为onCreate之后
+ */
+ abstract fun initView(): Unit
+
+ /**
+ * 数据初始化在这里执行,执行时机为initView之后
+ */
+ abstract fun initData(): Unit
+
+ //kotlin 懒加载,在第一次使用Presenter时初始化,这种设计是针对一个View只针对一个Presenter。
+ //多个Presenter的情况此处不应该使用泛型
+ protected val mPresenter: P? by lazy { initPresenter() }
+
+ abstract fun initPresenter(): P?
+
+
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(inflateId, null)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ initView()
+ initData()
+ }
+
+
+
+ override fun onDestroy() {
+ super.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/model/BaseBean.kt b/app/src/main/java/com/yzx/escreen/model/BaseBean.kt
index 11e0287..cee926d 100644
--- a/app/src/main/java/com/yzx/escreen/model/BaseBean.kt
+++ b/app/src/main/java/com/yzx/escreen/model/BaseBean.kt
@@ -4,5 +4,13 @@ data class BaseBean(
var code: Int,
var msg: String,
val data: T,
- val list: MutableList
+ val list: MutableList,
+ val pager:Pager = Pager()
+)
+
+data class Pager(
+ var page_no:Int = 1,
+ val page_size:Int = 0,
+ val total_pages:Int = 0,
+ val total_count:Int = 0
)
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/model/StuLeave.kt b/app/src/main/java/com/yzx/escreen/model/StuLeave.kt
new file mode 100644
index 0000000..95623db
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/model/StuLeave.kt
@@ -0,0 +1,147 @@
+package com.yzx.escreen.model
+
+import android.app.Dialog
+import com.blankj.utilcode.util.LogUtils
+
+data class StuLeave(
+ val activities: MutableList = mutableListOf(),
+ val add_time: Int = 0,
+ val add_user_id: Int = 0,
+ val add_user_name: String = "",
+ val add_user_type: Int = 0,
+ val approve_time: Int = 0,
+ val attachments: List = listOf(),
+ val can_reviewed: Int = 0,
+ val class_id: Int = 0,
+ val class_name: String = "",
+ val copy_recipients: String = "",
+ val end_time: Int = 0,
+ val entry_flag: Int = 0,
+ val face_identity: String = "",
+ val face_key: String = "",
+ val ftime: Int = 0,
+ val grade_id: Int = 0,
+ val grade_name: String = "",
+ val headteacher_id: Int = 0,
+ val id: Int = 0,
+ val leave_request_reason: String = "",
+ val leave_request_type: Int = 0,
+ val leave_request_type_name: String = "",
+ val leave_student_id: Int = 0,
+ val leave_student_name: String = "",
+ val relation_id: Int = 0,
+ val request_status: Any = Any(),
+ val school_id: Int = 0,
+ val school_name: String = "",
+ val start_time: Int = 0,
+ val status: Int = 0,
+ val todo_list_id: Int = 0,
+ val todo_status: Int = 0
+){
+
+ fun getStep(): MutableList {
+ val logList = mutableListOf()
+ for (item in activities) {
+ if(item.child.isNotEmpty()){
+ for (it in item.child) {
+ it.activity_name = when(it.approve_user_type){
+ 0->"领导审批"
+ 1->"自选"
+ 2->if (it.role_type==3){
+ "班主任审批"
+ }else{
+ "任课老师审批"
+ }
+ 3->"专业部领导审批"
+ 4->"值班领导审批"
+ else->"领导审批"
+ }
+ }
+ val approvedList = item.child.filter {
+ return@filter it.approval_status>1
+ }
+ if(approvedList.isNotEmpty()){
+ if(item.approve_way==2){
+ logList.addAll(approvedList)
+ }else{
+ logList.addAll(item.child)
+ }
+ }else{
+ item.activity_name = when(item.approve_user_type){
+ 0->"领导审批"
+ 1->"自选"
+ 2->if (item.role_type==3){
+ "班主任审批"
+ }else{
+ "任课老师审批"
+ }
+ 3->"专业部领导审批"
+ 4->"值班领导审批"
+ else->"领导审批"
+ }
+ if(item.child.size>1){
+ item.activity_name += when(item.approve_way){
+ 0-> "(依次审批)"
+ 1-> "(会签)"
+ 2-> "(或签)"
+ else->""
+ }
+ }
+ item.add_user_name = item.child.map {
+ return@map it.add_user_name
+ }.joinToString(separator = "、")
+
+ item.approval_status = 1
+ item.is_approve = 1
+ logList.add(item)
+ }
+ }else{ //提交人
+ item.activity_name = "提交申请"
+ if(item.add_user_type == 0){
+ item.add_user_type_name = "老师"
+ }else if (item.add_user_type == 1){
+ item.add_user_type_name = "学生家长"
+ }
+ logList.add(item)
+ }
+ }
+
+ return logList
+ }
+}
+
+
+data class LeaveID(var id: Int)
+
+data class LeaveActivity(
+ var activity_name: String = "",
+ var add_time: Int = 0,
+ var add_user_id: Int = 0,
+ var add_user_name: String = "",
+ var add_user_type: Int = 0,
+ var approval_comments: String = "",
+ var approval_status: Int = 0,
+ var approve_node: Int = 0,
+ var approve_sort: Int = 0,
+ var approve_user_type: Int = 0,
+ var approve_way: Int = 0,
+ var child: MutableList = mutableListOf(),
+ var id: Int = 0,
+ var is_approve: Int = 0,
+ var related_id: Int = 0,
+ var relation_id: Int = 0,
+ var report_end_date: Int = 0,
+ var report_start_date: Int = 0,
+ var role_type: Int = 0,
+ var school_name: String = "",
+ var sign_identity: String = "",
+ var sign_key: String = "",
+ var status: Int = 0,
+ var sub_type: Any = Any(),
+ var type: Int = 0,
+ var unit_id: Int = 0,
+ var unit_name: String = "",
+ var add_user_type_name: String=""
+) {
+}
+
diff --git a/app/src/main/java/com/yzx/escreen/model/TeacherInfo.kt b/app/src/main/java/com/yzx/escreen/model/TeacherInfo.kt
new file mode 100644
index 0000000..a6db4c6
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/model/TeacherInfo.kt
@@ -0,0 +1,102 @@
+package com.yzx.escreen.model
+
+data class TeacherInfo(
+ val academic_degree: Int = 0,
+ val academic_degree_describe: String = "",
+ val add_time: Int = 0,
+ val age: Int = 0,
+ val audit_remark: String = "",
+ val audit_status: Int = 0,
+ val audit_user_id: Int = 0,
+ val audit_user_name: String = "",
+ val birth_place: String = "",
+ val birth_place_json: String = "",
+ val birthday: String = "",
+ val card_no: String = "",
+ val card_no_type: Int = 0,
+ val degree_id: Int = 0,
+ val editing_time: Int = 0,
+ val face_add_time: Int = 0,
+ val face_identity: String = "",
+ val face_key: String = "",
+ val first_part: Int = 0,
+ val first_part_describe: Int = 0,
+ val first_part_time: Int = 0,
+ val head_portrait: String = "",
+ val is_commit: Int = 0,
+ val is_remind_commit: Int = 0,
+ val is_retire_time: Int = 0,
+ val is_show_btn: Int = 0,
+ val is_syn: Int = 0,
+ val marry_status_id: Int = 0,
+ val nation: Int = 0,
+ val native_place: String = "",
+ val native_place_json: String = "",
+ val nick_name: String = "",
+ val not_incumbency_time: Int = 0,
+ val people_identity: Int = 0,
+ val people_source_describe: Int = 0,
+ val people_source_type: Int = 0,
+ val people_type: Int = 0,
+ val phone: String = "",
+ val professional: String = "",
+ val retire_remark: String = "",
+ val retire_time: Long = 0,
+ val salary_unit_id: Int = 0,
+ val school_id: Int = 0,
+ val second_part: Int = 0,
+ val second_part_describe: Int = 0,
+ val second_part_time: Int = 0,
+ val sex: Int = 0,
+ val status: Int = 0,
+ val teach_curriculum: String = "",
+ val teach_interval_time: Int = 0,
+ val teach_period: Int = 0,
+ val teach_start_time: String = "",
+ val teach_years: Int = 0,
+ val teacherUnits: List = listOf(),
+ val teacher_id: Int = 0,
+ val teacher_name: String = "",
+ val teacher_school_status: Int = 0,
+ val urgent_phone: String = "",
+ val user_id: Int = 0,
+ val user_type: Int = 0,
+ val work_interval_time: Int = 0,
+ val work_start_time: String = "",
+ val work_years: Int = 0
+)
+
+data class TeacherUnit(
+ val add_time: Int = 0,
+ val id: Int = 0,
+ val into_unit_time: Int = 0,
+ val is_salary_unit: Int = 0,
+ val post_level: Int = 0,
+ val post_level_name: String = "",
+ val status: Int = 0,
+ val teacherUnitGroups: List = listOf(),
+ val title: Int = 0,
+ val title_name: String = "",
+ val unit_id: Int = 0,
+ val unit_main: Int = 0,
+ val unit_main_describe: Int = 0,
+ val unit_main_type: Int = 0,
+ val unit_name: String = "",
+ val user_id: Int = 0
+)
+
+data class TeacherUnitGroup(
+ val add_time: Int = 0,
+ val group_id: Int = 0,
+ val group_ids: String = "",
+ val group_name: String = "",
+ val id: Int = 0,
+ val is_leader: Int = 0,
+ val job_name: String = "",
+ val job_name_id: Int = 0,
+ val job_status: Int = 0,
+ val job_type: Int = 0,
+ val job_type_name: String = "",
+ val status: Int = 0,
+ val teacher_unit_id: Int = 0
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/model/User.kt b/app/src/main/java/com/yzx/escreen/model/User.kt
index 3ab7e97..68151ee 100644
--- a/app/src/main/java/com/yzx/escreen/model/User.kt
+++ b/app/src/main/java/com/yzx/escreen/model/User.kt
@@ -1,37 +1,31 @@
package com.yzx.escreen.model
import com.blankj.utilcode.util.SPUtils
+import com.blankj.utilcode.util.TimeUtils
+
class User(
var user_name: String,
var user_id: Int,
- var type: Int,
+ var account_type: Int,
+ var role: String,
var token: String,
var school_id: Int,
- var school_name: String,
var phone: String,
- var grade_name: String,
- var grade_id: Int,
- var class_name: String,
- var class_id: Int,
var ticket: String,
- var login_start: String
+ var loginTime: Long
) {
fun save() {
val sp = SPUtils.getInstance()
sp.put("user_name", user_name)
sp.put("user_id", user_id)
- sp.put("type", type)
sp.put("token", token)
sp.put("school_id", school_id)
- sp.put("school_name", school_name)
sp.put("phone", phone)
- sp.put("grade_name", grade_name)
- sp.put("grade_id", grade_id)
- sp.put("class_name", class_name)
- sp.put("class_id", class_id)
sp.put("ticket", ticket)
- sp.put("login_start", login_start)
+ sp.put("account_type", account_type)
+ sp.put("role", role)
+ sp.put("loginTime", TimeUtils.getNowMills())
}
companion object {
@@ -40,42 +34,45 @@ class User(
return User(
sp.getString("user_name", ""),
sp.getInt("user_id", 0),
- sp.getInt("type", 0),
+ sp.getInt("account_type", 0),
+ sp.getString("role", ""),
sp.getString("token", ""),
sp.getInt("school_id", 0),
- sp.getString("school_name", ""),
sp.getString("phone", ""),
- sp.getString("grade_name", ""),
- sp.getInt("grade_id", 0),
- sp.getString("class_name", ""),
- sp.getInt("class_id", 0),
sp.getString("ticket", ""),
- sp.getString("login_start", "")
+ sp.getLong("loginTime", 0)
)
}
- fun getUnitCount():Int = SPUtils.getInstance().getInt("unit_count",1)
+ fun isLogin(): Boolean {
+ val now = TimeUtils.getNowMills()
+ val user = getUser()
+ if (user.token.isNullOrBlank()) {
+ return false
+ }
+ if (now - user.loginTime > 24 * 60 * 60 * 1000) {
+ return false
+ }
+ return true
+ }
+
+ fun getUnitCount(): Int = SPUtils.getInstance().getInt("unit_count", 1)
- fun saveUnitCount(count:Int){
- SPUtils.getInstance().put("unit_count",count);
+ fun saveUnitCount(count: Int) {
+ SPUtils.getInstance().put("unit_count", count);
}
- fun clearUserInfo(){
+ fun clearUserInfo() {
val sp = SPUtils.getInstance()
sp.remove("user_name")
sp.remove("user_id")
- sp.remove("type")
+ sp.remove("account_type")
+ sp.remove("role")
sp.remove("token")
sp.remove("school_id")
- sp.remove("school_name")
sp.remove("phone")
- sp.remove("grade_name")
- sp.remove("grade_id")
- sp.remove("class_name")
- sp.remove("class_id")
sp.remove("ticket")
- sp.remove("login_start")
- sp.remove("unit_count")
+ sp.remove("loginTime")
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/presenter/HomePresenter.kt b/app/src/main/java/com/yzx/escreen/presenter/HomePresenter.kt
new file mode 100644
index 0000000..19fc834
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/HomePresenter.kt
@@ -0,0 +1,106 @@
+package com.yzx.escreen.presenter
+
+import com.blankj.utilcode.util.LogUtils
+import com.lzy.okgo.OkGo
+import com.lzy.okgo.model.Response
+import com.yzx.escreen.config.Config
+import com.yzx.escreen.model.LeaveID
+import com.yzx.escreen.model.Pager
+import com.yzx.escreen.model.StuLeave
+import com.yzx.escreen.model.User
+import com.yzx.webebook.config.YzxInterface
+import com.yzx.escreen.presenter.base.BasePresenter
+import com.yzx.escreen.presenter.base.IView
+import com.yzx.escreen.presenter.base.JsonCallBack
+import com.yzx.escreen.presenter.base.YzxResponse
+
+class HomePresenter(view: HomeView) : BasePresenter(view) {
+
+
+ fun getLeaveList(pageNo: Int, keyword: String, status: String) {
+ if(!User.isLogin()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_GET_STU_LEAVE_LIST}"
+ OkGo.post>(url)
+ .tag(this)
+ .params("keyword", keyword)
+ .params("status", status)
+ .params("page_size", 6)
+ .params("page_no", pageNo)
+ .execute(object : JsonCallBack>() {
+
+
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ if (response?.isSuccessful == true) {
+ mView?.onLeaveListSuccess(response.body().list, response.body().pager)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ mView?.onLeaveListError(response?.body()?.msg ?: "")
+ }
+ })
+ }
+ fun getLeaveShowIds() {
+ if(!User.isLogin()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_STUDENT_GET_SHOW_BOX_LIST}"
+ OkGo.post>(url)
+ .tag(this)
+ .execute(object : JsonCallBack>() {
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ if (response?.isSuccessful == true) {
+ mView?.onLeaveIDsSuccess(response.body().list)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ mView?.onLeaveListError(response?.body()?.msg ?: "")
+ }
+ })
+ }
+
+ fun getDetail(id: Int) {
+ if(!User.isLogin()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_GET_STU_LEAVE_INFO_DETAIL}"
+ OkGo.post>(url)
+ .tag(this)
+ .params("id", id)
+ .execute(object : JsonCallBack>() {
+
+
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ if (response?.isSuccessful == true) {
+ mView?.onLeaveDetailSuccess(response.body().data)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ mView?.onLeaveDetailError(response?.body()?.msg ?: "")
+ }
+ })
+ }
+
+
+}
+
+interface HomeView : IView {
+ fun onLeaveListSuccess(list: MutableList, pager: Pager)
+ fun onLeaveListError(error: String)
+ fun onLeaveDetailSuccess(detail: StuLeave)
+ fun onLeaveDetailError(error: String)
+ fun onLeaveIDsSuccess(list: MutableList)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/presenter/MyPresenter.kt b/app/src/main/java/com/yzx/escreen/presenter/MyPresenter.kt
new file mode 100644
index 0000000..c8ada1f
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/MyPresenter.kt
@@ -0,0 +1,53 @@
+package com.yzx.escreen.presenter
+
+import com.blankj.utilcode.util.LogUtils
+import com.lzy.okgo.OkGo
+import com.lzy.okgo.model.Response
+import com.yzx.escreen.config.Config
+import com.yzx.escreen.model.Pager
+import com.yzx.escreen.model.StuLeave
+import com.yzx.escreen.model.TeacherInfo
+import com.yzx.escreen.model.User
+import com.yzx.webebook.config.YzxInterface
+import com.yzx.escreen.presenter.base.BasePresenter
+import com.yzx.escreen.presenter.base.IView
+import com.yzx.escreen.presenter.base.JsonCallBack
+import com.yzx.escreen.presenter.base.YzxResponse
+
+class MyPresenter(view: MyView) : BasePresenter(view) {
+
+
+ fun getTeacherInfo(user_id: Int) {
+ if(!User.isLogin()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_GET_TEACHER_INFO}"
+ OkGo.post>(url)
+ .tag(this)
+ .params("user_id", user_id)
+ .execute(object : JsonCallBack>() {
+
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ if (response?.isSuccessful == true) {
+ mView?.onUserInfoSuccess(response.body().data)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ mView?.onUserInfoError(response?.body()?.msg ?: "")
+ }
+ })
+ }
+
+
+
+
+}
+
+interface MyView : IView {
+ fun onUserInfoSuccess(info: TeacherInfo)
+ fun onUserInfoError(error:String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/presenter/base/Convert.java b/app/src/main/java/com/yzx/escreen/presenter/base/Convert.java
new file mode 100644
index 0000000..aa4813e
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/base/Convert.java
@@ -0,0 +1,50 @@
+package com.yzx.escreen.presenter.base;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonIOException;
+import com.google.gson.JsonSyntaxException;
+import com.google.gson.stream.JsonReader;
+
+import java.io.Reader;
+import java.lang.reflect.Type;
+
+public class Convert {
+
+ private static Gson create() {
+ return GsonHolder.gson;
+ }
+
+ private static class GsonHolder {
+ private static Gson gson = new Gson();
+ }
+
+ public static T fromJson(String json, Class type) throws JsonIOException, JsonSyntaxException {
+ return create().fromJson(json, type);
+ }
+
+ public static T fromJson(String json, Type type) {
+ return create().fromJson(json, type);
+ }
+
+ public static T fromJson(JsonReader reader, Type typeOfT) throws JsonIOException, JsonSyntaxException {
+ return create().fromJson(reader, typeOfT);
+ }
+
+ public static T fromJson(Reader json, Class classOfT) throws JsonSyntaxException, JsonIOException {
+ return create().fromJson(json, classOfT);
+ }
+
+ public static T fromJson(Reader json, Type typeOfT) throws JsonIOException, JsonSyntaxException {
+ return create().fromJson(json, typeOfT);
+ }
+
+ public static String toJson(Object src) {
+ return create().toJson(src);
+ }
+
+ public static String toJson(Object src, Type typeOfSrc) {
+ return create().toJson(src, typeOfSrc);
+ }
+
+
+}
diff --git a/app/src/main/java/com/yzx/escreen/presenter/base/JsonCallBack.java b/app/src/main/java/com/yzx/escreen/presenter/base/JsonCallBack.java
new file mode 100644
index 0000000..071dd9c
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/base/JsonCallBack.java
@@ -0,0 +1,155 @@
+package com.yzx.escreen.presenter.base;
+
+import com.google.gson.stream.JsonReader;
+import com.lzy.okgo.callback.AbsCallback;
+import com.lzy.okgo.model.HttpHeaders;
+import com.lzy.okgo.request.base.Request;
+import com.yzx.escreen.model.User;
+import com.yzx.escreen.utils.Monitor;
+
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+import okhttp3.Response;
+import okhttp3.ResponseBody;
+
+public abstract class JsonCallBack extends AbsCallback {
+
+ private Type type;
+ private Class clazz;
+ private StringBuilder sb = new StringBuilder();
+
+ public JsonCallBack() {
+
+ }
+
+ public JsonCallBack(Type type) {
+ this.type = type;
+ }
+
+ public JsonCallBack(Class clazz) {
+ this.clazz = clazz;
+ }
+
+ @Override
+ public void onStart(Request request) {
+ super.onStart(request);
+ User user = User.Companion.getUser();
+ HttpHeaders headers = new HttpHeaders();
+ headers.put("phone", user.getPhone());
+ headers.put("token", user.getToken());
+// headers.put("phone","18780170404");
+// headers.put("token","11c73fb160bd715654736e7196dc1b57");
+ request.headers(headers);
+
+ sb.append("url:").append(request.getUrl()).append("\n");
+ sb.append("headers:").append(request.getHeaders().toString()).append("\n");
+ sb.append("params:").append(request.getParams().toString()).append("\n");
+ }
+
+ @Override
+ public T convertResponse(Response response) throws Throwable {
+
+ if (type == null) {
+ if (clazz == null) {
+ // 如果没有通过构造函数传进来,就自动解析父类泛型的真实类型(有局限性,继承后就无法解析到)
+ Type genType = getClass().getGenericSuperclass();
+ type = ((ParameterizedType) genType).getActualTypeArguments()[0];
+ } else {
+ return parseClass(response, clazz);
+ }
+ }
+
+ if (type instanceof ParameterizedType) {
+ return parseParameterizedType(response, (ParameterizedType) type);
+ } else if (type instanceof Class) {
+ return parseClass(response, (Class>) type);
+ } else {
+ return parseType(response, type);
+ }
+ }
+
+ private T parseClass(Response response, Class> rawType) throws Exception {
+ if (rawType == null) return null;
+ ResponseBody body = response.body();
+ if (body == null) return null;
+ JsonReader jsonReader = new JsonReader(body.charStream());
+
+ if (rawType == String.class) {
+ //noinspection unchecked
+ return (T) body.string();
+ } else if (rawType == JSONObject.class) {
+ //noinspection unchecked
+ return (T) new JSONObject(body.string());
+ } else if (rawType == JSONArray.class) {
+ //noinspection unchecked
+ return (T) new JSONArray(body.string());
+ } else {
+ T t = Convert.fromJson(jsonReader, rawType);
+ response.close();
+ return t;
+ }
+ }
+
+ private T parseType(Response response, Type type) throws Exception {
+ if (type == null) return null;
+ ResponseBody body = response.body();
+ if (body == null) return null;
+ JsonReader jsonReader = new JsonReader(body.charStream());
+
+ // 泛型格式如下: new JsonCallback<任意JavaBean>(this)
+ T t = Convert.fromJson(jsonReader, type);
+ response.close();
+ return t;
+ }
+
+ private T parseParameterizedType(Response response, ParameterizedType type) throws Exception {
+ if (type == null) return null;
+ ResponseBody body = response.body();
+ if (body == null) return null;
+ JsonReader jsonReader = new JsonReader(body.charStream());
+
+ Type rawType = type.getRawType(); // 泛型的实际类型
+ Type typeArgument = type.getActualTypeArguments()[0]; // 泛型的参数
+ if (rawType != YzxResponse.class) {
+ // 泛型格式如下: new JsonCallback<外层BaseBean<内层JavaBean>>(this)
+ T t = Convert.fromJson(jsonReader, type);
+ response.close();
+ return t;
+ } else {
+ if (typeArgument == Void.class) {
+ // 泛型格式如下: new JsonCallback>(this)
+ SimpleResponse simpleResponse = Convert.fromJson(jsonReader, SimpleResponse.class);
+ response.close();
+ //noinspection unchecked
+ return (T) simpleResponse.toYzxResponse();
+ } else {
+ // 泛型格式如下: new JsonCallback>(this)
+ YzxResponse yzxResponse = Convert.fromJson(jsonReader, type);
+ response.close();
+ int code = yzxResponse.code;
+ // 一般来说服务器会和客户端约定一个数表示成功,如200,其余的表示失败,如400,300等,这里根据实际情况罗列并抛出
+ if (code == 0) {
+ //noinspection unchecked
+ return (T) yzxResponse;
+ } else if (code == 406) {
+ throw new IllegalStateException("错误代码:" + code + ",错误信息:" + yzxResponse.msg);
+ } else {
+ // 直接将服务端的错误信息抛出,onError中可以获取
+ throw new IllegalStateException("错误代码:" + code + ",错误信息:" + yzxResponse.msg);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onError(com.lzy.okgo.model.Response response) {
+ super.onError(response);
+ sb.append("异常信息:").append(response.getException().getMessage());
+ Monitor.INSTANCE.postNetError(sb);
+ }
+}
diff --git a/app/src/main/java/com/yzx/escreen/presenter/base/JsonCallBack.kt b/app/src/main/java/com/yzx/escreen/presenter/base/JsonCallBack.kt
deleted file mode 100644
index b391f23..0000000
--- a/app/src/main/java/com/yzx/escreen/presenter/base/JsonCallBack.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.yzx.escreen.presenter.base
-
-import com.google.gson.Gson
-import com.google.gson.reflect.TypeToken
-import com.lzy.okgo.callback.AbsCallback
-import com.lzy.okgo.convert.StringConvert
-import com.yzx.escreen.model.BaseBean
-import okhttp3.Response
-
-abstract class JsonCallBack : AbsCallback>() {
-
- private val convert = StringConvert()
-
- override fun convertResponse(response: Response?): BaseBean {
- val json: String = convert.convertResponse(response)
- val resultType = object : TypeToken>() {}.type
- val gson = Gson()
- val fromJson = gson.fromJson>(json, resultType)
- return fromJson
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/presenter/base/SimpleResponse.java b/app/src/main/java/com/yzx/escreen/presenter/base/SimpleResponse.java
new file mode 100644
index 0000000..f430957
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/base/SimpleResponse.java
@@ -0,0 +1,20 @@
+package com.yzx.escreen.presenter.base;
+
+
+import java.io.Serializable;
+
+public class SimpleResponse implements Serializable {
+
+ private static final long serialVersionUID = -1477609349345966116L;
+
+ public int code;
+ public String msg;
+
+ public YzxResponse toYzxResponse() {
+ YzxResponse lzyResponse = new YzxResponse();
+ lzyResponse.code = code;
+ lzyResponse.msg = msg;
+ return lzyResponse;
+ }
+}
+
diff --git a/app/src/main/java/com/yzx/escreen/presenter/base/YzxListResponse.java b/app/src/main/java/com/yzx/escreen/presenter/base/YzxListResponse.java
new file mode 100644
index 0000000..0bbffe3
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/base/YzxListResponse.java
@@ -0,0 +1,27 @@
+package com.yzx.escreen.presenter.base;
+
+
+import com.yzx.escreen.model.Pager;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+public class YzxListResponse implements Serializable {
+
+ private static final long serialVersionUID = 5213230387175987834L;
+
+ public int code = -1;
+ public String msg;
+ public ArrayList list;
+ public Pager pager;
+
+ @Override
+ public String toString() {
+ return "YzxResponse{\n" +//
+ "\tcode=" + code + "\n" +//
+ "\tmsg='" + msg + "\'\n" +//
+ "\tlist=" + list + "\n" +//
+ "\tpager=" + pager + "\n" +//
+ '}';
+ }
+}
diff --git a/app/src/main/java/com/yzx/escreen/presenter/base/YzxResponse.java b/app/src/main/java/com/yzx/escreen/presenter/base/YzxResponse.java
new file mode 100644
index 0000000..96f43ad
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/base/YzxResponse.java
@@ -0,0 +1,30 @@
+package com.yzx.escreen.presenter.base;
+
+
+
+import com.yzx.escreen.model.Pager;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+public class YzxResponse implements Serializable {
+
+ private static final long serialVersionUID = 5213230387175987834L;
+
+ public int code = -1;
+ public String msg;
+ public T data;
+ public ArrayList list;
+ public Pager pager;
+
+ @Override
+ public String toString() {
+ return "YzxResponse{\n" +//
+ "\tcode=" + code + "\n" +//
+ "\tmsg='" + msg + "\'\n" +//
+ "\tdata=" + data + "\n" +//
+ "\tlist=" + list + "\n" +//
+ "\tpager=" + pager + "\n" +//
+ '}';
+ }
+}
diff --git a/app/src/main/java/com/yzx/escreen/receiver/BootReceiver.kt b/app/src/main/java/com/yzx/escreen/receiver/BootReceiver.kt
new file mode 100644
index 0000000..fdab86f
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/receiver/BootReceiver.kt
@@ -0,0 +1,21 @@
+package com.yzx.escreen.receiver
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import com.yzx.escreen.MainActivity
+
+
+
+
+class BootReceiver :BroadcastReceiver(){
+ override fun onReceive(context: Context?, intent: Intent?) {
+ intent?.apply {
+ if (action.equals("android.intent.action.BOOT_COMPLETED")) {
+ val i = Intent(context, MainActivity::class.java)
+ i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ context?.startActivity(i)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt b/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
index cd95140..81dd075 100644
--- a/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
+++ b/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
@@ -1,2 +1,59 @@
package com.yzx.escreen.utils
+import android.widget.ImageView
+import com.blankj.utilcode.util.TimeUtils
+import com.bumptech.glide.Glide
+import java.lang.Float.parseFloat
+import java.lang.Integer.parseInt
+import java.util.*
+
+fun ImageView.setSrc(identity: String, key: String) {
+ val url = "https://${identity}.oa.qbjjyyun.net/edufile/imageView?uniqueKey=${key}"
+ Glide.with(this)
+ .load(url)
+ .into(this)
+}
+
+fun ImageView.setSrc(url: String) {
+ Glide.with(this)
+ .load(url)
+ .into(this)
+}
+
+fun Int.toTime(): String {
+ val format = TimeUtils.getSafeDateFormat("yyyy-MM-dd HH:mm")
+ format.timeZone = TimeZone.getTimeZone("GMT+8:00")
+ return TimeUtils.millis2String(this * 1000L, format)
+}
+
+fun Int.durationStr(): String {
+ val value = this
+ if (value <= 60) {
+ return "${value}秒"
+ } else if (value > 60 && value <= 60 * 60) {
+ var min = value / 60
+ if (min == 60) {
+ return "1小时"
+ }
+ return "${min}分钟"
+ } else if (value > 60 * 60 && value <= 24 * 60 * 60) {
+ var hour = value / 3600.0
+
+ if (hour >= 23.5f && hour <25f) {
+ return "1天"
+ }
+
+ return "${hour.toInt()}小时"
+ } else {
+ var day = value / (24 * 60 * 60)
+ var sub = value % (24 * 60 * 60);
+ var hour = sub / 3600f
+ if (hour >= 23.5f || hour <25f) {
+ return "${day + 1}天"
+ }
+ if (hour < 1) {
+ return "${day}天"
+ }
+ return "${day}天${hour.toInt()}小时"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/utils/Monitor.kt b/app/src/main/java/com/yzx/escreen/utils/Monitor.kt
new file mode 100644
index 0000000..44e2527
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/utils/Monitor.kt
@@ -0,0 +1,131 @@
+package com.yzx.escreen.utils
+
+import android.os.Build
+import com.blankj.utilcode.util.AppUtils
+import com.blankj.utilcode.util.LogUtils
+import com.blankj.utilcode.util.SPUtils
+import com.google.gson.Gson
+import com.lzy.okgo.OkGo
+import com.lzy.okgo.callback.StringCallback
+import com.lzy.okgo.model.HttpHeaders
+import com.lzy.okgo.model.Response
+import com.yzx.escreen.model.User
+import java.lang.StringBuilder
+import java.text.SimpleDateFormat
+import java.util.*
+
+
+object Monitor {
+ val DT_URL =
+ "https://oapi.dingtalk.com/robot/send?access_token=886b2c609ddbcc1c8ff80abfd847e9c192bbde80815721204799b0b300cd7418"
+
+ fun postDingTalkMsg() {
+ val monitorText = SPUtils.getInstance().getString("crashData")
+ if (!monitorText.isBlank()) {
+ val monitor = MonitorInfo("text", MonitorText(monitorText))
+ val headers = HttpHeaders()
+ val json = Gson().toJson(monitor)
+ headers.put("content-type", "application/json")
+ OkGo.post(DT_URL)
+ .tag("")
+ .headers(headers)
+ .upJson(json)
+ .execute(object : StringCallback() {
+ override fun onSuccess(response: Response?) {
+ LogUtils.d(json)
+ LogUtils.d(response)
+ SPUtils.getInstance().remove("crashData")
+ }
+
+ override fun onError(response: Response?) {
+ super.onError(response)
+ LogUtils.d(response)
+ Thread {
+ Thread.sleep(3000)
+ postDingTalkMsg()
+ }
+ }
+ })
+ }
+
+ }
+
+ fun saveErrorInfo(
+ crashType: Int,
+ errorType: String?,
+ errorMessage: String?,
+ errorStack: String?
+ ) {
+ val monitorText = "crashType:${crashType}\n" +
+ "errorType:${errorType}\n" +
+ "errorMessage:${errorMessage}\n" +
+ "errorStack:\n${errorStack}"
+ val stringBuffer = StringBuffer()
+ stringBuffer.append("墨水屏异常上报:").append("\n")
+ stringBuffer.append("系统信息:").append(AppUtils.getAppInfo().versionName).append("\n")
+ val user = User.getUser()
+ if (user.user_id > 0) {
+ stringBuffer.append("用户信息:").append("\n")
+ .append("user_name:${user.user_name}").append("\n")
+ .append("user_id:${user.user_id}").append("\n")
+ .append("phone:${user.phone}").append("\n")
+ .append("token:${user.token}").append("\n")
+ }
+ stringBuffer.append("崩溃时间:")
+ .append(SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date()))
+ .append("\n")
+ stringBuffer.append("手机系统:").append(Build.VERSION.RELEASE).append("\n")
+ stringBuffer.append("手机型号:").append(Build.MODEL).append("\n")
+ stringBuffer.append("崩溃信息:").append("\n").append(monitorText)
+ SPUtils.getInstance().put("crashData", stringBuffer.toString())
+ }
+
+ fun postNetError(errorInfo:StringBuilder){
+ val stringBuffer = StringBuffer()
+ stringBuffer.append("墨水屏接口上报:").append("\n")
+ stringBuffer.append("异常类型:").append("接口异常").append("\n")
+ stringBuffer.append("系统信息:").append(AppUtils.getAppInfo().versionName).append("\n")
+ val user = User.getUser()
+ if (user.user_id > 0) {
+ stringBuffer.append("用户信息:").append("\n")
+ .append("user_name:${user.user_name}").append("\n")
+ .append("user_id:${user.user_id}").append("\n")
+ .append("phone:${user.phone}").append("\n")
+ .append("token:${user.token}").append("\n")
+ }
+ stringBuffer.append("请求时间:")
+ .append(SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date()))
+ .append("\n")
+ stringBuffer.append("手机系统:").append(Build.VERSION.RELEASE).append("\n")
+ stringBuffer.append("手机型号:").append(Build.MODEL).append("\n")
+ stringBuffer.append(errorInfo)
+ val monitor = MonitorInfo("text", MonitorText(stringBuffer.toString()))
+ val headers = HttpHeaders()
+ val json = Gson().toJson(monitor)
+ headers.put("content-type", "application/json")
+ OkGo.post(DT_URL)
+ .tag("")
+ .headers(headers)
+ .upJson(json)
+ .execute(object : StringCallback() {
+ override fun onSuccess(response: Response?) {
+ LogUtils.d(json)
+ LogUtils.d(response)
+ }
+
+ override fun onError(response: Response?) {
+ super.onError(response)
+ LogUtils.d(response)
+
+ }
+ })
+ }
+}
+
+class MonitorInfo(
+ val msgtype: String = "text",
+ val text: MonitorText = MonitorText("墨水屏异常上报")
+)
+
+class MonitorText(val content: String = "")
+
diff --git a/app/src/main/java/com/yzx/escreen/widget/BaseDialog.kt b/app/src/main/java/com/yzx/escreen/widget/BaseDialog.kt
index e934885..df40fda 100644
--- a/app/src/main/java/com/yzx/escreen/widget/BaseDialog.kt
+++ b/app/src/main/java/com/yzx/escreen/widget/BaseDialog.kt
@@ -5,6 +5,7 @@ import android.content.Context
class BaseDialog(context: Context, themeResId: Int, res: Int) : Dialog(context, themeResId) {
private var res: Int = 0
+ private var leaveId:Int = 0
init {
setContentView(res)
@@ -12,4 +13,12 @@ class BaseDialog(context: Context, themeResId: Int, res: Int) : Dialog(context,
setCanceledOnTouchOutside(false)
setCancelable(false)
}
+
+ fun setLeaveId(id:Int){
+ leaveId = id
+ }
+
+ fun getLeaveId():Int{
+ return leaveId
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/switch_ios_thumb.xml b/app/src/main/res/drawable/switch_ios_thumb.xml
new file mode 100644
index 0000000..4de058c
--- /dev/null
+++ b/app/src/main/res/drawable/switch_ios_thumb.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/switch_ios_track_off.xml b/app/src/main/res/drawable/switch_ios_track_off.xml
new file mode 100644
index 0000000..940ef79
--- /dev/null
+++ b/app/src/main/res/drawable/switch_ios_track_off.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/switch_ios_track_on.xml b/app/src/main/res/drawable/switch_ios_track_on.xml
new file mode 100644
index 0000000..637dfdd
--- /dev/null
+++ b/app/src/main/res/drawable/switch_ios_track_on.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/switch_ios_track_selector.xml b/app/src/main/res/drawable/switch_ios_track_selector.xml
new file mode 100644
index 0000000..e443d65
--- /dev/null
+++ b/app/src/main/res/drawable/switch_ios_track_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index dadeca3..589399a 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,33 +1,38 @@
-
+ tools:context=".MainActivity">
+
+
+ android:layout_height="1px"
+ android:layout_above="@id/tabLayout"
+ android:background="#cacbcc" />
-
-
-
+ android:paddingBottom="5dp"
+ tl:tl_iconHeight="48dp"
+ tl:tl_iconWidth="44dp"
+ tl:tl_textSelectColor="@color/colorPrimary"
+ tl:tl_textUnselectColor="#999999"
+ tl:tl_textsize="@dimen/d_24" />
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_web.xml b/app/src/main/res/layout/activity_web.xml
index ae71c41..8926bae 100644
--- a/app/src/main/res/layout/activity_web.xml
+++ b/app/src/main/res/layout/activity_web.xml
@@ -7,6 +7,7 @@
tools:context=".activity.WebActivity">
diff --git a/app/src/main/res/layout/dialog_leave.xml b/app/src/main/res/layout/dialog_leave.xml
new file mode 100644
index 0000000..96c6735
--- /dev/null
+++ b/app/src/main/res/layout/dialog_leave.xml
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
new file mode 100644
index 0000000..cafff19
--- /dev/null
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_my.xml b/app/src/main/res/layout/fragment_my.xml
new file mode 100644
index 0000000..79ed668
--- /dev/null
+++ b/app/src/main/res/layout/fragment_my.xml
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_empty.xml b/app/src/main/res/layout/layout_empty.xml
new file mode 100644
index 0000000..7f45f1e
--- /dev/null
+++ b/app/src/main/res/layout/layout_empty.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_leave_step.xml b/app/src/main/res/layout/layout_leave_step.xml
new file mode 100644
index 0000000..dc44d43
--- /dev/null
+++ b/app/src/main/res/layout/layout_leave_step.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_leave_table.xml b/app/src/main/res/layout/layout_leave_table.xml
new file mode 100644
index 0000000..8c28cd8
--- /dev/null
+++ b/app/src/main/res/layout/layout_leave_table.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/leave_dialog_title.xml b/app/src/main/res/layout/leave_dialog_title.xml
new file mode 100644
index 0000000..5b35684
--- /dev/null
+++ b/app/src/main/res/layout/leave_dialog_title.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xhdpi/home_select.png b/app/src/main/res/mipmap-mdpi/home_select.png
similarity index 100%
rename from app/src/main/res/mipmap-xhdpi/home_select.png
rename to app/src/main/res/mipmap-mdpi/home_select.png
diff --git a/app/src/main/res/mipmap-xhdpi/home_unselect.png b/app/src/main/res/mipmap-mdpi/home_unselect.png
similarity index 100%
rename from app/src/main/res/mipmap-xhdpi/home_unselect.png
rename to app/src/main/res/mipmap-mdpi/home_unselect.png
diff --git a/app/src/main/res/mipmap-xhdpi/my_select.png b/app/src/main/res/mipmap-mdpi/my_select.png
similarity index 100%
rename from app/src/main/res/mipmap-xhdpi/my_select.png
rename to app/src/main/res/mipmap-mdpi/my_select.png
diff --git a/app/src/main/res/mipmap-xhdpi/my_unselect.png b/app/src/main/res/mipmap-mdpi/my_unselect.png
similarity index 100%
rename from app/src/main/res/mipmap-xhdpi/my_unselect.png
rename to app/src/main/res/mipmap-mdpi/my_unselect.png
diff --git a/app/src/main/res/mipmap-xhdpi/ic_clear.png b/app/src/main/res/mipmap-xhdpi/ic_clear.png
new file mode 100644
index 0000000..af87c4d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_clear.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/search.png b/app/src/main/res/mipmap-xhdpi/search.png
new file mode 100644
index 0000000..61b6171
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/search.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 65cbd8d..d34eab5 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,6 +1,6 @@
- #008577
+ #3ca0e9
#00574B
#D81B60
#FFFFFF
@@ -12,14 +12,18 @@
#cc000000
#11333333
#222222
+ #333333
#666666
+ #808080
#999999
#cccccc
#D8D8D8
#f8f8f8
#ff4444
#54b3b3
+ #53a051
#4d92dc
+ #3ca0e9
#ff8635
@android:color/transparent
@color/white
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index e3ebf39..aa6af76 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -39,6 +39,7 @@
28dp
29dp
30dp
+ 70dp
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 72f7b78..be75505 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,12 +1,15 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build.gradle b/build.gradle
index 76f9868..9682ff6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,6 +7,7 @@ buildscript {
repositories {
google()
jcenter()
+ mavenCentral()
maven { url 'https://jitpack.io' }
maven { url 'https://dl.bintray.com/umsdk/release' }
}
@@ -23,6 +24,7 @@ allprojects {
repositories {
google()
jcenter()
+ mavenCentral()
maven { url 'https://jitpack.io' }
maven { url 'https://dl.bintray.com/umsdk/release' }
}
diff --git a/proguard-rules.pro b/proguard-rules.pro
index 9ac4e12..51b886e 100644
--- a/proguard-rules.pro
+++ b/proguard-rules.pro
@@ -101,3 +101,15 @@
public static **[] values();
public static ** valueOf(java.lang.String);
}
+
+# x5
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file