应用介绍模块更新

This commit is contained in:
ZhanGSKen 2025-02-06 11:00:51 +08:00
parent 104d9fa283
commit b14add854e
15 changed files with 174 additions and 97 deletions

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #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 stageCount=1
libraryProject=libapputils libraryProject=libapputils
baseVersion=9.3 baseVersion=9.3
publishVersion=9.3.0 publishVersion=9.3.0
buildCount=63 buildCount=106
baseBetaVersion=9.3.1 baseBetaVersion=9.3.1

View File

@ -27,10 +27,8 @@
</activity> </activity>
<activity android:name=".TestWinBollActivity"/>
<activity android:name=".TestStringToQrCodeViewActivity"/> <activity android:name=".TestStringToQrCodeViewActivity"/>
</application> </application>
</manifest> </manifest>

View File

@ -13,9 +13,9 @@ import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.apputils.R; 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.AssetsHtmlActivity;
import cc.winboll.studio.libapputils.activities.QRCodeDecodeActivity; 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.IWinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager; import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.bean.APPInfo;
@ -40,6 +40,25 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
return this; 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 @Override
public String getTag() { public String getTag() {
return TAG; return TAG;
@ -73,7 +92,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} }
getSupportActionBar().setSubtitle(getTag()); getSupportActionBar().setSubtitle(getTag());
checkResolveActivity(); checkResolveActivity();
archiveInstance(); archiveInstance();
@ -231,14 +250,18 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
if (App.isDebug()) { if (App.isDebug()) {
getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu); getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu);
} }
return super.onCreateOptionsMenu(menu); return super.onCreateOptionsMenu(menu);
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.item_testwinboll) { if (item.getItemId() == R.id.item_exit) {
WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestWinBollActivity.class); 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) { } else if (item.getItemId() == R.id.item_teststringtoqrcodeview) {
WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestStringToQrCodeViewActivity.class); WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestStringToQrCodeViewActivity.class);
} else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) { } 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) { } else if (item.getItemId() == R.id.item_log) {
WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class); WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
return true; 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) { } else if (item.getItemId() == R.id.item_exitdebug) {
AboutView.setApp2NormalMode(this); AboutView.setApp2NormalMode(this);
return true; return true;
} else if (item.getItemId() == android.R.id.home) { } else if (item.getItemId() == android.R.id.home) {
WinBollActivityManager.getInstance(this).finish(this); WinBollActivityManager.getInstance(this).finish(this);
return true; return true;
} else if (item.getItemId() == R.id.item_about) {
openAboutActivity();
return true;
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
void openAboutActivity() { void about() {
Intent intent = new Intent(this, AboutActivity.class); // Intent intent = new Intent(this, AboutActivity.class);
APPInfo appInfo = new APPInfo(); // intent.putExtra(AboutActivity.EXTRA_APPINFO, AboutActivityFactory.buildAPPBranchInfo(this));
appInfo.setAppName("APPUtils"); // WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AboutActivity.class);
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 exit() { void exit() {
@ -319,8 +318,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
} }
public void onTestAboutActivity(View view) { public void onTestAboutActivity(View view) {
//ToastUtils.show("onTestAboutActivity"); about();
openAboutActivity();
} }
public void onTestJavascriptHtmlActivity(View view) { public void onTestJavascriptHtmlActivity(View view) {

View File

@ -4,6 +4,7 @@ import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity;
import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.view.StringToQrCodeView; 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 class TestStringToQrCodeViewActivity extends AppCompatActivity implements IWinBollActivity {
public static final String TAG = "TestStringToQrCodeViewActivity"; public static final String TAG = "TestStringToQrCodeViewActivity";
StringToQrCodeView mStringToQrCodeView; StringToQrCodeView mStringToQrCodeView;
@ -22,6 +22,11 @@ public class TestStringToQrCodeViewActivity extends AppCompatActivity implements
return this; return this;
} }
@Override
public APPInfo getAppInfo() {
return null;
}
@Override @Override
public String getTag() { public String getTag() {
return TAG; return TAG;

View File

@ -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);
}
}

View File

@ -60,12 +60,11 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="right"> android:gravity="right">
<Button <cc.winboll.studio.libapputils.view.AboutBranchButton
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textAllCaps="false" android:text="About"
android:text="Test AboutActivity" android:textAllCaps="false"/>
android:onClick="onTestAboutActivity"/>
</LinearLayout> </LinearLayout>

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #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 stageCount=1
libraryProject=libapputils libraryProject=libapputils
baseVersion=9.3 baseVersion=9.3
publishVersion=9.3.0 publishVersion=9.3.0
buildCount=63 buildCount=106
baseBetaVersion=9.3.1 baseBetaVersion=9.3.1

View File

@ -9,6 +9,7 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
@ -33,6 +34,11 @@ final public class AboutActivity extends AppCompatActivity implements IWinBollAc
return this; return this;
} }
@Override
public APPInfo getAppInfo() {
return null;
}
@Override @Override
public String getTag() { public String getTag() {
return TAG; return TAG;
@ -69,7 +75,7 @@ final public class AboutActivity extends AppCompatActivity implements IWinBollAc
LinearLayout llMain = findViewById(R.id.activityaboutLinearLayout1); LinearLayout llMain = findViewById(R.id.activityaboutLinearLayout1);
llMain.addView(aboutView); llMain.addView(aboutView);
ToastUtils.show(TAG); //ToastUtils.show(TAG);
} }
@Override @Override

View File

@ -11,6 +11,7 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.R; 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 cc.winboll.studio.libapputils.view.SimpleWebView;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import cc.winboll.studio.libapputils.bean.APPInfo;
public class AssetsHtmlActivity extends AppCompatActivity implements IWinBollActivity { public class AssetsHtmlActivity extends AppCompatActivity implements IWinBollActivity {
@ -38,6 +40,11 @@ public class AssetsHtmlActivity extends AppCompatActivity implements IWinBollAct
return this; return this;
} }
@Override
public APPInfo getAppInfo() {
return null;
}
@Override @Override
public String getTag() { public String getTag() {
return TAG; return TAG;

View File

@ -15,6 +15,7 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import cc.winboll.studio.libapputils.R; import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity;
import cc.winboll.studio.libapputils.bean.APPInfo;
import com.google.zxing.ResultPoint; import com.google.zxing.ResultPoint;
import com.journeyapps.barcodescanner.BarcodeCallback; import com.journeyapps.barcodescanner.BarcodeCallback;
import com.journeyapps.barcodescanner.BarcodeResult; import com.journeyapps.barcodescanner.BarcodeResult;
@ -36,6 +37,11 @@ public class QRCodeDecodeActivity extends AppCompatActivity implements IWinBollA
return this; return this;
} }
@Override
public APPInfo getAppInfo() {
return null;
}
@Override @Override
public String getTag() { public String getTag() {
return TAG; return TAG;

View File

@ -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);
}
}

