diff --git a/app/app.md b/app/app.md
deleted file mode 100644
index e69de29..0000000
diff --git a/app/app.perl b/app/app.perl
deleted file mode 100644
index e69de29..0000000
diff --git a/app/app.php b/app/app.php
deleted file mode 100644
index e69de29..0000000
diff --git a/app/app.py b/app/app.py
deleted file mode 100644
index e69de29..0000000
diff --git a/app/app.sh b/app/app.sh
deleted file mode 100644
index e69de29..0000000
diff --git a/app/app.txt b/app/app.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/app/build.gradle b/app/build.gradle
index 73dcdaf..9efa77b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -19,17 +19,17 @@ def genVersionName(def versionName){
android {
compileSdkVersion 32
- buildToolsVersion "33.0.3"
+ buildToolsVersion "32.0.0"
defaultConfig {
applicationId "cc.winboll.studio.app"
- minSdkVersion 21
- targetSdkVersion 30
+ minSdkVersion 24
+ targetSdkVersion 29
versionCode 1
// versionName 更新后需要手动设置
// 项目模块目录的 build.gradle 文件的 stageCount=0
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
- versionName "1.8"
+ versionName "15.0"
if(true) {
versionName = genVersionName("${versionName}")
}
@@ -41,14 +41,32 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_17
- targetCompatibility JavaVersion.VERSION_17
- }
}
dependencies {
- api project(':winboll-shared')
- api fileTree(dir: 'libs', include: ['*.jar'])
+ api fileTree(dir: 'libs', include: ['*.jar'])
+ // SSH
+ api 'com.jcraft:jsch:0.1.55'
+ // Html 解析
+ api 'org.jsoup:jsoup:1.13.1'
+ // 二维码类库
+ api 'com.google.zxing:core:3.4.1'
+ api 'com.journeyapps:zxing-android-embedded:3.6.0'
+ // 应用介绍页类库
+ api 'io.github.medyo:android-about-page:2.0.0'
+ // 吐司类库
+ api 'com.github.getActivity:ToastUtils:10.5'
+ // 网络连接类库
+ api 'com.squareup.okhttp3:okhttp:4.4.1'
+ // AndroidX 类库
+ api 'androidx.appcompat:appcompat:1.1.0'
+ api 'com.google.android.material:material:1.4.0'
+ //api 'androidx.viewpager:viewpager:1.0.0'
+ //api 'androidx.vectordrawable:vectordrawable:1.1.0'
+ //api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
+ //api 'androidx.fragment:fragment:1.1.0'
+
+ api 'cc.winboll.studio:libaes:15.2.4'
+ api 'cc.winboll.studio:libapputils:15.2.1'
+ api 'cc.winboll.studio:libappbase:15.2.2'
}
diff --git a/app/build.properties b/app/build.properties
index 89a998f..f17a6f0 100644
--- a/app/build.properties
+++ b/app/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Sun Jan 05 07:55:24 HKT 2025
-stageCount=17
-libraryProject=winboll-shared
-baseVersion=1.8
-publishVersion=1.8.16
+#Tue Apr 01 13:50:28 HKT 2025
+stageCount=2
+libraryProject=
+baseVersion=15.0
+publishVersion=15.0.1
buildCount=0
-baseBetaVersion=1.8.17
+baseBetaVersion=15.0.2
diff --git a/app/src/beta/res/values/strings.xml b/app/src/beta/res/values/strings.xml
index 520e813..0c6be52 100644
--- a/app/src/beta/res/values/strings.xml
+++ b/app/src/beta/res/values/strings.xml
@@ -1,6 +1,6 @@
- WinBoll-APP+
+ APP+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2f401d1..8bc18a6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -11,7 +11,7 @@
android:allowBackup="true"
android:icon="@drawable/ic_winboll"
android:label="@string/app_name"
- android:theme="@style/WinBoll.SupportThemeNoActionBar"
+ android:theme="@style/AESTheme"
android:supportsRtl="true">
+
diff --git a/app/src/main/java/cc/winboll/studio/app/AboutActivity.java b/app/src/main/java/cc/winboll/studio/app/AboutActivity.java
new file mode 100644
index 0000000..f723fc7
--- /dev/null
+++ b/app/src/main/java/cc/winboll/studio/app/AboutActivity.java
@@ -0,0 +1,88 @@
+package cc.winboll.studio.app;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/03/24 23:52:29
+ * @Describe 应用介绍窗口
+ */
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import androidx.appcompat.widget.Toolbar;
+import cc.winboll.studio.app.R;
+import cc.winboll.studio.libaes.winboll.APPInfo;
+import cc.winboll.studio.libaes.winboll.AboutView;
+import cc.winboll.studio.libappbase.GlobalApplication;
+import cc.winboll.studio.libappbase.winboll.IWinBollActivity;
+
+public class AboutActivity extends WinBollActivity implements IWinBollActivity {
+
+ public static final String TAG = "AboutActivity";
+
+ Context mContext;
+ Toolbar mToolbar;
+
+ @Override
+ public Activity getActivity() {
+ return this;
+ }
+
+ @Override
+ public String getTag() {
+ return TAG;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mContext = this;
+ setContentView(R.layout.activity_about);
+
+ mToolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(mToolbar);
+ mToolbar.setSubtitle(TAG);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ AboutView aboutView = CreateAboutView();
+ // 在 Activity 的 onCreate 或其他生命周期方法中调用
+// LinearLayout layout = new LinearLayout(this);
+// layout.setOrientation(LinearLayout.VERTICAL);
+// // 创建布局参数(宽度和高度)
+// ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
+// ViewGroup.LayoutParams.MATCH_PARENT,
+// ViewGroup.LayoutParams.MATCH_PARENT
+// );
+// addContentView(aboutView, params);
+
+ LinearLayout layout = findViewById(R.id.aboutviewroot_ll);
+ // 创建布局参数(宽度和高度)
+ ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ );
+ layout.addView(aboutView, params);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ }
+
+ public AboutView CreateAboutView() {
+ String szBranchName = "app";
+ APPInfo appInfo = new APPInfo();
+ appInfo.setAppName("APP");
+ appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll);
+ appInfo.setAppDescription("WinBoll APP");
+ appInfo.setAppGitName("APP");
+ appInfo.setAppGitOwner("Studio");
+ appInfo.setAppGitAPPBranch(szBranchName);
+ appInfo.setAppGitAPPSubProjectFolder(szBranchName);
+ appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=APP");
+ appInfo.setAppAPKName("APP");
+ appInfo.setAppAPKFolderName("APP");
+ return new AboutView(mContext, appInfo);
+ }
+}
diff --git a/app/src/main/java/cc/winboll/studio/app/App.java b/app/src/main/java/cc/winboll/studio/app/App.java
index fd86979..a0cdd68 100644
--- a/app/src/main/java/cc/winboll/studio/app/App.java
+++ b/app/src/main/java/cc/winboll/studio/app/App.java
@@ -5,20 +5,26 @@ package cc.winboll.studio.app;
* @Date 2024/12/08 15:10:51
* @Describe 全局应用类
*/
-import cc.winboll.studio.shared.app.WinBollApplication;
-import cc.winboll.studio.shared.log.LogUtils;
+import android.view.Gravity;
+import cc.winboll.studio.libappbase.GlobalApplication;
+import cc.winboll.studio.libappbase.winboll.WinBollActivityManager;
+import com.hjq.toast.ToastUtils;
-public class App extends WinBollApplication {
+public class App extends GlobalApplication {
public static final String TAG = "App";
@Override
public void onCreate() {
- // 必须在调用基类前设置应用调试标志,
- // 这样可以预先设置日志与数据的存储根目录。
- //setIsDebug(BuildConfig.DEBUG);
super.onCreate();
- LogUtils.d(TAG, "onCreate");
- }
+ // 初始化 Toast 框架
+ ToastUtils.init(this);
+ // 设置 Toast 布局样式
+ //ToastUtils.setView(R.layout.toast_custom_view);
+ //ToastUtils.setStyle(new WhiteToastStyle());
+ ToastUtils.setGravity(Gravity.BOTTOM, 0, 200);
+
+ getWinBollActivityManager().setWinBollUI_TYPE(WinBollActivityManager.WinBollUI_TYPE.Service);
+ }
}
diff --git a/app/src/main/java/cc/winboll/studio/app/MainActivity.java b/app/src/main/java/cc/winboll/studio/app/MainActivity.java
index 167b517..7fecc6d 100644
--- a/app/src/main/java/cc/winboll/studio/app/MainActivity.java
+++ b/app/src/main/java/cc/winboll/studio/app/MainActivity.java
@@ -1,98 +1,26 @@
package cc.winboll.studio.app;
+import android.app.Activity;
import android.content.Intent;
-import android.net.Uri;
import android.os.Bundle;
-import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import androidx.appcompat.widget.Toolbar;
-import cc.winboll.studio.shared.app.WinBollActivity;
-import cc.winboll.studio.shared.app.WinBollActivityManager;
-import cc.winboll.studio.shared.app.WinBollApplication;
-import cc.winboll.studio.shared.log.LogUtils;
-import cc.winboll.studio.shared.util.UriUtils;
-import cc.winboll.studio.shared.view.StringToQrCodeView;
-import cc.winboll.studio.shared.view.YesNoAlertDialog;
-import cc.winboll.studio.unittest.UnitTestActivity;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.UUID;
+import cc.winboll.studio.app.R;
+import cc.winboll.studio.libappbase.LogUtils;
+import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog;
+import cc.winboll.studio.libappbase.winboll.IWinBollActivity;
+import cc.winboll.studio.libappbase.winboll.WinBollActivityManager;
-final public class MainActivity extends WinBollActivity {
+final public class MainActivity extends WinBollActivity implements IWinBollActivity {
public static final String TAG = "MainActivity";
- public static final int REQUEST_HOME_ACTIVITY = 0;
- public static final int REQUEST_ABOUT_ACTIVITY = 1;
+ Toolbar mToolbar;
@Override
- protected boolean isEnableDisplayHomeAsUp() {
- return false;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // 接收并处理 Intent 数据,函数 Intent 处理接收就直接返回
- if (prosessIntents(getIntent())) return;
- // 以下正常创建主窗口
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // 设置 WinBoll 应用 UI 类型
- WinBollApplication.setWinBollUI_TYPE(WinBollApplication.WinBollUI_TYPE.Aplication);
- //ToastUtils.show("WinBollUI_TYPE " + WinBollApplication.getWinBollUI_TYPE());
- LogUtils.d(TAG, "BuildConfig.DEBUG : " + Boolean.toString(BuildConfig.DEBUG));
- }
-
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
- setSubTitle("");
- }
-
- //
- // 处理传入的 Intent 数据
- //
- boolean prosessIntents(Intent intent) {
- if (intent == null
- || intent.getAction() == null
- || intent.getAction().equals(""))
- return false;
-
- if (intent.getAction().equals(StringToQrCodeView.ACTION_UNITTEST_QRCODE)) {
- try {
- WinBollActivity clazzActivity = UnitTestActivity.class.newInstance();
- String tag = clazzActivity.getTag();
- LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag);
- Intent subIntent = new Intent(this, UnitTestActivity.class);
- subIntent.setAction(intent.getAction());
- File file = new File(getCacheDir(), UUID.randomUUID().toString());
- //取出文件uri
- Uri uri = intent.getData();
- if (uri == null) {
- uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
- }
- //获取文件真实地址
- String szSrcPath = UriUtils.getFileFromUri(getApplication(), uri);
- if (TextUtils.isEmpty(szSrcPath)) {
- return false;
- }
-
- Files.copy(Paths.get(szSrcPath), Paths.get(file.getPath()));
- //startWinBollActivity(subIntent, tag);
- WinBollActivityManager.getInstance(this).startWinBollActivity(this, subIntent, UnitTestActivity.class);
- } catch (IllegalAccessException | InstantiationException | IOException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- // 函数处理异常返回失败
- return false;
- }
- } else {
- LogUtils.d(TAG, "prosessIntents|" + intent.getAction() + "|yet");
- return false;
- }
- return true;
+ public Activity getActivity() {
+ return this;
}
@Override
@@ -100,10 +28,25 @@ final public class MainActivity extends WinBollActivity {
return TAG;
}
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ LogUtils.d(TAG, "onCreate(Bundle savedInstanceState)");
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ mToolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(mToolbar);
+ mToolbar.setSubtitle(TAG);
+ }
@Override
- protected boolean isAddWinBollToolBar() {
- return true;
+ protected void onPostCreate(Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
}
@Override
@@ -116,7 +59,7 @@ final public class MainActivity extends WinBollActivity {
@Override
public void onYes() {
- WinBollActivityManager.getInstance(getApplicationContext()).finishAll();
+ App.getWinBollActivityManager().finishAll();
}
@Override
@@ -126,43 +69,23 @@ final public class MainActivity extends WinBollActivity {
YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener);
}
- @Override
- protected Toolbar initToolBar() {
- return findViewById(R.id.activitymainToolbar1);
- }
-
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.toolbar_winboll_app_main, menu);
+ getMenuInflater().inflate(R.menu.toolbar_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.item_unittest) {
- WinBollActivityManager.getInstance(this).startWinBollActivity(this, UnitTestActivity.class);
+ if (item.getItemId() == R.id.item_log) {
+ App.getWinBollActivityManager().startLogActivity(this);
+ } else if (item.getItemId() == R.id.item_about) {
+ App.getWinBollActivityManager().startWinBollActivity(this, AboutActivity.class);
} else if (item.getItemId() == R.id.item_exit) {
exit();
return true;
}
return super.onOptionsItemSelected(item);
}
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch (resultCode) {
- case REQUEST_HOME_ACTIVITY : {
- LogUtils.d(TAG, "REQUEST_HOME_ACTIVITY");
- break;
- }
- case REQUEST_ABOUT_ACTIVITY : {
- LogUtils.d(TAG, "REQUEST_ABOUT_ACTIVITY");
- break;
- }
- default : {
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
- }
}
diff --git a/app/src/main/java/cc/winboll/studio/app/WinBollActivity.java b/app/src/main/java/cc/winboll/studio/app/WinBollActivity.java
new file mode 100644
index 0000000..3fa6116
--- /dev/null
+++ b/app/src/main/java/cc/winboll/studio/app/WinBollActivity.java
@@ -0,0 +1,66 @@
+package cc.winboll.studio.app;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/04/01 12:55:32
+ * @Describe 应用窗口基类
+ */
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.MenuItem;
+import androidx.appcompat.app.AppCompatActivity;
+import cc.winboll.studio.libaes.beans.AESThemeBean;
+import cc.winboll.studio.libaes.utils.AESThemeUtil;
+import cc.winboll.studio.libappbase.winboll.IWinBollActivity;
+
+public class WinBollActivity extends AppCompatActivity implements IWinBollActivity {
+
+ public static final String TAG = "WinBollActivity";
+
+ protected volatile AESThemeBean.ThemeType mThemeType;
+
+ @Override
+ public Activity getActivity() {
+ return this;
+ }
+
+ @Override
+ public String getTag() {
+ return TAG;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ mThemeType = getThemeType();
+ super.onCreate(savedInstanceState);
+ App.getWinBollActivityManager().add(this);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ App.getWinBollActivityManager().registeRemove(this);
+ }
+
+ AESThemeBean.ThemeType getThemeType() {
+ /*SharedPreferences sharedPreferences = getSharedPreferences(
+ SHAREDPREFERENCES_NAME, MODE_PRIVATE);
+ return AESThemeBean.ThemeType.values()[((sharedPreferences.getInt(DRAWER_THEME_TYPE, AESThemeBean.ThemeType.DEFAULT.ordinal())))];
+ */
+ return AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(getApplicationContext()));
+ }
+
+ void setThemeStyle() {
+ //setTheme(AESThemeBean.getThemeStyle(getThemeType()));
+ setTheme(AESThemeUtil.getThemeTypeID(getApplicationContext()));
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
new file mode 100644
index 0000000..787ec5b
--- /dev/null
+++ b/app/src/main/res/layout/activity_about.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 1f05c49..2b9a1b2 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -5,10 +5,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 41ba8af..43bd91d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,6 +1,6 @@
- WinBoll-APP
+ APP
diff --git a/settings.gradle-demo b/settings.gradle-demo
index 351aef6..8a98ad9 100644
--- a/settings.gradle-demo
+++ b/settings.gradle-demo
@@ -2,9 +2,8 @@
//include ':demo'
//rootProject.name = "demo"
-// WinBoll-APP 项目编译设置
+// APP 项目编译设置
//include ':app'
-//include ':winboll-shared'
//rootProject.name = "app"
// AutoInstaller 项目编译设置