commit 0a74f4e2be11bfd8de0faf059e1af4fbc05c8ddb Author: 453530270@qq.com Date: Tue Nov 14 17:27:07 2023 +0800 初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..019529e --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..ae388c2 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8978d23 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..49be5eb --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'com.android.application' +} + +android { + namespace 'com.ggl.dggapp' + compileSdk 33 + + defaultConfig { + applicationId "com.ggl.dggapp" + minSdk 24 + targetSdk 33 + versionCode 1 + versionName "1.0" + +// testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" +// versionNameSuffix '1.0.1' +// applicationIdSuffix 'dggapp' + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + +// implementation 'ren.yale.android:cachewebviewlib:2.2.1' //通过拦截资源实现自定义缓存静态资源 + implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'com.google.android.material:material:1.5.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/release/app-dgg_v1.0.5.apk b/app/release/app-dgg_v1.0.5.apk new file mode 100644 index 0000000..0f38d74 Binary files /dev/null and b/app/release/app-dgg_v1.0.5.apk differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json new file mode 100644 index 0000000..5530825 --- /dev/null +++ b/app/release/output-metadata.json @@ -0,0 +1,20 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.ggl.dggapp", + "variantName": "release", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": 1, + "versionName": "1.0", + "outputFile": "app-release.apk" + } + ], + "elementType": "File" +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/ggl/dggapp/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/ggl/dggapp/ExampleInstrumentedTest.java new file mode 100644 index 0000000..4bd550e --- /dev/null +++ b/app/src/androidTest/java/com/ggl/dggapp/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.ggl.dggapp; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.ggl.dggapp", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..21bdf70 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/ggl/dggapp/MainActivity.java b/app/src/main/java/com/ggl/dggapp/MainActivity.java new file mode 100644 index 0000000..0f88c6d --- /dev/null +++ b/app/src/main/java/com/ggl/dggapp/MainActivity.java @@ -0,0 +1,237 @@ +package com.ggl.dggapp; + + + +import androidx.appcompat.app.AppCompatActivity; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.ClipData; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.net.http.SslError; +import android.os.Build; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.Window; +import android.webkit.SslErrorHandler; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import com.ggl.dggapp.ui.StatusBar; + +public class MainActivity extends AppCompatActivity { + // web 浏览器组件 + private RelativeLayout mywebLayout; + private WebView web = null; + //make HTML upload button work in Webview + private ValueCallback uploadMessage; + private ValueCallback uploadMessageAboveL; + private final static int FILE_CHOOSER_RESULT_CODE = 10000; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // 状态栏 + // SetContentView()之前调用 +// StatusBar statusBar = new StatusBar(MainActivity.this); + //设置颜色为半透明 +// statusBar.setColor(R.color.translucent); + //设置颜色为透明 +// statusBar.setColor(R.color.transparent); + //隐藏状态栏 +// statusBar.hide(); + // 执行主要窗口 + setContentView(R.layout.activity_main); + + // + initView(); + initData(); + } + + private void initView() { + mywebLayout = (RelativeLayout) findViewById(R.id.mywebLayout); + } + + /** + * 退出 + */ + @Override + public void onDestroy() { + super.onDestroy(); + mywebLayout.removeView(web); + web.removeAllViews(); + web.destroy(); + } + + private void initData() { + setWebView(); + } + + private void setWebView() { + if(web == null) { + web = new WebView(this); + + web.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + mywebLayout.addView(web); + } + + // String url = getIntent().getStringExtra("url"); +// String url ="https://ggl.dingguagua.vip/#/"; + String url = "https://apps.dingguagua.vip/#/"; + + web.getSettings().setJavaScriptEnabled(true); //加上这一行网页为响应式的 + web.getSettings().setPluginState(WebSettings.PluginState.ON); + web.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); + web.getSettings().setAllowFileAccess(true); + web.getSettings().setDefaultTextEncodingName("UTF-8"); + web.getSettings().setLoadWithOverviewMode(true); + web.getSettings().setUseWideViewPort(true); + //设置缓存大小为50M + web.getSettings().setCacheMode(50*1024*1024); + //Dom Storage 缓存机 + web.getSettings().setDomStorageEnabled(true); + + web.setInitialScale(100); + web.loadUrl(url); + + /** + * 处理webclient + */ + web.setWebViewClient(new WebViewClient(){ + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; //返回true, 立即跳转,返回false,打开网页有延时 + } + + /** + * 处理ssl请求 + */ + @Override + public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { + handler.proceed(); + } + + @Override + public void onPageFinished( WebView view, String url) { + web.clearCache(true); + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + super.onPageStarted(view, url, favicon); + } + }); + + /** + * webs + */ + web.setWebChromeClient(new WebChromeClient() { + /** + * 显示自定义视图,无此方法视频不能播放 + */ + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + super.onShowCustomView(view, callback); + } + // For Android < 3.0 + public void openFileChooser(ValueCallback valueCallback) { + uploadMessage = valueCallback; + openImageChooserActivity(); + } + + // For Android >= 3.0 + public void openFileChooser(ValueCallback valueCallback, String acceptType) { + uploadMessage = valueCallback; + openImageChooserActivity(); + } + + //For Android >= 4.1 + public void openFileChooser(ValueCallback valueCallback, String acceptType, String capture) { + uploadMessage = valueCallback; + openImageChooserActivity(); + } + + // For Android >= 5.0 + @Override + public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { + uploadMessageAboveL = filePathCallback; + openImageChooserActivity(); + return true; + } + }); + + // 监听前进后退 + web.setOnKeyListener(new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + // 按键按下后 + if (event.getAction() == KeyEvent.ACTION_DOWN) { + //按返回键操作并且能回退网页 + if (keyCode == KeyEvent.KEYCODE_BACK && web.canGoBack()) { + //后退 + web.goBack(); + return true; + } + } + return false; + } + }); + } + //这里定义具体上传函数 + private void openImageChooserActivity() { + Intent i = new Intent(Intent.ACTION_GET_CONTENT); + i.addCategory(Intent.CATEGORY_OPENABLE); + i.setType("image/*"); + startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == FILE_CHOOSER_RESULT_CODE) { + if (null == uploadMessage && null == uploadMessageAboveL) return; + Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); + if (uploadMessageAboveL != null) { + onActivityResultAboveL(requestCode, resultCode, data); + } else if (uploadMessage != null) { + uploadMessage.onReceiveValue(result); + uploadMessage = null; + } + } + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) { + if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null) + return; + Uri[] results = null; + if (resultCode == Activity.RESULT_OK) { + if (intent != null) { + String dataString = intent.getDataString(); + ClipData clipData = intent.getClipData(); + if (clipData != null) { + results = new Uri[clipData.getItemCount()]; + for (int i = 0; i < clipData.getItemCount(); i++) { + ClipData.Item item = clipData.getItemAt(i); + results[i] = item.getUri(); + } + } + if (dataString != null) + results = new Uri[]{Uri.parse(dataString)}; + } + } + uploadMessageAboveL.onReceiveValue(results); + uploadMessageAboveL = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ggl/dggapp/ui/StatusBar.java b/app/src/main/java/com/ggl/dggapp/ui/StatusBar.java new file mode 100644 index 0000000..4e930cd --- /dev/null +++ b/app/src/main/java/com/ggl/dggapp/ui/StatusBar.java @@ -0,0 +1,48 @@ +package com.ggl.dggapp.ui; + +import android.app.Activity; +import android.os.Build; +import android.view.View; +import android.view.WindowManager; + +/** + * 状态栏的状态 + */ +public class StatusBar { + private Activity activity; + + //初始化activity + public StatusBar(Activity activity){ + this.activity = activity; + } + + //将状态栏设置为传入的color + public void setColor(int color){ + if (Build.VERSION.SDK_INT >= 21) { + View view = activity.getWindow().getDecorView(); + view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + activity.getWindow().setStatusBarColor(activity.getResources().getColor(color)); + } + } + + //隐藏状态栏 + public void hide(){ + if (Build.VERSION.SDK_INT >= 21) { + activity.getWindow() + .setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + } + + //设置状态栏字体颜色 + public void setTextColor(boolean isDarkBackground){ + View decor = activity.getWindow().getDecorView(); + if (isDarkBackground) { + //黑暗背景字体浅色 + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + } else { + //高亮背景字体深色 + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + } + +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..1392ced --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/dgglogo.png b/app/src/main/res/mipmap-hdpi/dgglogo.png new file mode 100644 index 0000000..edccf64 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/dgglogo.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/dgglogo.png b/app/src/main/res/mipmap-mdpi/dgglogo.png new file mode 100644 index 0000000..edccf64 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/dgglogo.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/dgglogo.png b/app/src/main/res/mipmap-xhdpi/dgglogo.png new file mode 100644 index 0000000..edccf64 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/dgglogo.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/dgglogo.png b/app/src/main/res/mipmap-xxhdpi/dgglogo.png new file mode 100644 index 0000000..edccf64 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/dgglogo.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/dgglogo.png b/app/src/main/res/mipmap-xxxhdpi/dgglogo.png new file mode 100644 index 0000000..edccf64 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/dgglogo.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..bb982ee --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..3498b21 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,9 @@ + + + #FF000000 + #FFFFFFFF + + #00000000 + + #22050505 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..63a40f4 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + 顶呱刮 + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..6e2c2a9 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,12 @@ + + + + +