View File

@ -1,19 +1,23 @@
package cc.winboll.studio.libapputils.app; package cc.winboll.studio.libapputils.app;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
/** /**
* @Author ZhanGSKen@QQ.COM * @Author ZhanGSKen@QQ.COM
* @Date 2025/02/04 10:20:16 * @Date 2025/02/04 10:20:16
* @Describe WinBoll Activity 接口 * @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 interface IWinBollActivity {
public static final String TAG = "IWinBollActivity"; public static final String TAG = "IWinBollActivity";
// 获取当前具有 IWinBoll 特征的 AppCompatActivity 活动窗口 // 获取当前具有 IWinBoll 特征的 AppCompatActivity 活动窗口
AppCompatActivity getActivity(); AppCompatActivity getActivity();
abstract public APPInfo getAppInfo();
abstract public String getTag(); abstract public String getTag();
abstract Toolbar initToolBar(); abstract Toolbar initToolBar();
abstract boolean isEnableDisplayHomeAsUp(); abstract boolean isEnableDisplayHomeAsUp();

View File

@ -11,6 +11,7 @@ import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libapputils.R; import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity;
import cc.winboll.studio.libapputils.bean.APPInfo;
public class LogActivity extends AppCompatActivity implements IWinBollActivity { public class LogActivity extends AppCompatActivity implements IWinBollActivity {
@ -22,6 +23,11 @@ public class LogActivity extends AppCompatActivity implements IWinBollActivity {
public AppCompatActivity getActivity() { public AppCompatActivity getActivity() {
return this; return this;
} }
@Override
public APPInfo getAppInfo() {
return null;
}
@Override @Override
public String getTag() { public String getTag() {

View File

@ -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());
}
});
}
}

View File

@ -115,7 +115,11 @@ public class AboutView extends LinearLayout {
} }
mszCurrentAppPackageName = mszAppAPKName + "_" + mszAppVersionName + ".apk"; mszCurrentAppPackageName = mszAppAPKName + "_" + mszAppVersionName + ".apk";
mszHomePage = mszWinBollServerHost + "/studio/details.php?app=" + mszAppAPKFolderName; 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(); mszGitea = "https://gitea.winboll.cc/" + mAPPInfo.getAppGitOwner() + "/" + mszAppGitName + "/src/branch/" + mAPPInfo.getAppGitAPPBranch() + "/" + mAPPInfo.getAppGitAPPSubProjectFolder();
}
if (GlobalApplication.isDebuging()) { if (GlobalApplication.isDebuging()) {
LayoutInflater inflater = LayoutInflater.from(mContext); LayoutInflater inflater = LayoutInflater.from(mContext);