├── .gitignore ├── APP.png ├── LICENSE ├── README.md ├── Widget.png ├── app ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── whitefan │ │ └── jdlite │ │ ├── BaseActivity.kt │ │ ├── Constants.kt │ │ ├── EmptyActivity.kt │ │ ├── MainActivity.kt │ │ ├── MyApplication.kt │ │ ├── activity │ │ ├── AboutActivity.kt │ │ ├── MuchCkActivity.kt │ │ ├── MyWebActivity.kt │ │ └── SettingActivity.kt │ │ ├── bean │ │ ├── JingDouBean.java │ │ ├── RedPacket.java │ │ ├── SimpleFileDownloadListener.java │ │ ├── UserBean.kt │ │ └── VersionBean.kt │ │ ├── dialog │ │ ├── InputCKDialog.kt │ │ ├── InputDialog.kt │ │ ├── MenuDialog.kt │ │ ├── MyMenuDialogAdapter.kt │ │ ├── NewStyleDialog.kt │ │ └── NormalInputCKDialog.kt │ │ ├── util │ │ ├── ActivityCollector.kt │ │ ├── BitmapUtil.java │ │ ├── CacheUtil.kt │ │ ├── ColorUtil.kt │ │ ├── CommonUtil.kt │ │ ├── DeviceUtil.java │ │ ├── HttpUtil.kt │ │ ├── ImageLoaderUtils.java │ │ ├── Main.kt │ │ ├── SharedPreferencesUtils.java │ │ ├── StringCallBack.kt │ │ ├── TimeUtil.kt │ │ └── UpdateTask.kt │ │ ├── webView │ │ ├── CommonWebView.kt │ │ ├── MarqueeTextView.java │ │ └── WebProgress.java │ │ └── widget │ │ ├── MyAppWidgetProvider.kt │ │ ├── MyAppWidgetProvider1.kt │ │ ├── MyAppWidgetProvider1_2.kt │ │ ├── MyAppWidgetProvider2.kt │ │ ├── MyAppWidgetProvider2_2.kt │ │ ├── MyAppWidgetProvider3.kt │ │ ├── MyAppWidgetProvider3_2.kt │ │ ├── MyAppWidgetProvider4.kt │ │ ├── MyAppWidgetProvider4_2.kt │ │ ├── MyAppWidgetProvider5.kt │ │ ├── MyAppWidgetProvider5_2.kt │ │ ├── MyAppWidgetProvider_2.kt │ │ ├── UpdateDataService.kt │ │ ├── WidgetUpdateDataUtil.kt │ │ └── WidgetUpdateDataUtil_2.kt │ └── res │ ├── anim │ ├── accelerate_quart.xml │ ├── anim_action_main.xml │ ├── anim_come_in.xml │ ├── anim_get_out.xml │ └── translate.xml │ ├── drawable │ ├── background_count_down_bac.xml │ ├── background_notice_down_bac.xml │ ├── dialogstyle1_one_sure_selector.xml │ ├── dialogstyle1_two_left_selector.xml │ ├── dialogstyle1_two_right_selector.xml │ ├── neu_background_card_down_bac.xml │ ├── shape_25_dialog.xml │ ├── shape_25_dialog1.xml │ ├── shape_blue.xml │ ├── shape_dialog_one_sure_default.xml │ ├── shape_dialog_one_sure_press.xml │ ├── shape_dialog_two_left_default.xml │ ├── shape_dialog_two_left_press.xml │ ├── shape_dialog_two_right_default.xml │ ├── shape_dialog_two_right_press.xml │ ├── shape_red.xml │ ├── shape_text_frame.xml │ ├── switch_thumb.xml │ └── switch_track.xml │ ├── font │ └── tencent.ttf │ ├── layout-land │ ├── activity_about.xml │ ├── activity_main.xml │ ├── activity_much.xml │ └── activity_setting.xml │ ├── layout │ ├── activity_about.xml │ ├── activity_empty.xml │ ├── activity_main.xml │ ├── activity_much.xml │ ├── activity_setting.xml │ ├── activity_web.xml │ ├── dialog_layout_style1.xml │ ├── dialog_layout_style2.xml │ ├── dialog_layout_style3.xml │ ├── dialog_layout_style4.xml │ ├── include_title.xml │ ├── menu_item.xml │ ├── widges_layout.xml │ └── widges_layout2.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ └── ic_launcher_background.png │ ├── mipmap-mdpi │ └── ic_launcher_background.png │ ├── mipmap-xhdpi │ └── ic_launcher_background.png │ ├── mipmap-xxhdpi │ ├── ic_launcher_background.png │ ├── ic_launcher_foreground.png │ ├── icon_dou.png │ ├── icon_head_def.png │ ├── icon_plus.png │ ├── jd_logo.png │ ├── neu_about.png │ ├── neu_card1.png │ ├── neu_ck.png │ ├── neu_my.png │ ├── neu_set.png │ ├── redbag.png │ ├── title_bar_back.png │ ├── widget_proview.png │ └── widget_proview2.png │ ├── mipmap-xxxhdpi │ └── ic_launcher_background.png │ ├── values-night │ ├── colors.xml │ └── themes.xml │ ├── values-sw1024dp │ └── dimens.xml │ ├── values-sw1280dp │ └── dimens.xml │ ├── values-sw384dp │ └── dimens.xml │ ├── values-sw392dp │ └── dimens.xml │ ├── values-sw400dp │ └── dimens.xml │ ├── values-sw410dp │ └── dimens.xml │ ├── values-sw411dp │ └── dimens.xml │ ├── values-sw480dp │ └── dimens.xml │ ├── values-sw533dp │ └── dimens.xml │ ├── values-sw592dp │ └── dimens.xml │ ├── values-sw600dp │ └── dimens.xml │ ├── values-sw640dp │ └── dimens.xml │ ├── values-sw662dp │ └── dimens.xml │ ├── values-sw720dp │ └── dimens.xml │ ├── values-sw768dp │ └── dimens.xml │ ├── values-sw800dp │ └── dimens.xml │ ├── values-sw811dp │ └── dimens.xml │ ├── values-sw820dp │ └── dimens.xml │ ├── values-sw960dp │ └── dimens.xml │ ├── values-sw961dp │ └── dimens.xml │ ├── values │ ├── colors.xml │ ├── dimens.xml │ ├── ic_launcher_background.xml │ ├── strings.xml │ └── themes.xml │ └── xml │ ├── network_security_config.xml │ ├── widget_info.xml │ └── widget_info2.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | .gitignore 17 | -------------------------------------------------------------------------------- /APP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubyangxg/JingBeanAppWidget/ed09ee5828e3927cbb23d8744a339a2bf13f33ed/APP.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JingBeanAppWidget 2 | ![APP](https://cdn.jsdelivr.net/gh/baifan97/JingBeanAppWidget/APP.png) 3 | 京豆小部件纯净版,无多余内容,完全开源,可基于源码进行二次打包,但请保留开源信息。 4 | 5 | 6 | ## 功能 7 | - [x] 一键获取 `Cookie` 8 | - [x] 多账号管理 9 | - [x] 4*2小部件支持`简版展示`和`柱状图展示` 10 | - [x] 2*2小部件支持`京豆收益展示`和`东东农场数据展示` 11 | - [x] 背景色、边距等更多自定义功能设置 12 | - [x] APP跟随系统深色模式 13 | - [x] 手机/平板(竖屏/横屏)界面适配 14 | - [ ] 用户日资产卡片(正式版中此功能已上线) 15 | - [ ] 小部件跟随系统深色模式(正式版中此功能已上线) 16 | - [ ] 各种助力脚本执行 17 | - [ ] 多账号资产详情查询页面 18 | 19 | ## 下载地址 20 | 蓝奏云:https://whitefan.lanzout.com/b0ag9xa0j 21 | 密码:6666 22 | 23 | ## 预览图 24 | ![Widget](https://cdn.jsdelivr.net/gh/baifan97/JingBeanAppWidget/Widget.png) 25 | 26 | 27 | 28 | # 说明 29 | 30 | `纯净版`功能会稍微落后于`正式版`,请自行选择。也可基于此版本进行更多内容的开发。 31 | 32 | JingBeanAppWidget 仅供学习参考使用,请于下载后的 24 小时内删除,本人不对使用过程中出现的任何问题负责,包括但不限于 数据丢失 数据泄露。 33 | 34 | 请在 `GPL-3.0 License` 许可证的规范下使用 35 | 36 | 本项目 不提供 `技术上的任何帮助` 37 | 38 | 感谢`wangjing71/JingBeanAppWidget`项目,原作者项目已许久未提交代码,本项目参考原项目部分代码。 -------------------------------------------------------------------------------- /Widget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubyangxg/JingBeanAppWidget/ed09ee5828e3927cbb23d8744a339a2bf13f33ed/Widget.png -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | id 'kotlin-android' 4 | id 'kotlin-android-extensions' 5 | } 6 | 7 | android { 8 | compileSdk 30 9 | 10 | defaultConfig { 11 | applicationId "com.whitefan.jdlite" 12 | minSdk 21 13 | targetSdk 31 14 | versionCode 10 15 | versionName "1.0" 16 | vectorDrawables.useSupportLibrary = true 17 | 18 | 19 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 20 | } 21 | 22 | buildTypes { 23 | release { 24 | minifyEnabled false 25 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 26 | } 27 | } 28 | compileOptions { 29 | sourceCompatibility JavaVersion.VERSION_11 30 | targetCompatibility JavaVersion.VERSION_11 31 | } 32 | kotlinOptions { 33 | jvmTarget = '1.8' 34 | } 35 | lintOptions { 36 | checkReleaseBuilds false 37 | abortOnError false 38 | } 39 | } 40 | 41 | dependencies { 42 | 43 | implementation 'androidx.core:core-ktx:1.3.2' 44 | implementation 'androidx.appcompat:appcompat:1.3.0' 45 | implementation 'com.google.android.material:material:1.3.0' 46 | implementation 'androidx.constraintlayout:constraintlayout:2.0.4' 47 | implementation 'androidx.gridlayout:gridlayout:1.0.0' 48 | testImplementation 'junit:junit:4.+' 49 | androidTestImplementation 'androidx.test.ext:junit:1.1.2' 50 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 51 | 52 | implementation 'com.gyf.immersionbar:immersionbar:3.0.0' 53 | implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0' 54 | 55 | implementation 'com.github.bumptech.glide:glide:4.12.0' 56 | annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' 57 | 58 | implementation 'com.guolindev.permissionx:permissionx:1.5.1' 59 | 60 | implementation 'com.lzy.net:okgo:3.0.4' 61 | 62 | implementation 'com.google.code.gson:gson:2.8.6' 63 | 64 | 65 | implementation 'com.liulishuo.filedownloader:library:1.7.7' 66 | 67 | implementation 'com.zhy.base:fileprovider:1.0.0' 68 | 69 | 70 | 71 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/BaseActivity.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite 2 | 3 | import android.os.Bundle 4 | import android.view.View 5 | import android.widget.LinearLayout 6 | import android.widget.TextView 7 | import androidx.appcompat.app.AppCompatActivity 8 | import androidx.fragment.app.FragmentActivity 9 | import com.gyf.immersionbar.ktx.immersionBar 10 | import com.whitefan.jdlite.dialog.NewStyleDialog 11 | import com.whitefan.jdlite.util.ActivityCollector.addActivity 12 | import com.whitefan.jdlite.util.ActivityCollector.removeActivity 13 | 14 | /** 15 | * Created by Administrator on 2018/1/4. 16 | */ 17 | abstract class BaseActivity : AppCompatActivity() { 18 | private var barView: View? = null 19 | private var titleTv: TextView? = null 20 | private var rightTitleTv: TextView? = null 21 | public var back: LinearLayout? = null 22 | private lateinit var currentActivity: FragmentActivity 23 | override fun onCreate(savedInstanceState: Bundle?) { 24 | super.onCreate(savedInstanceState) 25 | setContentView(setLayoutId()) 26 | addActivity(this) 27 | barView = findViewById(R.id.barView) 28 | titleTv = findViewById(R.id.title) 29 | rightTitleTv = findViewById(R.id.rightTitle) 30 | back = findViewById(R.id.back) 31 | currentActivity = this 32 | immersionBar { 33 | statusBarView(barView) 34 | navigationBarColorTransform(R.color.navigationBar) 35 | navigationBarAlpha(1.0f) 36 | navigationBarDarkIcon(true) 37 | statusBarDarkFont(true) 38 | init() 39 | } 40 | 41 | back?.setOnClickListener { 42 | finish() 43 | } 44 | 45 | initView() 46 | initData() 47 | setEvent() 48 | } 49 | 50 | protected abstract fun setLayoutId(): Int 51 | protected abstract fun initView() 52 | protected abstract fun initData() 53 | protected abstract fun setEvent() 54 | 55 | fun setTitle(str: String) { 56 | titleTv?.text = str 57 | } 58 | 59 | fun setRightTitle(str: String) { 60 | rightTitleTv?.visibility = View.VISIBLE 61 | rightTitleTv?.text = str 62 | } 63 | 64 | 65 | protected var dialog: NewStyleDialog? = null 66 | 67 | open fun createDialogTip(content: String?) { 68 | createDialog("温馨提示", content, "确定", null) 69 | } 70 | 71 | open fun createDialogTip(content: String?, onRightClickListener: NewStyleDialog.OnRightClickListener?) { 72 | createDialog("温馨提示", content, "确定", onRightClickListener) 73 | } 74 | 75 | 76 | open fun createDialog( 77 | title: String?, 78 | content: String?, 79 | rightBtn: String?, 80 | onRightClickListener: NewStyleDialog.OnRightClickListener? 81 | ) { 82 | createDialog(title, content, "", rightBtn, null, onRightClickListener) 83 | } 84 | 85 | open fun createDialog( 86 | title: String?, 87 | content: String?, 88 | leftBtn: String?, 89 | rightBtn: String?, 90 | onRightClickListener: NewStyleDialog.OnRightClickListener? 91 | ) { 92 | createDialog(title, content, leftBtn, rightBtn, null, onRightClickListener) 93 | } 94 | 95 | open fun createDialog( 96 | title: String?, 97 | content: String?, 98 | leftBtn: String?, 99 | rightBtn: String?, 100 | onLeftClickListener: NewStyleDialog.OnLeftClickListener?, 101 | onRightClickListener: NewStyleDialog.OnRightClickListener? 102 | ) { 103 | if (dialog != null) { 104 | disMissDialog() 105 | } 106 | dialog = NewStyleDialog(currentActivity, title, content, leftBtn, rightBtn) 107 | dialog?.apply { 108 | setCancelable(false) 109 | setLeftClickListener(onLeftClickListener) 110 | setRightClickListener(onRightClickListener) 111 | pop() 112 | } 113 | } 114 | 115 | open fun disMissDialog() { 116 | if (dialog != null && dialog!!.isShowing()) { 117 | dialog!!.dismiss() 118 | dialog = null 119 | } 120 | } 121 | 122 | override fun onDestroy() { 123 | super.onDestroy() 124 | removeActivity(this) 125 | } 126 | 127 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/Constants.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubyangxg/JingBeanAppWidget/ed09ee5828e3927cbb23d8744a339a2bf13f33ed/app/src/main/java/com/whitefan/jdlite/Constants.kt -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/EmptyActivity.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite 2 | 3 | import android.content.Intent 4 | import android.text.TextUtils 5 | import com.whitefan.jdlite.util.ActivityCollector 6 | import com.whitefan.jdlite.util.UpdateTask 7 | 8 | class EmptyActivity : BaseActivity() { 9 | 10 | override fun setLayoutId(): Int { 11 | return R.layout.activity_empty 12 | } 13 | 14 | override fun initView() { 15 | val ck = intent.getStringExtra("data") 16 | dealData(ck) 17 | } 18 | 19 | 20 | override fun onNewIntent(intent: Intent) { 21 | super.onNewIntent(intent) 22 | val ck = intent.getStringExtra("data") 23 | dealData(ck) 24 | } 25 | 26 | private fun dealData(ck: String?) { 27 | if (TextUtils.isEmpty(ck)) return 28 | when (ck) { 29 | "ck" -> { 30 | UpdateTask.widgetUpdateDataUtil.updateWidget(ck) 31 | UpdateTask.widgetUpdateDataUtil_2.updateWidget(ck) 32 | } 33 | "ck1" -> { 34 | UpdateTask.widgetUpdateDataUtil1.updateWidget(ck) 35 | UpdateTask.widgetUpdateDataUtil1_2.updateWidget(ck) 36 | } 37 | "ck2" -> { 38 | UpdateTask.widgetUpdateDataUtil2.updateWidget(ck) 39 | UpdateTask.widgetUpdateDataUtil2_2.updateWidget(ck) 40 | } 41 | "ck3" -> { 42 | UpdateTask.widgetUpdateDataUtil3.updateWidget(ck) 43 | UpdateTask.widgetUpdateDataUtil3_2.updateWidget(ck) 44 | } 45 | "ck4" -> { 46 | UpdateTask.widgetUpdateDataUtil4.updateWidget(ck) 47 | UpdateTask.widgetUpdateDataUtil4_2.updateWidget(ck) 48 | } 49 | "ck5" -> { 50 | UpdateTask.widgetUpdateDataUtil5.updateWidget(ck) 51 | UpdateTask.widgetUpdateDataUtil5_2.updateWidget(ck) 52 | } 53 | } 54 | ActivityCollector.finishAll() 55 | } 56 | 57 | override fun initData() { 58 | } 59 | 60 | override fun setEvent() { 61 | } 62 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/MyApplication.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite 2 | 3 | import android.app.Application 4 | 5 | 6 | 7 | class MyApplication : Application() { 8 | companion object { 9 | @JvmStatic 10 | lateinit var mInstance: MyApplication 11 | } 12 | 13 | override fun onCreate() { 14 | super.onCreate() 15 | mInstance = this 16 | 17 | 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/activity/AboutActivity.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.activity 2 | 3 | import android.content.Context 4 | import com.whitefan.jdlite.BaseActivity 5 | import com.whitefan.jdlite.R 6 | import kotlinx.android.synthetic.main.activity_about.* 7 | import android.content.Intent 8 | import android.net.Uri 9 | import android.os.Vibrator 10 | import kotlinx.android.synthetic.main.activity_main.* 11 | 12 | 13 | class AboutActivity : BaseActivity() { 14 | 15 | override fun setLayoutId(): Int { 16 | return R.layout.activity_about 17 | } 18 | 19 | override fun initView() { 20 | setTitle("关于软件") 21 | } 22 | 23 | override fun initData() { 24 | } 25 | 26 | override fun setEvent() { 27 | 28 | 29 | addQQGroup.setOnClickListener { 30 | joinQQGroup("KI_oHmcuNm_9xR93cnx-NRbvz2-TSl1j") 31 | } 32 | 33 | github.setOnClickListener { 34 | val intent = Intent(this, MyWebActivity::class.java) 35 | intent.putExtra("url", "https://github.com/baifan97/JingBeanAppWidget") 36 | intent.putExtra("title", "京豆小部件——GitHub") 37 | startActivity(intent) 38 | val vibrator = this.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 39 | vibrator.vibrate(10) 40 | } 41 | 42 | } 43 | 44 | fun joinQQGroup(key: String): Boolean { 45 | val intent = Intent() 46 | intent.data = 47 | Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D$key") 48 | return try { 49 | startActivity(intent) 50 | true 51 | } catch (e: java.lang.Exception) { 52 | false 53 | } 54 | } 55 | 56 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/activity/MyWebActivity.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.activity 2 | 3 | import android.content.ClipData 4 | import android.content.ClipboardManager 5 | import android.content.Context 6 | import android.text.TextUtils 7 | import android.view.View 8 | import android.webkit.CookieManager 9 | import android.webkit.CookieSyncManager 10 | import android.widget.Toast 11 | import com.whitefan.jdlite.BaseActivity 12 | import com.whitefan.jdlite.MyApplication 13 | import com.whitefan.jdlite.R 14 | import com.whitefan.jdlite.dialog.NewStyleDialog 15 | import com.whitefan.jdlite.util.HttpUtil 16 | import com.whitefan.jdlite.util.StringCallBack 17 | import com.whitefan.jdlite.webView.CommonWebView 18 | import kotlinx.android.synthetic.main.activity_web.* 19 | 20 | class MyWebActivity : BaseActivity() { 21 | private var type: String? = null 22 | 23 | override fun setLayoutId(): Int { 24 | return R.layout.activity_web 25 | } 26 | 27 | override fun initView() { 28 | type = intent.getStringExtra("type") 29 | val title = intent.getStringExtra("title") 30 | if (TextUtils.isEmpty(title)) { 31 | setTitle("网页在线获取京东CK") 32 | } else { 33 | setTitle(title.toString()) 34 | } 35 | if ("1" == type) { 36 | tips.visibility = View.VISIBLE 37 | } else { 38 | tips.visibility = View.GONE 39 | } 40 | } 41 | 42 | override fun initData() { 43 | removeCookie(this) 44 | var url = intent.getStringExtra("url") 45 | mCommonWebView.loadUrl(url) 46 | } 47 | 48 | override fun setEvent() { 49 | mCommonWebView.setOnGetCookieListener(object : CommonWebView.OnGetCookie { 50 | override fun get(ck: String) { 51 | dealCk(ck) 52 | } 53 | }) 54 | } 55 | 56 | private fun dealCk(ck: String) { 57 | createDialog("已获取到CK", ck, "取消", "复制", object : NewStyleDialog.OnLeftClickListener { 58 | override fun leftClick() { 59 | disMissDialog() 60 | } 61 | }, object : NewStyleDialog.OnRightClickListener { 62 | override fun rightClick() { 63 | copyClipboard(ck) 64 | disMissDialog() 65 | finish() 66 | } 67 | }) 68 | } 69 | 70 | 71 | 72 | private fun removeCookie(context: Context) { 73 | try { 74 | CookieSyncManager.createInstance(context) 75 | val cookieManager = CookieManager.getInstance() 76 | cookieManager.removeAllCookie() 77 | CookieSyncManager.getInstance().sync() 78 | } catch (e: Exception) { 79 | e.printStackTrace() 80 | } 81 | } 82 | 83 | fun copyClipboard(content: String?) { 84 | try { 85 | val myClipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager 86 | val primaryClip = ClipData.newPlainText("text", content) 87 | myClipboard.setPrimaryClip(primaryClip) 88 | Toast.makeText(MyApplication.mInstance, "已复制CK到粘贴板", Toast.LENGTH_SHORT).show() 89 | } catch (e: Exception) { 90 | e.printStackTrace() 91 | } 92 | } 93 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/activity/SettingActivity.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.activity 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.os.Vibrator 6 | import android.text.TextUtils 7 | import android.widget.Toast 8 | import com.whitefan.jdlite.BaseActivity 9 | import com.whitefan.jdlite.MyApplication 10 | import com.whitefan.jdlite.R 11 | import com.whitefan.jdlite.dialog.InputDialog 12 | import com.whitefan.jdlite.dialog.MenuDialog 13 | import com.whitefan.jdlite.util.CacheUtil 14 | import com.whitefan.jdlite.util.UpdateTask 15 | import kotlinx.android.synthetic.main.activity_setting.* 16 | 17 | class SettingActivity : BaseActivity() { 18 | var paddingDataList = ArrayList() 19 | var douShowTypeList = ArrayList() 20 | var douShowTypeList2 = ArrayList() 21 | 22 | 23 | override fun setLayoutId(): Int { 24 | return R.layout.activity_setting 25 | } 26 | 27 | override fun initView() { 28 | setTitle("小组件设置") 29 | 30 | paddingDataList.add("无边距") 31 | paddingDataList.add("5dp") 32 | paddingDataList.add("10dp") 33 | paddingDataList.add("15dp") 34 | paddingDataList.add("20dp") 35 | 36 | douShowTypeList.add("文字展示") 37 | douShowTypeList.add("柱状图展示") 38 | 39 | douShowTypeList2.add("京豆展示") 40 | douShowTypeList2.add("农场进度展示") 41 | } 42 | 43 | override fun initData() { 44 | hideTips.isChecked = "1" == CacheUtil.getString("hideTips") 45 | 46 | hideNichen.isChecked = "1" == CacheUtil.getString("hideNichen") 47 | 48 | colorSwitch.isChecked = "1" == CacheUtil.getString("colorSwitch") 49 | 50 | startUpdateService.isChecked = "1" != CacheUtil.getString("startUpdateService") 51 | 52 | hideDivider.isChecked = "1" == CacheUtil.getString("hideDivider") 53 | 54 | 55 | val paddingType = CacheUtil.getString("paddingType") 56 | paddingTip.text = if (TextUtils.isEmpty(paddingType)) { 57 | "15dp" 58 | } else { 59 | paddingType 60 | } 61 | 62 | val douShowTypeTip = CacheUtil.getString("douShowType") 63 | douShowType.text = if (TextUtils.isEmpty(douShowTypeTip)) { 64 | "文字展示" 65 | } else { 66 | douShowTypeTip 67 | } 68 | 69 | val douShowType2Tip = CacheUtil.getString("douShowType2") 70 | douShowType2.text = if (TextUtils.isEmpty(douShowType2Tip)) { 71 | "京豆展示" 72 | } else { 73 | douShowType2Tip 74 | } 75 | 76 | var designColorTxt = CacheUtil.getString("designColor") 77 | if (TextUtils.isEmpty(designColorTxt)) { 78 | designColorTxt = "#FFFFFF" 79 | } 80 | designColor.text = designColorTxt 81 | 82 | var designColorTxt2 = CacheUtil.getString("designColor2") 83 | if (TextUtils.isEmpty(designColorTxt2)) { 84 | designColorTxt2 = "#FFFFFF" 85 | } 86 | designColor2.text = designColorTxt2 87 | } 88 | 89 | override fun setEvent() { 90 | hideTips.setOnCheckedChangeListener { buttonView, isChecked -> 91 | if (isChecked) { 92 | CacheUtil.putString("hideTips", "1") 93 | } else { 94 | CacheUtil.putString("hideTips", "0") 95 | } 96 | // 震动 97 | val vibrator = this.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 98 | vibrator.vibrate(2) //单位是ms 99 | } 100 | 101 | hideNichen.setOnCheckedChangeListener { buttonView, isChecked -> 102 | if (isChecked) { 103 | CacheUtil.putString("hideNichen", "1") 104 | } else { 105 | CacheUtil.putString("hideNichen", "0") 106 | } 107 | // 震动 108 | val vibrator = this.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 109 | vibrator.vibrate(2) //单位是ms 110 | } 111 | 112 | startUpdateService.setOnCheckedChangeListener { buttonView, isChecked -> 113 | if (isChecked) { 114 | CacheUtil.putString("startUpdateService", "0") 115 | } else { 116 | CacheUtil.putString("startUpdateService", "1") 117 | } 118 | // 震动 119 | val vibrator = this.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 120 | vibrator.vibrate(2) //单位是ms 121 | } 122 | 123 | colorSwitch.setOnCheckedChangeListener { buttonView, isChecked -> 124 | if (isChecked) { 125 | CacheUtil.putString("colorSwitch", "1") 126 | } else { 127 | CacheUtil.putString("colorSwitch", "0") 128 | } 129 | val vibrator = this.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 130 | vibrator.vibrate(2) //单位是ms 131 | } 132 | 133 | 134 | hideDivider.setOnCheckedChangeListener { buttonView, isChecked -> 135 | if (isChecked) { 136 | CacheUtil.putString("hideDivider", "1") 137 | } else { 138 | CacheUtil.putString("hideDivider", "0") 139 | } 140 | // 震动 141 | val vibrator = this.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 142 | vibrator.vibrate(2) //单位是ms 143 | } 144 | 145 | settingFinish.setOnClickListener { 146 | UpdateTask.updateAll() 147 | Toast.makeText(this, "小组件状态更新完毕", Toast.LENGTH_SHORT).show() 148 | // 震动 149 | val vibrator = this.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 150 | vibrator.vibrate(100) //单位是ms 151 | vibrator.vibrate(1) //单位是ms 152 | vibrator.vibrate(10) //单位是ms 153 | } 154 | 155 | douShowType.setOnClickListener { 156 | var menuDialog = MenuDialog(this, douShowTypeList) { 157 | CacheUtil.putString("douShowType", it) 158 | douShowType.text = it 159 | } 160 | menuDialog.pop() 161 | } 162 | 163 | douShowType2.setOnClickListener { 164 | var menuDialog = MenuDialog(this, douShowTypeList2) { 165 | CacheUtil.putString("douShowType2", it) 166 | douShowType2.text = it 167 | } 168 | menuDialog.pop() 169 | } 170 | 171 | paddingTip.setOnClickListener { 172 | var menuDialog = MenuDialog(this, paddingDataList) { 173 | CacheUtil.putString("paddingType", it) 174 | paddingTip.text = it 175 | } 176 | menuDialog.pop() 177 | } 178 | 179 | designColor.setOnClickListener { 180 | var inputDialog = InputDialog(this) 181 | inputDialog.onOkClickListener = object : InputDialog.OnOkClickListener { 182 | override fun ok(str: String) { 183 | CacheUtil.putString("designColor", str) 184 | designColor.text = str 185 | } 186 | } 187 | inputDialog.pop() 188 | } 189 | designColor2.setOnClickListener { 190 | var inputDialog = InputDialog(this) 191 | inputDialog.onOkClickListener = object : InputDialog.OnOkClickListener { 192 | override fun ok(str: String) { 193 | CacheUtil.putString("designColor2", str) 194 | designColor2.text = str 195 | } 196 | } 197 | inputDialog.pop() 198 | } 199 | 200 | } 201 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/bean/JingDouBean.java: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.bean; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class JingDouBean { 6 | 7 | private String code; 8 | private ArrayList detailList; 9 | 10 | public String getCode() { 11 | return code; 12 | } 13 | 14 | public void setCode(String code) { 15 | this.code = code; 16 | } 17 | 18 | public ArrayList getDetailList() { 19 | return detailList; 20 | } 21 | 22 | public void setDetailList(ArrayList detailList) { 23 | this.detailList = detailList; 24 | } 25 | 26 | public static class DetailListDTO { 27 | private String date; 28 | private int amount = 0; 29 | private String eventMassage; 30 | 31 | public String getDate() { 32 | return date; 33 | } 34 | 35 | public void setDate(String date) { 36 | this.date = date; 37 | } 38 | 39 | public int getAmount() { 40 | return amount; 41 | } 42 | 43 | public void setAmount(int amount) { 44 | this.amount = amount; 45 | } 46 | 47 | public String getEventMassage() { 48 | return eventMassage; 49 | } 50 | 51 | public void setEventMassage(String eventMassage) { 52 | this.eventMassage = eventMassage; 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/bean/RedPacket.java: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.bean; 2 | 3 | import java.math.BigDecimal; 4 | import java.util.List; 5 | 6 | public class RedPacket { 7 | 8 | 9 | private Data data; 10 | private int errcode; 11 | private String msg; 12 | 13 | public Data getData() { 14 | return data; 15 | } 16 | 17 | public void setData(Data data) { 18 | this.data = data; 19 | } 20 | 21 | public int getErrcode() { 22 | return errcode; 23 | } 24 | 25 | public void setErrcode(int errcode) { 26 | this.errcode = errcode; 27 | } 28 | 29 | public String getMsg() { 30 | return msg; 31 | } 32 | 33 | public void setMsg(String msg) { 34 | this.msg = msg; 35 | } 36 | 37 | public static class Data { 38 | private int avaiCount; 39 | private String balance; 40 | private int countdownTime; 41 | private String expiredBalance; 42 | private int serverCurrTime; 43 | private UseRedInfo useRedInfo; 44 | 45 | public int getAvaiCount() { 46 | return avaiCount; 47 | } 48 | 49 | public void setAvaiCount(int avaiCount) { 50 | this.avaiCount = avaiCount; 51 | } 52 | 53 | public String getBalance() { 54 | return balance; 55 | } 56 | 57 | public void setBalance(String balance) { 58 | this.balance = balance; 59 | } 60 | 61 | public int getCountdownTime() { 62 | return countdownTime; 63 | } 64 | 65 | public void setCountdownTime(int countdownTime) { 66 | this.countdownTime = countdownTime; 67 | } 68 | 69 | public String getExpiredBalance() { 70 | return expiredBalance; 71 | } 72 | 73 | public void setExpiredBalance(String expiredBalance) { 74 | this.expiredBalance = expiredBalance; 75 | } 76 | 77 | public int getServerCurrTime() { 78 | return serverCurrTime; 79 | } 80 | 81 | public void setServerCurrTime(int serverCurrTime) { 82 | this.serverCurrTime = serverCurrTime; 83 | } 84 | 85 | public UseRedInfo getUseRedInfo() { 86 | return useRedInfo; 87 | } 88 | 89 | public void setUseRedInfo(UseRedInfo useRedInfo) { 90 | this.useRedInfo = useRedInfo; 91 | } 92 | 93 | public static class UseRedInfo { 94 | private int count; 95 | private List redList; 96 | 97 | public int getCount() { 98 | return count; 99 | } 100 | 101 | public void setCount(int count) { 102 | this.count = count; 103 | } 104 | 105 | public List getRedList() { 106 | return redList; 107 | } 108 | 109 | public void setRedList(List redList) { 110 | this.redList = redList; 111 | } 112 | 113 | public static class RedList { 114 | private String activityName; 115 | private BigDecimal balance; 116 | private int beginTime; 117 | private String delayRemark; 118 | private String discount; 119 | private long endTime; 120 | private String hbId; 121 | private int hbState; 122 | private boolean isDelay; 123 | private String orgLimitStr; 124 | 125 | public String getActivityName() { 126 | return activityName; 127 | } 128 | 129 | public void setActivityName(String activityName) { 130 | this.activityName = activityName; 131 | } 132 | 133 | public BigDecimal getBalance() { 134 | return balance; 135 | } 136 | 137 | public void setBalance(BigDecimal balance) { 138 | this.balance = balance; 139 | } 140 | 141 | public int getBeginTime() { 142 | return beginTime; 143 | } 144 | 145 | public void setBeginTime(int beginTime) { 146 | this.beginTime = beginTime; 147 | } 148 | 149 | public String getDelayRemark() { 150 | return delayRemark; 151 | } 152 | 153 | public void setDelayRemark(String delayRemark) { 154 | this.delayRemark = delayRemark; 155 | } 156 | 157 | public String getDiscount() { 158 | return discount; 159 | } 160 | 161 | public void setDiscount(String discount) { 162 | this.discount = discount; 163 | } 164 | 165 | public long getEndTime() { 166 | return endTime; 167 | } 168 | 169 | public void setEndTime(long endTime) { 170 | this.endTime = endTime; 171 | } 172 | 173 | public String getHbId() { 174 | return hbId; 175 | } 176 | 177 | public void setHbId(String hbId) { 178 | this.hbId = hbId; 179 | } 180 | 181 | public int getHbState() { 182 | return hbState; 183 | } 184 | 185 | public void setHbState(int hbState) { 186 | this.hbState = hbState; 187 | } 188 | 189 | public boolean isIsDelay() { 190 | return isDelay; 191 | } 192 | 193 | public void setIsDelay(boolean isDelay) { 194 | this.isDelay = isDelay; 195 | } 196 | 197 | public String getOrgLimitStr() { 198 | return orgLimitStr; 199 | } 200 | 201 | public void setOrgLimitStr(String orgLimitStr) { 202 | this.orgLimitStr = orgLimitStr; 203 | } 204 | } 205 | } 206 | } 207 | } 208 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/bean/SimpleFileDownloadListener.java: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.bean; 2 | 3 | import android.util.Log; 4 | 5 | import com.liulishuo.filedownloader.BaseDownloadTask; 6 | import com.liulishuo.filedownloader.FileDownloadListener; 7 | 8 | 9 | public class SimpleFileDownloadListener extends FileDownloadListener { 10 | @Override 11 | protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) { 12 | Log.i("====","pending"); 13 | 14 | } 15 | 16 | @Override 17 | protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) { 18 | Log.i("====","progress"); 19 | } 20 | 21 | @Override 22 | protected void completed(BaseDownloadTask task) { 23 | Log.i("====","completed"); 24 | } 25 | 26 | @Override 27 | protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) { 28 | Log.i("====","paused"); 29 | } 30 | 31 | @Override 32 | protected void error(BaseDownloadTask task, Throwable e) { 33 | Log.i("====","error"); 34 | Log.i("====",e.toString()); 35 | } 36 | 37 | @Override 38 | protected void warn(BaseDownloadTask task) { 39 | Log.i("====","warn"); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/bean/UserBean.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.bean 2 | 3 | import java.math.BigDecimal 4 | 5 | class UserBean { 6 | var nickName = "" 7 | var headImageUrl = "" 8 | var userLevel = "" 9 | var levelName = "" 10 | var beanNum = "" 11 | var todayBean = 0 12 | var ago1Bean = 0 13 | var ago2Bean = 0 14 | var ago3Bean = 0 15 | var ago4Bean = 0 16 | 17 | var farmName = "" 18 | var treeEnergy = "" 19 | var treeTotalEnergy = "" 20 | var treeImageUrl = "" 21 | 22 | var hb = "--" 23 | var jxiang = "--" 24 | var gqhb = "--" 25 | var countdownTime = 0 26 | 27 | var isPlusVip = "0" 28 | 29 | var updateTips = "" 30 | 31 | var page = 1 32 | 33 | var jxRed = BigDecimal(0) 34 | var jdRed = BigDecimal(0) 35 | var jsRed = BigDecimal(0) 36 | 37 | var jxRedGQ = BigDecimal(0) 38 | var jdRedGQ = BigDecimal(0) 39 | var jsRedGQ = BigDecimal(0) 40 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/bean/VersionBean.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.bean 2 | 3 | 4 | class VersionBean { 5 | var isUpdate: String? = null 6 | var content_url: String? = null 7 | var release: String? = null 8 | var content: String? = null 9 | var widgetTip = "" 10 | var mainImg = "" 11 | var isServelUpdate = "" 12 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/dialog/InputCKDialog.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.dialog 2 | 3 | import android.app.Activity 4 | import android.app.Dialog 5 | import android.graphics.Color 6 | import android.text.TextUtils 7 | import android.view.View 8 | import android.widget.Button 9 | import android.widget.EditText 10 | import android.widget.LinearLayout 11 | import android.widget.Toast 12 | import com.whitefan.jdlite.MyApplication 13 | import com.whitefan.jdlite.R 14 | 15 | class InputCKDialog(var mActivity: Activity) : Dialog(mActivity!!) { 16 | private lateinit var input: EditText 17 | private lateinit var inputRemark: EditText 18 | private lateinit var ok: Button 19 | var onOkClickListener: OnOkClickListener? = null 20 | 21 | init { 22 | initView() 23 | } 24 | 25 | fun initView(): InputCKDialog { 26 | setContentView(R.layout.dialog_layout_style4) 27 | input = findViewById(R.id.inputColor) 28 | inputRemark = findViewById(R.id.inputRemark) 29 | ok = findViewById(R.id.ok) 30 | val divierId = context.resources.getIdentifier("android:id/titleDivider", null, null) 31 | val divider = findViewById(divierId) 32 | divider?.setBackgroundColor(Color.TRANSPARENT) 33 | window?.setBackgroundDrawableResource(android.R.color.transparent) 34 | window?.setLayout(context.resources.displayMetrics.widthPixels * 5 / 6, LinearLayout.LayoutParams.WRAP_CONTENT) 35 | ok.setOnClickListener { 36 | if (TextUtils.isEmpty(input.text.toString())) { 37 | Toast.makeText(MyApplication.mInstance, "CK为空", Toast.LENGTH_SHORT).show() 38 | } else { 39 | onOkClickListener?.ok(input.text.toString(), inputRemark.text.toString()) 40 | } 41 | dismiss() 42 | } 43 | return this 44 | } 45 | 46 | fun pop() { 47 | if (!isShowing) { 48 | try { 49 | show() 50 | } catch (e: Exception) { 51 | e.printStackTrace() 52 | } 53 | } 54 | } 55 | 56 | override fun show() { 57 | try { 58 | super.show() 59 | } catch (e: Exception) { 60 | e.printStackTrace() 61 | } 62 | } 63 | 64 | interface OnOkClickListener { 65 | fun ok(ck: String, remark: String) 66 | } 67 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/dialog/InputDialog.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.dialog 2 | 3 | import android.app.Activity 4 | import android.app.Dialog 5 | import android.graphics.Color 6 | import android.text.TextUtils 7 | import android.view.View 8 | import android.widget.Button 9 | import android.widget.EditText 10 | import android.widget.LinearLayout 11 | import android.widget.Toast 12 | import com.whitefan.jdlite.MyApplication 13 | import com.whitefan.jdlite.R 14 | import com.whitefan.jdlite.util.CacheUtil 15 | 16 | class InputDialog(var mActivity: Activity) : Dialog(mActivity!!) { 17 | private lateinit var input: EditText 18 | private lateinit var ok: Button 19 | var onOkClickListener: OnOkClickListener? = null 20 | 21 | init { 22 | initView() 23 | } 24 | 25 | fun initView(): InputDialog { 26 | setContentView(R.layout.dialog_layout_style3) 27 | input = findViewById(R.id.inputColor) 28 | 29 | var designColor = CacheUtil.getString("designColor") 30 | if(TextUtils.isEmpty(designColor)){ 31 | designColor = "#FFFFFF" 32 | } 33 | input.setText(designColor) 34 | 35 | ok = findViewById(R.id.ok) 36 | val divierId = context.resources.getIdentifier("android:id/titleDivider", null, null) 37 | val divider = findViewById(divierId) 38 | divider?.setBackgroundColor(Color.TRANSPARENT) 39 | window?.setBackgroundDrawableResource(android.R.color.transparent) 40 | window?.setLayout(context.resources.displayMetrics.widthPixels * 5 / 6, LinearLayout.LayoutParams.WRAP_CONTENT) 41 | ok.setOnClickListener { 42 | try { 43 | Color.parseColor(input.text.toString()) 44 | onOkClickListener?.ok(input.text.toString()) 45 | dismiss() 46 | } catch (e: Exception) { 47 | e.printStackTrace() 48 | Toast.makeText(MyApplication.mInstance, "输入无效", Toast.LENGTH_SHORT).show() 49 | } 50 | } 51 | return this 52 | } 53 | 54 | fun pop() { 55 | if (!isShowing) { 56 | try { 57 | show() 58 | } catch (e: Exception) { 59 | e.printStackTrace() 60 | } 61 | } 62 | } 63 | 64 | override fun show() { 65 | try { 66 | super.show() 67 | } catch (e: Exception) { 68 | e.printStackTrace() 69 | } 70 | } 71 | 72 | interface OnOkClickListener { 73 | fun ok(str: String) 74 | } 75 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/dialog/MenuDialog.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.dialog 2 | 3 | import android.app.Activity 4 | import android.app.Dialog 5 | import android.graphics.Color 6 | import android.view.View 7 | import android.widget.LinearLayout 8 | import androidx.recyclerview.widget.LinearLayoutManager 9 | import androidx.recyclerview.widget.RecyclerView 10 | import com.whitefan.jdlite.R 11 | 12 | class MenuDialog(var mActivity: Activity, private var dataList: ArrayList, var itemClick: (key: String) -> Unit) : Dialog(mActivity!!) { 13 | private lateinit var mRecyclerView: RecyclerView 14 | 15 | init { 16 | initView() 17 | } 18 | 19 | fun initView(): MenuDialog { 20 | setContentView(R.layout.dialog_layout_style2) 21 | mRecyclerView = findViewById(R.id.mRecyclerView) 22 | val divierId = context.resources.getIdentifier("android:id/titleDivider", null, null) 23 | val divider = findViewById(divierId) 24 | divider?.setBackgroundColor(Color.TRANSPARENT) 25 | window?.setBackgroundDrawableResource(android.R.color.transparent) 26 | window?.setLayout(context.resources.displayMetrics.widthPixels * 5 / 6, LinearLayout.LayoutParams.WRAP_CONTENT) 27 | 28 | var adapter = MyMenuDialogAdapter(mActivity, itemClick) 29 | adapter.dataList = dataList 30 | mRecyclerView.layoutManager = LinearLayoutManager(context) 31 | mRecyclerView.adapter = adapter 32 | adapter.onItemClickListener = object : MyMenuDialogAdapter.OnItemClickListener { 33 | override fun click() { 34 | dismiss() 35 | } 36 | } 37 | return this 38 | } 39 | 40 | fun pop() { 41 | if (!isShowing) { 42 | try { 43 | show() 44 | } catch (e: Exception) { 45 | e.printStackTrace() 46 | } 47 | } 48 | } 49 | 50 | override fun show() { 51 | try { 52 | super.show() 53 | } catch (e: Exception) { 54 | e.printStackTrace() 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/dialog/MyMenuDialogAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.dialog 2 | 3 | import android.app.Activity 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import android.widget.TextView 8 | import androidx.recyclerview.widget.RecyclerView 9 | import com.whitefan.jdlite.R 10 | 11 | 12 | class MyMenuDialogAdapter(private val mActivity: Activity, var itemClick: (key: String) -> Unit) : RecyclerView.Adapter() { 13 | var dataList: ArrayList? = null 14 | var onItemClickListener: OnItemClickListener? = null 15 | 16 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyMenuDialogAdapter.MenuItem { 17 | return MenuItem(LayoutInflater.from(mActivity).inflate(R.layout.menu_item, parent, false)) 18 | } 19 | 20 | override fun onBindViewHolder(holder: MyMenuDialogAdapter.MenuItem, position: Int) { 21 | holder.title.text = dataList?.get(position) 22 | 23 | holder.itemView.setOnClickListener { 24 | itemClick(dataList?.get(holder.adapterPosition)!!) 25 | onItemClickListener?.click() 26 | } 27 | } 28 | 29 | override fun getItemCount(): Int { 30 | return if (dataList == null) { 31 | 0 32 | } else { 33 | dataList!!.size 34 | } 35 | } 36 | 37 | inner class MenuItem(view: View) : RecyclerView.ViewHolder(view) { 38 | var title: TextView = view.findViewById(R.id.title) 39 | } 40 | 41 | interface OnItemClickListener { 42 | fun click() 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/dialog/NormalInputCKDialog.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.dialog 2 | 3 | import android.app.Activity 4 | import android.app.Dialog 5 | import android.graphics.Color 6 | import android.text.TextUtils 7 | import android.view.View 8 | import android.widget.Button 9 | import android.widget.EditText 10 | import android.widget.LinearLayout 11 | import android.widget.Toast 12 | import com.whitefan.jdlite.MyApplication 13 | import com.whitefan.jdlite.R 14 | 15 | class NormalInputCKDialog(var mActivity: Activity) : Dialog(mActivity!!) { 16 | private lateinit var input: EditText 17 | private lateinit var inputRemark: EditText 18 | private lateinit var ok: Button 19 | var onOkClickListener: OnOkClickListener? = null 20 | 21 | init { 22 | initView() 23 | } 24 | 25 | fun initView(): NormalInputCKDialog { 26 | setContentView(R.layout.dialog_layout_style4) 27 | input = findViewById(R.id.inputColor) 28 | inputRemark = findViewById(R.id.inputRemark) 29 | inputRemark.visibility = View.GONE 30 | ok = findViewById(R.id.ok) 31 | ok.text = "更新帐号CK" 32 | val divierId = context.resources.getIdentifier("android:id/titleDivider", null, null) 33 | val divider = findViewById(divierId) 34 | divider?.setBackgroundColor(Color.TRANSPARENT) 35 | window?.setBackgroundDrawableResource(android.R.color.transparent) 36 | window?.setLayout(context.resources.displayMetrics.widthPixels * 5 / 6, LinearLayout.LayoutParams.WRAP_CONTENT) 37 | ok.setOnClickListener { 38 | if (TextUtils.isEmpty(input.text.toString())) { 39 | Toast.makeText(MyApplication.mInstance, "CK为空", Toast.LENGTH_SHORT).show() 40 | } else { 41 | onOkClickListener?.ok(input.text.toString(), inputRemark.text.toString()) 42 | } 43 | dismiss() 44 | } 45 | return this 46 | } 47 | 48 | fun pop() { 49 | if (!isShowing) { 50 | try { 51 | show() 52 | } catch (e: Exception) { 53 | e.printStackTrace() 54 | } 55 | } 56 | } 57 | 58 | override fun show() { 59 | try { 60 | super.show() 61 | } catch (e: Exception) { 62 | e.printStackTrace() 63 | } 64 | } 65 | 66 | interface OnOkClickListener { 67 | fun ok(ck: String, remark: String) 68 | } 69 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/ActivityCollector.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util 2 | 3 | import android.app.Activity 4 | 5 | 6 | object ActivityCollector { 7 | private val activities = ArrayList() 8 | 9 | fun addActivity(activity: Activity) { 10 | activities.add(activity) 11 | } 12 | 13 | fun removeActivity(activity: Activity) { 14 | activities.remove(activity) 15 | } 16 | 17 | fun finishAll() { 18 | for (activity in activities) { 19 | if (!activity.isFinishing) { 20 | activity.finish() 21 | } 22 | } 23 | } 24 | 25 | fun exitApp() { 26 | finishAll() 27 | } 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/BitmapUtil.java: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util; 2 | 3 | import android.graphics.Bitmap; 4 | import android.graphics.Canvas; 5 | import android.graphics.Color; 6 | import android.graphics.Paint; 7 | import android.graphics.PixelFormat; 8 | import android.graphics.PorterDuff; 9 | import android.graphics.PorterDuffXfermode; 10 | import android.graphics.Rect; 11 | import android.graphics.RectF; 12 | import android.graphics.drawable.BitmapDrawable; 13 | import android.graphics.drawable.Drawable; 14 | import android.graphics.drawable.GradientDrawable; 15 | 16 | public class BitmapUtil { 17 | /** 18 | * Drawable转换成一个Bitmap 19 | * 方法一 20 | * 21 | * @param drawable drawable对象 22 | * @return 23 | */ 24 | public static final Bitmap drawableToBitmap(Drawable drawable) { 25 | Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), 26 | drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); 27 | Canvas canvas = new Canvas(bitmap); 28 | drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 29 | drawable.draw(canvas); 30 | return bitmap; 31 | } 32 | 33 | public static final Bitmap drawableToBitmap(GradientDrawable drawable) { 34 | Bitmap bitmap = Bitmap.createBitmap(100, 100, 35 | drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); 36 | Canvas canvas = new Canvas(bitmap); 37 | drawable.setBounds(0, 0, 100, 100); 38 | drawable.draw(canvas); 39 | return bitmap; 40 | } 41 | 42 | /** 43 | * Drawable转换成一个Bitmap 44 | * 方法二 45 | * 46 | * @param drawable drawable对象 47 | * @return 48 | */ 49 | public static final Bitmap drawableToBitmap2(Drawable drawable) { 50 | BitmapDrawable bd = (BitmapDrawable) drawable; 51 | return bd.getBitmap(); 52 | 53 | } 54 | 55 | public static Bitmap createCircleBitmap(Bitmap resource) { 56 | //获取图片的宽度 57 | int width = resource.getWidth(); 58 | Paint paint = new Paint(); 59 | //设置抗锯齿 60 | paint.setAntiAlias(true); 61 | 62 | //创建一个与原bitmap一样宽度的正方形bitmap 63 | Bitmap circleBitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888); 64 | //以该bitmap为低创建一块画布 65 | Canvas canvas = new Canvas(circleBitmap); 66 | //以(width/2, width/2)为圆心,width/2为半径画一个圆 67 | canvas.drawCircle(width / 2, width / 2, width / 2, paint); 68 | 69 | //设置画笔为取交集模式 70 | paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 71 | //裁剪图片 72 | canvas.drawBitmap(resource, 0, 0, paint); 73 | 74 | return circleBitmap; 75 | } 76 | 77 | public static Bitmap GetRoundedCornerBitmap(Bitmap bitmap) { 78 | try { 79 | Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 80 | Canvas canvas = new Canvas(output); 81 | final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 82 | final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 83 | final RectF rectF = new RectF(new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight())); 84 | final float roundPx = 5; 85 | paint.setAntiAlias(true); 86 | canvas.drawARGB(0, 0, 0, 0); 87 | paint.setColor(Color.BLACK); 88 | canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 89 | paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 90 | final Rect src = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 91 | canvas.drawBitmap(bitmap, src, rect, paint); 92 | return output; 93 | } catch (Exception e) { 94 | return bitmap; 95 | } 96 | } 97 | 98 | public static Bitmap getColorBitmap(String color) { 99 | Paint paint = new Paint(); 100 | paint.setTextAlign(Paint.Align.LEFT); 101 | paint.setAlpha(77); 102 | paint.setColor(Color.RED); 103 | Bitmap bitmap = Bitmap.createBitmap(400, 200, Bitmap.Config.ARGB_8888); 104 | bitmap.eraseColor(Color.parseColor(color)); 105 | Canvas canvas = new Canvas(bitmap); 106 | canvas.save(); 107 | return bitmap; 108 | } 109 | 110 | public static Bitmap getColorBitmapLow(String color) { 111 | Paint paint = new Paint(); 112 | paint.setTextAlign(Paint.Align.LEFT); 113 | paint.setAlpha(77); 114 | paint.setColor(Color.RED); 115 | Bitmap bitmap = Bitmap.createBitmap(220, 220, Bitmap.Config.ARGB_8888); 116 | bitmap.eraseColor(Color.parseColor(color)); 117 | Canvas canvas = new Canvas(bitmap); 118 | canvas.save(); 119 | return bitmap; 120 | } 121 | 122 | public static Bitmap bimapRound(Bitmap mBitmap, float index) { 123 | Bitmap bitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888); 124 | 125 | Canvas canvas = new Canvas(bitmap); 126 | Paint paint = new Paint(); 127 | paint.setAntiAlias(true); 128 | 129 | //设置矩形大小 130 | Rect rect = new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight()); 131 | RectF rectf = new RectF(rect); 132 | 133 | // 相当于清屏 134 | canvas.drawARGB(0, 0, 0, 0); 135 | //画圆角 136 | canvas.drawRoundRect(rectf, index, index, paint); 137 | // 取两层绘制,显示上层 138 | paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 139 | 140 | // 把原生的图片放到这个画布上,使之带有画布的效果 141 | canvas.drawBitmap(mBitmap, rect, rect, paint); 142 | return bitmap; 143 | 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/CacheUtil.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util 2 | 3 | import android.text.TextUtils 4 | import com.whitefan.jdlite.MyApplication 5 | 6 | 7 | object CacheUtil { 8 | private const val PREFS = "page_cache_config" 9 | 10 | fun getString(key: String?): String? { 11 | return SharedPreferencesUtils.getPrefs(MyApplication.mInstance, PREFS).getString(key, "") 12 | } 13 | 14 | fun putString(key: String?, value: String?) { 15 | SharedPreferencesUtils.getEditor(MyApplication.mInstance, PREFS) 16 | .putString(key, value).commit() 17 | } 18 | 19 | fun getCKPtPin(key: String): String { 20 | try { 21 | val ck = getString(key) 22 | if (TextUtils.isEmpty(ck)) { 23 | return "" 24 | } 25 | var pin = ck!!.substring(ck.indexOf("pt_pin=")) 26 | pin = pin.substring(0, pin.indexOf(";")) 27 | return pin 28 | } catch (e: Exception) { 29 | e.printStackTrace() 30 | } 31 | return key 32 | } 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/ColorUtil.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util 2 | 3 | import android.graphics.Color 4 | 5 | 6 | object ColorUtil { 7 | fun transColor(color: String): Int { 8 | val c1 = color.subSequence(color.length - 6, color.length - 4) 9 | val c2 = color.subSequence(color.length - 4, color.length - 2) 10 | val c3 = color.subSequence(color.length - 2, color.length) 11 | 12 | val d1 = Integer.valueOf(c1.toString(), 16) 13 | val d2 = Integer.valueOf(c2.toString(), 16) 14 | val d3 = Integer.valueOf(c3.toString(), 16) 15 | 16 | return Color.rgb(255 - d1, 255 - d2, 255 - d3) 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/CommonUtil.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util 2 | 3 | import com.whitefan.jdlite.MyApplication 4 | 5 | 6 | 7 | 8 | fun Int.dmToPx(): Int { 9 | return MyApplication.mInstance.resources.getDimensionPixelSize(this) 10 | } 11 | 12 | fun Int.dmToSp(): Int { 13 | return MyApplication.mInstance.resources.getDimensionPixelSize(this) 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/DeviceUtil.java: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util; 2 | 3 | import android.content.pm.PackageInfo; 4 | 5 | import com.whitefan.jdlite.MyApplication; 6 | 7 | public class DeviceUtil { 8 | 9 | /** 10 | * 获取当前app version name 11 | */ 12 | public static String getAppVersionName() { 13 | String appVersionName = "-1"; 14 | try { 15 | PackageInfo packageInfo = MyApplication.getMInstance().getPackageManager() 16 | .getPackageInfo(MyApplication.getMInstance().getPackageName(), 0); 17 | appVersionName = packageInfo.versionName; 18 | } catch (Exception e) { 19 | } 20 | return appVersionName; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/ImageLoaderUtils.java: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.ContextWrapper; 6 | 7 | /** 8 | * @author:luck 9 | * @date:2021/7/14 3:15 PM 10 | * @describe:ImageLoaderUtils 11 | */ 12 | public class ImageLoaderUtils { 13 | 14 | public static boolean assertValidRequest(Context context) { 15 | if (context instanceof Activity) { 16 | Activity activity = (Activity) context; 17 | return !isDestroy(activity); 18 | } else if (context instanceof ContextWrapper){ 19 | ContextWrapper contextWrapper = (ContextWrapper) context; 20 | if (contextWrapper.getBaseContext() instanceof Activity){ 21 | Activity activity = (Activity) contextWrapper.getBaseContext(); 22 | return !isDestroy(activity); 23 | } 24 | } 25 | return true; 26 | } 27 | 28 | private static boolean isDestroy(Activity activity) { 29 | if (activity == null) { 30 | return true; 31 | } 32 | return activity.isFinishing() || activity.isDestroyed(); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/Main.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util 2 | 3 | import android.graphics.Color 4 | 5 | 6 | fun main() { 7 | transColor("#ffffc000") 8 | } 9 | 10 | fun colorToHexValue() { 11 | val d = Integer.valueOf("ff", 16) 12 | println(d.toString()) 13 | } 14 | 15 | fun transColor(color: String): Int { 16 | val c1 = color.subSequence(color.length - 6, color.length - 4) 17 | val c2 = color.subSequence(color.length - 4, color.length - 2) 18 | val c3 = color.subSequence(color.length - 2, color.length) 19 | 20 | val d1 = Integer.valueOf(c1.toString(), 16) 21 | val d2 = Integer.valueOf(c2.toString(), 16) 22 | val d3 = Integer.valueOf(c3.toString(), 16) 23 | 24 | return Color.rgb(255 - d1, 255 - d2, 255 - d3) 25 | } 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/SharedPreferencesUtils.java: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | public class SharedPreferencesUtils { 10 | 11 | /** 12 | * 记录所有 Prefs 13 | */ 14 | private static Map mPrefs = null; 15 | 16 | /** 17 | * 记录所有 Prefs对应的Editor 18 | */ 19 | private static Map mEditors = null; 20 | 21 | /** 22 | * 根据指定的Key获取到的目标Prefs 23 | */ 24 | private static SharedPreferences tempPrefs = null; 25 | /** 26 | * 根据指定的Key获取到的目标Editor 27 | */ 28 | private static SharedPreferences.Editor tempEditor = null; 29 | 30 | static { 31 | mPrefs = new HashMap(); 32 | mEditors = new HashMap(); 33 | } 34 | 35 | /** 36 | * @Author wenJun 37 | * @Description 根据传入的 CustomKeyboardView 获取对应的 Prefs 38 | * @Date 2013-2-19 39 | * @param context 40 | * @param prefsKey 41 | * 指定的Key 来源 Constants 42 | * @return 获取到的 Prefs 43 | */ 44 | public static synchronized SharedPreferences getPrefs(Context context, String prefsKey) { 45 | tempPrefs = mPrefs.get(prefsKey); 46 | if (tempPrefs == null) { 47 | tempPrefs = context.getSharedPreferences(prefsKey, Context.MODE_PRIVATE); 48 | mPrefs.put(prefsKey, tempPrefs); 49 | } 50 | return tempPrefs; 51 | } 52 | 53 | /** 54 | * @Author wenJun 55 | * @Description 根据传入的 CustomKeyboardView 获取对应的 Editor 56 | * @Date 2013-2-19 57 | * @param context 58 | * @param prefsKey 59 | * 指定的Key 来源 Constants 60 | * @return 获取到的 Editor 61 | */ 62 | public static synchronized SharedPreferences.Editor getEditor(Context context, String prefsKey) { 63 | tempEditor = mEditors.get(prefsKey); 64 | if (tempEditor == null) { 65 | tempEditor = getPrefs(context, prefsKey).edit(); 66 | mEditors.put(prefsKey, tempEditor); 67 | } 68 | return tempEditor; 69 | } 70 | 71 | 72 | } 73 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/StringCallBack.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util 2 | 3 | 4 | interface StringCallBack { 5 | fun onSuccess(result: String) 6 | fun onFail() 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/TimeUtil.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util 2 | 3 | import java.text.SimpleDateFormat 4 | import java.util.* 5 | 6 | object TimeUtil { 7 | fun getCurrentData(): String { 8 | val formatter = SimpleDateFormat("HH:mm:ss") 9 | val date = Date(System.currentTimeMillis()) 10 | return formatter.format(date) 11 | } 12 | 13 | fun getCurrentHH(): Int { 14 | val formatter = SimpleDateFormat("HH") 15 | val date = Date(System.currentTimeMillis()) 16 | return formatter.format(date).toInt() 17 | } 18 | 19 | fun getTodayMillis(ago: Int): Long { 20 | var data = Date() 21 | var calendar = Calendar.getInstance() 22 | calendar.time = data 23 | calendar.add(Calendar.DAY_OF_MONTH, ago) 24 | var format = SimpleDateFormat("yyyy-MM-dd") 25 | var strData = format.format(calendar.time) 26 | val split = strData.split("-") 27 | calendar.clear() 28 | calendar.set(split[0].toInt(), split[1].toInt() - 1, split[2].toInt()) 29 | return calendar.timeInMillis 30 | } 31 | 32 | fun parseTime(timeStr: String): Long? { 33 | try { 34 | val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 35 | return simpleDateFormat.parse(timeStr).time 36 | } catch (e: Exception) { 37 | e.printStackTrace() 38 | } 39 | return 0L 40 | } 41 | 42 | fun getYesterDay(ago: Int): String { 43 | val cal = Calendar.getInstance() 44 | cal.add(Calendar.DATE, ago) 45 | return SimpleDateFormat("yyyy-MM-dd").format(cal.time) 46 | } 47 | 48 | fun getYesterOnlyDay(ago: Int): String { 49 | val cal = Calendar.getInstance() 50 | cal.add(Calendar.DATE, ago) 51 | return SimpleDateFormat("dd").format(cal.time) 52 | } 53 | 54 | private var lastClickTime: Long = 0 55 | 56 | @Synchronized 57 | fun isFastClick(): Boolean { 58 | if (System.currentTimeMillis() - lastClickTime < 1500) { 59 | lastClickTime = System.currentTimeMillis() 60 | return true 61 | } 62 | lastClickTime = System.currentTimeMillis() 63 | return false 64 | } 65 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/util/UpdateTask.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.util 2 | 3 | import android.os.Handler 4 | import android.os.Looper 5 | import com.whitefan.jdlite.widget.WidgetUpdateDataUtil 6 | import com.whitefan.jdlite.widget.WidgetUpdateDataUtil_2 7 | 8 | 9 | object UpdateTask { 10 | var widgetUpdateDataUtil = WidgetUpdateDataUtil() 11 | var widgetUpdateDataUtil1 = WidgetUpdateDataUtil() 12 | var widgetUpdateDataUtil2 = WidgetUpdateDataUtil() 13 | var widgetUpdateDataUtil3 = WidgetUpdateDataUtil() 14 | var widgetUpdateDataUtil4 = WidgetUpdateDataUtil() 15 | var widgetUpdateDataUtil5 = WidgetUpdateDataUtil() 16 | var widgetUpdateDataUtil_2 = WidgetUpdateDataUtil_2() 17 | var widgetUpdateDataUtil1_2 = WidgetUpdateDataUtil_2() 18 | var widgetUpdateDataUtil2_2 = WidgetUpdateDataUtil_2() 19 | var widgetUpdateDataUtil3_2 = WidgetUpdateDataUtil_2() 20 | var widgetUpdateDataUtil4_2 = WidgetUpdateDataUtil_2() 21 | var widgetUpdateDataUtil5_2 = WidgetUpdateDataUtil_2() 22 | 23 | var handler = Handler(Looper.getMainLooper()) 24 | 25 | fun updateAll() { 26 | handler.post { 27 | widgetUpdateDataUtil.updateWidget("ck") 28 | } 29 | handler.postDelayed({ 30 | widgetUpdateDataUtil_2.updateWidget("ck") 31 | }, 2000) 32 | 33 | handler.postDelayed({ 34 | widgetUpdateDataUtil1.updateWidget("ck1") 35 | }, 4000) 36 | 37 | handler.postDelayed({ 38 | widgetUpdateDataUtil1_2.updateWidget("ck1") 39 | }, 6000) 40 | 41 | handler.postDelayed({ 42 | widgetUpdateDataUtil2.updateWidget("ck2") 43 | }, 8000) 44 | 45 | handler.postDelayed({ 46 | widgetUpdateDataUtil2_2.updateWidget("ck2") 47 | }, 10000) 48 | 49 | handler.postDelayed({ 50 | widgetUpdateDataUtil3.updateWidget("ck3") 51 | }, 12000) 52 | 53 | handler.postDelayed({ 54 | widgetUpdateDataUtil3_2.updateWidget("ck3") 55 | }, 14000) 56 | 57 | handler.postDelayed({ 58 | widgetUpdateDataUtil4.updateWidget("ck4") 59 | }, 16000) 60 | 61 | handler.postDelayed({ 62 | widgetUpdateDataUtil4_2.updateWidget("ck4") 63 | }, 18000) 64 | 65 | handler.postDelayed({ 66 | widgetUpdateDataUtil5.updateWidget("ck5") 67 | }, 20000) 68 | 69 | handler.postDelayed({ 70 | widgetUpdateDataUtil5_2.updateWidget("ck5") 71 | }, 22000) 72 | 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/webView/MarqueeTextView.java: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.webView; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | 6 | //自定义textview使textview一直处于检点状态 7 | public class MarqueeTextView extends androidx.appcompat.widget.AppCompatTextView { 8 | public MarqueeTextView(Context context) { 9 | super(context); 10 | } 11 | 12 | public MarqueeTextView(Context context, AttributeSet attrs) { 13 | super(context, attrs); 14 | } 15 | 16 | public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) { 17 | super(context, attrs, defStyle); 18 | } 19 | 20 | @Override 21 | public boolean isFocused() { 22 | return true; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.util.Log 11 | import android.widget.RemoteViews 12 | import com.whitefan.jdlite.R 13 | import com.whitefan.jdlite.util.UpdateTask 14 | import com.whitefan.jdlite.util.dmToPx 15 | 16 | class MyAppWidgetProvider : AppWidgetProvider() { 17 | 18 | /* 19 | * 每次窗口小部件被更新都调用一次该方法 20 | */ 21 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 22 | for (appwidgetId in appWidgetIds) { 23 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout) 24 | remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 25 | val name = ComponentName(context, MyAppWidgetProvider::class.java) 26 | appWidgetManager.updateAppWidget(name, remoteViews) 27 | } 28 | } 29 | 30 | /* 31 | * 接收窗口小部件点击时发送的广播 32 | */ 33 | override fun onReceive(context: Context, intent: Intent) { 34 | super.onReceive(context, intent) 35 | //这里判断是自己的action,做自己的事情 36 | Log.i("====", "onReceive") 37 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 38 | UpdateTask.widgetUpdateDataUtil.updateWidget("ck") 39 | } 40 | } 41 | 42 | /* 43 | * 当小部件从备份恢复时调用该方法 44 | */ 45 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 46 | super.onRestored(context, oldWidgetIds, newWidgetIds) 47 | } 48 | 49 | /* 50 | * 每删除一次窗口小部件就调用一次 51 | */ 52 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 53 | super.onDeleted(context, appWidgetIds) 54 | } 55 | 56 | /* 57 | * 当该窗口小部件第一次添加到桌面时调用该方法 58 | */ 59 | override fun onEnabled(context: Context) { 60 | // context.startService(Intent(context, UpdateDataService::class.java)) 61 | } 62 | 63 | /* 64 | * 当最后一个该窗口小部件删除时调用该方法 65 | */ 66 | override fun onDisabled(context: Context) { 67 | // context.stopService(Intent(context, UpdateDataService::class.java)) 68 | } 69 | /* 70 | * 当小部件大小改变时 71 | */ 72 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 73 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 74 | } 75 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider1.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | import com.whitefan.jdlite.util.dmToPx 14 | 15 | class MyAppWidgetProvider1 : AppWidgetProvider() { 16 | 17 | /* 18 | * 每次窗口小部件被更新都调用一次该方法 19 | */ 20 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 21 | for (appwidgetId in appWidgetIds) { 22 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout) 23 | remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 24 | val name = ComponentName(context, MyAppWidgetProvider1::class.java) 25 | appWidgetManager.updateAppWidget(name, remoteViews) 26 | } 27 | } 28 | 29 | /* 30 | * 接收窗口小部件点击时发送的广播 31 | */ 32 | override fun onReceive(context: Context, intent: Intent) { 33 | super.onReceive(context, intent) 34 | //这里判断是自己的action,做自己的事情 35 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 36 | UpdateTask.widgetUpdateDataUtil1.updateWidget("ck1") 37 | } 38 | } 39 | 40 | /* 41 | * 当小部件从备份恢复时调用该方法 42 | */ 43 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 44 | super.onRestored(context, oldWidgetIds, newWidgetIds) 45 | } 46 | 47 | /* 48 | * 每删除一次窗口小部件就调用一次 49 | */ 50 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 51 | super.onDeleted(context, appWidgetIds) 52 | } 53 | 54 | /* 55 | * 当该窗口小部件第一次添加到桌面时调用该方法 56 | */ 57 | override fun onEnabled(context: Context) { 58 | // context.startService(Intent(context, UpdateDataService::class.java)) 59 | } 60 | 61 | /* 62 | * 当最后一个该窗口小部件删除时调用该方法 63 | */ 64 | override fun onDisabled(context: Context) { 65 | // context.stopService(Intent(context, UpdateDataService::class.java)) 66 | } 67 | 68 | /* 69 | * 当小部件大小改变时 70 | */ 71 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 72 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider1_2.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | 14 | class MyAppWidgetProvider1_2 : AppWidgetProvider() { 15 | 16 | /* 17 | * 每次窗口小部件被更新都调用一次该方法 18 | */ 19 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 20 | for (appwidgetId in appWidgetIds) { 21 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout2) 22 | // remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 23 | val name = ComponentName(context, MyAppWidgetProvider1_2::class.java) 24 | appWidgetManager.updateAppWidget(name, remoteViews) 25 | } 26 | } 27 | 28 | /* 29 | * 接收窗口小部件点击时发送的广播 30 | */ 31 | override fun onReceive(context: Context, intent: Intent) { 32 | super.onReceive(context, intent) 33 | //这里判断是自己的action,做自己的事情 34 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 35 | UpdateTask.widgetUpdateDataUtil1_2.updateWidget("ck1") 36 | } 37 | } 38 | 39 | /* 40 | * 当小部件从备份恢复时调用该方法 41 | */ 42 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 43 | super.onRestored(context, oldWidgetIds, newWidgetIds) 44 | } 45 | 46 | /* 47 | * 每删除一次窗口小部件就调用一次 48 | */ 49 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 50 | super.onDeleted(context, appWidgetIds) 51 | } 52 | 53 | /* 54 | * 当该窗口小部件第一次添加到桌面时调用该方法 55 | */ 56 | override fun onEnabled(context: Context) { 57 | // context.startService(Intent(context, UpdateDataService::class.java)) 58 | } 59 | 60 | /* 61 | * 当最后一个该窗口小部件删除时调用该方法 62 | */ 63 | override fun onDisabled(context: Context) { 64 | // context.stopService(Intent(context, UpdateDataService::class.java)) 65 | } 66 | 67 | /* 68 | * 当小部件大小改变时 69 | */ 70 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 71 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 72 | } 73 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider2.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | import com.whitefan.jdlite.util.dmToPx 14 | 15 | class MyAppWidgetProvider2 : AppWidgetProvider() { 16 | 17 | /* 18 | * 每次窗口小部件被更新都调用一次该方法 19 | */ 20 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 21 | for (appwidgetId in appWidgetIds) { 22 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout) 23 | remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 24 | val name = ComponentName(context, MyAppWidgetProvider2::class.java) 25 | appWidgetManager.updateAppWidget(name, remoteViews) 26 | } 27 | } 28 | 29 | /* 30 | * 接收窗口小部件点击时发送的广播 31 | */ 32 | override fun onReceive(context: Context, intent: Intent) { 33 | super.onReceive(context, intent) 34 | //这里判断是自己的action,做自己的事情 35 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 36 | UpdateTask.widgetUpdateDataUtil2.updateWidget("ck2") 37 | } 38 | } 39 | 40 | /* 41 | * 当小部件从备份恢复时调用该方法 42 | */ 43 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 44 | super.onRestored(context, oldWidgetIds, newWidgetIds) 45 | } 46 | 47 | /* 48 | * 每删除一次窗口小部件就调用一次 49 | */ 50 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 51 | super.onDeleted(context, appWidgetIds) 52 | } 53 | 54 | /* 55 | * 当该窗口小部件第一次添加到桌面时调用该方法 56 | */ 57 | override fun onEnabled(context: Context) { 58 | // context.startService(Intent(context, UpdateDataService::class.java)) 59 | } 60 | 61 | /* 62 | * 当最后一个该窗口小部件删除时调用该方法 63 | */ 64 | override fun onDisabled(context: Context) { 65 | // context.stopService(Intent(context, UpdateDataService::class.java)) 66 | } 67 | 68 | /* 69 | * 当小部件大小改变时 70 | */ 71 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 72 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider2_2.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | 14 | class MyAppWidgetProvider2_2 : AppWidgetProvider() { 15 | 16 | /* 17 | * 每次窗口小部件被更新都调用一次该方法 18 | */ 19 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 20 | for (appwidgetId in appWidgetIds) { 21 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout2) 22 | // remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 23 | val name = ComponentName(context, MyAppWidgetProvider2_2::class.java) 24 | appWidgetManager.updateAppWidget(name, remoteViews) 25 | } 26 | } 27 | 28 | /* 29 | * 接收窗口小部件点击时发送的广播 30 | */ 31 | override fun onReceive(context: Context, intent: Intent) { 32 | super.onReceive(context, intent) 33 | //这里判断是自己的action,做自己的事情 34 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 35 | UpdateTask.widgetUpdateDataUtil2_2.updateWidget("ck2") 36 | } 37 | } 38 | 39 | /* 40 | * 当小部件从备份恢复时调用该方法 41 | */ 42 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 43 | super.onRestored(context, oldWidgetIds, newWidgetIds) 44 | } 45 | 46 | /* 47 | * 每删除一次窗口小部件就调用一次 48 | */ 49 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 50 | super.onDeleted(context, appWidgetIds) 51 | } 52 | 53 | /* 54 | * 当该窗口小部件第一次添加到桌面时调用该方法 55 | */ 56 | override fun onEnabled(context: Context) { 57 | // context.startService(Intent(context, UpdateDataService::class.java)) 58 | } 59 | 60 | /* 61 | * 当最后一个该窗口小部件删除时调用该方法 62 | */ 63 | override fun onDisabled(context: Context) { 64 | // context.stopService(Intent(context, UpdateDataService::class.java)) 65 | } 66 | 67 | /* 68 | * 当小部件大小改变时 69 | */ 70 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 71 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 72 | } 73 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider3.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | import com.whitefan.jdlite.util.dmToPx 14 | 15 | class MyAppWidgetProvider3 : AppWidgetProvider() { 16 | 17 | /* 18 | * 每次窗口小部件被更新都调用一次该方法 19 | */ 20 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 21 | for (appwidgetId in appWidgetIds) { 22 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout) 23 | remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 24 | val name = ComponentName(context, MyAppWidgetProvider3::class.java) 25 | appWidgetManager.updateAppWidget(name, remoteViews) 26 | } 27 | } 28 | 29 | /* 30 | * 接收窗口小部件点击时发送的广播 31 | */ 32 | override fun onReceive(context: Context, intent: Intent) { 33 | super.onReceive(context, intent) 34 | //这里判断是自己的action,做自己的事情 35 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 36 | UpdateTask.widgetUpdateDataUtil3.updateWidget("ck3") 37 | } 38 | } 39 | 40 | /* 41 | * 当小部件从备份恢复时调用该方法 42 | */ 43 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 44 | super.onRestored(context, oldWidgetIds, newWidgetIds) 45 | } 46 | 47 | /* 48 | * 每删除一次窗口小部件就调用一次 49 | */ 50 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 51 | super.onDeleted(context, appWidgetIds) 52 | } 53 | 54 | /* 55 | * 当该窗口小部件第一次添加到桌面时调用该方法 56 | */ 57 | override fun onEnabled(context: Context) { 58 | // context.startService(Intent(context, UpdateDataService::class.java)) 59 | } 60 | 61 | /* 62 | * 当最后一个该窗口小部件删除时调用该方法 63 | */ 64 | override fun onDisabled(context: Context) { 65 | // context.stopService(Intent(context, UpdateDataService::class.java)) 66 | } 67 | 68 | /* 69 | * 当小部件大小改变时 70 | */ 71 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 72 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider3_2.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | 14 | class MyAppWidgetProvider3_2 : AppWidgetProvider() { 15 | 16 | /* 17 | * 每次窗口小部件被更新都调用一次该方法 18 | */ 19 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 20 | for (appwidgetId in appWidgetIds) { 21 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout2) 22 | // remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 23 | val name = ComponentName(context, MyAppWidgetProvider3_2::class.java) 24 | appWidgetManager.updateAppWidget(name, remoteViews) 25 | } 26 | } 27 | 28 | /* 29 | * 接收窗口小部件点击时发送的广播 30 | */ 31 | override fun onReceive(context: Context, intent: Intent) { 32 | super.onReceive(context, intent) 33 | //这里判断是自己的action,做自己的事情 34 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 35 | UpdateTask.widgetUpdateDataUtil3_2.updateWidget("ck3") 36 | } 37 | } 38 | 39 | /* 40 | * 当小部件从备份恢复时调用该方法 41 | */ 42 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 43 | super.onRestored(context, oldWidgetIds, newWidgetIds) 44 | } 45 | 46 | /* 47 | * 每删除一次窗口小部件就调用一次 48 | */ 49 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 50 | super.onDeleted(context, appWidgetIds) 51 | } 52 | 53 | /* 54 | * 当该窗口小部件第一次添加到桌面时调用该方法 55 | */ 56 | override fun onEnabled(context: Context) { 57 | // context.startService(Intent(context, UpdateDataService::class.java)) 58 | } 59 | 60 | /* 61 | * 当最后一个该窗口小部件删除时调用该方法 62 | */ 63 | override fun onDisabled(context: Context) { 64 | // context.stopService(Intent(context, UpdateDataService::class.java)) 65 | } 66 | 67 | /* 68 | * 当小部件大小改变时 69 | */ 70 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 71 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 72 | } 73 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider4.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | import com.whitefan.jdlite.util.dmToPx 14 | 15 | class MyAppWidgetProvider4 : AppWidgetProvider() { 16 | 17 | /* 18 | * 每次窗口小部件被更新都调用一次该方法 19 | */ 20 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 21 | for (appwidgetId in appWidgetIds) { 22 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout) 23 | remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 24 | val name = ComponentName(context, MyAppWidgetProvider4::class.java) 25 | appWidgetManager.updateAppWidget(name, remoteViews) 26 | } 27 | } 28 | 29 | /* 30 | * 接收窗口小部件点击时发送的广播 31 | */ 32 | override fun onReceive(context: Context, intent: Intent) { 33 | super.onReceive(context, intent) 34 | //这里判断是自己的action,做自己的事情 35 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 36 | UpdateTask.widgetUpdateDataUtil4.updateWidget("ck4") 37 | } 38 | } 39 | 40 | /* 41 | * 当小部件从备份恢复时调用该方法 42 | */ 43 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 44 | super.onRestored(context, oldWidgetIds, newWidgetIds) 45 | } 46 | 47 | /* 48 | * 每删除一次窗口小部件就调用一次 49 | */ 50 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 51 | super.onDeleted(context, appWidgetIds) 52 | } 53 | 54 | /* 55 | * 当该窗口小部件第一次添加到桌面时调用该方法 56 | */ 57 | override fun onEnabled(context: Context) { 58 | // context.startService(Intent(context, UpdateDataService::class.java)) 59 | } 60 | 61 | /* 62 | * 当最后一个该窗口小部件删除时调用该方法 63 | */ 64 | override fun onDisabled(context: Context) { 65 | // context.stopService(Intent(context, UpdateDataService::class.java)) 66 | } 67 | 68 | /* 69 | * 当小部件大小改变时 70 | */ 71 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 72 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider4_2.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | 14 | class MyAppWidgetProvider4_2 : AppWidgetProvider() { 15 | 16 | /* 17 | * 每次窗口小部件被更新都调用一次该方法 18 | */ 19 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 20 | for (appwidgetId in appWidgetIds) { 21 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout2) 22 | // remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 23 | val name = ComponentName(context, MyAppWidgetProvider4_2::class.java) 24 | appWidgetManager.updateAppWidget(name, remoteViews) 25 | } 26 | } 27 | 28 | /* 29 | * 接收窗口小部件点击时发送的广播 30 | */ 31 | override fun onReceive(context: Context, intent: Intent) { 32 | super.onReceive(context, intent) 33 | //这里判断是自己的action,做自己的事情 34 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 35 | UpdateTask.widgetUpdateDataUtil4_2.updateWidget("ck4") 36 | } 37 | } 38 | 39 | /* 40 | * 当小部件从备份恢复时调用该方法 41 | */ 42 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 43 | super.onRestored(context, oldWidgetIds, newWidgetIds) 44 | } 45 | 46 | /* 47 | * 每删除一次窗口小部件就调用一次 48 | */ 49 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 50 | super.onDeleted(context, appWidgetIds) 51 | } 52 | 53 | /* 54 | * 当该窗口小部件第一次添加到桌面时调用该方法 55 | */ 56 | override fun onEnabled(context: Context) { 57 | // context.startService(Intent(context, UpdateDataService::class.java)) 58 | } 59 | 60 | /* 61 | * 当最后一个该窗口小部件删除时调用该方法 62 | */ 63 | override fun onDisabled(context: Context) { 64 | // context.stopService(Intent(context, UpdateDataService::class.java)) 65 | } 66 | 67 | /* 68 | * 当小部件大小改变时 69 | */ 70 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 71 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 72 | } 73 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider5.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | import com.whitefan.jdlite.util.dmToPx 14 | 15 | class MyAppWidgetProvider5 : AppWidgetProvider() { 16 | 17 | /* 18 | * 每次窗口小部件被更新都调用一次该方法 19 | */ 20 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 21 | for (appwidgetId in appWidgetIds) { 22 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout) 23 | remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 24 | val name = ComponentName(context, MyAppWidgetProvider5::class.java) 25 | appWidgetManager.updateAppWidget(name, remoteViews) 26 | } 27 | } 28 | 29 | /* 30 | * 接收窗口小部件点击时发送的广播 31 | */ 32 | override fun onReceive(context: Context, intent: Intent) { 33 | super.onReceive(context, intent) 34 | //这里判断是自己的action,做自己的事情 35 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 36 | UpdateTask.widgetUpdateDataUtil5.updateWidget("ck5") 37 | } 38 | } 39 | 40 | /* 41 | * 当小部件从备份恢复时调用该方法 42 | */ 43 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 44 | super.onRestored(context, oldWidgetIds, newWidgetIds) 45 | } 46 | 47 | /* 48 | * 每删除一次窗口小部件就调用一次 49 | */ 50 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 51 | super.onDeleted(context, appWidgetIds) 52 | } 53 | 54 | /* 55 | * 当该窗口小部件第一次添加到桌面时调用该方法 56 | */ 57 | override fun onEnabled(context: Context) { 58 | // context.startService(Intent(context, UpdateDataService::class.java)) 59 | } 60 | 61 | /* 62 | * 当最后一个该窗口小部件删除时调用该方法 63 | */ 64 | override fun onDisabled(context: Context) { 65 | // context.stopService(Intent(context, UpdateDataService::class.java)) 66 | } 67 | 68 | /* 69 | * 当小部件大小改变时 70 | */ 71 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 72 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider5_2.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.widget.RemoteViews 11 | import com.whitefan.jdlite.R 12 | import com.whitefan.jdlite.util.UpdateTask 13 | 14 | class MyAppWidgetProvider5_2 : AppWidgetProvider() { 15 | 16 | /* 17 | * 每次窗口小部件被更新都调用一次该方法 18 | */ 19 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 20 | for (appwidgetId in appWidgetIds) { 21 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout2) 22 | // remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_15.dmToPx(), 0, R.dimen.dp_15.dmToPx(), 0) 23 | val name = ComponentName(context, MyAppWidgetProvider5_2::class.java) 24 | appWidgetManager.updateAppWidget(name, remoteViews) 25 | } 26 | } 27 | 28 | /* 29 | * 接收窗口小部件点击时发送的广播 30 | */ 31 | override fun onReceive(context: Context, intent: Intent) { 32 | super.onReceive(context, intent) 33 | //这里判断是自己的action,做自己的事情 34 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 35 | UpdateTask.widgetUpdateDataUtil5_2.updateWidget("ck5") 36 | } 37 | } 38 | 39 | /* 40 | * 当小部件从备份恢复时调用该方法 41 | */ 42 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 43 | super.onRestored(context, oldWidgetIds, newWidgetIds) 44 | } 45 | 46 | /* 47 | * 每删除一次窗口小部件就调用一次 48 | */ 49 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 50 | super.onDeleted(context, appWidgetIds) 51 | } 52 | 53 | /* 54 | * 当该窗口小部件第一次添加到桌面时调用该方法 55 | */ 56 | override fun onEnabled(context: Context) { 57 | // context.startService(Intent(context, UpdateDataService::class.java)) 58 | } 59 | 60 | /* 61 | * 当最后一个该窗口小部件删除时调用该方法 62 | */ 63 | override fun onDisabled(context: Context) { 64 | // context.stopService(Intent(context, UpdateDataService::class.java)) 65 | } 66 | 67 | /* 68 | * 当小部件大小改变时 69 | */ 70 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 71 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 72 | } 73 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/MyAppWidgetProvider_2.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.appwidget.AppWidgetProvider 4 | import android.appwidget.AppWidgetManager 5 | import android.content.Intent 6 | import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE 7 | import android.content.ComponentName 8 | import android.content.Context 9 | import android.os.Bundle 10 | import android.util.Log 11 | import android.widget.RemoteViews 12 | import com.whitefan.jdlite.R 13 | import com.whitefan.jdlite.util.UpdateTask 14 | 15 | class MyAppWidgetProvider_2 : AppWidgetProvider() { 16 | 17 | /* 18 | * 每次窗口小部件被更新都调用一次该方法 19 | */ 20 | override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 21 | for (appwidgetId in appWidgetIds) { 22 | val remoteViews = RemoteViews(context.packageName, R.layout.widges_layout2) 23 | // remoteViews.setViewPadding(R.id.rootParent, R.dimen.dp_0.dmToPx(), 0, R.dimen.dp_0.dmToPx(), 0) 24 | val name = ComponentName(context, MyAppWidgetProvider_2::class.java) 25 | appWidgetManager.updateAppWidget(name, remoteViews) 26 | } 27 | } 28 | 29 | /* 30 | * 接收窗口小部件点击时发送的广播 31 | */ 32 | override fun onReceive(context: Context, intent: Intent) { 33 | super.onReceive(context, intent) 34 | //这里判断是自己的action,做自己的事情 35 | Log.i("====", "onReceive") 36 | if (intent.action == ACTION_APPWIDGET_UPDATE) { 37 | UpdateTask.widgetUpdateDataUtil_2.updateWidget("ck") 38 | } 39 | } 40 | 41 | /* 42 | * 当小部件从备份恢复时调用该方法 43 | */ 44 | override fun onRestored(context: Context, oldWidgetIds: IntArray, newWidgetIds: IntArray) { 45 | super.onRestored(context, oldWidgetIds, newWidgetIds) 46 | } 47 | 48 | /* 49 | * 每删除一次窗口小部件就调用一次 50 | */ 51 | override fun onDeleted(context: Context, appWidgetIds: IntArray) { 52 | super.onDeleted(context, appWidgetIds) 53 | } 54 | 55 | /* 56 | * 当该窗口小部件第一次添加到桌面时调用该方法 57 | */ 58 | override fun onEnabled(context: Context) { 59 | // context.startService(Intent(context, UpdateDataService::class.java)) 60 | } 61 | 62 | /* 63 | * 当最后一个该窗口小部件删除时调用该方法 64 | */ 65 | override fun onDisabled(context: Context) { 66 | // context.stopService(Intent(context, UpdateDataService::class.java)) 67 | } 68 | /* 69 | * 当小部件大小改变时 70 | */ 71 | override fun onAppWidgetOptionsChanged(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int, newOptions: Bundle) { 72 | super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions) 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/whitefan/jdlite/widget/UpdateDataService.kt: -------------------------------------------------------------------------------- 1 | package com.whitefan.jdlite.widget 2 | 3 | import android.app.Service 4 | import android.content.Intent 5 | import android.os.IBinder 6 | import android.util.Log 7 | 8 | class UpdateDataService : Service() { 9 | override fun onBind(intent: Intent): IBinder? { 10 | return null 11 | } 12 | 13 | override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { 14 | Log.i("====","onStartCommand") 15 | return super.onStartCommand(intent, flags, startId) 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/res/anim/accelerate_quart.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_action_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_come_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_get_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_count_down_bac.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_notice_down_bac.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialogstyle1_one_sure_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialogstyle1_two_left_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialogstyle1_two_right_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/neu_background_card_down_bac.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_25_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_25_dialog1.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_dialog_one_sure_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_dialog_one_sure_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_dialog_two_left_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_dialog_two_left_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_dialog_two_right_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_dialog_two_right_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_text_frame.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 11 | 12 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/switch_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/switch_track.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/font/tencent.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubyangxg/JingBeanAppWidget/ed09ee5828e3927cbb23d8744a339a2bf13f33ed/app/src/main/res/font/tencent.ttf -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_empty.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_web.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 25 | 26 | 30 | 31 | 32 | 33 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_layout_style1.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 14 | 15 | 19 | 20 | 25 | 26 | 27 | 32 | 33 | 34 | 45 | 46 | 51 | 52 | 65 | 66 | 67 | 68 | 72 | 73 | 78 | 79 | 92 | 93 | 98 | 99 | 112 | 113 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_layout_style2.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 16 | 17 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_layout_style3.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 20 | 21 | 31 | 32 | 44 | 45 | 46 |