├── .gitignore ├── .idea ├── .gitignore ├── compiler.xml ├── gradle.xml ├── misc.xml ├── sqlandroid.xml └── vcs.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── glcc │ │ └── client │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore.png │ ├── java │ │ └── com │ │ │ └── glcc │ │ │ └── client │ │ │ ├── Constants.java │ │ │ ├── DrawView.java │ │ │ ├── GLCCClient.java │ │ │ ├── LogInfoWindow.java │ │ │ ├── Login.java │ │ │ ├── MyUtils.java │ │ │ ├── Register.java │ │ │ ├── SSLSocketClient.java │ │ │ ├── SeekAcounts.java │ │ │ ├── ShowVideo.java │ │ │ ├── SpacesItemDecoration.java │ │ │ ├── SplashScreen.java │ │ │ ├── VideoRecyclerViewAdapter.java │ │ │ ├── VideoShowRelativeLayout.java │ │ │ └── manager │ │ │ ├── ContourModel.java │ │ │ ├── UserModel.java │ │ │ ├── VideoModel.java │ │ │ └── VideoRecorderModel.java │ └── res │ │ ├── anim │ │ ├── animation_loading.xml │ │ ├── animation_log.xml │ │ ├── animation_recycler_loading.xml │ │ └── animation_titledesc.xml │ │ ├── drawable-anydpi │ │ └── ic_account_circle.xml │ │ ├── drawable-hdpi │ │ ├── check.png │ │ ├── coding.png │ │ ├── colon.png │ │ ├── gear.png │ │ ├── ic_account_circle.png │ │ ├── ic_https.png │ │ ├── image_break.png │ │ ├── info.png │ │ ├── loading.png │ │ ├── logout.png │ │ ├── message.png │ │ ├── more.png │ │ ├── notify.png │ │ ├── play_button.png │ │ ├── recycler_loading.png │ │ ├── redo_arrow_symbol.png │ │ ├── reduce.png │ │ ├── refresh_button.png │ │ ├── stop_button.png │ │ ├── toyger_cat.png │ │ ├── trash.png │ │ ├── trash_confirm.png │ │ ├── undo_circular_arrow.png │ │ ├── verify.png │ │ ├── video_camera.png │ │ └── wide.png │ │ ├── drawable-ldpi │ │ ├── check.png │ │ ├── coding.png │ │ ├── colon.png │ │ ├── gear.png │ │ ├── ic_account_circle.png │ │ ├── ic_https.png │ │ ├── image_break.png │ │ ├── info.png │ │ ├── loading.png │ │ ├── logout.png │ │ ├── message.png │ │ ├── more.png │ │ ├── notify.png │ │ ├── play_button.png │ │ ├── recycler_loading.png │ │ ├── redo_arrow_symbol.png │ │ ├── reduce.png │ │ ├── refresh_button.png │ │ ├── stop_button.png │ │ ├── toyger_cat.png │ │ ├── trash.png │ │ ├── trash_confirm.png │ │ ├── undo_circular_arrow.png │ │ ├── verify.png │ │ ├── video_camera.png │ │ └── wide.png │ │ ├── drawable-mdpi │ │ ├── check.png │ │ ├── coding.png │ │ ├── colon.png │ │ ├── gear.png │ │ ├── ic_account_circle.png │ │ ├── ic_https.png │ │ ├── image_break.png │ │ ├── info.png │ │ ├── loading.png │ │ ├── logout.png │ │ ├── message.png │ │ ├── more.png │ │ ├── notify.png │ │ ├── play_button.png │ │ ├── recycler_loading.png │ │ ├── redo_arrow_symbol.png │ │ ├── reduce.png │ │ ├── refresh_button.png │ │ ├── stop_button.png │ │ ├── toyger_cat.png │ │ ├── trash.png │ │ ├── trash_confirm.png │ │ ├── undo_circular_arrow.png │ │ ├── verify.png │ │ ├── video_camera.png │ │ └── wide.png │ │ ├── drawable-tvdpi │ │ ├── ic_account_circle.png │ │ ├── ic_https.png │ │ └── toyger_cat.png │ │ ├── drawable-v24 │ │ └── bg_splash_skip.xml │ │ ├── drawable-xhdpi │ │ ├── check.png │ │ ├── coding.png │ │ ├── colon.png │ │ ├── gear.png │ │ ├── ic_account_circle.png │ │ ├── ic_https.png │ │ ├── image_break.png │ │ ├── info.png │ │ ├── loading.png │ │ ├── logout.png │ │ ├── message.png │ │ ├── more.png │ │ ├── notify.png │ │ ├── play_button.png │ │ ├── recycler_loading.png │ │ ├── redo_arrow_symbol.png │ │ ├── reduce.png │ │ ├── refresh_button.png │ │ ├── stop_button.png │ │ ├── toyger_cat.png │ │ ├── trash.png │ │ ├── trash_confirm.png │ │ ├── undo_circular_arrow.png │ │ ├── verify.png │ │ ├── video_camera.png │ │ └── wide.png │ │ ├── drawable-xxhdpi │ │ ├── check.png │ │ ├── coding.png │ │ ├── colon.png │ │ ├── gear.png │ │ ├── ic_account_circle.png │ │ ├── ic_https.png │ │ ├── image_break.png │ │ ├── info.png │ │ ├── loading.png │ │ ├── logout.png │ │ ├── message.png │ │ ├── more.png │ │ ├── notify.png │ │ ├── play_button.png │ │ ├── recycler_loading.png │ │ ├── redo_arrow_symbol.png │ │ ├── reduce.png │ │ ├── refresh_button.png │ │ ├── stop_button.png │ │ ├── toyger_cat.png │ │ ├── trash.png │ │ ├── trash_confirm.png │ │ ├── undo_circular_arrow.png │ │ ├── verify.png │ │ ├── video_camera.png │ │ └── wide.png │ │ ├── drawable-xxxhdpi │ │ ├── check.png │ │ ├── coding.png │ │ ├── colon.png │ │ ├── gear.png │ │ ├── ic_account_circle.png │ │ ├── ic_https.png │ │ ├── image_break.png │ │ ├── info.png │ │ ├── loading.png │ │ ├── logout.png │ │ ├── message.png │ │ ├── more.png │ │ ├── notify.png │ │ ├── play_button.png │ │ ├── recycler_loading.png │ │ ├── redo_arrow_symbol.png │ │ ├── reduce.png │ │ ├── refresh_button.png │ │ ├── stop_button.png │ │ ├── toyger_cat.png │ │ ├── trash.png │ │ ├── trash_confirm.png │ │ ├── undo_circular_arrow.png │ │ ├── verify.png │ │ ├── video_camera.png │ │ └── wide.png │ │ ├── drawable │ │ ├── bg_forget_signup.xml │ │ ├── bg_go_signin.xml │ │ ├── bg_login_button.xml │ │ ├── bg_login_edit.xml │ │ ├── bg_splash_skip_v2.xml │ │ ├── bg_toolbar.xml │ │ ├── bg_video_function_layout.xml │ │ ├── bg_video_info_signal.xml │ │ ├── bg_video_nav_item.xml │ │ ├── bg_video_show_player_tool_bar.xml │ │ ├── bg_video_show_root_layout.xml │ │ ├── bg_video_show_root_layout2.xml │ │ ├── bg_video_source_register.xml │ │ ├── bg_video_source_spinner.xml │ │ ├── bg_video_source_tool_bar.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_launcher_cat_background.xml │ │ ├── ic_launcher_foreground.xml │ │ └── ic_launcher_toyger_cat_foreground.xml │ │ ├── font │ │ ├── babycake.ttf │ │ ├── bd_cartoon_shout.ttf │ │ ├── bluestone.ttf │ │ ├── brokt.ttf │ │ ├── chizz.ttf │ │ ├── gfscus1d.ttf │ │ ├── pokemon.ttf │ │ └── rockfont.ttf │ │ ├── layout │ │ ├── activity_login.xml │ │ ├── activity_main.xml │ │ ├── activity_register.xml │ │ ├── activity_seek_acounts.xml │ │ ├── activity_show_video.xml │ │ ├── item_title_video_recycler_view_adapter.xml │ │ ├── item_video_recycler_view_adapter.xml │ │ ├── login_server_setting_dialog.xml │ │ ├── video_show_draw_confirm_edit.xml │ │ ├── video_show_nav_header.xml │ │ ├── video_show_notification.xml │ │ ├── video_show_server_play_setting_dialog.xml │ │ ├── video_source_delete_dialog.xml │ │ ├── video_source_register_dialog.xml │ │ └── video_source_spinner.xml │ │ ├── menu │ │ └── video_show_nav_menu.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── values-night │ │ └── themes.xml │ │ ├── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── mcolors.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ ├── themes.xml │ │ └── video_from_array.xml │ │ └── xml │ │ ├── backup_rules.xml │ │ └── data_extraction_rules.xml │ └── test │ └── java │ └── com │ └── glcc │ └── client │ └── ExampleUnitTest.java ├── asserts ├── clientInstance.gif ├── clientInstanceLogin.jpg ├── clientInstanceRegister.jpg ├── clientInstanceSplash.jpg ├── crossed.png ├── gitlink&&mmdeploy.png ├── glccWorkflow.png ├── ic_launcher.png ├── logoWithText.png ├── serverInstance.gif └── weixing.jpg ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── 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 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 62 | 63 | 64 | 65 | 66 | 67 | 69 | 70 | 75 | 76 | -------------------------------------------------------------------------------- /.idea/sqlandroid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 DDGRCF 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
 
