├── .gradle
├── 7.4
│ ├── checksums
│ │ ├── checksums.lock
│ │ ├── md5-checksums.bin
│ │ └── sha1-checksums.bin
│ ├── dependencies-accessors
│ │ ├── dependencies-accessors.lock
│ │ └── gc.properties
│ ├── executionHistory
│ │ ├── executionHistory.bin
│ │ └── executionHistory.lock
│ ├── fileChanges
│ │ └── last-build.bin
│ ├── fileHashes
│ │ ├── fileHashes.bin
│ │ ├── fileHashes.lock
│ │ └── resourceHashesCache.bin
│ └── gc.properties
├── buildOutputCleanup
│ ├── buildOutputCleanup.lock
│ ├── cache.properties
│ └── outputFiles.bin
├── checksums
│ ├── checksums.lock
│ ├── md5-checksums.bin
│ └── sha1-checksums.bin
├── file-system.probe
└── vcs-1
│ └── gc.properties
├── .idea
├── .gitignore
├── assetWizardSettings.xml
├── compiler.xml
├── dbnavigator.xml
├── gradle.xml
├── misc.xml
├── modules
│ └── stage.iml
├── navEditor.xml
├── other.xml
├── render.experimental.xml
└── vcs.xml
├── LICENSE
├── README.en.md
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── thallo
│ │ └── stage
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher_2-playstore.png
│ ├── ic_launcher_3-playstore.png
│ ├── ic_launcher_new-playstore.png
│ ├── java
│ │ └── com
│ │ │ └── thallo
│ │ │ └── stage
│ │ │ ├── AboutFragment.java
│ │ │ ├── BaseActivity.java
│ │ │ ├── ContentType.java
│ │ │ ├── CustomLinearLayout.java
│ │ │ ├── DataHolder.kt
│ │ │ ├── DownloadProgressObserver.java
│ │ │ ├── FragmentHolder.java
│ │ │ ├── HomeFragment.java
│ │ │ ├── MyBaseAdapter.java
│ │ │ ├── OSFragment.java
│ │ │ ├── SearchChoice.java
│ │ │ ├── SearchItem.java
│ │ │ ├── Setting.java
│ │ │ ├── SettingsFragment.java
│ │ │ ├── StatusBar.java
│ │ │ ├── WebSessionViewModel.java
│ │ │ ├── bookmark
│ │ │ ├── BookmarkFragment.java
│ │ │ └── MyBookmarkAdapter.java
│ │ │ ├── components
│ │ │ ├── Qr.java
│ │ │ ├── Shortcuts.kt
│ │ │ ├── binding
│ │ │ │ ├── AddressText.java
│ │ │ │ └── ImageLoaderUtils.java
│ │ │ ├── dialog
│ │ │ │ ├── AgreementDialog.java
│ │ │ │ ├── AlertDialog.java
│ │ │ │ ├── BookmarkDialog.java
│ │ │ │ ├── ContentPermissionDialog.java
│ │ │ │ ├── ContextMenuDialog.java
│ │ │ │ ├── JsChoiceDialog.java
│ │ │ │ ├── PermissionDialog.java
│ │ │ │ ├── SearchSelectDialog.java
│ │ │ │ ├── WebDialog.java
│ │ │ │ └── myDialog.java
│ │ │ ├── filePicker
│ │ │ │ ├── FilePicker.java
│ │ │ │ ├── GetFile.java
│ │ │ │ └── PickUtils.java
│ │ │ └── popup
│ │ │ │ ├── AddonsInformationPopup.java
│ │ │ │ ├── DIYPopup.java
│ │ │ │ ├── InformationPopup.java
│ │ │ │ ├── IntentPopup.java
│ │ │ │ ├── MyBottomSheetDialog.java
│ │ │ │ ├── PopUp.java
│ │ │ │ ├── SearchPopup.java
│ │ │ │ ├── SettingPopUp.java
│ │ │ │ └── TabsPopup.java
│ │ │ ├── database
│ │ │ ├── StageData.java
│ │ │ ├── UserConverters.kt
│ │ │ ├── bookmark
│ │ │ │ ├── Bookmark.java
│ │ │ │ ├── BookmarkDao.java
│ │ │ │ ├── BookmarkRepository.java
│ │ │ │ └── BookmarkViewModel.java
│ │ │ ├── download
│ │ │ │ ├── Download.java
│ │ │ │ ├── DownloadDao.java
│ │ │ │ ├── DownloadRepository.java
│ │ │ │ └── DownloadViewModel.java
│ │ │ └── history
│ │ │ │ ├── History.java
│ │ │ │ ├── HistoryDao.java
│ │ │ │ ├── HistoryRepository.java
│ │ │ │ └── HistoryViewModel.java
│ │ │ ├── download
│ │ │ ├── DownloadAdapter.java
│ │ │ ├── DownloadFragment.java
│ │ │ └── DownloadUtils.java
│ │ │ ├── extension
│ │ │ ├── AddOns.java
│ │ │ ├── AddonsAdapter.java
│ │ │ ├── AddonsManagerFragment.java
│ │ │ └── Controller.java
│ │ │ ├── history
│ │ │ ├── HistoryFragment.java
│ │ │ └── MyAdapter.java
│ │ │ ├── interfaces
│ │ │ └── confirm.java
│ │ │ └── tab
│ │ │ ├── PageTab.java
│ │ │ └── TabDetails.java
│ └── res
│ │ ├── anim
│ │ ├── fad_in.xml
│ │ └── fad_out.xml
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ ├── bg_bar.xml
│ │ ├── bg_dialog.xml
│ │ ├── bg_edittext.xml
│ │ ├── bg_qr.xml
│ │ ├── bg_round.xml
│ │ ├── bg_search_icon.xml
│ │ ├── bg_setting.xml
│ │ ├── bg_setting_anddons.xml
│ │ ├── bg_setting_menu.xml
│ │ ├── bg_shap.xml
│ │ ├── bg_shortcuts.xml
│ │ ├── bg_test.xml
│ │ ├── bg_trans.xml
│ │ ├── bg_white_rounded.xml
│ │ ├── button_back.xml
│ │ ├── circle_check.xml
│ │ ├── ic_add.xml
│ │ ├── ic_addons.xml
│ │ ├── ic_android.xml
│ │ ├── ic_arrow_up_right_circle.xml
│ │ ├── ic_baidu.xml
│ │ ├── ic_bing.xml
│ │ ├── ic_brand_telegram.xml
│ │ ├── ic_broken_lock.xml
│ │ ├── ic_broken_shield.xml
│ │ ├── ic_bulb.xml
│ │ ├── ic_bulb_off.xml
│ │ ├── ic_circle.xml
│ │ ├── ic_circle2.xml
│ │ ├── ic_circle_check.xml
│ │ ├── ic_clear.xml
│ │ ├── ic_clear_24.xml
│ │ ├── ic_copy.xml
│ │ ├── ic_delete.xml
│ │ ├── ic_desk.xml
│ │ ├── ic_desktop_on.xml
│ │ ├── ic_download.xml
│ │ ├── ic_edit.xml
│ │ ├── ic_edit2.xml
│ │ ├── ic_extensions.xml
│ │ ├── ic_file.xml
│ │ ├── ic_forward.xml
│ │ ├── ic_google.xml
│ │ ├── ic_history.xml
│ │ ├── ic_home.xml
│ │ ├── ic_information.xml
│ │ ├── ic_internet.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_left.xml
│ │ ├── ic_left_24.xml
│ │ ├── ic_lock.xml
│ │ ├── ic_menu.xml
│ │ ├── ic_menu2.xml
│ │ ├── ic_menu3.xml
│ │ ├── ic_reload.xml
│ │ ├── ic_right.xml
│ │ ├── ic_round_star.xml
│ │ ├── ic_safe.xml
│ │ ├── ic_scan.xml
│ │ ├── ic_scan_view.xml
│ │ ├── ic_setting.xml
│ │ ├── ic_share.xml
│ │ ├── ic_shield.xml
│ │ ├── ic_sogou.xml
│ │ ├── ic_star.xml
│ │ ├── ic_tabs.xml
│ │ ├── ic_trash.xml
│ │ ├── ic_video.xml
│ │ ├── logo.png
│ │ ├── progress.xml
│ │ ├── progress_circle.xml
│ │ ├── search.xml
│ │ └── shirt.xml
│ │ ├── layout-large
│ │ └── activity_main.xml
│ │ ├── layout
│ │ ├── activity_fragment_holder.xml
│ │ ├── activity_main.xml
│ │ ├── addons_icons.xml
│ │ ├── addons_list.xml
│ │ ├── addons_list_item.xml
│ │ ├── addons_manager_item.xml
│ │ ├── addons_window.xml
│ │ ├── content_fragment_holder.xml
│ │ ├── dia_agreement.xml
│ │ ├── dia_bookmark.xml
│ │ ├── dia_choice.xml
│ │ ├── dia_contextmenu.xml
│ │ ├── dia_install.xml
│ │ ├── dia_permission.xml
│ │ ├── dia_search_select.xml
│ │ ├── dia_web.xml
│ │ ├── download_item.xml
│ │ ├── fragment_about.xml
│ │ ├── fragment_addons_manager.xml
│ │ ├── fragment_bookmark.xml
│ │ ├── fragment_download.xml
│ │ ├── fragment_first.xml
│ │ ├── fragment_history.xml
│ │ ├── fragment_home.xml
│ │ ├── fragment_main.xml
│ │ ├── fragment_o_s.xml
│ │ ├── fragment_second.xml
│ │ ├── history_item.xml
│ │ ├── home_icon.xml
│ │ ├── n.xml
│ │ ├── popup.xml
│ │ ├── popup_diy.xml
│ │ ├── popup_information.xml
│ │ ├── popup_information_addons.xml
│ │ ├── popup_intent.xml
│ │ ├── popup_layout.xml
│ │ ├── popup_qr.xml
│ │ ├── popup_search.xml
│ │ ├── popup_tabs.xml
│ │ ├── qr_layout.xml
│ │ ├── se_select.xml
│ │ ├── setting.xml
│ │ ├── setting_menu.xml
│ │ ├── switch_item.xml
│ │ ├── tab.xml
│ │ └── test.xml
│ │ ├── menu
│ │ ├── addons_menu.xml
│ │ └── bookmark_menu.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher_3.xml
│ │ └── ic_launcher_3_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher_3.png
│ │ ├── ic_launcher_3_foreground.png
│ │ └── ic_launcher_3_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher_3.png
│ │ ├── ic_launcher_3_foreground.png
│ │ └── ic_launcher_3_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher_3.png
│ │ ├── ic_launcher_3_foreground.png
│ │ └── ic_launcher_3_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher_3.png
│ │ ├── ic_launcher_3_foreground.png
│ │ └── ic_launcher_3_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher_3.png
│ │ ├── ic_launcher_3_foreground.png
│ │ └── ic_launcher_3_round.png
│ │ ├── navigation
│ │ ├── holder.xml
│ │ └── nav_graph.xml
│ │ ├── raw
│ │ └── notfound.json
│ │ ├── values-large
│ │ └── dimens.xml
│ │ ├── values-night
│ │ ├── colors.xml
│ │ └── themes.xml
│ │ ├── values
│ │ ├── arrays.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── ic_launcher_3_background.xml
│ │ ├── ic_launcher_new_background.xml
│ │ ├── strings.xml
│ │ ├── style.xml
│ │ └── themes.xml
│ │ └── xml
│ │ ├── activity_main_xml_constraintlayout_scene.xml
│ │ ├── filepaths.xml
│ │ └── root_preferences.xml
│ └── test
│ └── java
│ └── com
│ └── thallo
│ └── stage
│ └── ExampleUnitTest.java
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
/.gradle/7.4/checksums/checksums.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/checksums/checksums.lock
--------------------------------------------------------------------------------
/.gradle/7.4/checksums/md5-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/checksums/md5-checksums.bin
--------------------------------------------------------------------------------
/.gradle/7.4/checksums/sha1-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/checksums/sha1-checksums.bin
--------------------------------------------------------------------------------
/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock
--------------------------------------------------------------------------------
/.gradle/7.4/dependencies-accessors/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/dependencies-accessors/gc.properties
--------------------------------------------------------------------------------
/.gradle/7.4/executionHistory/executionHistory.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/executionHistory/executionHistory.bin
--------------------------------------------------------------------------------
/.gradle/7.4/executionHistory/executionHistory.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/executionHistory/executionHistory.lock
--------------------------------------------------------------------------------
/.gradle/7.4/fileChanges/last-build.bin:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/7.4/fileHashes/fileHashes.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/fileHashes/fileHashes.bin
--------------------------------------------------------------------------------
/.gradle/7.4/fileHashes/fileHashes.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/fileHashes/fileHashes.lock
--------------------------------------------------------------------------------
/.gradle/7.4/fileHashes/resourceHashesCache.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/fileHashes/resourceHashesCache.bin
--------------------------------------------------------------------------------
/.gradle/7.4/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/7.4/gc.properties
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/buildOutputCleanup.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/buildOutputCleanup/buildOutputCleanup.lock
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/cache.properties:
--------------------------------------------------------------------------------
1 | #Sat Oct 01 14:17:38 SGT 2022
2 | gradle.version=7.4
3 |
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/outputFiles.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/buildOutputCleanup/outputFiles.bin
--------------------------------------------------------------------------------
/.gradle/checksums/checksums.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/checksums/checksums.lock
--------------------------------------------------------------------------------
/.gradle/checksums/md5-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/checksums/md5-checksums.bin
--------------------------------------------------------------------------------
/.gradle/checksums/sha1-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/checksums/sha1-checksums.bin
--------------------------------------------------------------------------------
/.gradle/file-system.probe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/file-system.probe
--------------------------------------------------------------------------------
/.gradle/vcs-1/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/.gradle/vcs-1/gc.properties
--------------------------------------------------------------------------------
/.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 |
19 |
20 |
--------------------------------------------------------------------------------
/.idea/modules/stage.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/other.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/render.experimental.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/README.en.md:
--------------------------------------------------------------------------------
1 | # stage
2 |
3 | #### Description
4 | {**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
5 |
6 | #### Software Architecture
7 | Software architecture description
8 |
9 | #### Installation
10 |
11 | 1. xxxx
12 | 2. xxxx
13 | 3. xxxx
14 |
15 | #### Instructions
16 |
17 | 1. xxxx
18 | 2. xxxx
19 | 3. xxxx
20 |
21 | #### Contribution
22 |
23 | 1. Fork the repository
24 | 2. Create Feat_xxx branch
25 | 3. Commit your code
26 | 4. Create Pull Request
27 |
28 |
29 | #### Gitee Feature
30 |
31 | 1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
32 | 2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
33 | 3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
34 | 4. The most valuable open source project [GVP](https://gitee.com/gvp)
35 | 5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
36 | 6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # stage
2 |
3 | #### 介绍
4 | 基于Geckoview开发的浏览器。
5 | #### 支持功能
6 | 1. 书签
7 | 2. 历史
8 | 3. 下载文件
9 | 4. 自定义主页
10 | 5. 安装附加组件
11 |
12 | 现版本的设计目的在于个人爱好以及探索与推广Geckoview,
13 | 软件的构架设计以及代码可能存在诸多不合理之处,请对Geckoview感兴趣的开发者仅作参考。
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/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
22 | -dontwarn com.tencent.bugly.**
23 | -keep public class com.tencent.bugly.**{*;}
24 | # okhttp https://github.com/square/okhttp/#proguard
25 | -dontwarn okhttp3.**
26 | -dontwarn okio.**
27 | -dontwarn javax.annotation.**
28 | -dontwarn org.conscrypt.**
29 | # A resource is loaded with a relative path so the package of this class must be preserved.
30 | -keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
31 |
32 | # okdownload:okhttp
33 | -keepnames class com.liulishuo.okdownload.core.connection.DownloadOkHttp3Connection
34 |
35 | # okdownload:sqlite
36 | -keep class com.liulishuo.okdownload.core.breakpoint.BreakpointStoreOnSQLite {
37 | public com.liulishuo.okdownload.core.breakpoint.DownloadStore createRemitSelf();
38 | public com.liulishuo.okdownload.core.breakpoint.BreakpointStoreOnSQLite(android.content.Context);
39 | }
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/thallo/stage/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
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.thallo.stage", appContext.getPackageName());
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/ic_launcher_2-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/ic_launcher_2-playstore.png
--------------------------------------------------------------------------------
/app/src/main/ic_launcher_3-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/ic_launcher_3-playstore.png
--------------------------------------------------------------------------------
/app/src/main/ic_launcher_new-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/ic_launcher_new-playstore.png
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/AboutFragment.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
2 |
3 | import android.content.Intent;
4 | import android.content.pm.PackageInfo;
5 | import android.content.pm.PackageManager;
6 | import android.os.Bundle;
7 |
8 | import androidx.fragment.app.Fragment;
9 |
10 | import android.view.LayoutInflater;
11 | import android.view.View;
12 | import android.view.ViewGroup;
13 |
14 | import com.google.android.material.bottomsheet.BottomSheetBehavior;
15 | import com.thallo.stage.databinding.FragmentAboutBinding;
16 |
17 |
18 | public class AboutFragment extends Fragment {
19 | FragmentAboutBinding binding;
20 |
21 |
22 | @Override
23 | public void onCreate(Bundle savedInstanceState) {
24 | super.onCreate(savedInstanceState);
25 |
26 | }
27 |
28 | @Override
29 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
30 | Bundle savedInstanceState) {
31 | binding=FragmentAboutBinding.inflate(inflater,container,false);
32 | binding.aboutTelegram.setOnClickListener(new View.OnClickListener() {
33 | @Override
34 | public void onClick(View view) {
35 | BaseActivity.url="https://t.me/stage_browser_channel";
36 | Intent intent = new Intent(getContext(), BaseActivity.class);
37 | getContext().startActivity(intent);
38 | }
39 | });
40 | binding.button5.setOnClickListener(new View.OnClickListener() {
41 | @Override
42 | public void onClick(View view) {
43 | BaseActivity.url="https://static-6e7c68d2-83dd-40b0-9f09-0150b6b22138.bspapp.com/";
44 | Intent intent = new Intent(getContext(), BaseActivity.class);
45 | getContext().startActivity(intent);
46 | }
47 | });
48 |
49 | binding.button3.setOnClickListener(new View.OnClickListener() {
50 | @Override
51 | public void onClick(View view) {
52 | BaseActivity.url="https://static-6e7c68d2-83dd-40b0-9f09-0150b6b22138.bspapp.com/Stage%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96.html";
53 | Intent intent = new Intent(getContext(), BaseActivity.class);
54 | getContext().startActivity(intent);
55 | }
56 | });
57 |
58 | binding.button6.setOnClickListener(new View.OnClickListener() {
59 | @Override
60 | public void onClick(View view) {
61 | Intent intent = new Intent(getContext(), FragmentHolder.class);
62 | intent.putExtra("page","OS");
63 | getContext().startActivity(intent);
64 | }
65 | });
66 | PackageManager manager = getContext().getPackageManager();
67 | try {
68 | PackageInfo info = manager.getPackageInfo("com.thallo.stage", 0);
69 | binding.textView21.setText(info.versionName+" 🐻");
70 | } catch (PackageManager.NameNotFoundException e) {
71 | e.printStackTrace();
72 | }
73 |
74 |
75 |
76 |
77 | // Inflate the layout for this fragment
78 | return binding.getRoot();
79 | }
80 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/ContentType.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
2 |
3 | import android.icu.text.DateTimePatternGenerator;
4 |
5 | import org.webrtc.MediaStreamTrack;
6 |
7 | import java.io.IOException;
8 | import java.net.HttpURLConnection;
9 | import java.net.MalformedURLException;
10 | import java.net.URL;
11 |
12 | public class ContentType {
13 |
14 |
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/CustomLinearLayout.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
2 |
3 | import android.content.Context;
4 | import android.graphics.Rect;
5 | import android.os.Build;
6 | import android.util.AttributeSet;
7 | import android.view.WindowInsets;
8 |
9 | import androidx.annotation.RequiresApi;
10 | import androidx.coordinatorlayout.widget.CoordinatorLayout;
11 |
12 | public class CustomLinearLayout extends CoordinatorLayout {
13 | public CustomLinearLayout(Context context) {
14 | super(context);
15 | }
16 |
17 | public CustomLinearLayout(Context context, AttributeSet attrs) {
18 | super(context, attrs);
19 | }
20 |
21 | public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
22 | super(context, attrs, defStyleAttr);
23 | }
24 |
25 |
26 | @Override
27 | protected boolean fitSystemWindows(Rect insets) {
28 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
29 | insets.left = 0;
30 | insets.top = 0;
31 | insets.right = 0;
32 |
33 | }
34 | return super.fitSystemWindows(insets);
35 | }
36 |
37 | @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH)
38 | @Override
39 | public WindowInsets onApplyWindowInsets(WindowInsets insets) {
40 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
41 | return super.onApplyWindowInsets(insets.replaceSystemWindowInsets(0, insets.getSystemWindowInsetTop(), 0, 0));
42 | } else {
43 | return insets;
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/DataHolder.kt:
--------------------------------------------------------------------------------
1 | package com.thallo.stage
2 |
3 | import android.app.Application
4 | import android.widget.Toast
5 |
6 | class DataHolder: Application() {
7 | var ids: Array = emptyArray()
8 | fun set(id:Long){
9 | ids.plus(id)
10 | Toast.makeText(this,"ok",Toast.LENGTH_SHORT).show()
11 | }
12 |
13 | override fun onCreate() {
14 | super.onCreate()
15 |
16 |
17 | }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/DownloadProgressObserver.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
2 |
3 |
4 | import androidx.lifecycle.MutableLiveData;
5 | import androidx.lifecycle.ViewModel;
6 |
7 | public class DownloadProgressObserver extends ViewModel {
8 |
9 | // Create a LiveData with a String
10 | private MutableLiveData progress;
11 |
12 | public MutableLiveData getProgress() {
13 | if (progress == null) {
14 | progress = new MutableLiveData();
15 | }
16 | return progress;
17 | }
18 |
19 | // Rest of the ViewModel...
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/SearchChoice.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
2 |
3 | public class SearchChoice {
4 | private int imageID;
5 | private String name;
6 |
7 | public int getImageID() {
8 | return imageID;
9 | }
10 |
11 | public void setImageID(int imageID) {
12 | this.imageID = imageID;
13 | }
14 |
15 | public String getName() {
16 | return name;
17 | }
18 |
19 | public void setName(String name) {
20 | this.name = name;
21 | }
22 |
23 | public SearchChoice(int imageID, String name) {
24 | this.imageID = imageID;
25 | this.name = name;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/SearchItem.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ArrayAdapter;
8 | import android.widget.ImageView;
9 | import android.widget.TextView;
10 |
11 | import androidx.annotation.NonNull;
12 | import androidx.annotation.Nullable;
13 |
14 | import java.util.ArrayList;
15 | import java.util.List;
16 |
17 | public class SearchItem extends ArrayAdapter {
18 | public SearchItem(@NonNull Context context, int resource, @NonNull List objects) {
19 | super(context, resource, objects);
20 | }
21 | @NonNull
22 | @Override
23 | public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
24 | View view= LayoutInflater.from(getContext()).inflate(R.layout.se_select,parent,false);
25 | ImageView icon=view.findViewById(R.id.imageView16);
26 | TextView name=view.findViewById(R.id.textView10);
27 | View view1=view.findViewById(R.id.view);
28 | SearchChoice searchChoice=getItem(position);
29 | icon.setImageResource(searchChoice.getImageID());
30 | name.setText(searchChoice.getName());
31 | return view;
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/Setting.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
2 |
3 | import android.os.Bundle;
4 | import android.os.PersistableBundle;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 |
8 | import androidx.annotation.Nullable;
9 | import androidx.appcompat.app.ActionBar;
10 | import androidx.appcompat.app.AppCompatActivity;
11 |
12 | import com.gyf.immersionbar.ImmersionBar;
13 | import com.thallo.stage.databinding.SettingBinding;
14 |
15 | public class Setting extends AppCompatActivity {
16 | SettingBinding binding;
17 |
18 | @Override
19 | protected void onCreate(@Nullable Bundle savedInstanceState) {
20 | super.onCreate(savedInstanceState);
21 | binding = SettingBinding.inflate(LayoutInflater.from(this));
22 | setContentView(binding.getRoot());
23 | setSupportActionBar(binding.toolbar);
24 | ImmersionBar.with(this)
25 | .fitsSystemWindows(true)
26 | .statusBarColor(R.color.background)
27 | .navigationBarColor(R.color.background)
28 | .autoStatusBarDarkModeEnable(true,0.2f)
29 | .init();
30 | getSupportFragmentManager().beginTransaction().replace(binding.settingCon.getId(), new SettingsFragment()).commit();
31 | binding.toolbar.setNavigationOnClickListener(new View.OnClickListener() {
32 | @Override
33 | public void onClick(View v) {
34 | finish(); //返回
35 | }
36 | });
37 |
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/SettingsFragment.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
2 |
3 | import android.content.Intent;
4 | import android.os.Bundle;
5 |
6 | import androidx.preference.ListPreference;
7 | import androidx.preference.Preference;
8 | import androidx.preference.PreferenceFragmentCompat;
9 |
10 | public class SettingsFragment extends PreferenceFragmentCompat {
11 |
12 | @Override
13 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
14 | setPreferencesFromResource(R.xml.root_preferences, rootKey);
15 | Preference addons=findPreference("settingAddons");
16 | Preference about=findPreference("settingAbout");
17 | Preference feedback=findPreference("setting_feedback");
18 | ListPreference searchEngine=findPreference("searchEngine");
19 |
20 | about.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
21 | @Override
22 | public boolean onPreferenceClick(Preference preference) {
23 | Intent intent = new Intent(getContext(), FragmentHolder.class);
24 | intent.putExtra("page","ABOUT");
25 | getContext().startActivity(intent);
26 | return false;
27 | }
28 | });
29 | addons.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
30 | @Override
31 | public boolean onPreferenceClick(Preference preference) {
32 | Intent intent = new Intent(getContext(), FragmentHolder.class);
33 | intent.putExtra("page","ADDONS");
34 | getContext().startActivity(intent);
35 | return false;
36 | }
37 | });
38 |
39 | feedback.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
40 | @Override
41 | public boolean onPreferenceClick(Preference preference) {
42 | BaseActivity.url="https://support.qq.com/product/427204";
43 | Intent intent = new Intent(getContext(), BaseActivity.class);
44 | getContext().startActivity(intent);
45 | return false;
46 | }
47 | });
48 |
49 |
50 |
51 |
52 |
53 | }
54 |
55 |
56 |
57 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/Qr.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components;
2 |
3 | import android.content.DialogInterface;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.widget.ImageView;
7 |
8 | import com.google.android.material.bottomsheet.BottomSheetDialog;
9 | import com.thallo.stage.BaseActivity;
10 | import com.thallo.stage.R;
11 | import com.thallo.stage.components.popup.MyBottomSheetDialog;
12 |
13 | import cn.bingoogolapple.qrcode.core.QRCodeView;
14 | import cn.bingoogolapple.qrcode.zxing.ZXingView;
15 |
16 | public class Qr {
17 | public void show(BaseActivity baseActivity){
18 | MyBottomSheetDialog bottomSheetDialog = new MyBottomSheetDialog(baseActivity, R.style.BottomSheetDialog,0);
19 | View popView= LayoutInflater.from(baseActivity).inflate(R.layout.qr_layout,null );
20 |
21 | ZXingView zXingView=popView.findViewById(R.id.zxingview);
22 | ImageView imageView=popView.findViewById(R.id.qrFlash);
23 |
24 | bottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
25 | @Override
26 | public void onDismiss(DialogInterface dialogInterface) {
27 | zXingView.onDestroy();
28 |
29 |
30 | }
31 | });
32 |
33 |
34 | new Thread(){
35 | @Override
36 | public void run() {
37 | super.run();
38 | zXingView.startCamera();
39 | zXingView.startSpot();
40 | }
41 | }.start();
42 |
43 | imageView.setOnClickListener(new View.OnClickListener() {
44 | boolean a=false;
45 | @Override
46 | public void onClick(View view) {
47 | if (!a)
48 | {
49 | imageView.setImageResource(R.drawable.ic_bulb);
50 | a=true;
51 | zXingView.openFlashlight();
52 | }
53 | else {imageView.setImageResource(R.drawable.ic_bulb_off);a=false;zXingView.closeFlashlight();}
54 | }
55 | });
56 | zXingView.setDelegate(new QRCodeView.Delegate() {
57 | @Override
58 | public void onScanQRCodeSuccess(String result) {
59 | baseActivity.getWebSessionViewModel().getSession().loadUri(result);
60 | bottomSheetDialog.dismiss();
61 |
62 | }
63 |
64 | @Override
65 | public void onCameraAmbientBrightnessChanged(boolean isDark) {
66 |
67 | }
68 |
69 | @Override
70 | public void onScanQRCodeOpenCameraError() {
71 |
72 | }
73 | });
74 |
75 | bottomSheetDialog.setContentView(popView);
76 | bottomSheetDialog.show();
77 |
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/Shortcuts.kt:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components
2 |
3 | import android.graphics.Bitmap
4 | import android.graphics.Canvas
5 | import android.graphics.Color
6 | import android.view.View
7 |
8 | class Shortcuts {
9 | /**
10 | * author: stone
11 | * email: aa86799@163.com
12 | *
13 | * 创建新的 Canvas + Bitmap对象,利用View的draw(canvas)
14 | */
15 | fun createBitmapFromView(view: View): Bitmap? {
16 | val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
17 | val canvas = Canvas(bitmap)
18 | canvas.drawColor(Color.WHITE)
19 | view.draw(canvas)
20 | return bitmap
21 | }
22 |
23 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/binding/AddressText.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.binding;
2 |
3 | import android.widget.TextView;
4 |
5 | import androidx.databinding.BindingAdapter;
6 |
7 | public class AddressText {
8 | @BindingAdapter(value = {"titleToUrl","url"} ,requireAll = false)
9 | public static void titleToUrl(TextView view, String title,String url){
10 | if (title==null) return;
11 | if (url==null) return;
12 |
13 | if(title=="新标签页")
14 | view.setText("");
15 | else view.setText(url);
16 |
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/binding/ImageLoaderUtils.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.binding;
2 |
3 | import android.util.Log;
4 | import android.view.View;
5 | import android.widget.ImageView;
6 |
7 | import androidx.databinding.BindingAdapter;
8 |
9 | import com.thallo.stage.R;
10 |
11 | import com.bumptech.glide.Glide;
12 |
13 | import java.net.URI;
14 |
15 | public class ImageLoaderUtils {
16 |
17 | @BindingAdapter(value = {"imageUrl"} ,requireAll = false)
18 | public static void loadImage(ImageView view, String url){
19 | if (url==null) return;
20 |
21 | URI uri=URI.create(url);
22 | String faviconUrl=uri.getScheme()+"://"+uri.getHost()+"/favicon.ico";
23 | Glide.with(view.getContext()).load(faviconUrl).placeholder(R.drawable.ic_internet)
24 | .into(view);
25 | }
26 |
27 | @BindingAdapter(value = {"isSecure","pageUrl"} ,requireAll = false)
28 | public static void loadSecureImage(ImageView view, boolean isSecure,String url){
29 | Log.d("isSecure",isSecure+"");
30 | if (url==null) return;
31 | else if (url.indexOf("about:blank") == -1)
32 | {view.setVisibility(View.VISIBLE);Log.d("YES",url);}
33 | else if (url.indexOf("about:blank") != -1)
34 | {view.setVisibility(View.GONE);Log.d("YES",url);}
35 | if (isSecure) view.setImageResource(R.drawable.ic_lock);
36 | else view.setImageResource(R.drawable.ic_broken_lock);
37 | }
38 |
39 | @BindingAdapter(value = {"isProtecting"} ,requireAll = false)
40 | public static void loadProtectingImage(ImageView view, boolean isSecure){
41 | Log.d("isProtecting",isSecure+"");
42 | if (isSecure) view.setImageResource(R.drawable.ic_shield);
43 | else view.setImageResource(R.drawable.ic_broken_shield);
44 |
45 | }
46 |
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/dialog/AgreementDialog.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.dialog;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.content.DialogInterface;
6 | import android.content.SharedPreferences;
7 | import android.view.LayoutInflater;
8 | import android.view.View;
9 |
10 | import androidx.annotation.NonNull;
11 |
12 | import com.google.android.material.dialog.MaterialAlertDialogBuilder;
13 | import com.thallo.stage.R;
14 | import com.thallo.stage.databinding.DiaAgreementBinding;
15 |
16 | public class AgreementDialog extends MaterialAlertDialogBuilder {
17 | DiaAgreementBinding binding;
18 | public AgreementDialog(@NonNull Context context, SharedPreferences.Editor mEditor) {
19 | super(context);
20 | binding=DiaAgreementBinding.inflate(LayoutInflater.from(context));
21 | setView(binding.getRoot());
22 | binding.agreement.setOnClickListener(new View.OnClickListener() {
23 | @Override
24 | public void onClick(View view) {
25 | WebDialog webDialog=new WebDialog(context,true);
26 | webDialog.show();
27 | }
28 | });
29 | binding.privacy.setOnClickListener(new View.OnClickListener() {
30 | @Override
31 | public void onClick(View view) {
32 | WebDialog webDialog=new WebDialog(context,false);
33 | webDialog.show();
34 | }
35 | });
36 | setPositiveButton(R.string.agree, new DialogInterface.OnClickListener() {
37 | @Override
38 | public void onClick(DialogInterface dialogInterface, int i) {
39 | mEditor.putBoolean("first",true).commit();
40 | }
41 | });
42 | setNegativeButton(R.string.disagree, new DialogInterface.OnClickListener() {
43 | @Override
44 | public void onClick(DialogInterface dialogInterface, int i) {
45 | Activity context1 = (Activity) context;
46 | context1.finish();
47 |
48 |
49 | }
50 | });
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/dialog/AlertDialog.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.dialog;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.content.Context;
5 | import android.content.DialogInterface;
6 | import android.os.Handler;
7 | import android.os.Looper;
8 | import android.os.Message;
9 | import android.util.Log;
10 | import android.widget.TextView;
11 |
12 | import androidx.annotation.NonNull;
13 |
14 | import com.thallo.stage.R;
15 |
16 | import org.mozilla.geckoview.GeckoSession;
17 |
18 | public class AlertDialog extends androidx.appcompat.app.AlertDialog {
19 | GeckoSession.PromptDelegate.PromptResponse dialogResult;
20 | Handler mHandler ;
21 | Context context;
22 | public AlertDialog(@NonNull Context context, GeckoSession.PromptDelegate.AlertPrompt alertPrompt) {
23 | super(context);
24 | this.context=context;
25 | onCreate(alertPrompt,context);
26 | }
27 | public void onCreate(GeckoSession.PromptDelegate.AlertPrompt alertPrompt, Context context) {
28 | setTitle(alertPrompt.title);
29 | setMessage(alertPrompt.message);
30 | setButton(BUTTON_POSITIVE, "确认", new OnClickListener() {
31 | @Override
32 | public void onClick(DialogInterface dialogInterface, int i) {
33 | endDialog(alertPrompt.dismiss());
34 | }
35 | });
36 |
37 |
38 | }
39 | public void endDialog(GeckoSession.PromptDelegate.PromptResponse result)
40 | {
41 | setDialogResult(result);
42 | super.dismiss();
43 | Message m = mHandler.obtainMessage();
44 | mHandler.sendMessage(m);
45 | Log.d("endDia",result+"");
46 |
47 |
48 |
49 |
50 |
51 | }
52 | @SuppressLint("HandlerLeak")
53 | public GeckoSession.PromptDelegate.PromptResponse showDialog()
54 | {
55 | mHandler = new Handler() {
56 | @Override
57 | public void handleMessage(Message mesg) {
58 | // process incoming messages here
59 | //super.handleMessage(msg);
60 | throw new RuntimeException();
61 | }
62 | };
63 | super.show();
64 | try {
65 | Looper.getMainLooper().loop();
66 | }
67 | catch(RuntimeException e2)
68 | {
69 | }
70 | return dialogResult;
71 | }
72 |
73 | public GeckoSession.PromptDelegate.PromptResponse getDialogResult() {
74 | return dialogResult;
75 | }
76 |
77 | public void setDialogResult(GeckoSession.PromptDelegate.PromptResponse dialogResult) {
78 | this.dialogResult = dialogResult;
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/dialog/BookmarkDialog.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.dialog;
2 |
3 | import android.content.Context;
4 | import android.content.DialogInterface;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.widget.CompoundButton;
8 |
9 | import androidx.annotation.NonNull;
10 | import androidx.appcompat.app.AlertDialog;
11 |
12 | import com.google.android.material.dialog.MaterialAlertDialogBuilder;
13 | import com.thallo.stage.R;
14 | import com.thallo.stage.database.bookmark.Bookmark;
15 | import com.thallo.stage.database.bookmark.BookmarkViewModel;
16 | import com.thallo.stage.databinding.DiaBookmarkBinding;
17 |
18 | public class BookmarkDialog extends myDialog {
19 | DiaBookmarkBinding diaBookmarkBinding;
20 | Context context;
21 | public BookmarkDialog(@NonNull Context context, String title, String url, BookmarkViewModel bookmarkViewModel) {
22 | super(context);
23 | this.context=context;
24 | diaBookmarkBinding=DiaBookmarkBinding.inflate(LayoutInflater.from(context));
25 | diaBookmarkBinding.textView5.setText(R.string.dia_add_bookmark_title);
26 | diaBookmarkBinding.diaBookmarkTitle.setText(title);
27 | diaBookmarkBinding.diaBookmarkUrl.setText(url);
28 | setView(diaBookmarkBinding.getRoot());
29 | setButton(BUTTON_POSITIVE,context.getString(R.string.confirm), new DialogInterface.OnClickListener() {
30 | @Override
31 | public void onClick(DialogInterface dialogInterface, int i) {
32 | Bookmark bookmark=new Bookmark(diaBookmarkBinding.diaBookmarkUrl.getText().toString(),diaBookmarkBinding.diaBookmarkTitle.getText().toString(),"默认",diaBookmarkBinding.radioButton.isChecked());
33 | bookmarkViewModel.insertWords(bookmark);
34 |
35 | }
36 | });
37 | setButton(BUTTON_NEGATIVE,context.getString(R.string.cancle), new DialogInterface.OnClickListener() {
38 | @Override
39 | public void onClick(DialogInterface dialogInterface, int i) {
40 | dialogInterface.dismiss();
41 |
42 | }
43 | });
44 |
45 | }
46 |
47 | public void open() {
48 | super.show();
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/dialog/ContentPermissionDialog.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.dialog;
2 |
3 | import android.content.Context;
4 | import android.content.DialogInterface;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.widget.TextView;
8 |
9 | import androidx.annotation.NonNull;
10 |
11 | import com.google.android.material.dialog.MaterialAlertDialogBuilder;
12 | import com.thallo.stage.R;
13 | import com.thallo.stage.interfaces.confirm;
14 |
15 | import org.mozilla.geckoview.GeckoResult;
16 |
17 | public class ContentPermissionDialog extends MaterialAlertDialogBuilder {
18 | public ContentPermissionDialog(@NonNull Context context) {
19 | super(context);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/dialog/WebDialog.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.dialog;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.content.DialogInterface;
6 | import android.view.LayoutInflater;
7 |
8 | import androidx.annotation.NonNull;
9 | import androidx.appcompat.app.AlertDialog;
10 |
11 | import com.google.android.material.dialog.MaterialAlertDialogBuilder;
12 | import com.thallo.stage.databinding.DiaWebBinding;
13 |
14 | import org.mozilla.geckoview.GeckoRuntime;
15 | import org.mozilla.geckoview.GeckoSession;
16 |
17 | public class WebDialog extends AlertDialog {
18 | DiaWebBinding binding;
19 | GeckoSession session;
20 | public WebDialog(@NonNull Context context, Boolean a) {
21 | super(context);
22 | binding=DiaWebBinding.inflate(LayoutInflater.from(context));
23 | session=new GeckoSession();
24 | if(a==true) session.loadUri("https://static-6e7c68d2-83dd-40b0-9f09-0150b6b22138.bspapp.com/");
25 | else session.loadUri("https://static-6e7c68d2-83dd-40b0-9f09-0150b6b22138.bspapp.com/Stage%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96.html");
26 | session.open(GeckoRuntime.getDefault(context));
27 | binding.DiaGeckoview.setSession(session);
28 | setView(binding.getRoot());
29 | setButton(BUTTON_POSITIVE, "同意", new OnClickListener() {
30 | @Override
31 | public void onClick(DialogInterface dialogInterface, int i) {
32 |
33 | }
34 | });
35 | setButton(BUTTON_NEGATIVE, "不同意", new OnClickListener() {
36 | @Override
37 | public void onClick(DialogInterface dialogInterface, int i) {
38 | Activity context1 = (Activity) context;
39 | context1.finish();
40 |
41 | }
42 | });
43 |
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/dialog/myDialog.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.dialog;
2 |
3 | import android.content.Context;
4 |
5 | import androidx.annotation.NonNull;
6 | import androidx.appcompat.app.AlertDialog;
7 |
8 | import com.google.android.material.dialog.MaterialAlertDialogBuilder;
9 | import com.thallo.stage.R;
10 |
11 | import org.mozilla.geckoview.GeckoSession;
12 |
13 | public class myDialog extends AlertDialog {
14 |
15 | public myDialog(@NonNull Context context) {
16 | super(context);
17 | getWindow().setBackgroundDrawable(context.getDrawable(R.drawable.bg_dialog));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/filePicker/FilePicker.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.filePicker;
2 |
3 | import android.Manifest;
4 | import android.app.Activity;
5 | import android.content.Context;
6 | import android.content.Intent;
7 | import android.content.pm.PackageManager;
8 | import android.net.Uri;
9 | import android.os.Build;
10 | import android.os.Bundle;
11 | import android.os.Environment;
12 | import android.os.Handler;
13 | import android.os.Looper;
14 | import android.os.Message;
15 | import android.provider.Settings;
16 | import android.util.Log;
17 | import android.widget.Toast;
18 |
19 | import androidx.annotation.Nullable;
20 | import androidx.appcompat.app.AppCompatActivity;
21 | import androidx.core.app.ActivityCompat;
22 | import androidx.core.content.ContextCompat;
23 |
24 | import com.thallo.stage.BaseActivity;
25 |
26 | import org.mozilla.geckoview.GeckoSession;
27 |
28 | public class FilePicker {
29 | UriListener uriListener;
30 | Activity activity;
31 | public FilePicker(Activity activity){
32 | this.activity=activity;
33 | }
34 | public void open(Activity activity,int requestCode) {
35 | Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
36 | intent.setType("*/*");
37 | intent.addCategory(Intent.CATEGORY_OPENABLE);
38 | activity.startActivityForResult(intent, requestCode);
39 | requestPermission();
40 |
41 | }
42 |
43 |
44 |
45 | public void setUriListener(UriListener uriListener) {
46 | this.uriListener = uriListener;
47 | }
48 |
49 | public void setUri(Uri uri) {
50 | uriListener.UriGet(uri);
51 | }
52 |
53 | // 状态变化监听
54 | public interface UriListener {
55 | // 回调方法
56 | void UriGet(Uri uri);
57 | }
58 |
59 |
60 | private void requestPermission() {
61 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
62 | // 先判断有没有权限
63 | if (Environment.isExternalStorageManager()) {
64 |
65 | } else {
66 | Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
67 | intent.setData(Uri.parse("package:" + activity.getPackageName()));
68 | activity.startActivityForResult(intent, 1024);
69 | Toast.makeText(activity,"请先授予权限",Toast.LENGTH_SHORT).show();
70 | }
71 | } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
72 | // 先判断有没有权限
73 | if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
74 | ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
75 |
76 | } else {
77 | ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1024);
78 | }
79 | }
80 | }
81 |
82 |
83 | }
84 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/filePicker/GetFile.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.filePicker;
2 |
3 | import android.app.Activity;
4 | import android.net.Uri;
5 | import android.os.Handler;
6 | import android.os.Looper;
7 | import android.os.Message;
8 |
9 | import com.thallo.stage.BaseActivity;
10 | import com.thallo.stage.components.filePicker.FilePicker;
11 |
12 | public class GetFile {
13 | Uri uri;
14 | Handler mHandler ;
15 | public GetFile(){
16 | BaseActivity.filePicker.setUriListener(new FilePicker.UriListener() {
17 | @Override
18 | public void UriGet(Uri uri) {
19 | close(uri);
20 | }
21 | });
22 | }
23 | public void open(Activity activity,int requestCode){
24 | mHandler = new Handler() {
25 | @Override
26 | public void handleMessage(Message mesg) {
27 | // process incoming messages here
28 | //super.handleMessage(msg);
29 | throw new RuntimeException();
30 | }
31 | };
32 | BaseActivity.filePicker.open(activity,requestCode);
33 | try {
34 | Looper.getMainLooper().loop();
35 | }
36 | catch(RuntimeException e2)
37 | {
38 | }
39 |
40 | }
41 | public void close(Uri uri){
42 | setUri(uri);
43 | Message m = mHandler.obtainMessage();
44 | mHandler.sendMessage(m);
45 | }
46 |
47 | public Uri getUri() {
48 | return uri;
49 | }
50 |
51 | public void setUri(Uri uri) {
52 | this.uri = uri;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/popup/InformationPopup.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.popup;
2 |
3 | import android.content.Context;
4 | import android.os.PerformanceHintManager;
5 | import android.util.Log;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 |
9 | import com.bumptech.glide.Glide;
10 | import com.google.android.material.bottomsheet.BottomSheetDialog;
11 | import com.thallo.stage.R;
12 | import com.thallo.stage.WebSessionViewModel;
13 | import com.thallo.stage.databinding.PopupInformationBinding;
14 | import com.thallo.stage.databinding.SettingMenuBinding;
15 | import com.thallo.stage.extension.Controller;
16 |
17 | import org.mozilla.geckoview.GeckoSession;
18 |
19 | import java.net.URI;
20 |
21 | public class InformationPopup {
22 | Context context;
23 | BottomSheetDialog bottomSheetDialog;
24 | PopupInformationBinding binding;
25 | public InformationPopup(Context context){
26 | this.context=context;
27 | bottomSheetDialog = new BottomSheetDialog(context, R.style.BottomSheetDialog);
28 | binding= PopupInformationBinding.inflate(LayoutInflater.from(context));
29 |
30 | }
31 |
32 |
33 | public void show(WebSessionViewModel webSessionViewModel){
34 | bottomSheetDialog.setContentView(binding.getRoot());
35 | URI uri=URI.create(webSessionViewModel.getUrl());
36 |
37 | if (webSessionViewModel.getSession().getSettings().getUseTrackingProtection()) {
38 | binding.informationProtection.setImageResource(R.drawable.ic_shield);
39 | binding.informationProtectionText.setText(context.getString(R.string.information_protection));
40 | }
41 | else {
42 | binding.informationProtection.setImageResource(R.drawable.ic_broken_shield);
43 | binding.informationProtectionText.setText(context.getString(R.string.information_not_protection));
44 | }
45 |
46 | if (webSessionViewModel.isSecure()) {
47 | binding.informationSecure.setImageResource(R.drawable.ic_lock);
48 | binding.informationSecureText.setText(context.getString(R.string.information_secure));
49 | }
50 | else {
51 | binding.informationSecure.setImageResource(R.drawable.ic_broken_lock);
52 | binding.informationSecureText.setText(context.getString(R.string.information_not_secure));
53 |
54 | }
55 | binding.informationUrl.setText(uri.getHost());
56 | String faviconUrl=uri.getScheme()+"://"+uri.getHost()+"/favicon.ico";
57 | Glide.with(context).load(faviconUrl).placeholder(R.drawable.ic_internet)
58 | .into(binding.informationIcon);
59 | bottomSheetDialog.show();
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/popup/IntentPopup.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.popup;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 | import android.net.Uri;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.widget.Button;
9 |
10 | import com.google.android.material.bottomsheet.BottomSheetDialog;
11 | import com.thallo.stage.R;
12 | import com.thallo.stage.databinding.PopupInformationBinding;
13 | import com.thallo.stage.databinding.PopupIntentBinding;
14 | import com.thallo.stage.databinding.SettingMenuBinding;
15 |
16 | public class IntentPopup {
17 | Context context;
18 | PopupIntentBinding binding;
19 |
20 |
21 |
22 | public IntentPopup(Context context){
23 | this.context=context;
24 | }
25 | public void show(Intent intent){
26 | BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(context, R.style.BottomSheetDialog);
27 | binding=PopupIntentBinding.inflate(LayoutInflater.from(context));
28 | bottomSheetDialog.setContentView(binding.getRoot());
29 | bottomSheetDialog.show();
30 | binding.IntentButton.setOnClickListener(new View.OnClickListener() {
31 | @Override
32 | public void onClick(View view) {
33 | context.startActivity(intent);
34 | bottomSheetDialog.dismiss();
35 | }
36 | });
37 | }
38 |
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/popup/MyBottomSheetDialog.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.popup;
2 |
3 | import android.content.Context;
4 | import android.widget.FrameLayout;
5 |
6 | import androidx.annotation.NonNull;
7 |
8 | import com.google.android.material.bottomsheet.BottomSheetBehavior;
9 | import com.google.android.material.bottomsheet.BottomSheetDialog;
10 |
11 | public class MyBottomSheetDialog extends BottomSheetDialog {
12 | private BottomSheetBehavior behavior;
13 | int mode;
14 | public MyBottomSheetDialog(@NonNull Context context, int theme,int mode) {
15 | super(context, theme);
16 | this.mode=mode;
17 | }
18 |
19 |
20 | @Override
21 | protected void onStart() {
22 | super.onStart();
23 | switch (mode){
24 | case 0:
25 | if (behavior != null && behavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
26 | behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
27 | }
28 | break;
29 | case 1:
30 | BottomSheetBehavior behavior = getBehavior();
31 | behavior.setState(BottomSheetBehavior.STATE_HALF_EXPANDED);
32 | break;
33 | case 2:
34 | behavior = getBehavior();
35 | behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
36 | break;
37 | }
38 |
39 |
40 |
41 | }
42 |
43 | }
44 |
45 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/popup/PopUp.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.popup;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 |
7 | import androidx.annotation.NonNull;
8 | import androidx.annotation.Nullable;
9 |
10 | import com.google.android.material.bottomsheet.BottomSheetDialog;
11 | import com.thallo.stage.R;
12 |
13 | import org.mozilla.geckoview.GeckoResult;
14 | import org.mozilla.geckoview.GeckoRuntime;
15 | import org.mozilla.geckoview.GeckoRuntimeSettings;
16 | import org.mozilla.geckoview.GeckoSession;
17 | import org.mozilla.geckoview.GeckoSessionSettings;
18 | import org.mozilla.geckoview.GeckoView;
19 | import org.mozilla.geckoview.WebExtension;
20 |
21 | public class PopUp {
22 | public void popUp(WebExtension webExtension, GeckoSession session, Context context){
23 | MyBottomSheetDialog bottomSheetDialog = new MyBottomSheetDialog(context, R.style.BottomSheetDialog,0);
24 | View popView= LayoutInflater.from(context).inflate(R.layout.popup,null );
25 | GeckoView geckoView= popView.findViewById(R.id.popupGecko);
26 | session.setContentDelegate(new GeckoSession.ContentDelegate() {});
27 | session.open(GeckoRuntime.getDefault(context));
28 | session.getSettings().setDisplayMode(GeckoSessionSettings.DISPLAY_MODE_MINIMAL_UI);
29 | session.setNavigationDelegate(new GeckoSession.NavigationDelegate() {
30 | @Nullable
31 | @Override
32 | public GeckoResult onNewSession(@NonNull GeckoSession session1, @NonNull String uri) {
33 | session.loadUri(uri);
34 |
35 | return GeckoSession.NavigationDelegate.super.onNewSession(session, uri);
36 | }
37 | });
38 | geckoView.setSession(session);
39 | GeckoRuntimeSettings geckoRuntimeSettings = GeckoRuntime.getDefault(context).getSettings();
40 | geckoRuntimeSettings.setInputAutoZoomEnabled(true);
41 | geckoRuntimeSettings.setLoginAutofillEnabled(true);
42 | geckoRuntimeSettings.setAboutConfigEnabled(true);
43 | geckoRuntimeSettings.setAutomaticFontSizeAdjustment(true);
44 | geckoRuntimeSettings.setForceUserScalableEnabled(true);
45 | bottomSheetDialog.setContentView(popView);
46 | bottomSheetDialog.show();
47 |
48 |
49 |
50 |
51 |
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/components/popup/TabsPopup.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.components.popup;
2 |
3 | import android.content.Context;
4 | import android.content.DialogInterface;
5 | import android.util.Log;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 |
9 | import com.google.android.material.bottomsheet.BottomSheetDialog;
10 | import com.thallo.stage.R;
11 | import com.thallo.stage.databinding.PopupTabsBinding;
12 | import com.thallo.stage.tab.PageTab;
13 |
14 | import org.webrtc.EglBase10;
15 |
16 | import java.util.List;
17 |
18 | public class TabsPopup {
19 | PopupTabsBinding binding;
20 | List tabList;
21 | Context context;
22 | int index;
23 | MyBottomSheetDialog bottomSheetDialog;
24 | onAddNewTab onAddNewTab;
25 | public TabsPopup( Context context) {
26 | this.tabList = tabList;
27 | this.context = context;
28 | bottomSheetDialog = new MyBottomSheetDialog(context, R.style.BottomSheetDialog,2);
29 | binding=PopupTabsBinding.inflate(LayoutInflater.from(context));
30 | bottomSheetDialog.setContentView(binding.getRoot());
31 | bottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
32 | @Override
33 | public void onDismiss(DialogInterface dialogInterface) {
34 | binding.tabs.removeAllViews();
35 | }
36 | });
37 |
38 | }
39 | public void show(List tabList,int index){
40 | for (int i=0;i(){
12 |
13 | }.type
14 | return Gson().fromJson(value,type)
15 | }
16 | @TypeConverter
17 | fun userToString(user:DownloadTask): String {
18 | val gson = Gson()
19 | return gson.toJson(user)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/bookmark/Bookmark.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.bookmark;
2 | import androidx.room.ColumnInfo;
3 | import androidx.room.Entity;
4 | import androidx.room.PrimaryKey;
5 |
6 | @Entity
7 | public class Bookmark {
8 | @PrimaryKey(autoGenerate = true)
9 | private int id;
10 | @ColumnInfo(name = "url_info")
11 | private String url;
12 | @ColumnInfo(name = "title_info")
13 | private String title;
14 | @ColumnInfo(name = "file_name")
15 | private String file;
16 | @ColumnInfo(name = "show_info")
17 | private Boolean show;
18 | @ColumnInfo(name = "mix")
19 | private String mix;
20 | public Bookmark(String url, String title,String file,Boolean show) {
21 | this.url=url;
22 | this.title=title;
23 | this.file=file;
24 | this.show=show;
25 | this.mix=url+title;
26 |
27 | }
28 |
29 | public String getMix() {
30 | return mix;
31 | }
32 |
33 | public void setMix(String mix) {
34 | this.mix = mix;
35 | }
36 |
37 | public Boolean getShow() {
38 | return show;
39 | }
40 |
41 | public void setShow(Boolean show) {
42 | this.show = show;
43 | }
44 |
45 | public String getUrl() {
46 | return url;
47 | }
48 |
49 | public void setUrl(String url) {
50 | this.url = url;
51 | }
52 |
53 | public String getTitle() {
54 | return title;
55 | }
56 |
57 | public void setTitle(String title) {
58 | this.title = title;
59 | }
60 |
61 | public String getFile() {
62 | return file;
63 | }
64 |
65 | public void setFile(String file) {
66 | this.file = file;
67 | }
68 |
69 | public int getId() {
70 | return id;
71 | }
72 |
73 | public void setId(int id) {
74 | this.id = id;
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/bookmark/BookmarkDao.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.bookmark;
2 |
3 | import androidx.lifecycle.LiveData;
4 | import androidx.room.Dao;
5 | import androidx.room.Delete;
6 | import androidx.room.Insert;
7 | import androidx.room.Query;
8 | import androidx.room.Update;
9 |
10 |
11 | import java.util.List;
12 |
13 | @Dao
14 | public interface BookmarkDao {
15 | @Insert
16 | void insertBookmark(Bookmark... bookmarks);
17 | @Update
18 | void updateBookmark(Bookmark... bookmarks);
19 | @Delete
20 | void deleteBookmark(Bookmark... bookmarks);
21 | @Query("Delete FROM BOOKMARK")
22 | void deleteAllBookmark();
23 |
24 |
25 | @Query("SELECT * FROM Bookmark ORDER BY ID DESC")
26 | LiveData> getAllBookmarksLive();
27 | @Query("SELECT * FROM Bookmark WHERE url_info LIKE:pattern ORDER BY ID DESC")
28 | LiveData> findBookmarksWithPattern(String pattern);
29 | @Query("SELECT * FROM Bookmark WHERE title_info LIKE:pattern ORDER BY ID DESC")
30 | LiveData> findBookmarksWithTitle(String pattern);
31 | @Query("SELECT * FROM Bookmark WHERE show_info LIKE:pattern ORDER BY ID DESC")
32 | LiveData> findBookmarksWithShow(Boolean pattern);
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/bookmark/BookmarkViewModel.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.bookmark;
2 |
3 | import android.app.Application;
4 |
5 | import androidx.annotation.NonNull;
6 | import androidx.lifecycle.AndroidViewModel;
7 | import androidx.lifecycle.LiveData;
8 |
9 | import com.thallo.stage.database.bookmark.Bookmark;
10 |
11 | import java.util.List;
12 |
13 | public class BookmarkViewModel extends AndroidViewModel {
14 | BookmarkRepository bookmarkRepository;
15 | public BookmarkViewModel(@NonNull Application application) {
16 | super(application);
17 | bookmarkRepository=new BookmarkRepository(application);
18 | }
19 |
20 | public LiveData> getAllBookmarksLive() {
21 | return bookmarkRepository.getAllBookmarkLive();
22 | }
23 | public LiveData>findBookmarksWithPattern(String pattern){
24 | return bookmarkRepository.findBookmarksWithPattern(pattern);
25 | }
26 |
27 | LiveData>findBookmarksWithTitle(String pattern){
28 | return bookmarkRepository.findWordsWithTitle(pattern);
29 | }
30 | public LiveData>findBookmarksWithShow(Boolean pattern){
31 | return bookmarkRepository.findWordsWithShow(pattern);
32 | }
33 | public void insertWords(com.thallo.stage.database.bookmark.Bookmark... bookmarks) {
34 | bookmarkRepository.insertBookmark(bookmarks);
35 | }
36 | public void updateWords(com.thallo.stage.database.bookmark.Bookmark... bookmarks) {
37 | bookmarkRepository.updateBookmark(bookmarks);
38 | }
39 | public void deleteWords(com.thallo.stage.database.bookmark.Bookmark... bookmarks) {
40 | bookmarkRepository.deleteBookmark(bookmarks);
41 | }
42 | public void deleteAllWords() {
43 | bookmarkRepository.deleteAllbookmarks();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/download/Download.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.download;
2 |
3 | import androidx.room.ColumnInfo;
4 | import androidx.room.Embedded;
5 | import androidx.room.Entity;
6 | import androidx.room.PrimaryKey;
7 | import androidx.room.TypeConverters;
8 |
9 | import com.liulishuo.okdownload.DownloadTask;
10 |
11 | @Entity
12 | public class Download {
13 | @PrimaryKey(autoGenerate = true)
14 | private int id;
15 | @ColumnInfo(name = "id_info")
16 | private long ids;
17 |
18 |
19 |
20 |
21 | public Download(long ids) {
22 |
23 | this.ids=ids;
24 |
25 | }
26 | public int getId() {
27 | return id;
28 | }
29 |
30 | public void setId(int id) {
31 | this.id = id;
32 | }
33 |
34 | public long getIds() {
35 | return ids;
36 | }
37 |
38 | public void setIds(long ids) {
39 | this.ids = ids;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/download/DownloadDao.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.download;
2 |
3 | import androidx.lifecycle.LiveData;
4 | import androidx.room.Dao;
5 | import androidx.room.Delete;
6 | import androidx.room.Insert;
7 | import androidx.room.Query;
8 | import androidx.room.Update;
9 |
10 | import com.thallo.stage.database.bookmark.Bookmark;
11 |
12 | import java.util.List;
13 |
14 | @Dao
15 | public interface DownloadDao {
16 | @Insert
17 | void insertDownload(Download... downloads);
18 | @Update
19 | void updateDownload(Download... downloads);
20 | @Delete
21 | void deleteDownload(Download... downloads);
22 | @Query("Delete FROM DOWNLOAD")
23 | void deleteAllDownload();
24 |
25 |
26 | @Query("SELECT * FROM Download ORDER BY ID DESC")
27 | LiveData> getAllDownloadsLive();
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/download/DownloadViewModel.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.download;
2 |
3 | import android.app.Application;
4 |
5 | import androidx.annotation.NonNull;
6 | import androidx.lifecycle.AndroidViewModel;
7 | import androidx.lifecycle.LiveData;
8 |
9 | import com.thallo.stage.database.bookmark.Bookmark;
10 |
11 | import java.util.List;
12 |
13 | public class DownloadViewModel extends AndroidViewModel {
14 | DownloadRepository downloadRepository;
15 | public DownloadViewModel(@NonNull Application application) {
16 | super(application);
17 | downloadRepository=new DownloadRepository(application);
18 | }
19 |
20 | public LiveData> getAllDownloadsLive() {
21 | return downloadRepository.getAllDownloadLive();
22 | }
23 |
24 | public void insertWords(Download... downloads) {
25 | downloadRepository.insertDownload(downloads);
26 | }
27 | public void updateWords(Download... downloads) {
28 | downloadRepository.updateDownload(downloads);
29 | }
30 | public void deleteWords(Download... downloads) {
31 | downloadRepository.deleteDownload(downloads);
32 | }
33 | public void deleteAllWords() {
34 | downloadRepository.deleteAlldownloads();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/history/History.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.history;
2 |
3 | import androidx.room.ColumnInfo;
4 | import androidx.room.Entity;
5 | import androidx.room.PrimaryKey;
6 |
7 | @Entity
8 | public class History {
9 | @PrimaryKey(autoGenerate = true)
10 | private int id;
11 | @ColumnInfo(name = "url_info")
12 | private String url;
13 | @ColumnInfo(name = "title_info")
14 | private String title;
15 | @ColumnInfo(name = "time_info")
16 | private int time;
17 | @ColumnInfo(name = "mix")
18 | private String mix;
19 | public History(String url, String title,int time) {
20 | this.url=url;
21 | this.title=title;
22 | this.time=time;
23 | this.mix=url+title;
24 |
25 | }
26 |
27 | public String getMix() {
28 | return mix;
29 | }
30 |
31 | public void setMix(String mix) {
32 | this.mix = mix;
33 | }
34 |
35 | public int getId() {
36 | return id;
37 | }
38 |
39 | public void setId(int id) {
40 | this.id = id;
41 | }
42 |
43 | public String getUrl() {
44 | return url;
45 | }
46 |
47 | public void setUrl(String url) {
48 | this.url = url;
49 | }
50 |
51 | public String getTitle() {
52 | return title;
53 | }
54 |
55 | public void setTitle(String title) {
56 | this.title = title;
57 | }
58 |
59 | public int getTime() {
60 | return time;
61 | }
62 |
63 | public void setTime(int time) {
64 | this.time = time;
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/history/HistoryDao.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.history;
2 |
3 | import androidx.lifecycle.LiveData;
4 | import androidx.room.Dao;
5 | import androidx.room.Delete;
6 | import androidx.room.Insert;
7 | import androidx.room.Query;
8 | import androidx.room.Update;
9 |
10 | import java.util.List;
11 | @Dao
12 | public interface HistoryDao {
13 | @Insert
14 | void insertHistory(com.thallo.stage.database.history.History... histories) ;
15 |
16 | @Update
17 | void updateHistory(com.thallo.stage.database.history.History... histories);
18 |
19 | @Delete
20 | void deleteHistory(com.thallo.stage.database.history.History... histories);
21 |
22 | @Query("DELETE FROM HISTORY")
23 | void deleteAllHistories();
24 |
25 |
26 | @Query("SELECT * FROM HISTORY ORDER BY ID DESC")
27 | LiveData> getAllHistoriesLive();
28 |
29 | @Query("SELECT * FROM History WHERE url_info LIKE:pattern ORDER BY ID DESC")
30 | LiveData> findHistoriesWithPattern(String pattern);
31 |
32 | @Query("SELECT * FROM History WHERE title_info LIKE:pattern ORDER BY ID DESC")
33 | LiveData> findHistoriesWithTitle(String pattern);
34 | @Query("SELECT * FROM History WHERE mix LIKE:pattern ORDER BY ID DESC")
35 | LiveData> findHistoriesWithMix(String pattern);
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/database/history/HistoryViewModel.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.database.history;
2 |
3 | import android.app.Application;
4 |
5 | import androidx.annotation.NonNull;
6 | import androidx.lifecycle.AndroidViewModel;
7 | import androidx.lifecycle.LiveData;
8 |
9 | import java.util.List;
10 |
11 | public class HistoryViewModel extends AndroidViewModel {
12 | private HistoryRepository historyRepository;
13 | public HistoryViewModel(@NonNull Application application) {
14 | super(application);
15 | historyRepository = new HistoryRepository(application);
16 | }
17 |
18 | public LiveData> getAllHistoriesLive()
19 | {
20 | return historyRepository.getAllHistoriesLive();
21 | }
22 | LiveData>findHistoriesWithPattern(String pattern){
23 | return historyRepository.findHistoriesWithPattern(pattern);
24 | }
25 |
26 | LiveData>findHistoriesWithTitle(String pattern){
27 | return historyRepository.findWordsWithTitle(pattern);
28 | }
29 | LiveData>findHistoriesWithMix(String pattern){
30 | return historyRepository.findWordsWithMix(pattern);
31 | }
32 |
33 |
34 | public void insertWords(com.thallo.stage.database.history.History... histories) {
35 | historyRepository.insertHistory(histories);
36 | }
37 | public void updateWords(com.thallo.stage.database.history.History... histories) {
38 | historyRepository.updateHistory(histories);
39 | }
40 | public void deleteWords(com.thallo.stage.database.history.History... histories) {
41 | historyRepository.deleteHistory(histories);
42 | }
43 | public void deleteAllWords() {
44 | historyRepository.deleteAllHistories();
45 | }
46 |
47 |
48 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/download/DownloadFragment.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.download;
2 |
3 | import android.os.Bundle;
4 |
5 | import androidx.fragment.app.Fragment;
6 | import androidx.lifecycle.Observer;
7 | import androidx.lifecycle.ViewModelProvider;
8 | import androidx.lifecycle.ViewModelStoreOwner;
9 | import androidx.recyclerview.widget.LinearLayoutManager;
10 |
11 | import android.view.LayoutInflater;
12 | import android.view.View;
13 | import android.view.ViewGroup;
14 |
15 | import com.thallo.stage.R;
16 | import com.thallo.stage.database.download.Download;
17 | import com.thallo.stage.database.download.DownloadViewModel;
18 | import com.thallo.stage.databinding.FragmentDownloadBinding;
19 |
20 | import java.util.List;
21 |
22 |
23 | public class DownloadFragment extends Fragment {
24 | FragmentDownloadBinding binding;
25 | DownloadViewModel downloadViewModel;
26 | DownloadAdapter downloadAdapter;
27 |
28 | @Override
29 | public void onCreate(Bundle savedInstanceState) {
30 | super.onCreate(savedInstanceState);
31 |
32 | }
33 |
34 | @Override
35 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
36 | Bundle savedInstanceState) {
37 | binding=FragmentDownloadBinding.inflate(inflater,container,false);
38 | binding.downloadRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
39 | binding.toolbar.setTitle(R.string.pop_download);
40 | binding.toolbar.setNavigationOnClickListener(new View.OnClickListener() {
41 | @Override
42 | public void onClick(View view) {
43 | getActivity().finish();
44 | }
45 | });
46 |
47 | downloadViewModel=new ViewModelProvider((ViewModelStoreOwner) getContext()).get(DownloadViewModel.class);
48 | downloadAdapter= new DownloadAdapter();
49 | downloadAdapter.setDownloadViewModel(downloadViewModel);
50 | downloadViewModel.getAllDownloadsLive().observe(getViewLifecycleOwner(), new Observer>() {
51 | @Override
52 | public void onChanged(List downloads) {
53 |
54 | downloadAdapter.setAllDownload(downloads);
55 | binding.downloadRecycler.setAdapter(downloadAdapter);
56 | }
57 | });
58 |
59 | // Inflate the layout for this fragment
60 | return binding.getRoot();
61 | }
62 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/extension/AddOns.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.extension;
2 |
3 | import android.graphics.Bitmap;
4 | import android.media.Image;
5 |
6 | public class AddOns {
7 | private String name;
8 | private Bitmap imageId;
9 |
10 | public AddOns(String name, Bitmap imageId) {
11 | this.name = name;
12 | this.imageId = imageId;
13 | }
14 |
15 | public String getName() {
16 | return name;
17 | }
18 |
19 | public Bitmap getImageId() {
20 | return imageId;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/history/HistoryFragment.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.history;
2 |
3 | import android.os.Bundle;
4 |
5 | import androidx.fragment.app.Fragment;
6 | import androidx.fragment.app.FragmentActivity;
7 | import androidx.lifecycle.LifecycleOwner;
8 | import androidx.lifecycle.Observer;
9 | import androidx.lifecycle.ViewModelProvider;
10 | import androidx.recyclerview.widget.LinearLayoutManager;
11 |
12 | import android.view.LayoutInflater;
13 | import android.view.View;
14 | import android.view.ViewGroup;
15 |
16 | import com.thallo.stage.R;
17 | import com.thallo.stage.database.history.History;
18 | import com.thallo.stage.database.history.HistoryViewModel;
19 | import com.thallo.stage.databinding.FragmentHistoryBinding;
20 |
21 | import java.util.List;
22 |
23 |
24 | public class HistoryFragment extends Fragment {
25 | HistoryViewModel historyViewModel;
26 | FragmentHistoryBinding binding;
27 | MyAdapter myAdapter;
28 |
29 |
30 | @Override
31 | public void onCreate(Bundle savedInstanceState) {
32 | super.onCreate(savedInstanceState);
33 |
34 | }
35 |
36 | @Override
37 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
38 | Bundle savedInstanceState) {
39 | binding=FragmentHistoryBinding.inflate(inflater,container,false);
40 | binding.historyRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
41 | binding.toolbar.setTitle(R.string.pop_history);
42 | binding.toolbar.setNavigationOnClickListener(new View.OnClickListener() {
43 | @Override
44 | public void onClick(View view) {
45 | getActivity().finish();
46 | }
47 | });
48 |
49 | myAdapter=new MyAdapter();
50 | historyViewModel= new ViewModelProvider((FragmentActivity)getContext()).get(HistoryViewModel.class);
51 | historyViewModel.getAllHistoriesLive().observe((LifecycleOwner) this, histories -> {
52 | myAdapter.setAllHistory(histories);
53 | binding.historyRecycler.setAdapter(myAdapter);
54 | binding.historyRecycler.setItemViewCacheSize(histories.size());
55 | if (histories.size()==0) binding.lottie.setVisibility(View.VISIBLE);
56 | else binding.lottie.setVisibility(View.GONE);
57 | });
58 | binding.lottie.loop(true);
59 | binding.lottie.playAnimation();
60 |
61 |
62 |
63 |
64 | // Inflate the layout for this fragment
65 | return binding.getRoot();
66 | }
67 |
68 |
69 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/interfaces/confirm.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.interfaces;
2 |
3 | import com.thallo.stage.databinding.TabBinding;
4 |
5 | import org.mozilla.geckoview.GeckoResult;
6 |
7 | public interface confirm {
8 | void getConfirm(GeckoResult i);
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/thallo/stage/tab/PageTab.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage.tab;
2 |
3 | import android.content.Context;
4 | import android.graphics.Bitmap;
5 | import android.graphics.BitmapFactory;
6 | import android.graphics.Color;
7 | import android.net.Uri;
8 | import android.util.AttributeSet;
9 | import android.util.Log;
10 | import android.view.LayoutInflater;
11 | import android.widget.RelativeLayout;
12 |
13 | import com.bumptech.glide.Glide;
14 | import com.thallo.stage.WebSessionViewModel;
15 | import com.thallo.stage.databinding.TabBinding;
16 |
17 | import java.net.MalformedURLException;
18 | import java.net.URL;
19 |
20 | public class PageTab extends RelativeLayout {
21 | TabBinding binding;
22 |
23 | public PageTab(Context context, WebSessionViewModel model){
24 | this(context);
25 | binding.setSession(model);
26 |
27 |
28 |
29 |
30 |
31 | }
32 | public PageTab(Context context) {
33 | this(context,(AttributeSet) null);
34 | }
35 |
36 | public PageTab(Context context, AttributeSet attrs) {
37 | super(context, attrs);
38 | initUI(context);
39 |
40 | }
41 |
42 | private void initUI(Context context){
43 | binding=TabBinding.inflate(LayoutInflater.from(context),this,true);
44 | }
45 | public WebSessionViewModel getModel() {
46 | return binding.getSession();
47 | }
48 |
49 | public TabBinding getBinding() {
50 | return binding;
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/fad_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/fad_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
15 |
18 |
21 |
22 |
23 |
24 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_edittext.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_qr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_search_icon.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_setting.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
10 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_setting_anddons.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_setting_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
10 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_shap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_shortcuts.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_test.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_trans.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_white_rounded.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/circle_check.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_addons.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_android.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_up_right_circle.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
11 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baidu.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bing.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_brand_telegram.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_broken_lock.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
15 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_broken_shield.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bulb.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bulb_off.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle2.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_check.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clear.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clear_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_copy.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_delete.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_desk.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
11 |
14 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_desktop_on.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_download.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_edit.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_edit2.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_extensions.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_file.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_forward.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_google.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_history.xml:
--------------------------------------------------------------------------------
1 |
4 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_home.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_information.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_internet.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
11 |
15 |
19 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_left.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_left_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu2.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu3.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reload.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_right.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_round_star.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_safe.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_scan.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
16 |
20 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_scan_view.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
16 |
20 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_setting.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_share.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
12 |
16 |
20 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_shield.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sogou.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_star.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_tabs.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_trash.xml:
--------------------------------------------------------------------------------
1 |
4 |
7 |
10 |
13 |
17 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_video.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/drawable/logo.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
6 |
8 |
9 |
10 |
12 |
13 |
14 |
15 | -
16 |
17 |
18 |
19 |
21 |
22 |
25 |
26 |
27 |
28 |
29 | -
30 |
31 |
32 |
33 |
35 |
36 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/progress_circle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | -
6 |
9 |
10 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | -
24 |
25 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/search.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shirt.xml:
--------------------------------------------------------------------------------
1 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_fragment_holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
13 |
14 |
22 |
23 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/addons_icons.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
18 |
19 |
30 |
31 |
38 |
39 |
46 |
47 |
50 |
51 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/addons_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/addons_list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
19 |
20 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/addons_manager_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
23 |
24 |
33 |
34 |
45 |
46 |
54 |
55 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/addons_window.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/content_fragment_holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dia_agreement.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
26 |
27 |
38 |
39 |
50 |
51 |
63 |
64 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dia_choice.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
25 |
26 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dia_install.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
23 |
24 |
37 |
38 |
47 |
48 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dia_permission.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
20 |
21 |
30 |
31 |
38 |
39 |
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dia_search_select.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dia_web.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
12 |
13 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_download.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
14 |
15 |
18 |
19 |
29 |
30 |
40 |
41 |
42 |
43 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_first.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
18 |
19 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
12 |
16 |
17 |
20 |
21 |
32 |
33 |
44 |
45 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_o_s.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
13 |
14 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_second.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
17 |
18 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/n.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
18 |
19 |
28 |
29 |
37 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/popup.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/popup_intent.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
20 |
21 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/popup_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/popup_qr.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/se_select.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
29 |
30 |
40 |
41 |
49 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/setting.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
14 |
15 |
21 |
22 |
35 |
36 |
37 |
47 |
48 |
49 |
50 |
60 |
61 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/switch_item.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/addons_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/bookmark_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_3_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-hdpi/ic_launcher_3.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-hdpi/ic_launcher_3_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_3_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-hdpi/ic_launcher_3_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-mdpi/ic_launcher_3.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-mdpi/ic_launcher_3_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_3_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-mdpi/ic_launcher_3_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xhdpi/ic_launcher_3.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xhdpi/ic_launcher_3_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_3_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xhdpi/ic_launcher_3_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xxhdpi/ic_launcher_3.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xxhdpi/ic_launcher_3_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xxhdpi/ic_launcher_3_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xxxhdpi/ic_launcher_3.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xxxhdpi/ic_launcher_3_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/app/src/main/res/mipmap-xxxhdpi/ic_launcher_3_round.png
--------------------------------------------------------------------------------
/app/src/main/res/navigation/holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
18 |
22 |
26 |
31 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/navigation/nav_graph.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
14 |
15 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/values-large/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 0dp
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #cac4d0
5 | #1C1B1F
6 | #59000000
7 | #241A2A
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - @string/baidu
5 | - @string/google
6 | - @string/bing
7 | - @string/sogou
8 |
9 |
10 |
11 | - 百度
12 | - 谷歌
13 | - 必应
14 | - 搜狗
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #E1BEE7
4 | #EDE7F6
5 | #FF6200EE
6 | #651FFF
7 | #6750a4
8 | #D1C4E9
9 | #FF018786
10 | #FF000000
11 | #FFFFFFFF
12 | #E8EAF6
13 | #FF000000
14 | #00FFFFFF
15 | #80000000
16 | #FFFBFE
17 | #80FBEEFE
18 | #FBEEFE
19 | #0DAA00FF
20 | #FFFBFE
21 | #4CAF50
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 32dp
4 | 10sp
5 | 24dp
6 | 16dp
7 | 48dp
8 | 16dp
9 | 64dp
10 | 64dp
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_3_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFBFE
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_new_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/style.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
11 |
14 |
15 |
18 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
17 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/activity_main_xml_constraintlayout_scene.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/filepaths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/root_preferences.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
8 |
9 |
10 |
18 |
22 |
23 |
24 |
25 |
26 |
27 |
32 |
37 |
42 |
43 |
48 |
49 |
50 |
55 |
56 |
57 |
62 |
66 |
67 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/app/src/test/java/com/thallo/stage/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.thallo.stage;
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 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 |
4 |
5 | buildscript {
6 | ext.kotlin_version = '1.7.10'
7 | repositories {
8 | google()
9 | mavenCentral()
10 | }
11 | dependencies {
12 | classpath 'com.android.tools.build:gradle:7.3.1'
13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
14 | // NOTE: Do not place your application dependencies here; they belong
15 | // in the individual module build.gradle files
16 | }
17 |
18 | }
19 |
20 |
21 | task clean(type: Delete) {
22 | delete rootProject.buildDir
23 | }
--------------------------------------------------------------------------------
/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 | # Automatically convert third-party libraries to use AndroidX
19 | android.enableJetifier=true
20 | android.injected.testOnly=false
21 | android.useDeprecatedNdk=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thalloerupt/stage/872b5faecf4e12854322afe1dbbb3182ebe446cf/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Mar 14 22:40:15 SGT 2022
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/local.properties:
--------------------------------------------------------------------------------
1 | ## This file is automatically generated by Android Studio.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file should *NOT* be checked into Version Control Systems,
5 | # as it contains information specific to your local configuration.
6 | #
7 | # Location of the SDK. This is only used by Gradle.
8 | # For customization when using a Version Control System, please read the
9 | # header note.
10 | sdk.dir=C\:\\Users\\luoyf\\AppData\\Local\\Android\\Sdk
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | dependencyResolutionManagement {
2 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
3 | repositories {
4 | google()
5 | mavenCentral()
6 | jcenter()
7 | maven {
8 | url 'https://jitpack.io'
9 | }// Warning: this repository is going to shut down soon
10 | maven { url "https://maven.mozilla.org/maven2/" }
11 | }
12 | }
13 | rootProject.name = "stage"
14 | include ':app'
15 |
--------------------------------------------------------------------------------