├── .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 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/.idea/sqlandroid.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
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 |
13 |
14 |
15 |
16 | Cat Cat | MMDeply $\times$ GLCC 开源项目 | MMDeploy 实践
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
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 | 
74 |
75 | ## 客服端
76 |
77 |
78 | ## 说明
79 |
80 | | 类型
| 说明
|
81 | |---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
82 | | **服务端**
| 在上面 的预览中,我们可以看到服务端运行后,(在客服端发送播放后)跳出来了一个视频界面,视频上两只猫猫被检测出来,并进行了跟踪。另外,我们可以注意到,外面有一个不规则的红色的框。这红色框就代表我们预先设置的栅栏,围栏之类的。猫猫进入了该区域就代表进入了危险区域,那么该红色框就变为实心,并发送通知给用户。这里为了方便演示,我直接将危险框放置在目标中心。值得一提的是,只有猫猫在该区域待够一定时间(可通过配置文件修改),服务器才会将猫猫识别为进入该危险区域 |
83 | | **客户端**
| 在上面 的预览中,我们可以看到在客服端登录后,客服端向服务器发送一个拉流请求并播放相关视频(视频播放界面的纵横比为4/3,如果拉取视频流的纵横比大于或小于这个尺寸,会使用灰色进行填充),视频下有一个工具栏,工具栏上有**REGISTER**、**DELETE**、**DRAW**、**SOURCE**等字样,分别代表视频流的注册,视频流的删除,放置边界框(栅栏,围栏之类),目前的播放源功能的按钮(可通过旁边的下拉栏可切换播放源)。然后工具栏下面,有一个可滑动的视频栏目,这个视频栏目就猫猫进入危险时所记录的视频,点击每一个视频栏目可实现视频的播放 |
84 |
85 |
86 | # 工作流程
87 |
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 |
--------------------------------------------------------------------------------
/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 |
105 |
106 |
117 |
118 |
119 |
120 |
129 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
20 |
29 |
30 |
41 |
42 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_register.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
20 |
25 |
34 |
42 |
43 |
44 |
50 |
54 |
61 |
62 |
66 |
73 |
74 |
79 |
87 |
88 |
93 |
101 |
102 |
111 |
112 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_seek_acounts.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
15 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_title_video_recycler_view_adapter.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_video_recycler_view_adapter.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
11 |
12 |
17 |
18 |
19 |
25 |
26 |
36 |
37 |
48 |
49 |
62 |
63 |
76 |
77 |
88 |
89 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/login_server_setting_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
13 |
20 |
21 |
26 |
32 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/video_show_draw_confirm_edit.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/video_show_nav_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
19 |
20 |
28 |
29 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/video_show_notification.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
13 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/video_show_server_play_setting_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/video_source_delete_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/video_source_register_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
9 |
15 |
24 |
33 |
34 |
41 |
47 |
54 |
55 |
60 |
66 |
73 |
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/video_source_spinner.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/video_show_nav_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFBB86FC
4 | #FF6200EE
5 | #FF3700B3
6 | #FF03DAC5
7 | #FF018786
8 | #FF000000
9 | #FFFFFFFF
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 10dp
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/mcolors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FF000000
4 | #FFFECE2F
5 | #FFF2F2F2
6 | #BB000000
7 | #BB000000
8 | #EE000000
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | GLCC-Client
3 | Cat Cat
4 | logo_image
5 | logo_text
6 | desc_text
7 | username_edit
8 | password_edit
9 | go_btn
10 | register_text
11 | A cat for logo
12 | Skip
13 | A Cat Detection app
14 | Hello there, Welcome Back
15 | Welcome
16 | Sign in to continue
17 | SignUp to start your new journey
18 | Username
19 | Nikename
20 | Password
21 | Password again
22 | Forget Password?
23 | GO
24 | New User? SIGN UP
25 | GO BACK SIGN IN
26 | REGISTER
27 | SOURCE:
28 | REGISTER
29 | DELETE
30 | Open navigation drawer
31 | Close navigation drawer
32 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/video_from_array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - null
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/app/src/test/java/com/glcc/client/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.glcc.client;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/asserts/clientInstance.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/clientInstance.gif
--------------------------------------------------------------------------------
/asserts/clientInstanceLogin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/clientInstanceLogin.jpg
--------------------------------------------------------------------------------
/asserts/clientInstanceRegister.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/clientInstanceRegister.jpg
--------------------------------------------------------------------------------
/asserts/clientInstanceSplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/clientInstanceSplash.jpg
--------------------------------------------------------------------------------
/asserts/crossed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/crossed.png
--------------------------------------------------------------------------------
/asserts/gitlink&&mmdeploy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/gitlink&&mmdeploy.png
--------------------------------------------------------------------------------
/asserts/glccWorkflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/glccWorkflow.png
--------------------------------------------------------------------------------
/asserts/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/ic_launcher.png
--------------------------------------------------------------------------------
/asserts/logoWithText.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/logoWithText.png
--------------------------------------------------------------------------------
/asserts/serverInstance.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/serverInstance.gif
--------------------------------------------------------------------------------
/asserts/weixing.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/asserts/weixing.jpg
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | plugins {
3 | id 'com.android.application' version '7.2.1' apply false
4 | id 'com.android.library' version '7.2.1' apply false
5 | }
6 |
7 |
8 | task clean(type: Delete) {
9 | delete rootProject.buildDir
10 | }
11 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app"s APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Enables namespacing of each library's R class so that its R class includes only the
19 | # resources declared in the library itself and none from the library's dependencies,
20 | # thereby reducing the size of the R class for that library
21 | android.nonTransitiveRClass=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DDGRCF/GLCC_AndroidApplication/0f5d3528725ed3bacff7b2466948e13e223421c9/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sat Jul 23 16:52:01 CST 2022
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | #
4 | # Copyright 2015 the original author or authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | ##
21 | ## Gradle start up script for UN*X
22 | ##
23 | ##############################################################################
24 |
25 | # Attempt to set APP_HOME
26 | # Resolve links: $0 may be a link
27 | PRG="$0"
28 | # Need this for relative symlinks.
29 | while [ -h "$PRG" ] ; do
30 | ls=`ls -ld "$PRG"`
31 | link=`expr "$ls" : '.*-> \(.*\)$'`
32 | if expr "$link" : '/.*' > /dev/null; then
33 | PRG="$link"
34 | else
35 | PRG=`dirname "$PRG"`"/$link"
36 | fi
37 | done
38 | SAVED="`pwd`"
39 | cd "`dirname \"$PRG\"`/" >/dev/null
40 | APP_HOME="`pwd -P`"
41 | cd "$SAVED" >/dev/null
42 |
43 | APP_NAME="Gradle"
44 | APP_BASE_NAME=`basename "$0"`
45 |
46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48 |
49 | # Use the maximum available, or set MAX_FD != -1 to use that value.
50 | MAX_FD="maximum"
51 |
52 | warn () {
53 | echo "$*"
54 | }
55 |
56 | die () {
57 | echo
58 | echo "$*"
59 | echo
60 | exit 1
61 | }
62 |
63 | # OS specific support (must be 'true' or 'false').
64 | cygwin=false
65 | msys=false
66 | darwin=false
67 | nonstop=false
68 | case "`uname`" in
69 | CYGWIN* )
70 | cygwin=true
71 | ;;
72 | Darwin* )
73 | darwin=true
74 | ;;
75 | MINGW* )
76 | msys=true
77 | ;;
78 | NONSTOP* )
79 | nonstop=true
80 | ;;
81 | esac
82 |
83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84 |
85 |
86 | # Determine the Java command to use to start the JVM.
87 | if [ -n "$JAVA_HOME" ] ; then
88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
89 | # IBM's JDK on AIX uses strange locations for the executables
90 | JAVACMD="$JAVA_HOME/jre/sh/java"
91 | else
92 | JAVACMD="$JAVA_HOME/bin/java"
93 | fi
94 | if [ ! -x "$JAVACMD" ] ; then
95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
96 |
97 | Please set the JAVA_HOME variable in your environment to match the
98 | location of your Java installation."
99 | fi
100 | else
101 | JAVACMD="java"
102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
103 |
104 | Please set the JAVA_HOME variable in your environment to match the
105 | location of your Java installation."
106 | fi
107 |
108 | # Increase the maximum file descriptors if we can.
109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
110 | MAX_FD_LIMIT=`ulimit -H -n`
111 | if [ $? -eq 0 ] ; then
112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
113 | MAX_FD="$MAX_FD_LIMIT"
114 | fi
115 | ulimit -n $MAX_FD
116 | if [ $? -ne 0 ] ; then
117 | warn "Could not set maximum file descriptor limit: $MAX_FD"
118 | fi
119 | else
120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
121 | fi
122 | fi
123 |
124 | # For Darwin, add options to specify how the application appears in the dock
125 | if $darwin; then
126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
127 | fi
128 |
129 | # For Cygwin or MSYS, switch paths to Windows format before running java
130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133 |
134 | JAVACMD=`cygpath --unix "$JAVACMD"`
135 |
136 | # We build the pattern for arguments to be converted via cygpath
137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
138 | SEP=""
139 | for dir in $ROOTDIRSRAW ; do
140 | ROOTDIRS="$ROOTDIRS$SEP$dir"
141 | SEP="|"
142 | done
143 | OURCYGPATTERN="(^($ROOTDIRS))"
144 | # Add a user-defined pattern to the cygpath arguments
145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
147 | fi
148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
149 | i=0
150 | for arg in "$@" ; do
151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
153 |
154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
156 | else
157 | eval `echo args$i`="\"$arg\""
158 | fi
159 | i=`expr $i + 1`
160 | done
161 | case $i in
162 | 0) set -- ;;
163 | 1) set -- "$args0" ;;
164 | 2) set -- "$args0" "$args1" ;;
165 | 3) set -- "$args0" "$args1" "$args2" ;;
166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
172 | esac
173 | fi
174 |
175 | # Escape application args
176 | save () {
177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
178 | echo " "
179 | }
180 | APP_ARGS=`save "$@"`
181 |
182 | # Collect all arguments for the java command, following the shell quoting and substitution rules
183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
184 |
185 | exec "$JAVACMD" "$@"
186 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 |
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 |
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 |
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto execute
44 |
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 |
51 | goto fail
52 |
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56 |
57 | if exist "%JAVA_EXE%" goto execute
58 |
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 |
65 | goto fail
66 |
67 | :execute
68 | @rem Setup the command line
69 |
70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71 |
72 |
73 | @rem Execute Gradle
74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75 |
76 | :end
77 | @rem End local scope for the variables with windows NT shell
78 | if "%ERRORLEVEL%"=="0" goto mainEnd
79 |
80 | :fail
81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82 | rem the _cmd.exe /c_ return code!
83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84 | exit /b 1
85 |
86 | :mainEnd
87 | if "%OS%"=="Windows_NT" endlocal
88 |
89 | :omega
90 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | gradlePluginPortal()
4 | google()
5 | mavenCentral()
6 | }
7 | }
8 | dependencyResolutionManagement {
9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
10 | repositories {
11 | google()
12 | maven { url 'https://jitpack.io' } //增加 jitPack Maven 仓库
13 | mavenCentral()
14 | }
15 | }
16 | rootProject.name = "GLCC-Client"
17 | include ':app'
18 |
--------------------------------------------------------------------------------