diff --git a/apputils/build.properties b/apputils/build.properties
index 8d78316..e72d062 100644
--- a/apputils/build.properties
+++ b/apputils/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Tue Mar 25 03:48:39 HKT 2025
+#Fri Mar 28 10:26:29 GMT 2025
stageCount=18
libraryProject=libapputils
baseVersion=15.0
publishVersion=15.0.17
-buildCount=0
+buildCount=6
baseBetaVersion=15.0.18
diff --git a/apputils/src/main/AndroidManifest.xml b/apputils/src/main/AndroidManifest.xml
index 66b4745..41176ff 100644
--- a/apputils/src/main/AndroidManifest.xml
+++ b/apputils/src/main/AndroidManifest.xml
@@ -31,6 +31,10 @@
+
+
+
+
-
+
\ No newline at end of file
diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/App.java b/apputils/src/main/java/cc/winboll/studio/apputils/App.java
index 8149296..4c81010 100644
--- a/apputils/src/main/java/cc/winboll/studio/apputils/App.java
+++ b/apputils/src/main/java/cc/winboll/studio/apputils/App.java
@@ -13,36 +13,6 @@ public class App extends GlobalApplication {
public static final String TAG = "App";
- public static final String _ACTION_DEBUGVIEW = App.class.getName() + "_ACTION_DEBUGVIEW";
-
- //static volatile WinBollApplication _WinBollApplication = null;
- //MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks;
-
- // 标记当前应用是否处于调试状态
- static volatile boolean isDebug = false;
-
- public synchronized static void setIsDebug(boolean isDebug) {
- App.isDebug = isDebug;
- }
-
- public static boolean isDebug() {
- return isDebug;
- }
-
-// MyActivityLifecycleCallbacks getMyActivityLifecycleCallbacks() {
-// return mMyActivityLifecycleCallbacks;
-// }
-
- @Override
- public Context getApplicationContext() {
- return super.getApplicationContext();
- }
-
- @Override
- public Application getApplication() {
- return this;
- }
-
@Override
public void onCreate() {
super.onCreate();
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/AssetsHtmlActivity.java
similarity index 92%
rename from libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java
rename to apputils/src/main/java/cc/winboll/studio/apputils/AssetsHtmlActivity.java
index 7eaa492..9afeb53 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java
+++ b/apputils/src/main/java/cc/winboll/studio/apputils/AssetsHtmlActivity.java
@@ -1,4 +1,4 @@
-package cc.winboll.studio.libapputils.activities;
+package cc.winboll.studio.apputils;
/**
* @Author ZhanGSKen@QQ.COM
@@ -14,12 +14,24 @@ import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toolbar;
import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libapputils.R;
+import cc.winboll.studio.libappbase.winboll.IWinBollActivity;
+import cc.winboll.studio.apputils.R;
import cc.winboll.studio.libapputils.view.SimpleWebView;
import java.io.IOException;
import java.io.InputStream;
-public class AssetsHtmlActivity extends Activity {
+public class AssetsHtmlActivity extends WinBollActivityBase implements IWinBollActivity {
+
+ @Override
+ public Activity getActivity() {
+ return super.getActivity();
+ }
+
+ @Override
+ public String getTag() {
+ return TAG;
+ }
+
public static final String TAG = "AssetsHtmlActivity";
@@ -54,7 +66,7 @@ public class AssetsHtmlActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_assetshtml);
-
+
// 初始化工具栏
Toolbar mToolbar = findViewById(R.id.toolbar);
setActionBar(mToolbar);
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 e64642d..afe1708 100644
--- a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java
+++ b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java
@@ -16,10 +16,6 @@ import cc.winboll.studio.apputils.R;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.LogView;
import cc.winboll.studio.libappbase.utils.ToastUtils;
-import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity;
-import cc.winboll.studio.libapputils.activities.LogActivity;
-import cc.winboll.studio.libapputils.activities.QRCodeDecodeActivity;
-import cc.winboll.studio.libapputils.view.YesNoAlertDialog;
import java.util.List;
import java.util.Set;
@@ -149,10 +145,10 @@ final public class MainActivity extends Activity {
}
public void onTestLogActivity(View view) {
- Intent intent = new Intent(this, LogActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
- intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
- startActivity(intent);
+// Intent intent = new Intent(this, LogActivity.class);
+// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+// intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
+// startActivity(intent);
//WinBollActivityManager.getInstance().printAvtivityListInfo();
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
@@ -209,7 +205,7 @@ final public class MainActivity extends Activity {
// //ToastUtils.show("mIWinBoll.isAddWinBollToolBar()");
// getMenuInflater().inflate(R.menu.toolbar_winboll_shared_main, menu);
// }
- if (App.isDebug()) {
+ if (App.isDebuging()) {
getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu);
}
@@ -219,7 +215,7 @@ final public class MainActivity extends Activity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.item_exit) {
- exit();
+ //exit();
return true;
} else if (item.getItemId() == R.id.item_teststringtoqrcodeview) {
Intent intent = new Intent(this, TestStringToQRCodeViewActivity.class);
@@ -246,21 +242,21 @@ final public class MainActivity extends Activity {
return super.onOptionsItemSelected(item);
}
- void exit() {
- YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){
-
- @Override
- public void onYes() {
- //WinBollActivityManager.getInstance(getApplicationContext()).finishAll();
- }
-
- @Override
- public void onNo() {
- }
- };
- YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener);
-
- }
+// void exit() {
+// YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){
+//
+// @Override
+// public void onYes() {
+// //WinBollActivityManager.getInstance(getApplicationContext()).finishAll();
+// }
+//
+// @Override
+// public void onNo() {
+// }
+// };
+// YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener);
+//
+// }
@Override
public void onBackPressed() {
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/QRCodeDecodeActivity.java
similarity index 97%
rename from libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java
rename to apputils/src/main/java/cc/winboll/studio/apputils/QRCodeDecodeActivity.java
index 78ecd7c..cd74712 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java
+++ b/apputils/src/main/java/cc/winboll/studio/apputils/QRCodeDecodeActivity.java
@@ -1,4 +1,4 @@
-package cc.winboll.studio.libapputils.activities;
+package cc.winboll.studio.apputils;
/**
* @Author ZhanGSKen@QQ.COM
@@ -11,7 +11,7 @@ import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toolbar;
-import cc.winboll.studio.libapputils.R;
+import cc.winboll.studio.apputils.R;
import com.google.zxing.ResultPoint;
import com.journeyapps.barcodescanner.BarcodeCallback;
import com.journeyapps.barcodescanner.BarcodeResult;
@@ -41,7 +41,7 @@ public class QRCodeDecodeActivity extends Activity {
// 初始化工具栏
// Toolbar mToolbar = findViewById(R.id.toolbar);
// setActionBar(mToolbar);
-
+
//resultTextView = findViewById(R.id.activityqrcodedecodeTextView1);
barcodeView = findViewById(R.id.activityqrcodedecodeDecoratedBarcodeView1);
// 请求相机权限
diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/WinBollActivityBase.java b/apputils/src/main/java/cc/winboll/studio/apputils/WinBollActivityBase.java
new file mode 100644
index 0000000..1e2e8cf
--- /dev/null
+++ b/apputils/src/main/java/cc/winboll/studio/apputils/WinBollActivityBase.java
@@ -0,0 +1,52 @@
+package cc.winboll.studio.apputils;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/03/28 17:11:37
+ * @Describe 应用活动窗口基类
+ */
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.support.v7.app.AppCompatActivity;
+import cc.winboll.studio.libappbase.GlobalApplication;
+import cc.winboll.studio.libappbase.winboll.IWinBollActivity;
+import cc.winboll.studio.libappbase.winboll.WinBollActivityManager;
+
+public class WinBollActivityBase extends AppCompatActivity implements IWinBollActivity {
+
+ public static final String TAG = "WinBollActivityBase";
+
+ @Override
+ public Activity getActivity() {
+ return this;
+ }
+
+ @Override
+ public String getTag() {
+ return TAG;
+ }
+
+ WinBollActivityManager getWinBollActivityManager() {
+ return WinBollActivityManager.getInstance(GlobalApplication.getInstance());
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWinBollActivityManager().add(this);
+ }
+
+ @Override
+ public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
+ super.onPostCreate(savedInstanceState, persistentState);
+ }
+
+
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ getWinBollActivityManager().registeRemove(this);
+ }
+}
diff --git a/apputils/src/main/res/layout/activity_assetshtml.xml b/apputils/src/main/res/layout/activity_assetshtml.xml
new file mode 100644
index 0000000..073ddd3
--- /dev/null
+++ b/apputils/src/main/res/layout/activity_assetshtml.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
diff --git a/apputils/src/main/res/layout/activity_qrcodedecode.xml b/apputils/src/main/res/layout/activity_qrcodedecode.xml
new file mode 100644
index 0000000..ba7ff27
--- /dev/null
+++ b/apputils/src/main/res/layout/activity_qrcodedecode.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
diff --git a/libapputils/build.gradle b/libapputils/build.gradle
index ab71588..79bd52d 100644
--- a/libapputils/build.gradle
+++ b/libapputils/build.gradle
@@ -8,7 +8,7 @@ android {
buildToolsVersion "32.0.0"
defaultConfig {
- minSdkVersion 26
+ minSdkVersion 24
targetSdkVersion 29
}
buildTypes {
@@ -21,6 +21,28 @@ android {
dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])
+ // Android 类库
+ //api 'com.android.support:appcompat-v7:28.0.0'
+ api('com.android.support:appcompat-v7:28.0.0'){
+ //exclude group: "com.android.support", module: "support-vector-drawable"
+ exclude group: "com.android.support:animated-vector-drawable:28.0.0"
+ }
+ // https://mvnrepository.com/artifact/com.android.support/support-compat
+ //api 'com.android.support:support-compat:28.0.0' // 保留原有依赖(可选)
+ // https://mvnrepository.com/artifact/com.android.support/support-v4
+ api 'com.android.support:support-v4:28.0.0'
+ // https://mvnrepository.com/artifact/com.android.support/support-media-compat
+ api 'com.android.support:support-media-compat:28.0.0'
+ // https://mvnrepository.com/artifact/com.android.support/support-core-utils
+ api 'com.android.support:support-core-utils:28.0.0'
+ // https://mvnrepository.com/artifact/com.android.support/support-core-ui
+ api 'com.android.support:support-core-ui:28.0.0'
+ // https://mvnrepository.com/artifact/com.android.support/support-fragment
+ api 'com.android.support:support-fragment:28.0.0'
+ // https://mvnrepository.com/artifact/com.android.support/recyclerview-v7
+ api 'com.android.support:recyclerview-v7:28.0.0'
+
+ api 'cc.winboll.studio:libappbase:15.1.3'
// 二维码类库
api 'com.google.zxing:core:3.4.1'
@@ -34,6 +56,4 @@ dependencies {
// SSH
//api 'com.jcraft:jsch:0.1.55'
-
- api 'cc.winboll.studio:libappbase:15.0.10'
}
diff --git a/libapputils/build.properties b/libapputils/build.properties
index 63516a0..e72d062 100644
--- a/libapputils/build.properties
+++ b/libapputils/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Tue Mar 25 03:48:30 HKT 2025
+#Fri Mar 28 10:26:29 GMT 2025
stageCount=18
libraryProject=libapputils
baseVersion=15.0
publishVersion=15.0.17
-buildCount=0
+buildCount=6
baseBetaVersion=15.0.18
diff --git a/libapputils/src/main/AndroidManifest.xml b/libapputils/src/main/AndroidManifest.xml
index 22c1faa..b4d6573 100644
--- a/libapputils/src/main/AndroidManifest.xml
+++ b/libapputils/src/main/AndroidManifest.xml
@@ -24,29 +24,11 @@
-
-
-
-
-
-
-
-
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/LogActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/LogActivity.java
deleted file mode 100644
index d0db67f..0000000
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/LogActivity.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cc.winboll.studio.libapputils.activities;
-
-/**
- * @Author ZhanGSKen@AliYun.Com
- * @Date 2025/03/08 00:19:39
- * @Describe LogActivity
- */
-import android.app.Activity;
-import android.os.Bundle;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.LogView;
-import cc.winboll.studio.libapputils.R;
-
-public class LogActivity extends Activity {
-
- public static final String TAG = "LogActivity";
-
- LogView mLogView;
-//
-// @Override
-// public Activity getActivity() {
-// return this;
-// }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- LogUtils.d(TAG, "onCreate");
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_log);
- mLogView = findViewById(R.id.logview);
- mLogView.start();
-
- }
-
- @Override
- protected void onResume() {
- LogUtils.d(TAG, "onResume");
- super.onResume();
- }
-}
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AppVersionUtils.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AppVersionUtils.java
deleted file mode 100644
index a00bc54..0000000
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AppVersionUtils.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package cc.winboll.studio.libapputils.app;
-
-/**
- * @Author ZhanGSKen@QQ.COM
- * @Date 2024/08/12 14:45:35
- * @Describe 应用版本工具集
- */
-import cc.winboll.studio.libappbase.LogUtils;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class AppVersionUtils {
-
- public static final String TAG = "AppVersionUtils";
-
- //
- // 检查新版本是否成立
- // szCurrentCode : 当前版本应用包名
- // szNextCode : 新版本应用包名
- // 返回 :情况1:当前版本是发布版
- // 返回 true (新版本 > 当前版本)
- // 情况1:当前版本是Beta版
- // true 新版本 == 当前版本
- //
- public static boolean isHasNewVersion2(String szCurrentName, String szNextName) {
- LogUtils.d(TAG, String.format("isHasNewVersion2\nszCurrentName : %s\nszNextName : %s", szCurrentName, szNextName));
- //szCurrentName = "AES_6.2.0-beta0_3234.apk";
- //szNextName = "AES_6.1.12.apk";
- //szCurrentName = "AES_6.2.0-beta0_3234.apk";
- //szNextName = "AES_6.2.0.apk";
- //szCurrentName = "AES_6.2.0-beta0_3234.apk";
- //szNextName = "AES_6.2.2.apk";
- //szCurrentName = "AES_6.2.0-beta0_3234.apk";
- //szNextName = "AES_6.2.0.apk";
- //szCurrentName = "AES_6.1.0.apk";
- //szNextName = "AES_6.2.0.apk";
- //LogUtils.d(TAG, "szCurrentName : " + szCurrentName);
- //LogUtils.d(TAG, "szNextName : " + szNextName);
-
- //boolean isVersionNewer = false;
- //if(szCurrentName.equals(szNextName)) {
- // isVersionNewer = false;
- //} else {
- //ToastUtils.show("szCurrent : " + szCurrent + "\nszNext : " + szNext);
- //int nApk = szNextName.lastIndexOf(".apk");
- //ToastUtils.show("nApk : " + Integer.toString(nApk));
- //String szNextNoApkName = szNextName.substring(0, nApk);
- //ToastUtils.show("szNextNoApkName : " + szNextNoApkName);
- //String szCurrentNoApkName = szCurrentName.substring(0, szNextNoApkName.length());
- //ToastUtils.show("szCurrentNoApkName : " + szCurrentNoApkName);
- //String str1 = "3.4.50";
- //String str2 = "3.3.60";
- //String str1 = getCodeInPackageName(szCurrentName);
- //String str2 = getCodeInPackageName(szNextName);
- //String str1 = getCodeInPackageName(szNextName);
- //String str2 = getCodeInPackageName(szCurrentName);
- //Boolean isVersionNewer2 = checkNewVersion(str1,str2);
- //ToastUtils.show("isVersionNewer2 : " + Boolean.toString(isVersionNewer2));
- //ToastUtils.show(checkNewVersion(getCodeInPackageName(szCurrentName), getCodeInPackageName(szNextName)));
- //return checkNewVersion(getCodeInPackageName(szCurrentName), getCodeInPackageName(szNextName));
- //}
- //return isVersionNewer;
- if (checkNewVersion(getCodeInPackageName(szCurrentName), getCodeInPackageName(szNextName))) {
- // 比 AES_6.2.0.apk 版本大,如 AES_6.2.1.apk。
- // 比 AES_6.2.0-beta0_3234.apk 大,如 AES_6.2.1.apk。
- //LogUtils.d(TAG, "App newer stage version is released. Release name : " + szNextName);
- return true;
- }
- if (szCurrentName.matches(".*_\\d+\\.\\d+\\.\\d+-beta.*\\.apk")) {
- String szCurrentReleasePackageName = getReleasePackageName(szCurrentName);
- //LogUtils.d(TAG, "szCurrentReleasePackageName : " + szCurrentReleasePackageName);
- if (szCurrentReleasePackageName.equals(szNextName)) {
- // 与 AES_6.2.0-beta0_3234.apk 版本相同,如 AES_6.2.0.apk。
- //LogUtils.d(TAG, "App stage version is released. Release name : " + szNextName);
- return true;
- }
- }
- //LogUtils.d(TAG, "App version is the newest. ");
- return false;
- }
-
- public static boolean isHasNewStageReleaseVersion(String szCurrentName, String szNextName) {
- LogUtils.d(TAG, String.format("isHasNewStageReleaseVersion\nszCurrentName : %s\nszNextName : %s", szCurrentName, szNextName));
- //szCurrentName = "AES_6.2.12.apk";
- //szNextName = "AES_6.3.12.apk";
- if (checkNewVersion(getCodeInPackageName(szCurrentName), getCodeInPackageName(szNextName))) {
- // 比 AES_6.2.0.apk 版本大,如 AES_6.2.1.apk。
- //LogUtils.d(TAG, "App newer stage version is released. Release name : " + szNextName);
- return true;
- }
- return false;
- }
-
- //
- // 检查新版本是否成立
- // szCurrentCode : 当前版本
- // szNextCode : 新版本
- // 返回 :true 新版本 > 当前版本
- //
- public static Boolean checkNewVersion(String szCurrentCode, String szNextCode) {
- if (szCurrentCode == null || szCurrentCode.equals("") || szNextCode == null || szNextCode.equals("")) {
- LogUtils.d(TAG, String.format("checkNewVersion unexpected parameters:\nszCurrentCode : %s\nszNextCode : %s", szCurrentCode, szNextCode));
- return false;
- }
- boolean isNew = false;
- String[] appVersionCurrent = szCurrentCode.split("\\.");
- String[] appVersionNext = szNextCode.split("\\.");
- //根据位数最短的判断
- int lim = appVersionCurrent.length > appVersionNext.length ? appVersionNext.length : appVersionCurrent.length;
- //根据位数循环判断各个版本
- for (int i = 0; i < lim; i++) {
- if (Integer.parseInt(appVersionNext[i]) > Integer.parseInt(appVersionCurrent[i])) {
- isNew = true;
- return isNew;
- } else if (Integer.parseInt(appVersionNext[i]) == Integer.parseInt(appVersionCurrent[i])) {
- continue ;
- } else {
- isNew = false;
- return isNew;
- }
- }
- return isNew;
- }
-
- //
- // 截取应用包名称版本号信息
- // 如 :AppUtils_7.0.4-beta1_0120.apk 版本号为 7.0.4
- // 如 :AppUtils_7.0.4.apk 版本号为 7.0.4
- //
- public static String getCodeInPackageName(String apkName) {
- LogUtils.d(TAG, String.format("getCodeInPackageName apkName : %s", apkName));
- //String apkName = "AppUtils_7.0.0.apk";
- Pattern pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+");
- Matcher matcher = pattern.matcher(apkName);
- if (matcher.find()) {
- String version = matcher.group();
- LogUtils.d(TAG, String.format("version is %s", version));
- return version;
- //System.out.println("Version number: " + version); // 输出:7.0.0
- }
- LogUtils.d(TAG, String.format("No result."));
- return "";
- }
-
- //
- // 根据Beta版名称生成发布版应用包名称
- // 如 AppUtils_7.0.4-beta1_0120.apk
- // 发布版名称就为AppUtils_7.0.4.apk
- //
- public static String getReleasePackageName(String szBetaPackageName) {
- //String szBetaPackageName = "AppUtils_7.0.4-beta1_0120.apk";
- Pattern pattern = Pattern.compile(".*\\d+\\.\\d+\\.\\d+");
- Matcher matcher = pattern.matcher(szBetaPackageName);
- if (matcher.find()) {
- String szReleasePackageName = matcher.group();
- return szReleasePackageName + ".apk";
- //System.out.println("Version number: " + version); // 输出:7.0.0
- }
- return "";
- }
-}
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/CrashHandler.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/CrashHandler.java
deleted file mode 100644
index afeca2b..0000000
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/CrashHandler.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package cc.winboll.studio.libapputils.app;
-
-/**
- * @Author ZhanGSKen@QQ.COM
- * @Date 2024/08/12 13:22:12
- * @Describe 异常处理类
- */
-import android.app.Activity;
-import android.app.Application;
-import android.content.ActivityNotFoundException;
-import android.content.ClipData;
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.os.Build;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.ViewGroup;
-import android.widget.HorizontalScrollView;
-import android.widget.ScrollView;
-import android.widget.TextView;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.Thread.UncaughtExceptionHandler;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-public final class CrashHandler {
-
- public static final UncaughtExceptionHandler DEFAULT_UNCAUGHT_EXCEPTION_HANDLER = Thread.getDefaultUncaughtExceptionHandler();
-
- public static void init(Application app) {
- init(app, null);
- }
-
- public static void init(final Application app, final String crashDir) {
- Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(){
-
- @Override
- public void uncaughtException(Thread thread, Throwable throwable) {
- try {
- tryUncaughtException(thread, throwable);
- } catch (Throwable e) {
- e.printStackTrace();
- if (DEFAULT_UNCAUGHT_EXCEPTION_HANDLER != null)
- DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(thread, throwable);
- }
- }
-
- private void tryUncaughtException(Thread thread, Throwable throwable) {
- final String time = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss", Locale.getDefault()).format(new Date());
- File crashFile = new File(TextUtils.isEmpty(crashDir) ? new File(app.getExternalFilesDir(null), "crash")
- : new File(crashDir), "crash_" + time + ".txt");
-
- String versionName = "unknown";
- long versionCode = 0;
- try {
- PackageInfo packageInfo = app.getPackageManager().getPackageInfo(app.getPackageName(), 0);
- versionName = packageInfo.versionName;
- versionCode = Build.VERSION.SDK_INT >= 28 ? packageInfo.getLongVersionCode()
- : packageInfo.versionCode;
- } catch (PackageManager.NameNotFoundException ignored) {}
-
- String fullStackTrace; {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- throwable.printStackTrace(pw);
- fullStackTrace = sw.toString();
- pw.close();
- }
-
- StringBuilder sb = new StringBuilder();
- sb.append("************* Crash Head ****************\n");
- sb.append("Time Of Crash : ").append(time).append("\n");
- sb.append("Device Manufacturer: ").append(Build.MANUFACTURER).append("\n");
- sb.append("Device Model : ").append(Build.MODEL).append("\n");
- sb.append("Android Version : ").append(Build.VERSION.RELEASE).append("\n");
- sb.append("Android SDK : ").append(Build.VERSION.SDK_INT).append("\n");
- sb.append("App VersionName : ").append(versionName).append("\n");
- sb.append("App VersionCode : ").append(versionCode).append("\n");
- sb.append("************* Crash Head ****************\n");
- sb.append("\n").append(fullStackTrace);
-
- String errorLog = sb.toString();
-
- try {
- writeFile(crashFile, errorLog);
- } catch (IOException ignored) {}
-
- gotoCrashActiviy: {
- Intent intent = new Intent(app, CrashActiviy.class);
- intent.addFlags(
- Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK
- );
- intent.putExtra(CrashActiviy.EXTRA_CRASH_INFO, errorLog);
- try {
- app.startActivity(intent);
- android.os.Process.killProcess(android.os.Process.myPid());
- System.exit(0);
- } catch (ActivityNotFoundException e) {
- e.printStackTrace();
- if (DEFAULT_UNCAUGHT_EXCEPTION_HANDLER != null)
- DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(thread, throwable);
- }
- }
- }
-
- private void writeFile(File file, String content) throws IOException {
- File parentFile = file.getParentFile();
- if (parentFile != null && !parentFile.exists()) {
- parentFile.mkdirs();
- }
- file.createNewFile();
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(content.getBytes());
- try {
- fos.close();
- } catch (IOException e) {}
- }
-
- });
- }
-
- public static final class CrashActiviy extends Activity implements MenuItem.OnMenuItemClickListener {
-
- private static final String EXTRA_CRASH_INFO = "crashInfo";
-
- private static final int MENUITEM_COPY = 0;
- private static final int MENUITEM_RESTART = 1;
-
- private String mLog;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mLog = getIntent().getStringExtra(EXTRA_CRASH_INFO);
- setTheme(android.R.style.Theme_DeviceDefault_Light_DarkActionBar);
- setContentView: {
- ScrollView contentView = new ScrollView(this);
- contentView.setFillViewport(true);
- HorizontalScrollView hw = new HorizontalScrollView(this);
- hw.setBackgroundColor(Color.GRAY);
- TextView message = new TextView(this); {
- int padding = dp2px(16);
- message.setPadding(padding, padding, padding, padding);
- message.setText(mLog);
- message.setTextIsSelectable(true);
- }
- hw.addView(message);
- contentView.addView(hw, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
- setContentView(contentView);
- }
- }
-
- @Override
- public void onBackPressed() {
- restart();
- }
-
- private void restart() {
- PackageManager pm = getPackageManager();
- Intent intent = pm.getLaunchIntentForPackage(getPackageName());
- if (intent != null) {
- intent.addFlags(
- Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK
- );
- startActivity(intent);
- }
- finish();
- android.os.Process.killProcess(android.os.Process.myPid());
- System.exit(0);
- }
-
- private int dp2px(final float dpValue) {
- final float scale = Resources.getSystem().getDisplayMetrics().density;
- return (int) (dpValue * scale + 0.5f);
- }
-
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- switch (item.getItemId()) {
- case MENUITEM_COPY:
- ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
- cm.setPrimaryClip(ClipData.newPlainText(getPackageName(), mLog));
- break;
- case MENUITEM_RESTART:
- restart();
- break;
- }
- return false;
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(0, MENUITEM_COPY, 0, "Copy").setOnMenuItemClickListener(this)
- .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- menu.add(0, MENUITEM_RESTART, 0, "Restart").setOnMenuItemClickListener(this)
- .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- return true;
- }
- }
-}
-
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/util/BBMorseCodeUtils.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/util/BBMorseCodeUtils.java
index 9a85b46..cfaf376 100644
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/util/BBMorseCodeUtils.java
+++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/util/BBMorseCodeUtils.java
@@ -10,7 +10,6 @@ import android.media.MediaPlayer;
import android.os.Build;
import android.os.Handler;
import android.os.Vibrator;
-import android.os.VibratorManager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/WinBollServiceStatusView.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/view/WinBollServiceStatusView.java
deleted file mode 100644
index f5cebfc..0000000
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/WinBollServiceStatusView.java
+++ /dev/null
@@ -1,346 +0,0 @@
-package cc.winboll.studio.libapputils.view;
-
-/**
- * @Author ZhanGSKen@QQ.COM
- * @Date 2024/12/07 20:15:47
- * @Describe WinBoll 服务主机连接状态视图
- */
-import cc.winboll.studio.libapputils.R;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-import cc.winboll.studio.libapputils.service.IWinBollClientServiceBinder;
-import cc.winboll.studio.libapputils.service.WinBollClientService;
-import cc.winboll.studio.libapputils.service.WinBollClientServiceBean;
-import java.io.IOException;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-//import okhttp3.Authenticator;
-//import okhttp3.Credentials;
-//import okhttp3.OkHttpClient;
-//import okhttp3.Request;
-//import okhttp3.Response;
-//import okhttp3.Route;
-
-public class WinBollServiceStatusView extends LinearLayout {
-
- public static final String TAG = "WinBollServiceStatusView";
-
- public static final int MSG_CONNECTION_INFO = 0;
- public static final int MSG_UPDATE_CONNECTION_STATUS = 1;
-
- Context mContext;
- //boolean mIsConnected;
- ConnectionThread mConnectionThread;
-
- String mszServerHost;
- WinBollClientService mWinBollService;
- ImageView mImageView;
- TextView mTextView;
- WinBollServiceViewHandler mWinBollServiceViewHandler;
- //WebView mWebView;
- static volatile ConnectionStatus mConnectionStatus;
- View.OnClickListener mViewOnClickListener;
- static String _mUserName;
- static String _mPassword;
-
- static enum ConnectionStatus {
- DISCONNECTED,
- START_CONNECT,
- CONNECTING,
- CONNECTED;
- };
-
- boolean isBound = false;
- ServiceConnection connection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- IWinBollClientServiceBinder binder = (IWinBollClientServiceBinder) service;
- mWinBollService = binder.getService();
- isBound = true;
- // 可以在这里调用Service的方法进行通信,比如获取数据
- mImageView.setBackgroundDrawable(mWinBollService.getCurrentStatusIconDrawable());
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- isBound = false;
- }
- };
-
- public WinBollServiceStatusView(Context context) {
- super(context);
- mContext = context;
- initView();
- }
-
- public WinBollServiceStatusView(Context context, AttributeSet attrs) {
- super(context, attrs);
- mContext = context;
- initView();
- }
-
- public WinBollServiceStatusView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- mContext = context;
- initView();
- }
-
- public WinBollServiceStatusView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- mContext = context;
- initView();
- }
-
- ConnectionStatus getConnectionStatus() {
- return false ?
- ConnectionStatus.CONNECTED
- : ConnectionStatus.DISCONNECTED;
- }
-
- void initView() {
- mImageView = new ImageView(mContext);
- setImageViewByConnection(mImageView, false);
- mConnectionStatus = getConnectionStatus();
- //mIsConnected = false;
- //mWinBollServerHostConnectionStatus = WinBollServerHostConnectionStatus.DISCONNECTED;
- //ToastUtils.show("initView()");
-
- mViewOnClickListener = new View.OnClickListener(){
- @Override
- public void onClick(View v) {
- //ToastUtils.show("onClick()");
- //ToastUtils.show("mWinBollServerHostConnectionStatus : " + mWinBollServerHostConnectionStatus);
- //isConnected = !isConnected;
- if (mConnectionStatus == ConnectionStatus.CONNECTED) {
- ToastUtils.show("Click to stop service.");
- WinBollClientServiceBean bean = WinBollClientServiceBean.loadWinBollClientServiceBean(mContext);
- bean.setIsEnable(false);
- WinBollClientServiceBean.saveBean(mContext, bean);
- Intent intent = new Intent(mContext, WinBollClientService.class);
- mContext.stopService(intent);
- mConnectionStatus = ConnectionStatus.DISCONNECTED;
-//
- /*//ToastUtils.show("CONNECTED");
- setConnectionStatusView(false);
- mWinBollServerHostConnectionStatusViewHandler.postMessageText("");
- if (mConnectionThread != null) {
- mConnectionThread.mIsExist = true;
- mConnectionThread = null;
- mWinBollServerHostConnectionStatus = WinBollServerHostConnectionStatus.DISCONNECTED;
- ToastUtils.show("WinBoll Server Disconnected.");
- }*/
- } else if (mConnectionStatus == ConnectionStatus.DISCONNECTED) {
- ToastUtils.show("Click to start service.");
- WinBollClientServiceBean bean = WinBollClientServiceBean.loadWinBollClientServiceBean(mContext);
- bean.setIsEnable(true);
- WinBollClientServiceBean.saveBean(mContext, bean);
- Intent intent = new Intent(mContext, WinBollClientService.class);
- mContext.startService(intent);
- mConnectionStatus = ConnectionStatus.CONNECTED;
- ToastUtils.show("startService");
- /*//ToastUtils.show("DISCONNECTED");
- setConnectionStatusView(true);
-
- if (mConnectionThread == null) {
- ToastUtils.show("mConnectionThread == null");
- mConnectionThread = new ConnectionThread();
- mWinBollServerHostConnectionStatus = WinBollServerHostConnectionStatus.START_CONNECT;
- mConnectionThread.start();
- }*/
- } else {
- ToastUtils.show("Other Click condition.");
- }
-
- /*if (isConnected) {
- mWebView.loadUrl("https://dev.winboll.cc");
- } else {
- mWebView.stopLoading();
- }*/
- //ToastUtils.show(mDevelopHostConnectionStatus);
- //LogUtils.d(TAG, "mDevelopHostConnectionStatus : " + mWinBollServerHostConnectionStatus);
- }
- };
- setOnClickListener(mViewOnClickListener);
- addView(mImageView);
- mTextView = new TextView(mContext);
- mWinBollServiceViewHandler = new WinBollServiceViewHandler(this);
- addView(mTextView);
- /*mWebView = new WebView(mContext);
- mWebView.setWebViewClient(new WebViewClient() {
- @Override
- public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
- // 弹出系统基本HTTP验证窗口
- handler.proceed("username", "password");
- }
- });
- addView(mWebView);*/
- }
-
- void checkWinBollServerStatusAndUpdateCurrentView() {
- LogUtils.d(TAG, "checkWinBollServerStatusAndUpdateCurrentView()");
- /*if (getConnectionStatus() == ConnectionStatus.CONNECTED) {
- mConnectionStatus = ConnectionStatus.CONNECTED;
- } else {
- mConnectionStatus = ConnectionStatus.DISCONNECTED;
- }*/
- }
-
- public void setServerHost(String szWinBollServerHost) {
- mszServerHost = szWinBollServerHost;
- }
-
- public void setAuthInfo(String username, String password) {
- _mUserName = username;
- _mPassword = password;
- }
-
- void setImageViewByConnection(ImageView imageView, boolean isConnected) {
- //mIsConnected = isConnected;
- // 获取vector drawable
- Drawable drawable = mContext.getDrawable(isConnected ? R.drawable.ic_dev_connected : R.drawable.ic_dev_disconnected);
- if (drawable != null) {
- imageView.setImageDrawable(drawable);
- }
- }
-
- void requestWithBasicAuth(WinBollServiceViewHandler textViewHandler, String targetUrl, final String username, final String password) {
- // 用户名和密码,替换为实际的认证信息
- //String username = "your_username";
- //String password = "your_password";
-
-// OkHttpClient client = new OkHttpClient.Builder()
-// .authenticator(new Authenticator() {
-// @Override
-// public Request authenticate(Route route, Response response) throws IOException {
-// String credential = Credentials.basic(username, password);
-// return response.request().newBuilder()
-// .header("Authorization", credential)
-// .build();
-// }
-// })
-// .build();
-//
-// Request request = new Request.Builder()
-// .url(targetUrl) // 替换为实际要请求的网页地址
-// .build();
-//
-// try {
-// Response response = client.newCall(request).execute();
-// if (response.isSuccessful()) {
-// //System.out.println(response.body().string());
-// //ToastUtils.show("Develop Host Connection IP is : " + response.body().string());
-// // 获取当前时间
-// LocalDateTime now = LocalDateTime.now();
-//
-// // 定义时间格式
-// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
-// // 按照指定格式格式化时间并输出
-// String formattedDateTime = now.format(formatter);
-// //System.out.println(formattedDateTime);
-// textViewHandler.postMessageText("ClientIP<" + formattedDateTime + ">: " + response.body().string());
-// textViewHandler.postMessageConnectionStatus(true);
-// } else {
-// String sz = "请求失败,状态码: " + response.code();
-// setImageViewByConnection(mImageView, false);
-// textViewHandler.postMessageText(sz);
-// textViewHandler.postMessageConnectionStatus(false);
-// LogUtils.d(TAG, sz);
-// }
-// } catch (IOException e) {
-// textViewHandler.postMessageText(e.getMessage());
-// textViewHandler.postMessageConnectionStatus(false);
-// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
-// }
- }
-
- class WinBollServiceViewHandler extends Handler {
- WinBollServiceStatusView mDevelopHostConnectionStatusView;
-
- public WinBollServiceViewHandler(WinBollServiceStatusView view) {
- mDevelopHostConnectionStatusView = view;
- }
-
- @Override
- public void handleMessage(Message msg) {
- if (msg.what == MSG_CONNECTION_INFO) {
- mDevelopHostConnectionStatusView.mTextView.setText((String)msg.obj);
- } else if (msg.what == MSG_UPDATE_CONNECTION_STATUS) {
- mDevelopHostConnectionStatusView.setImageViewByConnection(mImageView, (boolean)msg.obj);
- mDevelopHostConnectionStatusView.mConnectionStatus = ((boolean)msg.obj) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED;
- }
- super.handleMessage(msg);
- }
-
- void postMessageText(String szMSG) {
- Message msg = new Message();
- msg.what = MSG_CONNECTION_INFO;
- msg.obj = szMSG;
- sendMessage(msg);
- }
-
- void postMessageConnectionStatus(boolean isConnected) {
- Message msg = new Message();
- msg.what = MSG_UPDATE_CONNECTION_STATUS;
- msg.obj = isConnected;
- sendMessage(msg);
- }
- }
-
- class ConnectionThread extends Thread {
-
- public volatile boolean mIsExist;
-
- //DevelopHostConnectionStatusViewHandler mDevelopHostConnectionStatusViewHandler;
-
- //public ConnectionThread(DevelopHostConnectionStatusViewHandler developHostConnectionStatusViewHandler) {
- //mDevelopHostConnectionStatusViewHandler = developHostConnectionStatusViewHandler;
- //}
- public ConnectionThread() {
- mIsExist = false;
- }
-
- @Override
- public void run() {
- super.run();
- while (mIsExist == false) {
- if (mConnectionStatus == ConnectionStatus.START_CONNECT) {
- mConnectionStatus = ConnectionStatus.CONNECTING;
- ToastUtils.show("WinBoll Server Connection Start.");
- //LogUtils.d(TAG, "Develop Host Connection Start.");
- String targetUrl = "https://" + mszServerHost + "/cip/?simple=true"; // 这里替换成你实际要访问的网址
- requestWithBasicAuth(mWinBollServiceViewHandler, targetUrl, _mUserName, _mPassword);
- } else if (mConnectionStatus == ConnectionStatus.CONNECTED
- && mConnectionStatus == ConnectionStatus.DISCONNECTED) {
- ToastUtils.show("mWinBollServerHostConnectionStatus " + mConnectionStatus);
- }
-
- try {
- Thread.sleep(5 * 1000);
- } catch (InterruptedException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
- //ToastUtils.show("ConnectionThread exit.");
- LogUtils.d(TAG, "ConnectionThread exit.");
- }
- }
-
- /*WinBollService.OnServiceStatusChangeListener mOnServerStatusChangeListener = new WinBollService.OnServiceStatusChangeListener(){
- @Override
- public void onServerStatusChange(boolean isServiceAlive) {
- }
- };*/
-}
diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/YesNoAlertDialog.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/view/YesNoAlertDialog.java
deleted file mode 100644
index 0ecda82..0000000
--- a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/YesNoAlertDialog.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package cc.winboll.studio.libapputils.view;
-
-/**
- * @Author ZhanGSKen@QQ.COM
- * @Date 2024/08/12 14:46:25
- * @Describe 询问用户确定与否的选择框
- */
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-
-public class YesNoAlertDialog {
-
- public static final String TAG = "YesNoAlertDialog";
-
- public static void show(Context context, String szTitle, String szMessage, final OnDialogResultListener listener) {
- AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
- context);
-
- // set title
- alertDialogBuilder.setTitle(szTitle);
-
- // set dialog message
- alertDialogBuilder
- .setMessage(szMessage)
- .setCancelable(true)
- .setOnCancelListener(new DialogInterface.OnCancelListener(){
- @Override
- public void onCancel(DialogInterface dialog) {
- listener.onNo();
- }
- })
- .setPositiveButton("YES", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // if this button is clicked, close
- // current activity
- listener.onYes();
- }
- })
- .setNegativeButton("NO", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // if this button is clicked, just close
- // the dialog box and do nothing
- dialog.cancel();
- }
- });
-
- // create alert dialog
- AlertDialog alertDialog = alertDialogBuilder.create();
-
- // show it
- alertDialog.show();
- }
-
- public interface OnDialogResultListener {
- abstract void onYes();
- abstract void onNo();
- }
-}
diff --git a/libapputils/src/main/res/layout/activity_assetshtml.xml b/libapputils/src/main/res/layout/activity_assetshtml.xml
deleted file mode 100644
index 8a7722d..0000000
--- a/libapputils/src/main/res/layout/activity_assetshtml.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/libapputils/src/main/res/layout/activity_qrcodedecode.xml b/libapputils/src/main/res/layout/activity_qrcodedecode.xml
deleted file mode 100644
index 982c134..0000000
--- a/libapputils/src/main/res/layout/activity_qrcodedecode.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-