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 项目编译设置