2 |
3 | 4 |
5 | logo-catcat 6 |
7 |
8 |
 
9 |
10 | logo-mmdeply&&gitlink 11 |
12 |
13 | 14 |

15 | 16 | Cat Cat | MMDeply $\times$ GLCC 开源项目 | MMDeploy 实践 17 | 18 |

19 | 20 | 21 |

22 | System 23 |   24 | Role 25 |   26 | Build 27 |

28 | 29 | # 介绍 30 | ✨ 本项目是发起于[CCF GitLink开源编程夏令营](https://www.gitlink.org.cn/)(GitLink Code Camp, 简称GLCC). CCF GitLink 开源编程夏令营(GitLink Code Camp,简称 GLCC),是在 CCF 中国计算机学会指导下,由 GitLink 社区联合 CCF 开源发展委员会(CCF ODC)共同举办的面向全国高校学生的暑期开源项目实习计划。活动将联合各大开源企业、开源基金会、开源社区及开源领域专家,旨在鼓励高校学生通过参与真实的开源软件开发,感受开源文化,提升自身技术能力,进而达到为开源企业和社区输送优秀人才的目的。作为此次活动的特邀合作单位,OpenMMLab 设置了 12 个项目方向共 15 个课题 31 | 32 | ✨ 本项目基于[OpenMMLab](https://github.com/open-mmlab)下的子开源项目[MMDeploy](https://github.com/open-mmlab/mmdeploy)🔥🔥🔥实现的。MMDeploy 是 OpenMMLab 模型部署工具箱,为各算法库提供统一的部署体验。基于 MMDeploy,开发者可以轻松从训练 repo 生成指定硬件所需 SDK,省去大量适配时间。目前 MMDeploy 支持的算法 repo 有:mmcls、mmdet、mmdet3d、mmedit、mmocr、mmpose、mmseg、mmrazor。MMDeploy 同时支持超多推理后端:ONNX Runtime、TensorRT、ppl.nn、ncnn、OpenVINO,目前新版已经发布,快去体验一下吧🔥🔥🔥 33 | 34 | ✨ 针对如今猫猫饲养普及,但人们工作越来越忙碌,不能够照看猫猫的问题,本项目基于MMDeploy,实现了猫猫的检测识别、跟踪、视频记录、视频推送等服务,该服务主要具有以下两个功能: 35 | 36 | * 能够对猫猫进行检测和跟踪,并将检测结果进行推流,可通过手机App播放 37 | * 能够对猫猫进行划线检测,对于猫猫进入一定区域的时间点的视频进行记录并推送给用户 38 | 39 | 实际上通过简单的修改配置文件,能够很容易将本服务拓展到其他宠物的检测识别、跟踪服务 40 | 41 | 目前,该项目包括两个部分: 42 | 43 | * **能够响应Http请求,完成检测跟踪的服务器** 👈 **目前位置** 44 | * [能够发起Http请求,完成实现播放的客服端](https://github.com/DDGRCF/GLCC_AndroidApplication) 45 | 46 | **✨服务器目前支持的功能:** 47 | 48 | - [x] 响应基础的Http请求 49 | - [x] 猫猫检测和跟踪 50 | - [x] 猫猫的越线检测 51 | - [x] 猫猫的越线时间点视频的记录 52 | - [x] 猫猫监控的直播视频流的推送 53 | - [x] 记录视频的文件视频流的推送 54 | - [x] 提供配置文件可拓展其他类别 55 | - [x] 猫猫记录视频的定时删除 56 | - [ ] 加载SSL证书 57 | 58 | **✨客服端目前完成的功能:** 59 | 60 | - [x] 发起基础的Http请求 61 | - [x] 用户登录注册 62 | - [x] 视频源注册删除 63 | - [x] 猫猫监控的直播视频流的拉取 64 | - [x] 猫猫记录的文件视频流的拉取 65 | - [x] 支持服务器配置端口,IP等信息 66 | - [ ] 加载SSL证书 67 | 68 | # 预览 69 | 70 | 71 | ## 服务器 72 | 73 | ![serverInstance](/asserts/serverInstance.gif) 74 | 75 | ## 客服端 76 | server-Instance server-Instance server-Instance server-Instance 77 | 78 | ## 说明 79 | 80 | |
类型
|
说明
| 81 | |---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 82 | |
**服务端**
| 在上面的预览中,我们可以看到服务端运行后,(在客服端发送播放后)跳出来了一个视频界面,视频上两只猫猫被检测出来,并进行了跟踪。另外,我们可以注意到,外面有一个不规则的红色的框。这红色框就代表我们预先设置的栅栏,围栏之类的。猫猫进入了该区域就代表进入了危险区域,那么该红色框就变为实心,并发送通知给用户。这里为了方便演示,我直接将危险框放置在目标中心。值得一提的是,只有猫猫在该区域待够一定时间(可通过配置文件修改),服务器才会将猫猫识别为进入该危险区域 | 83 | |
**客户端**
| 在上面的预览中,我们可以看到在客服端登录后,客服端向服务器发送一个拉流请求并播放相关视频(视频播放界面的纵横比为4/3,如果拉取视频流的纵横比大于或小于这个尺寸,会使用灰色进行填充),视频下有一个工具栏,工具栏上有**REGISTER**、**DELETE**、**DRAW**、**SOURCE**等字样,分别代表视频流的注册,视频流的删除,放置边界框(栅栏,围栏之类),目前的播放源功能的按钮(可通过旁边的下拉栏可切换播放源)。然后工具栏下面,有一个可滑动的视频栏目,这个视频栏目就猫猫进入危险时所记录的视频,点击每一个视频栏目可实现视频的播放 | 84 | 85 | 86 | # 工作流程 87 | glcc-workflow 88 | 89 | # 安装 90 | ### 环境依赖 91 | * **AnroidStudio** ➡️ [点击进入](https://developer.android.com/studio) 92 | ### 安装命令 93 | 使用最新AndroidStudio打开项目即可 94 | 95 | # 开源许可证 96 | 本项目采用 [MIT](./LICENSE) 开源许可证 97 | 98 | # 感谢以下项目 99 | * [MMDeploy](https://github.com/open-mmlab/mmdeploy.git) 100 | * [Workflow](https://github.com/sogou/workflow/blob/master) 101 | * [MegFlow](https://github.com/MegEngine/MegFlow) 102 | * [AnroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 103 | * [DiglogX](https://github.com/kongzue/DialogX) 104 | * [Fab](https://github.com/Clans/FloatingActionButton) 105 | 106 | # 技术交流 107 | weixing -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | compileSdk 32 7 | 8 | defaultConfig { 9 | applicationId "com.glcc.client" 10 | minSdk 21 11 | targetSdk 32 12 | versionCode 1 13 | versionName "1.0" 14 | ndk { 15 | abiFilters "armeabi-v7a", "arm64-v8a" 16 | } // Tencent 17 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 18 | } 19 | 20 | buildTypes { 21 | release { 22 | minifyEnabled false 23 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 24 | } 25 | } 26 | compileOptions { 27 | sourceCompatibility JavaVersion.VERSION_1_8 28 | targetCompatibility JavaVersion.VERSION_1_8 29 | } 30 | } 31 | 32 | dependencies { 33 | implementation 'commons-beanutils:commons-beanutils:1.9.3' 34 | implementation ('net.sf.json-lib:json-lib:2.4:jdk15'){ 35 | exclude group: 'commons-beanutils' 36 | } 37 | // implementation 'com.tencent.liteav:LiteAVSDK_Professional:latest.release' // Tencent 38 | implementation 'com.tencent.liteav:LiteAVSDK_Professional:10.6.0.11182' // Tencent 39 | implementation 'androidx.appcompat:appcompat:1.4.2' 40 | implementation 'com.google.android.material:material:1.6.1' 41 | implementation 'androidx.constraintlayout:constraintlayout:2.1.4' 42 | implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.10' 43 | implementation 'androidx.recyclerview:recyclerview:1.2.1' 44 | implementation 'com.google.android.material:compose-theme-adapter:1.1.14' 45 | implementation 'com.blankj:utilcode:1.30.7' 46 | implementation "com.github.kongzue.DialogX:DialogX:0.0.46.beta2" 47 | implementation 'androidx.percentlayout:percentlayout:1.0.0' 48 | implementation 'com.github.clans:fab:1.6.4' 49 | implementation 'androidx.navigation:navigation-ui:2.5.0' 50 | androidTestImplementation 'androidx.test.ext:junit:1.1.3' 51 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' 52 | } -------------------------------------------------------------------------------- /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/androidTest/java/com/glcc/client/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.glcc.client", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 20 | 23 | 26 | 29 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/Constants.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import android.annotation.SuppressLint; 4 | 5 | import java.util.Arrays; 6 | import java.util.HashSet; 7 | import java.util.Set; 8 | 9 | public class Constants { 10 | // Login 11 | static int SPLASH_SCREEN = 6000; 12 | static int DISSPLASH_SCREEN = 2500; 13 | // Server 14 | public static String GLCC_SERVER_IP = "172.20.10.3"; 15 | public static int GLCC_PLAYER_PORT = 8080; 16 | 17 | public static String GLCC_SERVER_HOST = "https://" + GLCC_SERVER_IP; 18 | public static int GLCC_SERVER_PORT = 9999; 19 | 20 | // public static final String GLCC_VIDEO_PLAYER_BASE_URL = "http://172.20.10.3:8080/live"; 21 | public static String GLCC_VIDEO_PLAYER_BASE_URL = "http://" + GLCC_SERVER_IP + ":" + GLCC_PLAYER_PORT + "/live"; 22 | public static final String GLCC_DEFAULT_VIDEO_NAME = "test"; 23 | 24 | // @SuppressLint("DefaultLocale") 25 | // public static String GLCC_SERVER_URL = String.format("%s:%d", GLCC_SERVER_HOST, GLCC_SERVER_PORT); 26 | public static String GLCC_SERVER_URL = GLCC_SERVER_HOST + ":" + GLCC_SERVER_PORT; 27 | 28 | public static String GLCC_HELLO_URI = "/hello_world"; 29 | public static String GLCC_HELLO_URL = GLCC_SERVER_URL + GLCC_HELLO_URI; 30 | 31 | public static String GLCC_LOGIN_URI = "/login"; 32 | public static String GLCC_LOGIN_URL = GLCC_SERVER_URL + GLCC_LOGIN_URI; 33 | 34 | public static String GLCC_REGISTER_URI = "/register"; 35 | public static String GLCC_REGISTER_URL = GLCC_SERVER_URL + GLCC_REGISTER_URI; 36 | 37 | public static String GLCC_REGISTER_VIDEO_URI = GLCC_LOGIN_URI + "/register_video"; 38 | public static String GLCC_REGISTER_VIDEO_URL = GLCC_SERVER_URL + GLCC_REGISTER_VIDEO_URI; 39 | 40 | public static String GLCC_DELETE_VIDEO_URI = GLCC_LOGIN_URI + "/delete_video"; 41 | public static String GLCC_DELETE_VIDEO_URL = GLCC_SERVER_URL + GLCC_DELETE_VIDEO_URI; 42 | 43 | public static String GLCC_DECT_VIDEO_URI = GLCC_LOGIN_URI + "/dect_video"; 44 | public static String GLCC_DECT_VIDEO_URL = GLCC_SERVER_URL + GLCC_DECT_VIDEO_URI; 45 | 46 | public static String GLCC_DISDECT_VIDEO_URI = GLCC_LOGIN_URI + "/disdect_video"; 47 | public static String GLCC_DISDECT_VIDEO_URL = GLCC_SERVER_URL + GLCC_DISDECT_VIDEO_URI; 48 | 49 | public static String GLCC_PUT_LATTICE_URI = GLCC_LOGIN_URI + "/put_lattice"; 50 | public static String GLCC_PUT_LATTICE_URL = GLCC_SERVER_URL + GLCC_PUT_LATTICE_URI; 51 | 52 | public static String GLCC_DISPUT_LATTICE_URI = GLCC_LOGIN_URI + "/disput_lattice"; 53 | public static String GLCC_DISPUT_LATTICE_URL = GLCC_SERVER_URL + GLCC_DISPUT_LATTICE_URI; 54 | 55 | public static String GLCC_DECT_VIDEO_FILE_URI = GLCC_LOGIN_URI + "/dect_video_file"; 56 | public static String GLCC_DECT_VIDEO_FILE_URL = GLCC_SERVER_URL + GLCC_DECT_VIDEO_FILE_URI; 57 | 58 | public static String GLCC_FETCH_VIDEO_FILE_URI = GLCC_LOGIN_URI + "/fetch_video_file"; 59 | public static String GLCC_FETCH_VIDEO_FILE_URL = GLCC_SERVER_URL + GLCC_FETCH_VIDEO_FILE_URI; 60 | 61 | public static String GLCC_KICK_DECT_VIDEO_FILE_URI = GLCC_LOGIN_URI + "/kick_dect_video_file"; 62 | public static String GLCC_KICK_DECT_VIDEO_FILE_URL = GLCC_SERVER_URL + GLCC_KICK_DECT_VIDEO_FILE_URI; 63 | 64 | public static String GLCC_TRANSMISS_VIDEO_FILE_URI = GLCC_LOGIN_URI + "/transmiss_video_file"; 65 | public static String GLCC_TRANSMISS_VIDEO_FILE_URL = GLCC_SERVER_URL + GLCC_TRANSMISS_VIDEO_FILE_URI; 66 | 67 | 68 | public static final String GLCC_NOTIFICATION_TAG = "GLCC_NOTIFICATION"; 69 | public static final String GLCC_SERVER_SETTING_TAG = "GLCC_SERVER_SET"; 70 | 71 | // Video Type 72 | public static final Set SUPPORT_VIDEO_PREFIX = new HashSet<>(Arrays.asList("rtmp://", "http://")); 73 | public static final Set SUPPORT_VIDEO_SUFFIX = new HashSet<>(Arrays.asList("flv")); 74 | 75 | protected static void reLoadData() { 76 | GLCC_SERVER_HOST = "https://" + GLCC_SERVER_IP; 77 | GLCC_VIDEO_PLAYER_BASE_URL = "http://" + GLCC_SERVER_IP + ":" + GLCC_PLAYER_PORT + "/live"; 78 | GLCC_SERVER_URL = GLCC_SERVER_HOST + ":" + GLCC_SERVER_PORT; 79 | GLCC_HELLO_URL = GLCC_SERVER_URL + GLCC_HELLO_URI; 80 | GLCC_LOGIN_URL = GLCC_SERVER_URL + GLCC_LOGIN_URI; 81 | GLCC_REGISTER_URL = GLCC_SERVER_URL + GLCC_REGISTER_URI; 82 | GLCC_REGISTER_VIDEO_URL = GLCC_SERVER_URL + GLCC_REGISTER_VIDEO_URI; 83 | GLCC_DELETE_VIDEO_URL = GLCC_SERVER_URL + GLCC_DELETE_VIDEO_URI; 84 | GLCC_DECT_VIDEO_URL = GLCC_SERVER_URL + GLCC_DECT_VIDEO_URI; 85 | GLCC_DISDECT_VIDEO_URL = GLCC_SERVER_URL + GLCC_DISDECT_VIDEO_URI; 86 | GLCC_PUT_LATTICE_URL = GLCC_SERVER_URL + GLCC_PUT_LATTICE_URI; 87 | GLCC_DISPUT_LATTICE_URL = GLCC_SERVER_URL + GLCC_DISPUT_LATTICE_URI; 88 | GLCC_DECT_VIDEO_FILE_URL = GLCC_SERVER_URL + GLCC_DECT_VIDEO_FILE_URI; 89 | GLCC_FETCH_VIDEO_FILE_URL = GLCC_SERVER_URL + GLCC_FETCH_VIDEO_FILE_URI; 90 | GLCC_KICK_DECT_VIDEO_FILE_URL = GLCC_SERVER_URL + GLCC_KICK_DECT_VIDEO_FILE_URI; 91 | GLCC_TRANSMISS_VIDEO_FILE_URL = GLCC_SERVER_URL + GLCC_TRANSMISS_VIDEO_FILE_URI; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/GLCCClient.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import java.io.BufferedInputStream; 4 | import java.io.FileInputStream; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.security.KeyManagementException; 8 | import java.security.KeyStore; 9 | import java.security.KeyStoreException; 10 | import java.security.NoSuchAlgorithmException; 11 | import java.security.SecureRandom; 12 | import java.security.cert.CertificateException; 13 | import java.security.cert.CertificateFactory; 14 | 15 | import javax.net.ssl.HostnameVerifier; 16 | import javax.net.ssl.SSLContext; 17 | import javax.net.ssl.SSLSession; 18 | import javax.net.ssl.TrustManager; 19 | import javax.net.ssl.TrustManagerFactory; 20 | import javax.net.ssl.X509TrustManager; 21 | 22 | import okhttp3.MediaType; 23 | import okhttp3.OkHttpClient; 24 | import okhttp3.Request; 25 | import okhttp3.RequestBody; 26 | import okhttp3.Response; 27 | 28 | public class GLCCClient { 29 | private static OkHttpClient client = new OkHttpClient().newBuilder() 30 | .sslSocketFactory(SSLSocketClient.getSSLSocketFactory(), SSLSocketClient.getX509TrustManager()) 31 | .hostnameVerifier(SSLSocketClient.getHostnameVerifier()) 32 | .build(); 33 | 34 | public static Response doCommonGet(String url) { 35 | Request request = new Request.Builder() 36 | .get() 37 | .url(url) 38 | .build(); 39 | try { 40 | return client.newCall(request).execute(); 41 | } catch (IOException e) { 42 | e.printStackTrace(); 43 | return null; 44 | } 45 | } 46 | 47 | public static Response doCommonPost(String url, String content) { 48 | MediaType JSON = MediaType.parse("application/json;charset=utf-8"); 49 | RequestBody requestBody = RequestBody.create(JSON, content); 50 | Request request = new Request.Builder() 51 | .post(requestBody) 52 | .url(url) 53 | .build(); 54 | try { 55 | return client.newCall(request).execute(); 56 | } catch (IOException e) { 57 | e.printStackTrace(); 58 | return null; 59 | } 60 | } 61 | private SSLContext getSLLContext() { 62 | SSLContext sslContext = null; 63 | try { 64 | CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 65 | InputStream certificate = new BufferedInputStream(new FileInputStream("load_der.crt")); 66 | KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); 67 | keyStore.load(null); 68 | String certificateAlias = Integer.toString(0); 69 | keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate)); 70 | sslContext = SSLContext.getInstance("TLS"); 71 | final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 72 | trustManagerFactory.init(keyStore); 73 | sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom()); 74 | } catch (CertificateException e) { 75 | e.printStackTrace(); 76 | } catch (KeyStoreException e) { 77 | e.printStackTrace(); 78 | } catch (NoSuchAlgorithmException e) { 79 | e.printStackTrace(); 80 | } catch (IOException e) { 81 | e.printStackTrace(); 82 | } catch (KeyManagementException e) { 83 | e.printStackTrace(); 84 | } 85 | return sslContext; 86 | } 87 | 88 | private OkHttpClient.Builder getHttpsClient() { 89 | OkHttpClient.Builder okhttpClient = new OkHttpClient().newBuilder(); 90 | //信任所有服务器地址 91 | okhttpClient.hostnameVerifier(new HostnameVerifier() { 92 | @Override 93 | public boolean verify(String s, SSLSession sslSession) { 94 | //设置为true 95 | return true; 96 | } 97 | }); 98 | //创建管理器 99 | TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 100 | @Override 101 | public void checkClientTrusted( 102 | java.security.cert.X509Certificate[] x509Certificates, 103 | String s) throws java.security.cert.CertificateException { 104 | } 105 | 106 | @Override 107 | public void checkServerTrusted( 108 | java.security.cert.X509Certificate[] x509Certificates, 109 | String s) throws java.security.cert.CertificateException { 110 | } 111 | 112 | @Override 113 | public java.security.cert.X509Certificate[] getAcceptedIssuers() { 114 | return new java.security.cert.X509Certificate[] {}; 115 | } 116 | } }; 117 | try { 118 | SSLContext sslContext = SSLContext.getInstance("TLS"); 119 | sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); 120 | 121 | //为OkHttpClient设置sslSocketFactory 122 | okhttpClient.sslSocketFactory(sslContext.getSocketFactory()); 123 | 124 | } catch (Exception e) { 125 | e.printStackTrace(); 126 | } 127 | 128 | return okhttpClient; 129 | } 130 | 131 | 132 | } 133 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/LogInfoWindow.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import android.widget.PopupWindow; 4 | 5 | public class LogInfoWindow extends PopupWindow { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/MyUtils.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import android.app.Activity; 4 | import android.graphics.CornerPathEffect; 5 | import android.util.DisplayMetrics; 6 | import android.view.View; 7 | 8 | import androidx.annotation.NonNull; 9 | 10 | import com.blankj.utilcode.util.BarUtils; 11 | 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | public class MyUtils { 16 | public static void setMyStatusBar(@NonNull final Activity activity) { 17 | BarUtils.transparentStatusBar(activity); 18 | BarUtils.setStatusBarLightMode(activity, true); 19 | } 20 | 21 | } 22 | class DouglasUtil { 23 | 24 | class Coordinate { 25 | private double x; 26 | private double y; 27 | public Coordinate(double x, double y) { 28 | this.x = x; 29 | this.y = y; 30 | } 31 | 32 | public double getX() { 33 | return x; 34 | } 35 | 36 | public void setX(double x) { 37 | this.x = x; 38 | } 39 | 40 | public double getY() { 41 | return y; 42 | } 43 | 44 | public void setY(double y) { 45 | this.y = y; 46 | } 47 | } 48 | private List points; 49 | 50 | public DouglasUtil(List pf) { 51 | int i = 0; 52 | float[] point = new float[2]; 53 | for (float p : pf) { 54 | if (i % 2 == 0) { 55 | point[0] = p; 56 | } else { 57 | point[1] = p; 58 | points.add(new Coordinate(point[0], point[1])); 59 | } 60 | i++; 61 | } 62 | } 63 | 64 | public List douglas(int threshold) { 65 | 66 | // 找到最大阈值点 67 | double maxH = 0; 68 | int index = 0; 69 | int end = points.size(); 70 | for (int i = 1; i < end - 1; i++) { 71 | // 计算点到起点和终点组成线段的高 72 | double h = getDistance(points.get(i), points.get(0), points.get(end - 1)); 73 | if (h > maxH) { 74 | maxH = h; 75 | index = i; 76 | } 77 | } 78 | 79 | // 如果存在最大阈值点,就进行递归遍历出所有最大阈值点 80 | List result = getCoordinates(points, threshold, maxH, index, end, new ArrayList<>()); 81 | List pfList = new ArrayList<>(); 82 | for (Coordinate r : result) { 83 | pfList.add((float) r.getX()); 84 | pfList.add((float) r.getY()); 85 | } 86 | return pfList; 87 | } 88 | 89 | private List douglas(List points, int threshold) { 90 | List result = new ArrayList<>(); 91 | 92 | // 找到最大阈值点 93 | double maxH = 0; 94 | int index = 0; 95 | int end = points.size(); 96 | for (int i = 1; i < end - 1; i++) { 97 | // 计算点到起点和终点组成线段的高 98 | double h = getDistance(points.get(i), points.get(0), points.get(end - 1)); 99 | if (h > maxH) { 100 | maxH = h; 101 | index = i; 102 | } 103 | } 104 | // 如果存在最大阈值点,就进行递归遍历出所有最大阈值点 105 | return getCoordinates(points, threshold, maxH, index, end, result); 106 | } 107 | 108 | private List getCoordinates(List points, int epsilon, double maxH, int index, int end, List result) { 109 | if (maxH > epsilon) { 110 | List leftPoints = new ArrayList<>(); 111 | List rightPoints = new ArrayList<>(); 112 | // 分成两半 继续找比阈值大的 113 | for (int i = 0; i < end; i++) { 114 | if (i < index) { 115 | leftPoints.add(points.get(i)); 116 | } else { 117 | rightPoints.add(points.get(i)); 118 | } 119 | } 120 | List leftResult = douglas(leftPoints, epsilon); 121 | List rightResult = douglas(rightPoints, epsilon); 122 | 123 | rightResult.remove(0); 124 | leftResult.addAll(rightResult); 125 | result = leftResult; 126 | } else { 127 | result.add(points.get(0)); 128 | result.add(points.get(end - 1)); 129 | } 130 | return result; 131 | } 132 | 133 | /** 134 | * 计算点到直线的距离 135 | */ 136 | private double getDistance(Coordinate p, Coordinate s, Coordinate e) { 137 | double AB = distance(s, e); 138 | double CB = distance(p, s); 139 | double CA = distance(p, e); 140 | // 三角形面积 141 | double S = helen(CB, CA, AB); 142 | // 三角形面积 = AB(底) * 高 / 2 143 | // 所以 高 = 2 * 三角形面积 / AB(底) 144 | return 2 * S / AB; 145 | } 146 | 147 | /** 148 | * 计算两点之间的距离 149 | */ 150 | private double distance(Coordinate p1, Coordinate p2) { 151 | double x1 = p1.getX(); 152 | double y1 = p1.getY(); 153 | double x2 = p2.getX(); 154 | double y2 = p2.getY(); 155 | return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); 156 | } 157 | 158 | /** 159 | * 三角形面积 160 | */ 161 | private double helen(double CB, double CA, double AB) { 162 | double p = (CB + CA + AB) / 2; 163 | return Math.sqrt(p * (p - CB) * (p - CA) * (p - AB)); 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/Register.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.appcompat.app.AppCompatActivity; 5 | 6 | import android.annotation.SuppressLint; 7 | import android.app.Activity; 8 | import android.app.ActivityOptions; 9 | import android.content.Context; 10 | import android.content.Intent; 11 | import android.os.Bundle; 12 | import android.os.Handler; 13 | import android.util.Log; 14 | import android.util.Pair; 15 | import android.view.View; 16 | import android.widget.Button; 17 | import android.widget.ImageView; 18 | import android.widget.TextView; 19 | import android.widget.Toast; 20 | 21 | import com.blankj.utilcode.util.BarUtils; 22 | import com.blankj.utilcode.util.ClickUtils; 23 | import com.glcc.client.manager.UserModel; 24 | import com.google.android.material.textfield.TextInputEditText; 25 | import com.kongzue.dialogx.dialogs.WaitDialog; 26 | 27 | import net.sf.json.JSONObject; 28 | 29 | import java.util.Objects; 30 | 31 | import okhttp3.Response; 32 | 33 | public class Register extends AppCompatActivity { 34 | private ImageView mImageViewLog; 35 | private TextView mTxtViewAppWeclome; 36 | private TextView mTxtViewAppContinue; 37 | private TextInputEditText mTxtEditUsername; 38 | private TextInputEditText mTxtEditNickname; 39 | private TextInputEditText mTxtEditPassword; 40 | private TextInputEditText mTxtEditRePassword; 41 | 42 | private Button mBtnRegister; 43 | private TextView mBtnGoBackSigIn; 44 | private Handler handler; 45 | 46 | @Override 47 | protected void onCreate(Bundle savedInstanceState) { 48 | super.onCreate(savedInstanceState); 49 | MyUtils.setMyStatusBar(Register.this); 50 | setContentView(R.layout.activity_register); 51 | mTxtEditUsername = findViewById(R.id.register_username_edit); 52 | mTxtEditNickname = findViewById(R.id.register_nickname_edit); 53 | mTxtEditPassword = findViewById(R.id.register_password_edit); 54 | mTxtEditRePassword = findViewById(R.id.register_repassword_edit); 55 | mImageViewLog = findViewById(R.id.register_login_logo); 56 | mTxtViewAppWeclome = findViewById(R.id.register_weclome); 57 | mTxtViewAppContinue = findViewById(R.id.register_continue); 58 | mBtnRegister = findViewById(R.id.register_btn); 59 | mBtnGoBackSigIn = findViewById(R.id.goback_signin_btn); 60 | BarUtils.addMarginTopEqualStatusBarHeight(mImageViewLog); 61 | InitRegister(); 62 | } 63 | 64 | private void mTransitionAnimation(Context context, Class cls) { 65 | Intent intent = new Intent(context, cls); 66 | Pair[] pairs = new Pair[7]; 67 | pairs[0] = new Pair<>(mImageViewLog, getResources().getString(R.string.logo_image_transition_name)); 68 | pairs[1] = new Pair<>(mTxtViewAppWeclome, getResources().getString(R.string.logo_text_transition_name)); 69 | pairs[2] = new Pair<>(mTxtViewAppContinue, getResources().getString(R.string.desc_text_transition_name)); 70 | pairs[3] = new Pair<>(mTxtEditUsername, getResources().getString(R.string.username_text_transition_name)); 71 | pairs[4] = new Pair<>(mTxtEditPassword, getResources().getString(R.string.password_text_transition_name)); 72 | pairs[5] = new Pair<>(mBtnRegister, getResources().getString(R.string.go_btn_transition_name)); 73 | pairs[6] = new Pair<>(mBtnGoBackSigIn, getResources().getString(R.string.register_text_transition_name)); 74 | ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation((Activity)context, pairs); 75 | startActivity(intent, options.toBundle()); 76 | } 77 | 78 | 79 | protected void InitRegister() { 80 | handler = new Handler(); 81 | setListener(); 82 | } 83 | 84 | protected void setListener() { 85 | OnClick onclick = new OnClick(); 86 | mBtnRegister.setOnClickListener(onclick); 87 | mBtnGoBackSigIn.setOnClickListener(onclick); 88 | } 89 | 90 | protected class OnClick extends ClickUtils.OnDebouncingClickListener { 91 | @SuppressLint("NonConstantResourceId") 92 | @Override 93 | public void onDebouncingClick(@NonNull View view) { 94 | switch (view.getId()) { 95 | case R.id.register_btn: { 96 | String register_username = Objects.requireNonNull(mTxtEditUsername.getText()).toString(); 97 | String register_nickname = Objects.requireNonNull(mTxtEditNickname.getText()).toString(); 98 | String register_password = Objects.requireNonNull(mTxtEditPassword.getText()).toString(); 99 | String register_repassword = Objects.requireNonNull(mTxtEditRePassword.getText()).toString(); 100 | JSONObject register_infos = new JSONObject(); 101 | register_infos.put("user_name", register_username); 102 | register_infos.put("user_password", register_password); 103 | register_infos.put("user_nickname", register_nickname); 104 | Log.d("Register", register_infos.toString()); 105 | if (register_username.length() == 0) { 106 | handler.post(()->{ 107 | Toast.makeText(Register.this, "Username can't be empty", Toast.LENGTH_SHORT).show(); 108 | }); 109 | break; 110 | } 111 | if (register_password.length() == 0) { 112 | handler.post(()->{ 113 | Toast.makeText(Register.this, "Password can't be empty", Toast.LENGTH_SHORT).show(); 114 | }); 115 | break; 116 | } 117 | if (register_repassword.length() == 0) { 118 | handler.post(()->{ 119 | Toast.makeText(Register.this, "Please input password again", Toast.LENGTH_SHORT).show(); 120 | }); 121 | break; 122 | } 123 | if (register_nickname.length() == 0) { 124 | handler.post(()->{ 125 | Toast.makeText(Register.this, "Nickname can't be empty", Toast.LENGTH_SHORT).show(); 126 | }); 127 | break; 128 | } 129 | 130 | if (!register_password.equals(register_repassword)) { 131 | handler.post(()->{ 132 | mTxtEditPassword.requestFocus(); 133 | mTxtEditPassword.setText(""); 134 | mTxtEditRePassword.setText(""); 135 | Toast.makeText(Register.this, "Twice input password is not same", Toast.LENGTH_SHORT).show(); 136 | }); 137 | break; 138 | } 139 | 140 | new Thread(()->{ 141 | WaitDialog.show("Please Wait!"); 142 | Response response = GLCCClient.doCommonPost(Constants.GLCC_REGISTER_URL, register_infos.toString()); 143 | WaitDialog.dismiss(); 144 | mBtnRegister.setClickable(false); 145 | if (response == null) { 146 | handler.post(()->{ 147 | Toast.makeText(Register.this, "Request Error", Toast.LENGTH_SHORT).show(); 148 | }); 149 | } else { 150 | if (response.code() == 200) { 151 | handler.post(()->{ 152 | mTxtEditUsername.requestFocus(); 153 | mTxtEditUsername.setText(""); 154 | mTxtEditNickname.setText(""); 155 | mTxtEditPassword.setText(""); 156 | mTxtEditRePassword.setText(""); 157 | Toast.makeText(Register.this, "Register Success", Toast.LENGTH_SHORT).show(); 158 | }); 159 | UserModel userModel = new UserModel(); 160 | userModel.setUserName(register_username); 161 | userModel.setPassword(register_password); 162 | userModel.setNickName(register_nickname); 163 | userModel.saveUserModel(); 164 | UserModel t = UserModel.loadUserModel(register_username); 165 | } else { 166 | handler.post(()->{ 167 | mTxtEditUsername.requestFocus(); 168 | mTxtEditPassword.setText(""); 169 | mTxtEditRePassword.setText(""); 170 | Toast.makeText(Register.this, "Failed! Please check your information", Toast.LENGTH_SHORT).show(); 171 | }); 172 | } 173 | } 174 | mBtnRegister.setClickable(true); 175 | }).start(); 176 | break; 177 | 178 | } case R.id.goback_signin_btn: { 179 | handler.post(()->{ 180 | mTransitionAnimation(Register.this, Login.class); 181 | }); 182 | break; 183 | } 184 | default: 185 | throw new IllegalStateException("Unexpected value: " + view.getId()); 186 | } 187 | 188 | } 189 | } 190 | } -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/SSLSocketClient.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import java.security.cert.*; 4 | import java.security.*; 5 | import javax.net.ssl.*; 6 | import java.util.*; 7 | 8 | public class SSLSocketClient { 9 | public static SSLSocketFactory getSSLSocketFactory() { 10 | try { 11 | SSLContext sslContext = SSLContext.getInstance("SSL"); 12 | sslContext.init(null, getTrustManager(), new SecureRandom()); 13 | return sslContext.getSocketFactory(); 14 | } catch (Exception e) { 15 | throw new RuntimeException(e); 16 | } 17 | } 18 | 19 | //获取TrustManager 20 | private static TrustManager[] getTrustManager() { 21 | TrustManager[] trustAllCerts = new TrustManager[]{ 22 | new X509TrustManager() { 23 | @Override 24 | public void checkClientTrusted(X509Certificate[] chain, String authType) { 25 | } 26 | 27 | @Override 28 | public void checkServerTrusted(X509Certificate[] chain, String authType) { 29 | } 30 | 31 | @Override 32 | public X509Certificate[] getAcceptedIssuers() { 33 | return new X509Certificate[]{}; 34 | } 35 | } 36 | }; 37 | return trustAllCerts; 38 | } 39 | 40 | //获取HostnameVerifier 41 | public static HostnameVerifier getHostnameVerifier() { 42 | HostnameVerifier hostnameVerifier = new HostnameVerifier() { 43 | @Override 44 | public boolean verify(String s, SSLSession sslSession) { 45 | return true; 46 | } 47 | }; 48 | return hostnameVerifier; 49 | } 50 | public static X509TrustManager getX509TrustManager() { 51 | X509TrustManager trustManager = null; 52 | try { 53 | TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 54 | trustManagerFactory.init((KeyStore) null); 55 | TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); 56 | if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { 57 | throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers)); 58 | } 59 | trustManager = (X509TrustManager) trustManagers[0]; 60 | } catch (Exception e) { 61 | e.printStackTrace(); 62 | } 63 | 64 | return trustManager; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/SeekAcounts.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | 5 | import android.os.Bundle; 6 | 7 | public class SeekAcounts extends AppCompatActivity { 8 | 9 | @Override 10 | protected void onCreate(Bundle savedInstanceState) { 11 | super.onCreate(savedInstanceState); 12 | setContentView(R.layout.activity_seek_acounts); 13 | } 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/SpacesItemDecoration.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import android.graphics.Rect; 4 | import android.view.View; 5 | 6 | import androidx.annotation.NonNull; 7 | import androidx.recyclerview.widget.RecyclerView; 8 | 9 | public class SpacesItemDecoration extends RecyclerView.ItemDecoration { 10 | private int space; 11 | 12 | public SpacesItemDecoration(int space) { 13 | } 14 | 15 | @Override 16 | public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { 17 | outRect.left = space; 18 | outRect.right = space; 19 | outRect.bottom = space; 20 | 21 | if (parent.getChildItemId(view) == 0) { 22 | outRect.top = space; 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/SplashScreen.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.appcompat.app.AppCompatActivity; 5 | 6 | import android.annotation.SuppressLint; 7 | import android.app.ActivityOptions; 8 | import android.content.Intent; 9 | import android.os.Bundle; 10 | import android.os.Handler; 11 | import android.os.Message; 12 | import android.util.Pair; 13 | import android.view.View; 14 | import android.view.animation.Animation; 15 | import android.view.animation.AnimationUtils; 16 | import android.widget.Button; 17 | import android.widget.ImageView; 18 | import android.widget.TextView; 19 | 20 | import com.blankj.utilcode.util.BarUtils; 21 | import com.blankj.utilcode.util.ClickUtils; 22 | import com.blankj.utilcode.util.PermissionUtils; 23 | 24 | import java.util.Timer; 25 | import java.util.TimerTask; 26 | 27 | public class SplashScreen extends AppCompatActivity { 28 | 29 | private ImageView mImageViewLog; 30 | private TextView mTxtViewAppTitle; 31 | private TextView mTxtViewAppDescribe; 32 | private Button mTxtBtnSkip; 33 | private Animation mAnimationLog; 34 | private Animation mAnimationTitleDesc; 35 | private Handler handler; 36 | private Timer timer; 37 | private int time; 38 | 39 | @Override 40 | protected void onCreate(Bundle savedInstanceState) { 41 | super.onCreate(savedInstanceState); 42 | MyUtils.setMyStatusBar(SplashScreen.this); 43 | setContentView(R.layout.activity_main); 44 | // set values 45 | mTxtViewAppTitle = findViewById(R.id.txt_view_app_title); 46 | mTxtViewAppDescribe = findViewById(R.id.txt_view_app_describe); 47 | mImageViewLog = findViewById(R.id.imageview_log); 48 | mTxtBtnSkip = findViewById(R.id.txt_btn_skip); 49 | mAnimationLog = AnimationUtils.loadAnimation(this, R.anim.animation_log); 50 | mAnimationTitleDesc = AnimationUtils.loadAnimation(this, R.anim.animation_titledesc); 51 | InitSplash(); 52 | 53 | } 54 | 55 | @Override 56 | protected void onStop() { 57 | super.onStop(); 58 | finish(); 59 | overridePendingTransition(0, 0); 60 | } 61 | 62 | @Override 63 | protected void onDestroy() { 64 | super.onDestroy(); 65 | } 66 | 67 | private void mTransitionAnimation() { 68 | Intent intent = new Intent(SplashScreen.this, Login.class); 69 | Pair[] pairs = new Pair[3]; 70 | pairs[0] = new Pair<>(mImageViewLog, getResources().getString(R.string.logo_image_transition_name)); 71 | pairs[1] = new Pair<>(mTxtViewAppTitle, getResources().getString(R.string.logo_text_transition_name)); 72 | pairs[2] = new Pair<>(mTxtViewAppDescribe, getResources().getString(R.string.desc_text_transition_name)); 73 | ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(SplashScreen.this, pairs); 74 | startActivity(intent, options.toBundle()); 75 | } 76 | 77 | private void InitSplash() { 78 | time = Constants.SPLASH_SCREEN; 79 | mTxtBtnSkip.setClickable(false); 80 | mTxtBtnSkip.setVisibility(View.INVISIBLE); 81 | Handler handler = new Handler(new Handler.Callback() { 82 | @SuppressLint("SetTextI18n") 83 | @Override 84 | public boolean handleMessage(@NonNull Message msg) { 85 | switch (msg.what) { 86 | case 0: 87 | mTxtBtnSkip.setText("Skip: " + (int)(time / 1000)); 88 | break; 89 | case 1: 90 | timer.cancel(); 91 | mTransitionAnimation(); 92 | break; 93 | } 94 | return false; 95 | } 96 | }); 97 | mTxtBtnSkip.setOnClickListener(new ClickUtils.OnDebouncingClickListener() { 98 | @Override 99 | public void onDebouncingClick(View v) { 100 | handler.sendEmptyMessage(1); 101 | } 102 | }); 103 | 104 | timer = new Timer(true); 105 | timer.schedule(new TimerTask() { 106 | @Override 107 | public void run() { 108 | time = Math.max(time - 1000, 0); 109 | if (time < Constants.SPLASH_SCREEN - Constants.DISSPLASH_SCREEN) { 110 | if (mTxtBtnSkip.getVisibility() != View.VISIBLE) 111 | handler.post(()->{ 112 | mTxtBtnSkip.setClickable(true); 113 | mTxtBtnSkip.setVisibility(View.VISIBLE); 114 | }); 115 | } 116 | handler.sendEmptyMessage(time == 0 ? 1 : 0); 117 | } 118 | }, 1000, 1000); 119 | 120 | // Action 121 | mTxtViewAppDescribe.getPaint().setAntiAlias(true); 122 | mTxtViewAppTitle.getPaint().setAntiAlias(true); 123 | mImageViewLog.setAnimation(mAnimationLog); 124 | mTxtViewAppTitle.setAnimation(mAnimationTitleDesc); 125 | mTxtViewAppDescribe.setAnimation(mAnimationTitleDesc); 126 | BarUtils.addMarginTopEqualStatusBarHeight(mTxtBtnSkip); 127 | } 128 | } -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/VideoShowRelativeLayout.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.widget.RelativeLayout; 6 | 7 | import androidx.annotation.Nullable; 8 | 9 | public class VideoShowRelativeLayout extends RelativeLayout { 10 | private double layoutRatio = 4 / 3.; 11 | 12 | public static final int LANDSCAPE = 0; 13 | public static final int PORTRAIT = 1; 14 | 15 | private int rotateMode = PORTRAIT; 16 | 17 | public VideoShowRelativeLayout(Context context) { 18 | super(context); 19 | } 20 | 21 | public VideoShowRelativeLayout(Context context, AttributeSet attrs) { 22 | super(context, attrs); 23 | } 24 | 25 | public VideoShowRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) { 26 | super(context, attrs, defStyleAttr); 27 | } 28 | 29 | public VideoShowRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 30 | super(context, attrs, defStyleAttr, defStyleRes); 31 | } 32 | 33 | protected void setRotateMode(int rotateMode) { 34 | this.rotateMode = rotateMode; 35 | } 36 | 37 | 38 | @Override 39 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 40 | if (rotateMode == PORTRAIT) { 41 | int width = MeasureSpec.getSize(widthMeasureSpec); 42 | if (layoutRatio > 0) { 43 | double height = width / layoutRatio; 44 | heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) height, MeasureSpec.EXACTLY); 45 | } 46 | } else if (rotateMode == LANDSCAPE) { 47 | int height = MeasureSpec.getSize(heightMeasureSpec); 48 | if (layoutRatio > 0) { 49 | double width = height * layoutRatio; 50 | widthMeasureSpec = MeasureSpec.makeMeasureSpec((int) width, MeasureSpec.EXACTLY); 51 | } 52 | } 53 | super.onMeasure(widthMeasureSpec, heightMeasureSpec); 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/manager/ContourModel.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client.manager; 2 | 3 | import android.graphics.Path; 4 | 5 | import androidx.annotation.NonNull; 6 | 7 | import com.blankj.utilcode.util.GsonUtils; 8 | import com.blankj.utilcode.util.SPUtils; 9 | 10 | import java.util.HashMap; 11 | import java.util.List; 12 | import java.util.Map; 13 | 14 | public class ContourModel { 15 | private String contourName; 16 | private List contourPath; 17 | private static final String TAG = ContourModel.class.getName(); 18 | 19 | public String getContourName() { 20 | return contourName; 21 | } 22 | 23 | public void setContourName(String contourName) { 24 | this.contourName = contourName; 25 | } 26 | 27 | public List getContourPath() { 28 | return contourPath; 29 | } 30 | 31 | public void setContourPath(List contourPath) { 32 | this.contourPath = contourPath; 33 | } 34 | 35 | public static void removeAllContourModel(String userName, String videoName) { 36 | SPUtils.getInstance(TAG).getInstance(userName).getInstance(videoName).clear(); 37 | } 38 | 39 | public static void clearContourModel(String userName) { 40 | SPUtils.getInstance(TAG).getInstance(userName).clear(); 41 | } 42 | 43 | public static void removeContourModel(String userName, String videoName, String contourName) { 44 | SPUtils.getInstance(TAG).getInstance(userName).getInstance(videoName).remove(contourName); 45 | } 46 | 47 | public boolean saveContourModel(String userName, String videoName) { 48 | try { 49 | SPUtils.getInstance(TAG) 50 | .getInstance(userName) 51 | .getInstance(videoName) 52 | .put(contourName, GsonUtils.toJson(this)); 53 | return true; 54 | } catch (Exception e) { 55 | e.printStackTrace(); 56 | return false; 57 | } 58 | } 59 | 60 | public static ContourModel loadContourModel(String userName, String videoName, String contourName) { 61 | try { 62 | String json = SPUtils.getInstance(TAG) 63 | .getInstance(userName) 64 | .getInstance(videoName) 65 | .getString(contourName); 66 | return GsonUtils.fromJson(json, ContourModel.class); 67 | } catch (Exception e) { 68 | e.printStackTrace(); 69 | return null; 70 | } 71 | } 72 | 73 | public static Map loadAllContourModel(String userName, String videoName) { 74 | Map SPUtilsMap = (Map) SPUtils 75 | .getInstance(TAG) 76 | .getInstance(userName) 77 | .getInstance(videoName) 78 | .getAll(); 79 | Map SPUtilsMapModel = new HashMap<>(); 80 | for (Map.Entry item : SPUtilsMap.entrySet()) { 81 | try { 82 | SPUtilsMapModel.put(item.getKey(), GsonUtils.fromJson(item.getValue(), ContourModel.class)); 83 | } catch (Exception e) { 84 | e.printStackTrace(); 85 | SPUtilsMapModel.put(item.getKey(), new ContourModel()); 86 | } 87 | } 88 | return SPUtilsMapModel; 89 | } 90 | 91 | @NonNull 92 | @Override 93 | public String toString() { 94 | return "ContourModel{" + 95 | "contourName='" + contourName + '\'' + 96 | ", contourPath=" + contourPath + 97 | '}'; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/manager/UserModel.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client.manager; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import com.blankj.utilcode.util.GsonUtils; 6 | import com.blankj.utilcode.util.ObjectUtils; 7 | import com.blankj.utilcode.util.SPUtils; 8 | import com.tencent.liteav.videoproducer.producer.VideoProducerDef; 9 | 10 | import java.io.Serializable; 11 | 12 | 13 | public class UserModel implements Serializable { 14 | private String userName; 15 | private String password; 16 | private String nickName; 17 | private String userAvatar; 18 | private static final String TAG = UserModel.class.getName(); 19 | 20 | public String getUserName() { 21 | return userName; 22 | } 23 | 24 | public void setUserName(String userName) { 25 | this.userName = userName; 26 | } 27 | 28 | public String getPassword() { 29 | return password; 30 | } 31 | 32 | public void setPassword(String password) { 33 | this.password = password; 34 | } 35 | 36 | public String getNickName() { 37 | return nickName; 38 | } 39 | 40 | public void setNickName(String nickName) { 41 | this.nickName = nickName; 42 | } 43 | 44 | public String getUserAvatar() { 45 | return userAvatar; 46 | } 47 | 48 | public void setUserAvatar(String userAvatar) { 49 | this.userAvatar = userAvatar; 50 | } 51 | 52 | @NonNull 53 | @Override 54 | public String toString() { 55 | return "UserModel{" + 56 | "userName='" + userName + '\'' + 57 | ", password='" + password + '\'' + 58 | ", nickName='" + nickName + '\'' + 59 | ", userAvatar='" + userAvatar + '\'' + 60 | '}'; 61 | } 62 | 63 | public static boolean containUser(String userName) { 64 | return SPUtils.getInstance(TAG).contains(userName); 65 | } 66 | 67 | public boolean containUser() { 68 | return SPUtils.getInstance(TAG).contains(userName); 69 | } 70 | 71 | public boolean saveUserModel() { 72 | try { 73 | SPUtils.getInstance(TAG).put(userName, GsonUtils.toJson(this)); 74 | return true; 75 | } catch (Exception e) { 76 | e.printStackTrace(); 77 | return false; 78 | } 79 | } 80 | 81 | public boolean isEmpty() { 82 | return !ObjectUtils.isEmpty(userName) || !ObjectUtils.isEmpty(password) || !ObjectUtils.isEmpty(nickName); 83 | } 84 | 85 | public static boolean isEmpty(UserModel userModel) { 86 | return !ObjectUtils.isEmpty(userModel.userName) || !ObjectUtils.isEmpty(userModel.password) || !ObjectUtils.isEmpty(userModel.nickName); 87 | } 88 | 89 | public static boolean saveUserModel(UserModel userModel) { 90 | try { 91 | SPUtils.getInstance(TAG).put(userModel.userName, GsonUtils.toJson(userModel)); 92 | return true; 93 | } catch (Exception e) { 94 | e.printStackTrace(); 95 | return false; 96 | } 97 | } 98 | 99 | 100 | public static UserModel loadUserModel(String userName) { 101 | try { 102 | String json = SPUtils.getInstance(TAG).getString(userName); 103 | return GsonUtils.fromJson(json, UserModel.class); 104 | } catch (Exception e) { 105 | e.printStackTrace(); 106 | return null; 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/manager/VideoModel.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client.manager; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import com.blankj.utilcode.util.GsonUtils; 6 | import com.blankj.utilcode.util.SPUtils; 7 | 8 | import java.util.HashMap; 9 | import java.util.Map; 10 | 11 | public class VideoModel { 12 | private String videoName; 13 | private String videoUrl; 14 | private String roomUrl; 15 | private static final String TAG = VideoModel.class.getName(); 16 | 17 | public String getVideoName() { 18 | return videoName; 19 | } 20 | 21 | public void setVideoName(String videoName) { 22 | this.videoName = videoName; 23 | } 24 | 25 | public String getVideoUrl() { 26 | return videoUrl; 27 | } 28 | 29 | public void setVideoUrl(String videoUrl) { 30 | this.videoUrl = videoUrl; 31 | } 32 | 33 | public String getRoomUrl() { 34 | return roomUrl; 35 | } 36 | 37 | public void setRoomUrl(String roomUrl) { 38 | this.roomUrl = roomUrl; 39 | } 40 | 41 | public boolean saveVideoModel(String userName) { 42 | try { 43 | SPUtils.getInstance(TAG).getInstance(userName).put(videoName, GsonUtils.toJson(this)); 44 | return true; 45 | } catch (Exception e) { 46 | e.printStackTrace(); 47 | return false; 48 | } 49 | } 50 | 51 | public static VideoModel loadVideoModel(String userName, String videoName) { 52 | try { 53 | String json = SPUtils.getInstance(TAG).getInstance(userName).getString(videoName); 54 | return GsonUtils.fromJson(json, VideoModel.class); 55 | } catch (Exception e) { 56 | e.printStackTrace(); 57 | return null; 58 | } 59 | } 60 | 61 | public static void removeVideoModel(String userName, String videoName) { 62 | SPUtils.getInstance(TAG).getInstance(userName).remove(videoName); 63 | } 64 | 65 | public static void removeAllVideoModel(String userName) { 66 | SPUtils.getInstance(TAG).getInstance(userName).clear(); 67 | } 68 | 69 | public static Map loadAllVideoModel(String userName) { 70 | Map SPUtilsMap = (Map) SPUtils.getInstance(TAG).getInstance(userName).getAll(); 71 | Map SPUtilsMapModel = new HashMap<>(); 72 | for (Map.Entry item : SPUtilsMap.entrySet()) { 73 | try { 74 | SPUtilsMapModel.put(item.getKey(), GsonUtils.fromJson(item.getValue(), VideoModel.class)); 75 | } catch (Exception e) { 76 | e.printStackTrace(); 77 | SPUtilsMapModel.put(item.getKey(), new VideoModel()); 78 | } 79 | } 80 | return SPUtilsMapModel; 81 | } 82 | 83 | 84 | public static boolean containVideoModel(String userName, String videoName) { 85 | return SPUtils.getInstance(TAG).getInstance(userName).contains(videoName); 86 | } 87 | 88 | 89 | @NonNull 90 | @Override 91 | public String toString() { 92 | return "VideoModel{" + 93 | "videoName='" + videoName + '\'' + 94 | ", videoUrl='" + videoUrl + '\'' + 95 | ", roomUrl='" + roomUrl + '\'' + 96 | '}'; 97 | } 98 | } 99 | 100 | -------------------------------------------------------------------------------- /app/src/main/java/com/glcc/client/manager/VideoRecorderModel.java: -------------------------------------------------------------------------------- 1 | package com.glcc.client.manager; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | import androidx.annotation.NonNull; 6 | 7 | import com.blankj.utilcode.util.GsonUtils; 8 | import com.blankj.utilcode.util.SPUtils; 9 | 10 | import java.util.HashMap; 11 | import java.util.Map; 12 | 13 | public class VideoRecorderModel { 14 | private String imageUrl; 15 | private String videoUrl; 16 | private String startTime; 17 | private String endTime; 18 | private String message; 19 | private Bitmap bitMap; 20 | 21 | private static final String TAG = VideoRecorderModel.class.getName(); 22 | 23 | 24 | public String getImageUrl() { 25 | return imageUrl; 26 | } 27 | 28 | public void setImageUrl(String imageUrl) { 29 | this.imageUrl = imageUrl; 30 | } 31 | 32 | public String getMessage() { 33 | return message; 34 | } 35 | 36 | public void setMessage(String message) { 37 | this.message = message; 38 | } 39 | 40 | public Bitmap getBitMap() { 41 | return bitMap; 42 | } 43 | 44 | public void setBitMap(Bitmap bitMap) { 45 | this.bitMap = bitMap; 46 | } 47 | 48 | public String getStartTime() { 49 | return startTime; 50 | } 51 | 52 | public void setStartTime(String startTime) { 53 | this.startTime = startTime; 54 | } 55 | 56 | public String getEndTime() { 57 | return endTime; 58 | } 59 | 60 | public void setEndTime(String endTime) { 61 | this.endTime = endTime; 62 | } 63 | 64 | public String getVideoUrl() { 65 | return videoUrl; 66 | } 67 | 68 | public void setVideoUrl(String videoUrl) { 69 | this.videoUrl = videoUrl; 70 | } 71 | 72 | public static void removeRecorderModel(String userName, String videoName, String videoUrl) { 73 | SPUtils.getInstance(TAG).getInstance(userName).getInstance(videoName).remove(videoUrl); 74 | } 75 | 76 | public static void removeAllRecorderModel(String userName, String videoName) { 77 | SPUtils.getInstance(TAG).getInstance(userName).getInstance(videoName).clear(); 78 | } 79 | 80 | public static void clearRecorderModel(String userName) { 81 | SPUtils.getInstance(TAG).getInstance(userName).clear(); 82 | } 83 | 84 | public boolean saveVideoRecorderModel(String userName, String videoName) { 85 | try { 86 | SPUtils.getInstance(TAG) 87 | .getInstance(userName) 88 | .getInstance(videoName) 89 | .put(videoUrl, GsonUtils.toJson(this)); 90 | return true; 91 | } catch (Exception e) { 92 | e.printStackTrace(); 93 | return false; 94 | } 95 | } 96 | 97 | public static VideoRecorderModel loadVideoRecorderModel(String userName, String videoName, String videoUrl) { 98 | try { 99 | String json = SPUtils.getInstance(TAG) 100 | .getInstance(userName) 101 | .getInstance(videoName) 102 | .getString(videoUrl); 103 | return GsonUtils.fromJson(json, VideoRecorderModel.class); 104 | } catch (Exception e) { 105 | e.printStackTrace(); 106 | return null; 107 | } 108 | } 109 | 110 | public static Map loadAllVideoRecorderModel(String userName, String videoName) { 111 | Map SPUtilsMap = (Map) SPUtils 112 | .getInstance(TAG) 113 | .getInstance(userName) 114 | .getInstance(videoName) 115 | .getAll(); 116 | Map SPUtilsMapModel = new HashMap<>(); 117 | for (Map.Entry item : SPUtilsMap.entrySet()) { 118 | try { 119 | SPUtilsMapModel.put(item.getKey(), GsonUtils.fromJson(item.getValue(), VideoRecorderModel.class)); 120 | } catch (Exception e) { 121 | e.printStackTrace(); 122 | SPUtilsMapModel.put(item.getKey(), new VideoRecorderModel()); 123 | } 124 | } 125 | return SPUtilsMapModel; 126 | } 127 | 128 | @NonNull 129 | @Override 130 | public String toString() { 131 | return "VideoRecorderModel{" + 132 | "imageUrl='" + imageUrl + '\'' + 133 | ", videoUrl='" + videoUrl + '\'' + 134 | ", start_time='" + startTime + '\'' + 135 | ", end_time='" + endTime + '\'' + 136 | ", message='" + message + '\'' + 137 | ", bitMap=" + bitMap + 138 | '}'; 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /app/src/main/res/anim/animation_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/animation_log.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 18 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/anim/animation_recycler_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/animation_titledesc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_account_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/check.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/coding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/coding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/colon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/colon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/gear.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/ic_https.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/image_break.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/image_break.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/logout.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/message.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/play_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/play_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/recycler_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/recycler_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/redo_arrow_symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/redo_arrow_symbol.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/reduce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/reduce.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/refresh_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/refresh_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/stop_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/stop_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/toyger_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/toyger_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/trash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/trash_confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/trash_confirm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/undo_circular_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/undo_circular_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/verify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/video_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/video_camera.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-hdpi/wide.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/check.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/coding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/coding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/colon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/colon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/gear.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/ic_https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/ic_https.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/image_break.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/image_break.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/logout.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/message.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/play_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/play_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/recycler_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/recycler_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/redo_arrow_symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/redo_arrow_symbol.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/reduce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/reduce.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/refresh_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/refresh_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/stop_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/stop_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/toyger_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/toyger_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/trash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/trash_confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/trash_confirm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/undo_circular_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/undo_circular_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/verify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/video_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/video_camera.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-ldpi/wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-ldpi/wide.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/check.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/coding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/coding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/colon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/colon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/gear.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/ic_https.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/image_break.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/image_break.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/logout.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/message.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/play_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/play_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/recycler_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/recycler_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/redo_arrow_symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/redo_arrow_symbol.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/reduce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/reduce.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/refresh_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/refresh_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/stop_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/stop_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/toyger_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/toyger_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/trash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/trash_confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/trash_confirm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/undo_circular_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/undo_circular_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/verify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/video_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/video_camera.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-mdpi/wide.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-tvdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-tvdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-tvdpi/ic_https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-tvdpi/ic_https.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-tvdpi/toyger_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-tvdpi/toyger_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/bg_splash_skip.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/check.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/coding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/coding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/colon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/colon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/gear.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/ic_https.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/image_break.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/image_break.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/logout.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/message.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/play_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/play_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/recycler_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/recycler_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/redo_arrow_symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/redo_arrow_symbol.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/reduce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/reduce.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/refresh_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/refresh_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/stop_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/stop_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/toyger_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/toyger_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/trash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/trash_confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/trash_confirm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/undo_circular_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/undo_circular_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/verify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/video_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/video_camera.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xhdpi/wide.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/check.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/coding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/coding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/colon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/colon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/gear.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/ic_https.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/image_break.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/image_break.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/logout.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/message.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/play_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/play_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/recycler_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/recycler_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/redo_arrow_symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/redo_arrow_symbol.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/reduce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/reduce.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/refresh_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/refresh_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/stop_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/stop_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/toyger_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/toyger_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/trash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/trash_confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/trash_confirm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/undo_circular_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/undo_circular_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/verify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/video_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/video_camera.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxhdpi/wide.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/check.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/coding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/coding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/colon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/colon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/gear.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/ic_https.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/image_break.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/image_break.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/info.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/logout.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/message.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/play_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/play_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/recycler_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/recycler_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/redo_arrow_symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/redo_arrow_symbol.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/reduce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/reduce.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/refresh_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/refresh_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/stop_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/stop_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/toyger_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/toyger_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/trash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/trash_confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/trash_confirm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/undo_circular_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/undo_circular_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/verify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/video_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/video_camera.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/drawable-xxxhdpi/wide.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_forget_signup.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | 10 | 11 | 12 | 13 | 15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_go_signin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | 10 | 11 | 12 | 13 | 15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_login_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_login_edit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_splash_skip_v2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | 10 | 11 | 12 | 13 | 15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_function_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 13 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_info_signal.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_nav_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | 10 | 11 | 12 | 13 | 15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_show_player_tool_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 13 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_show_root_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_show_root_layout2.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 11 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_source_register.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 9 | 10 | 11 | 12 | 13 | 15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_source_spinner.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_source_tool_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_cat_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 18 | 22 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_toyger_cat_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 18 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/font/babycake.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/font/babycake.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/bd_cartoon_shout.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/font/bd_cartoon_shout.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/bluestone.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/font/bluestone.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/brokt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/font/brokt.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/chizz.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/font/chizz.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/gfscus1d.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/font/gfscus1d.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/pokemon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/font/pokemon.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/rockfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/font/rockfont.ttf -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 17 | 25 | 30 | 39 | 47 | 48 | 49 | 55 | 61 | 67 | 68 | 69 | 75 | 82 | 83 | 84 | 96 | 97 |