diff --git a/apputils/build.properties b/apputils/build.properties
index a389ede..71c9174 100644
--- a/apputils/build.properties
+++ b/apputils/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Wed Feb 05 23:35:25 GMT 2025
+#Thu Feb 06 02:59:56 GMT 2025
stageCount=1
libraryProject=libapputils
baseVersion=9.3
publishVersion=9.3.0
-buildCount=63
+buildCount=106
baseBetaVersion=9.3.1
diff --git a/apputils/src/main/AndroidManifest.xml b/apputils/src/main/AndroidManifest.xml
index 1a0c9c3..a24d196 100644
--- a/apputils/src/main/AndroidManifest.xml
+++ b/apputils/src/main/AndroidManifest.xml
@@ -27,10 +27,8 @@
-
-
-
\ No newline at end of file
+
diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java
index eb49793..9af7d7b 100644
--- a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java
+++ b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java
@@ -13,9 +13,9 @@ import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.apputils.R;
-import cc.winboll.studio.libapputils.activities.AboutActivity;
import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity;
import cc.winboll.studio.libapputils.activities.QRCodeDecodeActivity;
+import cc.winboll.studio.libapputils.app.AboutActivityFactory;
import cc.winboll.studio.libapputils.app.IWinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.bean.APPInfo;
@@ -40,6 +40,25 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
return this;
}
+ @Override
+ public APPInfo getAppInfo() {
+ String szBranchName = "apputils";
+
+ APPInfo appInfo = AboutActivityFactory.buildDefaultAPPInfo();
+ appInfo.setAppName("APPUtils");
+ appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll);
+ appInfo.setAppDescription("APPUtils Description");
+ 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("APPUtils");
+ appInfo.setAppAPKFolderName("APPUtils");
+ return appInfo;
+ //return null;
+ }
+
@Override
public String getTag() {
return TAG;
@@ -73,7 +92,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
getSupportActionBar().setSubtitle(getTag());
-
+
checkResolveActivity();
archiveInstance();
@@ -231,14 +250,18 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
if (App.isDebug()) {
getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu);
}
-
+
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.item_testwinboll) {
- WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestWinBollActivity.class);
+ if (item.getItemId() == R.id.item_exit) {
+ exit();
+ return true;
+ } else if (item.getItemId() == R.id.item_about) {
+ AboutActivityFactory.showAboutActivity(this, getAppInfo());
+ return true;
} else if (item.getItemId() == R.id.item_teststringtoqrcodeview) {
WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestStringToQrCodeViewActivity.class);
} else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) {
@@ -252,44 +275,20 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
} else if (item.getItemId() == R.id.item_log) {
WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
return true;
- } else if (item.getItemId() == R.id.item_exit) {
- exit();
- //ToastUtils.show("item_exit");
- //WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finishAll();
- return true;
- } else if (item.getItemId() == R.id.item_info) {
- LogUtils.d(TAG, "item_info not yet.");
- return true;
- //WinBollApplication application = (WinBollApplication) getApplication();
- //application.getMyActivityLifecycleCallbacks().showActivityeInfo();
} else if (item.getItemId() == R.id.item_exitdebug) {
AboutView.setApp2NormalMode(this);
return true;
} else if (item.getItemId() == android.R.id.home) {
WinBollActivityManager.getInstance(this).finish(this);
return true;
- } else if (item.getItemId() == R.id.item_about) {
- openAboutActivity();
- return true;
}
return super.onOptionsItemSelected(item);
}
- void openAboutActivity() {
- Intent intent = new Intent(this, AboutActivity.class);
- APPInfo appInfo = new APPInfo();
- appInfo.setAppName("APPUtils");
- appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll);
- appInfo.setAppDescription("APPUtils Description");
- appInfo.setAppGitName("APP");
- appInfo.setAppGitOwner("Studio");
- appInfo.setAppGitAPPBranch("apputils");
- appInfo.setAppGitAPPSubProjectFolder("apputils");
- appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=APP");
- appInfo.setAppAPKName("APPUtils");
- appInfo.setAppAPKFolderName("APPUtils");
- intent.putExtra(AboutActivity.EXTRA_APPINFO, appInfo);
- WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AboutActivity.class);
+ void about() {
+// Intent intent = new Intent(this, AboutActivity.class);
+// intent.putExtra(AboutActivity.EXTRA_APPINFO, AboutActivityFactory.buildAPPBranchInfo(this));
+// WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AboutActivity.class);
}
void exit() {
@@ -319,8 +318,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
}
public void onTestAboutActivity(View view) {
- //ToastUtils.show("onTestAboutActivity");
- openAboutActivity();
+ about();
}
public void onTestJavascriptHtmlActivity(View view) {
diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java
index c28e106..68028b0 100644
--- a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java
+++ b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java
@@ -4,6 +4,7 @@ import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.app.IWinBollActivity;
+import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.view.StringToQrCodeView;
/**
@@ -12,7 +13,6 @@ import cc.winboll.studio.libapputils.view.StringToQrCodeView;
*/
public class TestStringToQrCodeViewActivity extends AppCompatActivity implements IWinBollActivity {
-
public static final String TAG = "TestStringToQrCodeViewActivity";
StringToQrCodeView mStringToQrCodeView;
@@ -22,6 +22,11 @@ public class TestStringToQrCodeViewActivity extends AppCompatActivity implements
return this;
}
+ @Override
+ public APPInfo getAppInfo() {
+ return null;
+ }
+
@Override
public String getTag() {
return TAG;
diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java
deleted file mode 100644
index 2131691..0000000
--- a/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package cc.winboll.studio.apputils;
-
-/**
- * @Author ZhanGSKen@QQ.COM
- * @Date 2025/01/13 15:09:46
- */
-import android.os.Bundle;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
-import cc.winboll.studio.libapputils.app.IWinBollActivity;
-
-public class TestWinBollActivity extends AppCompatActivity implements IWinBollActivity {
-
- public static final String TAG = "TestWinBollActivity";
-
- @Override
- public AppCompatActivity getActivity() {
- return this;
- }
-
- @Override
- public String getTag() {
- return TAG;
- }
-
- @Override
- public Toolbar initToolBar() {
- return findViewById(R.id.activitytestwinbollToolbar1);
- }
-
- @Override
- public boolean isEnableDisplayHomeAsUp() {
- return true;
- }
-
- @Override
- public boolean isAddWinBollToolBar() {
- return true;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_testwinboll);
- }
-}
diff --git a/apputils/src/main/res/layout/activity_main.xml b/apputils/src/main/res/layout/activity_main.xml
index 737ee00..f371462 100644
--- a/apputils/src/main/res/layout/activity_main.xml
+++ b/apputils/src/main/res/layout/activity_main.xml
@@ -60,12 +60,11 @@
android:layout_height="wrap_content"
android:gravity="right">
-
+ android:text="About"
+ android:textAllCaps="false"/>
diff --git a/libapputils/build.properties b/libapputils/build.properties
index a389ede..71c9174 100644
--- a/libapputils/build.properties
+++ b/libapputils/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Wed Feb 05 23:35:25 GMT 2025
+#Thu Feb 06 02:59:56 GMT 2025
stageCount=1
libraryProject=libapputils
baseVersion=9.3
publishVersion=9.3.0
-buildCount=63
+buildCount=106
baseBetaVersion=9.3.1
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java
index 989caeb..ddc64cf 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java
@@ -9,6 +9,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.View;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
@@ -33,6 +34,11 @@ final public class AboutActivity extends AppCompatActivity implements IWinBollAc
return this;
}
+ @Override
+ public APPInfo getAppInfo() {
+ return null;
+ }
+
@Override
public String getTag() {
return TAG;
@@ -69,7 +75,7 @@ final public class AboutActivity extends AppCompatActivity implements IWinBollAc
LinearLayout llMain = findViewById(R.id.activityaboutLinearLayout1);
llMain.addView(aboutView);
- ToastUtils.show(TAG);
+ //ToastUtils.show(TAG);
}
@Override
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java
index 8e38a5a..3b8a361 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java
@@ -11,6 +11,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.R;
@@ -19,6 +20,7 @@ import cc.winboll.studio.libapputils.log.LogUtils;
import cc.winboll.studio.libapputils.view.SimpleWebView;
import java.io.IOException;
import java.io.InputStream;
+import cc.winboll.studio.libapputils.bean.APPInfo;
public class AssetsHtmlActivity extends AppCompatActivity implements IWinBollActivity {
@@ -38,6 +40,11 @@ public class AssetsHtmlActivity extends AppCompatActivity implements IWinBollAct
return this;
}
+ @Override
+ public APPInfo getAppInfo() {
+ return null;
+ }
+
@Override
public String getTag() {
return TAG;
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java
index 8e1b934..8594583 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java
@@ -15,6 +15,7 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.IWinBollActivity;
+import cc.winboll.studio.libapputils.bean.APPInfo;
import com.google.zxing.ResultPoint;
import com.journeyapps.barcodescanner.BarcodeCallback;
import com.journeyapps.barcodescanner.BarcodeResult;
@@ -36,6 +37,11 @@ public class QRCodeDecodeActivity extends AppCompatActivity implements IWinBollA
return this;
}
+ @Override
+ public APPInfo getAppInfo() {
+ return null;
+ }
+
@Override
public String getTag() {
return TAG;
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AboutActivityFactory.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AboutActivityFactory.java
new file mode 100644
index 0000000..9695041
--- /dev/null
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AboutActivityFactory.java
@@ -0,0 +1,56 @@
+package cc.winboll.studio.libapputils.app;
+import android.content.Context;
+import android.content.Intent;
+import cc.winboll.studio.libapputils.activities.AboutActivity;
+import cc.winboll.studio.libapputils.app.AboutActivityFactory;
+import cc.winboll.studio.libapputils.bean.APPInfo;
+import com.hjq.toast.ToastUtils;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @Author ZhanGSKen@QQ.COM
+ * @Date 2025/02/06 08:45:23
+ * @Describe 关于活动窗口的介绍窗口工厂
+ */
+public class AboutActivityFactory {
+
+ public static final String TAG = "AboutActivityFactory";
+
+ public static APPInfo buildDefaultAPPInfo() {
+ String szBranchName = "";
+
+ APPInfo appInfo = new APPInfo();
+ appInfo.setAppName("APP");
+ appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll);
+ appInfo.setAppDescription("APP Description");
+ 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 appInfo;
+ }
+
+ public static void showAboutActivity(Context context, APPInfo appInfo) {
+ /*String szPN = ((IWinBollActivity)context).getActivityPackageName();
+ //String szPN = context.getPackageName();
+ String szBranchName = "";
+ if (szPN != null) {
+ //String szPN = "cc.winboll.studio.apputils.beta";
+ String regex = "cc\\.winboll\\.studio\\.([^.]+)\\.*";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(szPN);
+ if (matcher.find()) {
+ szBranchName = matcher.group(1);
+ }
+ }*/
+ //ToastUtils.show(szPN);
+
+ Intent intent = new Intent(context, AboutActivity.class);
+ intent.putExtra(AboutActivity.EXTRA_APPINFO, (appInfo == null) ? AboutActivityFactory.buildDefaultAPPInfo():appInfo);
+ WinBollActivityManager.getInstance(context).startWinBollActivity(context, intent, AboutActivity.class);
+ }
+}
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java
index 3533175..f63a025 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java
@@ -1,19 +1,23 @@
package cc.winboll.studio.libapputils.app;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
/**
* @Author ZhanGSKen@QQ.COM
* @Date 2025/02/04 10:20:16
* @Describe WinBoll Activity 接口
*/
+import android.view.View;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import cc.winboll.studio.libapputils.bean.APPInfo;
+
public interface IWinBollActivity {
public static final String TAG = "IWinBollActivity";
// 获取当前具有 IWinBoll 特征的 AppCompatActivity 活动窗口
AppCompatActivity getActivity();
-
+
+ abstract public APPInfo getAppInfo();
abstract public String getTag();
abstract Toolbar initToolBar();
abstract boolean isEnableDisplayHomeAsUp();
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java
index c27e66d..a30c030 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java
@@ -11,6 +11,7 @@ import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.IWinBollActivity;
+import cc.winboll.studio.libapputils.bean.APPInfo;
public class LogActivity extends AppCompatActivity implements IWinBollActivity {
@@ -22,6 +23,11 @@ public class LogActivity extends AppCompatActivity implements IWinBollActivity {
public AppCompatActivity getActivity() {
return this;
}
+
+ @Override
+ public APPInfo getAppInfo() {
+ return null;
+ }
@Override
public String getTag() {
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutBranchButton.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutBranchButton.java
new file mode 100644
index 0000000..0f4100e
--- /dev/null
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutBranchButton.java
@@ -0,0 +1,34 @@
+package cc.winboll.studio.libapputils.view;
+
+/**
+ * @Author ZhanGSKen@QQ.COM
+ * @Date 2025/02/06 09:02:28
+ * @Describe 应用分支介绍按钮
+ */
+import android.content.Context;
+import android.content.Intent;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Button;
+import cc.winboll.studio.libapputils.activities.AboutActivity;
+import cc.winboll.studio.libapputils.app.AboutActivityFactory;
+import cc.winboll.studio.libapputils.app.IWinBollActivity;
+import cc.winboll.studio.libapputils.app.WinBollActivityManager;
+import com.hjq.toast.ToastUtils;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class AboutBranchButton extends Button {
+
+ public static final String TAG = "AboutBranchButton";
+
+ public AboutBranchButton(final Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setOnClickListener(new View.OnClickListener(){
+ @Override
+ public void onClick(View view) {
+ AboutActivityFactory.showAboutActivity(context, ((IWinBollActivity)context).getAppInfo());
+ }
+ });
+ }
+}
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java
index 6485535..e752b5b 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java
@@ -115,7 +115,11 @@ public class AboutView extends LinearLayout {
}
mszCurrentAppPackageName = mszAppAPKName + "_" + mszAppVersionName + ".apk";
mszHomePage = mszWinBollServerHost + "/studio/details.php?app=" + mszAppAPKFolderName;
+ if(mAPPInfo.getAppGitAPPBranch().equals("")) {
+ mszGitea = "https://gitea.winboll.cc/" + mAPPInfo.getAppGitOwner() + "/" + mszAppGitName;
+ } else {
mszGitea = "https://gitea.winboll.cc/" + mAPPInfo.getAppGitOwner() + "/" + mszAppGitName + "/src/branch/" + mAPPInfo.getAppGitAPPBranch() + "/" + mAPPInfo.getAppGitAPPSubProjectFolder();
+}
if (GlobalApplication.isDebuging()) {
LayoutInflater inflater = LayoutInflater.from(mContext);