Compare commits

...

7 Commits

Author SHA1 Message Date
ZhanGSKen
e2d71ae088 <apputils>APK 9.2.2 release Publish. 2025-01-22 17:19:38 +08:00
ZhanGSKen
506d2619f2 应用介绍页测试完成 2025-01-20 14:51:10 +08:00
ZhanGSKen
17fa805a7f 源码整理 2025-01-20 13:17:58 +08:00
ZhanGSKen
1dcf8cd007 代码整理 2025-01-20 13:00:52 +08:00
ZhanGSKen
d86d50212e 优化Log UI 2025-01-20 12:57:59 +08:00
ZhanGSKen
af2e09c02a 应用退出按钮调试完成,添加日志窗口调动响应。 2025-01-20 12:50:22 +08:00
ZhanGSKen
de6361b19b APPUtils编译调试 2025-01-20 11:07:17 +08:00
12 changed files with 328 additions and 197 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Sat Jan 18 13:03:10 HKT 2025 #Wed Jan 22 17:19:38 HKT 2025
stageCount=2 stageCount=3
libraryProject=libapputils libraryProject=libapputils
baseVersion=9.2 baseVersion=9.2
publishVersion=9.2.1 publishVersion=9.2.2
buildCount=0 buildCount=0
baseBetaVersion=9.2.2 baseBetaVersion=9.2.3

View File

@@ -14,6 +14,8 @@ import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.log.LogActivity; import cc.winboll.studio.libapputils.log.LogActivity;
import cc.winboll.studio.libapputils.log.LogUtils; import cc.winboll.studio.libapputils.log.LogUtils;
import com.hjq.toast.ToastUtils; import com.hjq.toast.ToastUtils;
import cc.winboll.studio.libapputils.activities.AboutActivity;
import cc.winboll.studio.libapputils.bean.APPInfo;
final public class MainActivity extends WinBollActivity { final public class MainActivity extends WinBollActivity {
@@ -50,10 +52,13 @@ final public class MainActivity extends WinBollActivity {
} }
public void onLogUtilsClick(View view) { public void onLogUtilsClick(View view) {
Intent intent = new Intent(this, LogActivity.class); // Intent intent = new Intent(this, LogActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); // intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); // intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent); // startActivity(intent);
//WinBollActivityManager.getInstance().printAvtivityListInfo();
WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
} }
@Override @Override
@@ -159,6 +164,15 @@ final public class MainActivity extends WinBollActivity {
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
public void onTestAboutActivity(View view) {
Intent intent = new Intent(this, AboutActivity.class);
APPInfo appInfo = new APPInfo();
appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll);
appInfo.setAppName("Test APP");
intent.putExtra(AboutActivity.EXTRA_APPINFO, appInfo);
WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AboutActivity.class);
}
public void onTestJavascriptHtmlActivity(View view) { public void onTestJavascriptHtmlActivity(View view) {
Intent intent = new Intent(this, AssetsHtmlActivity.class); Intent intent = new Intent(this, AssetsHtmlActivity.class);
intent.putExtra(AssetsHtmlActivity.EXTRA_HTMLFILENAME, "javascript_test.html"); intent.putExtra(AssetsHtmlActivity.EXTRA_HTMLFILENAME, "javascript_test.html");

View File

@@ -54,6 +54,21 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:text="Test AboutActivity"
android:onClick="onTestAboutActivity"/>
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Sat Jan 18 13:02:39 HKT 2025 #Wed Jan 22 17:19:38 HKT 2025
stageCount=2 stageCount=3
libraryProject=libapputils libraryProject=libapputils
baseVersion=9.2 baseVersion=9.2
publishVersion=9.2.1 publishVersion=9.2.2
buildCount=0 buildCount=0
baseBetaVersion=9.2.2 baseBetaVersion=9.2.3

View File

@@ -1,25 +1,31 @@
package cc.winboll.studio.libapputils.activities; package cc.winboll.studio.libapputils.activities;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.WinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.log.LogUtils;
/** /**
* @Author ZhanGSKen@QQ.COM * @Author ZhanGSKen@QQ.COM
* @Date 2024/07/14 13:20:33 * @Date 2024/07/14 13:20:33
* @Describe AboutFragment Test * @Describe 应用介绍页
*/ */
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.WinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.view.AboutView;
import com.hjq.toast.ToastUtils;
final public class AboutActivity extends WinBollActivity { final public class AboutActivity extends WinBollActivity {
public static final String TAG = "AboutActivity"; public static final String TAG = "AboutActivity";
public static final String EXTRA_APPINFO = "EXTRA_APPINFO";
APPInfo mAPPInfo;
@Override @Override
public String getTag() { public String getTag() {
return TAG; return TAG;
@@ -34,21 +40,19 @@ final public class AboutActivity extends WinBollActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about); setContentView(R.layout.activity_about);
Intent intent = getIntent();
if (intent != null) {
mAPPInfo = (APPInfo)intent.getSerializableExtra(EXTRA_APPINFO);
}
if (mAPPInfo == null) {
mAPPInfo = new APPInfo();
}
/*AboutView aboutView = findViewById(R.id.activityaboutAboutView1); AboutView aboutView = new AboutView(this, mAPPInfo);
aboutView.setOnRequestDevUserInfoAutofillListener(new AboutView.OnRequestDevUserInfoAutofillListener(){ LinearLayout llMain = findViewById(R.id.activityaboutLinearLayout1);
llMain.addView(aboutView);
@Override
public void requestAutofill(EditText etDevUserName, EditText etDevUserPassword) {
AutofillManager autofillManager = (AutofillManager) getSystemService(AutofillManager.class);
if (autofillManager!= null) {
//ToastUtils.show("0");
autofillManager.requestAutofill(findViewById(R.id.usernameEditText));
autofillManager.requestAutofill(findViewById(R.id.passwordEditText));
}
}
});*/
ToastUtils.show(TAG);
} }
@Override @Override
@@ -79,9 +83,8 @@ final public class AboutActivity extends WinBollActivity {
if (item.getItemId() == R.id.item_help) { if (item.getItemId() == R.id.item_help) {
WinBollActivityManager.getInstance(this).startWinBollActivity(this, AssetsHtmlActivity.class); WinBollActivityManager.getInstance(this).startWinBollActivity(this, AssetsHtmlActivity.class);
} }
// else if (item.getItemId() == android.R.id.home) {
// WinBollActivityManager.getInstance(this).finish(this);
// }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
} }

View File

@@ -366,10 +366,16 @@ abstract public class WinBollActivity extends AppCompatActivity {
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
LogUtils.d(TAG, "onOptionsItemSelected"); LogUtils.d(TAG, "onOptionsItemSelected");
if (item.getItemId() == R.id.item_log) { if (item.getItemId() == R.id.item_log) {
LogUtils.d(TAG, "item_log not yet."); // LogUtils.d(TAG, "item_log not yet.");
// 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().printAvtivityListInfo();
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class); WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
} else if (item.getItemId() == R.id.item_exit) { } else if (item.getItemId() == R.id.item_exit) {
//ToastUtils.show("item_exit");
WinBollActivityManager.getInstance(this).finishAll(); WinBollActivityManager.getInstance(this).finishAll();
} else if (item.getItemId() == R.id.item_info) { } else if (item.getItemId() == R.id.item_info) {
WinBollApplication application = (WinBollApplication) getApplication(); WinBollApplication application = (WinBollApplication) getApplication();

View File

@@ -20,17 +20,16 @@ import java.util.Map;
public class WinBollActivityManager { public class WinBollActivityManager {
public static final String TAG = "WinBollActivityManager"; public static final String TAG = "WinBollActivityManager";
public static final String EXTRA_TAG = "EXTRA_TAG";
Context mContext; Context mContext;
static WinBollActivityManager _mWinBollActivityManager; static WinBollActivityManager _mWinBollActivityManager;
static Map<String, WinBollActivity> _mapActivityList; static Map<String, WinBollActivity> _mapActivityList;
//static ArrayList<WinBollActivity> _mWinBollActivityList;
public WinBollActivityManager(Context context) { public WinBollActivityManager(Context context) {
mContext = context; mContext = context;
LogUtils.d(TAG, "WinBollActivityManager()"); LogUtils.d(TAG, "WinBollActivityManager()");
_mapActivityList = new HashMap<String, WinBollActivity>(); _mapActivityList = new HashMap<String, WinBollActivity>();
//_mWinBollActivityList = new ArrayList<WinBollActivity>();
} }
public static synchronized WinBollActivityManager getInstance(Context context) { public static synchronized WinBollActivityManager getInstance(Context context) {
@@ -42,19 +41,10 @@ public class WinBollActivityManager {
return _mWinBollActivityManager; return _mWinBollActivityManager;
} }
/** //
* 把Activity添加到管理中 // 把Activity添加到管理中
*/ //
public <T extends WinBollActivity> void add(T activity) { public <T extends WinBollActivity> void add(T activity) {
/*for (int i = 0; i < _mWinBollActivityList.size(); i++) {
LogUtils.d(TAG, String.format("add for i %d\nget(i).getTag() %s", i, _mWinBollActivityList.get(i).getTag()));
if (_mWinBollActivityList.get(i).getTag().equals(activity.getTag())) {
_mWinBollActivityList.add(i, activity);
_mWinBollActivityList.remove(i);
LogUtils.d(TAG, String.format("Replace activity : %s\nSize %d", activity.getTag(), _mWinBollActivityList.size()));
return;
}
}*/
if (isActive(activity.getTag())) { if (isActive(activity.getTag())) {
LogUtils.d(TAG, String.format("add(...) %s is active.", activity.getTag())); LogUtils.d(TAG, String.format("add(...) %s is active.", activity.getTag()));
} else { } else {
@@ -66,7 +56,7 @@ public class WinBollActivityManager {
// //
// activity: 为 null 时, // activity: 为 null 时,
// intent.putExtra 函数 "tag" 参数为 tag // intent.putExtra 函数 EXTRA_TAG 参数为 tag
// activity: 不为 null 时, // activity: 不为 null 时,
// intent.putExtra 函数 "tag" 参数为 activity.getTag() // intent.putExtra 函数 "tag" 参数为 activity.getTag()
// //
@@ -84,7 +74,7 @@ public class WinBollActivityManager {
//打开多任务窗口 flags //打开多任务窗口 flags
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.putExtra("tag", tag); intent.putExtra(EXTRA_TAG, tag);
mContext.startActivity(intent); mContext.startActivity(intent);
} catch (InstantiationException | IllegalAccessException e) { } catch (InstantiationException | IllegalAccessException e) {
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
@@ -105,18 +95,18 @@ public class WinBollActivityManager {
//打开多任务窗口 flags //打开多任务窗口 flags
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.putExtra("tag", tag); intent.putExtra(EXTRA_TAG, tag);
mContext.startActivity(intent); mContext.startActivity(intent);
} catch (InstantiationException | IllegalAccessException e) { } catch (InstantiationException | IllegalAccessException e) {
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
} }
} }
/** //
* 判断 tag绑定的 MyActivity是否存在 // 判断 tag绑定的 MyActivity是否存在
*/ //
public boolean isActive(String tag) { public boolean isActive(String tag) {
printAvtivityListInfo(); //printAvtivityListInfo();
WinBollActivity activity = getWinBollActivity(tag); WinBollActivity activity = getWinBollActivity(tag);
if (activity != null) { if (activity != null) {
LogUtils.d(TAG, "isActive(...) activity != null tag " + tag); LogUtils.d(TAG, "isActive(...) activity != null tag " + tag);
@@ -141,21 +131,21 @@ public class WinBollActivityManager {
return _mapActivityList.get(tag); return _mapActivityList.get(tag);
} }
/** //
* 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
*/ //
public <T extends WinBollActivity> void resumeActivity(Context context, String tag) { public <T extends WinBollActivity> void resumeActivity(Context context, String tag) {
LogUtils.d(TAG, "resumeActivty"); LogUtils.d(TAG, "resumeActivty");
T activity = (T)getWinBollActivity(tag); T activity = (T)getWinBollActivity(tag);
LogUtils.d(TAG, "activity " + activity.getTag()); //LogUtils.d(TAG, "activity " + activity.getTag());
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) { if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
resumeActivity(context, activity); resumeActivity(context, activity);
} }
} }
/** //
* 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
*/ //
public <T extends WinBollActivity> void resumeActivity(Context context, T activity) { public <T extends WinBollActivity> void resumeActivity(Context context, T activity) {
ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
//返回启动它的根任务home 或者 MainActivity //返回启动它的根任务home 或者 MainActivity
@@ -170,39 +160,39 @@ public class WinBollActivityManager {
} }
/** //
* 结束所有 Activity // 结束所有 Activity
*/ //
public void finishAll() { public void finishAll() {
try { try {
LogUtils.d(TAG, "finishAll no yet."); for (String key : _mapActivityList.keySet()) {
//ToastUtils.show(String.format("finishAll() size : %d", _mWinBollActivityList.size())); //System.out.println("Key: " + key + ", Value: " + _mapActivityList.get(key));
// for (int i = _mWinBollActivityList.size() - 1; i > -1; i--) { WinBollActivity activity = _mapActivityList.get(key);
// WinBollActivity activity = _mWinBollActivityList.get(i); //ToastUtils.show("finishAll() activity");
// ToastUtils.show("finishAll() activity"); if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
// if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) { //ToastUtils.show("activity != null ...");
// //ToastUtils.show("activity != null ..."); if (WinBollApplication.getWinBollUI_TYPE() == WinBollApplication.WinBollUI_TYPE.Service) {
// if (WinBollApplication.getWinBollUI_TYPE() == WinBollApplication.WinBollUI_TYPE.Service) { // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。
// // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。 activity.finishAndRemoveTask();
// activity.finishAndRemoveTask(); //ToastUtils.show("finishAll() activity.finishAndRemoveTask();");
// //ToastUtils.show("finishAll() activity.finishAndRemoveTask();"); } else if (WinBollApplication.getWinBollUI_TYPE() == WinBollApplication.WinBollUI_TYPE.Aplication) {
// } else if (WinBollApplication.getWinBollUI_TYPE() == WinBollApplication.WinBollUI_TYPE.Aplication) { // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。
// // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。 activity.finish();
// activity.finish(); //ToastUtils.show("finishAll() activity.finish();");
// //ToastUtils.show("finishAll() activity.finish();"); } else {
// } else { LogUtils.d(TAG, "WinBollApplication.WinBollUI_TYPE error.");
// ToastUtils.show("WinBollApplication.WinBollUI_TYPE error."); //ToastUtils.show("WinBollApplication.WinBollUI_TYPE error.");
// } }
// } }
// } }
} catch (Exception e) { } catch (Exception e) {
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
} }
} }
/** //
* 结束指定Activity // 结束指定Activity
*/ //
public <T extends WinBollActivity> void finish(T activity) { public <T extends WinBollActivity> void finish(T activity) {
try { try {
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) { if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
@@ -225,22 +215,6 @@ public class WinBollActivityManager {
if (preActivity != null) { if (preActivity != null) {
resumeActivity(mContext, preActivity); resumeActivity(mContext, preActivity);
} }
// for (int i = 0; i < _mWinBollActivityList.size(); i++) {
// if (_mWinBollActivityList.get(i).getTag().equals(activity.getTag())) {
// //ToastUtils.show(String.format("equals i : %d\nTag : %s\nSize : %d", i, activity.getTag(), _mWinBollActivityList.size()));
// if (i == 0) {
// finishAll();
// //ToastUtils.show("finish finishAll");
// return;
// }
// if (i > 0) {
// activity.finish();
// resumeActivity(mContext, _mWinBollActivityList.get(i - 1));
// return;
// }
// }
// }
} }
} catch (Exception e) { } catch (Exception e) {
@@ -248,6 +222,9 @@ public class WinBollActivityManager {
} }
} }
//
// 获取窗口队列中的前一个窗口
//
WinBollActivity getPreActivity(WinBollActivity activity) { WinBollActivity getPreActivity(WinBollActivity activity) {
try { try {
boolean bingo = false; boolean bingo = false;
@@ -271,12 +248,10 @@ public class WinBollActivityManager {
return null; return null;
} }
//
// 从管理列表中移除管理项
//
public <T extends WinBollActivity> boolean registeRemove(T activity) { public <T extends WinBollActivity> boolean registeRemove(T activity) {
// for (int i = 0; i < _mWinBollActivityList.size(); i++) {
// if (registeRemove(activity, i)) {
// return true;
// }
// }
WinBollActivity activityTest = _mapActivityList.get(activity.getTag()); WinBollActivity activityTest = _mapActivityList.get(activity.getTag());
if (activityTest != null) { if (activityTest != null) {
_mapActivityList.remove(activity.getTag()); _mapActivityList.remove(activity.getTag());
@@ -285,15 +260,9 @@ public class WinBollActivityManager {
return false; return false;
} }
// public <T extends WinBollActivity> boolean registeRemove(T activity, int position) { //
// if (_mWinBollActivityList.get(position) == activity) { // 打印管理列表项列表里的信息
// _mWinBollActivityList.remove(position); //
// //ToastUtils.show(String.format("registeRemove remove.\nTag %s\nposition %d", activity.getTag(), position));
// return true;
// }
// return false;
// }
public static void printAvtivityListInfo() { public static void printAvtivityListInfo() {
//LogUtils.d(TAG, "printAvtivityListInfo"); //LogUtils.d(TAG, "printAvtivityListInfo");
if (!_mapActivityList.isEmpty()) { if (!_mapActivityList.isEmpty()) {
@@ -310,6 +279,4 @@ public class WinBollActivityManager {
LogUtils.d(TAG, "The map is empty."); LogUtils.d(TAG, "The map is empty.");
} }
} }
} }

View File

@@ -0,0 +1,107 @@
package cc.winboll.studio.libapputils.bean;
/**
* @Author ZhanGSKen@QQ.COM
* @Date 2025/01/20 14:19:02
* @Describe 应用信息类
*/
import cc.winboll.studio.libapputils.R;
import java.io.Serializable;
public class APPInfo implements Serializable {
public static final String TAG = "APPInfo";
// 应用名称
String appName;
// 应用图标
int appIcon;
// 应用描述
String appDescription;
// 应用Git仓库地址
String appGitName;
// 应用主页
String appHomePage;
// 应用包名称
String appAPKName;
// 应用包存储文件夹名称
String appAPKFolderName;
public APPInfo(String appName, int appIcon, String appDescription, String appGitName, String appHomePage, String appAPKName, String appAPKFolderName) {
this.appName = appName;
this.appIcon = appIcon;
this.appDescription = appDescription;
this.appGitName = appGitName;
this.appHomePage = appHomePage;
this.appAPKName = appAPKName;
this.appAPKFolderName = appAPKFolderName;
}
public APPInfo() {
this.appName = "WinBoll-APP";
this.appIcon = R.drawable.ic_launcher;
this.appDescription = "WinBoll APP";
this.appGitName = "APP";
this.appHomePage = "https://www.winboll.cc/studio/details.php?app=APP";
this.appAPKName = "APP";
this.appAPKFolderName = "APP";
}
public void setAppIcon(int appIcon) {
this.appIcon = appIcon;
}
public int getAppIcon() {
return appIcon;
}
public void setAppDescription(String appDescription) {
this.appDescription = appDescription;
}
public String getAppDescription() {
return appDescription;
}
public void setAppAPKFolderName(String appAPKFolderName) {
this.appAPKFolderName = appAPKFolderName;
}
public String getAppAPKFolderName() {
return appAPKFolderName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getAppName() {
return appName;
}
public void setAppGitName(String appGitName) {
this.appGitName = appGitName;
}
public String getAppGitName() {
return appGitName;
}
public void setAppHomePage(String appHomePage) {
this.appHomePage = appHomePage;
}
public String getAppHomePage() {
return appHomePage;
}
public void setAppAPKName(String appAPKName) {
this.appAPKName = appAPKName;
}
public String getAppAPKName() {
return appAPKName;
}
}

View File

@@ -1,30 +1,41 @@
package cc.winboll.studio.libapputils.log; package cc.winboll.studio.libapputils.log;
import android.os.Bundle;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.WinBollActivity;
import cc.winboll.studio.libapputils.ads.ADsView;
import cc.winboll.studio.libapputils.app.WinBollApplication;
import android.view.View;
import android.app.Activity;
/** /**
* @Author ZhanGSKen@QQ.COM * @Author ZhanGSKen@QQ.COM
* @Date 2024/08/12 15:07:58 * @Date 2024/08/12 15:07:58
* @Describe WinBoll 应用日志窗口 * @Describe WinBoll 应用日志窗口
*/ */
public class LogActivity extends Activity { import android.os.Bundle;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.WinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollApplication;
public class LogActivity extends WinBollActivity {
public static final String TAG = "LogActivity"; public static final String TAG = "LogActivity";
LogView mLogView; LogView mLogView;
//ADsView mADsView;
// @Override @Override
// protected boolean isEnableDisplayHomeAsUp() { public String getTag() {
// return false; return TAG;
// } }
@Override
protected Toolbar initToolBar() {
return null;
}
@Override
protected boolean isEnableDisplayHomeAsUp() {
return false;
}
@Override
protected boolean isAddWinBollToolBar() {
return false;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -32,12 +43,8 @@ public class LogActivity extends Activity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log); setContentView(R.layout.activity_log);
mLogView = findViewById(R.id.logview); mLogView = findViewById(R.id.logview);
//mADsView = findViewById(R.id.adsview);
//mADsView.loadUrl("https://www.winboll.cc");
//mLogView.setVisibility(WinBollApplication.isDebug()?View.GONE:View.VISIBLE);
//mADsView.setVisibility(WinBollApplication.isDebug()?View.GONE:View.VISIBLE);
if(WinBollApplication.isDebug()) { mLogView.start(); } if (WinBollApplication.isDebug()) { mLogView.start(); }
} }
@Override @Override
@@ -46,21 +53,4 @@ public class LogActivity extends Activity {
super.onResume(); super.onResume();
mLogView.start(); mLogView.start();
} }
// @Override
// protected boolean isAddWinBollToolBar() {
// return false;
// }
//
// @Override
// protected Toolbar initToolBar() {
// LogUtils.d(TAG, "initToolBar");
// return null;
// }
//
// @Override
// public String getTag() {
// LogUtils.d(TAG, "getTag");
// return TAG;
// }
} }

View File

@@ -20,6 +20,7 @@ import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.AppVersionUtils; import cc.winboll.studio.libapputils.app.AppVersionUtils;
import cc.winboll.studio.libapputils.app.WinBollActivityManager; import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.app.WinBollApplication; import cc.winboll.studio.libapputils.app.WinBollApplication;
import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.bean.DebugBean; import cc.winboll.studio.libapputils.bean.DebugBean;
import cc.winboll.studio.libapputils.log.LogUtils; import cc.winboll.studio.libapputils.log.LogUtils;
import cc.winboll.studio.libapputils.util.PrefUtils; import cc.winboll.studio.libapputils.util.PrefUtils;
@@ -41,6 +42,8 @@ public class AboutView extends LinearLayout {
public static final int MSG_APPUPDATE_CHECKED = 0; public static final int MSG_APPUPDATE_CHECKED = 0;
Context mContext; Context mContext;
APPInfo mAPPInfo;
WinBollServiceStatusView mWinBollServiceStatusView; WinBollServiceStatusView mWinBollServiceStatusView;
OnRequestDevUserInfoAutofillListener mOnRequestDevUserInfoAutofillListener; OnRequestDevUserInfoAutofillListener mOnRequestDevUserInfoAutofillListener;
String mszAppName = ""; String mszAppName = "";
@@ -59,23 +62,46 @@ public class AboutView extends LinearLayout {
EditText metDevUserName; EditText metDevUserName;
EditText metDevUserPassword; EditText metDevUserPassword;
public AboutView(Context context, APPInfo appInfo) {
super(context);
setAPPInfo(appInfo);
initView(context);
}
public AboutView(Context context, AttributeSet attrs) { public AboutView(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
initView(context, attrs); initView(context, attrs);
} }
void initView(Context context, AttributeSet attrs) { public void setAPPInfo(APPInfo appInfo) {
mContext = context; mAPPInfo = appInfo;
mszWinBollServerHost = WinBollApplication.isDebug() ? "http://10.8.0.13": "https://www.winboll.cc"; }
APPInfo createAppInfo(Context context, AttributeSet attrs) {
APPInfo appInfo = new APPInfo();
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AboutView); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AboutView);
mszAppName = typedArray.getString(R.styleable.AboutView_app_name); appInfo.setAppName(typedArray.getString(R.styleable.AboutView_app_name));
mszAppAPKFolderName = typedArray.getString(R.styleable.AboutView_app_apkfoldername); appInfo.setAppAPKFolderName(typedArray.getString(R.styleable.AboutView_app_apkfoldername));
mszAppAPKName = typedArray.getString(R.styleable.AboutView_app_apkname); appInfo.setAppAPKName(typedArray.getString(R.styleable.AboutView_app_apkname));
mszAppGitName = typedArray.getString(R.styleable.AboutView_app_gitname); appInfo.setAppGitName(typedArray.getString(R.styleable.AboutView_app_gitname));
mszAppDescription = typedArray.getString(R.styleable.AboutView_appdescription); appInfo.setAppDescription(typedArray.getString(R.styleable.AboutView_appdescription));
mnAppIcon = typedArray.getResourceId(R.styleable.AboutView_appicon, R.drawable.ic_winboll); appInfo.setAppIcon(typedArray.getResourceId(R.styleable.AboutView_appicon, R.drawable.ic_winboll));
// 返回一个绑定资源结束的信号给资源 // 返回一个绑定资源结束的信号给资源
typedArray.recycle(); typedArray.recycle();
return appInfo;
}
void initView(Context context) {
mContext = context;
mszAppName = mAPPInfo.getAppName();
mszAppAPKFolderName = mAPPInfo.getAppAPKFolderName();
mszAppAPKName = mAPPInfo.getAppAPKName();
mszAppGitName = mAPPInfo.getAppGitName();
mszAppDescription = mAPPInfo.getAppDescription();
mnAppIcon = mAPPInfo.getAppIcon();
mszWinBollServerHost = WinBollApplication.isDebug() ? "http://10.8.0.13": "https://www.winboll.cc";
try { try {
mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName; mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName;
@@ -131,6 +157,11 @@ public class AboutView extends LinearLayout {
} }
void initView(Context context, AttributeSet attrs) {
mAPPInfo = createAppInfo(context, attrs);
initView(context);
}
public static String subBetaSuffix(String input) { public static String subBetaSuffix(String input) {
if (input.endsWith(".beta")) { if (input.endsWith(".beta")) {
return input.substring(0, input.length() - ".beta".length()); return input.substring(0, input.length() - ".beta".length());

View File

@@ -1,25 +1,22 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/activityaboutToolbar1"/> android:id="@+id/activityaboutToolbar1"/>
<cc.winboll.studio.libapputils.view.AboutView <LinearLayout
app:app_name= "APP" android:orientation="vertical"
app:app_apkfoldername="APP" android:layout_width="match_parent"
app:app_apkname="APP" android:layout_height="0dp"
app:app_gitname="APP" android:layout_weight="1.0"
app:appdescription="WinBoll.CC 网站客户端。" android:id="@+id/activityaboutLinearLayout1"/>
app:appicon="@drawable/ic_winboll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/activityaboutAboutView1"/>
</LinearLayout> </LinearLayout>

View File

@@ -8,8 +8,8 @@
app:cardElevation="4dp" app:cardElevation="4dp"
app:cardCornerRadius="4dp" app:cardCornerRadius="4dp"
android:id="@+id/listviewauthinfoCardView1" android:id="@+id/listviewauthinfoCardView1"
android:layout_marginLeft="10dp" android:layout_marginLeft="0dp"
android:layout_marginRight="10dp"> android:layout_marginRight="5dp">
<LinearLayout <LinearLayout
android:orientation="horizontal" android:orientation="horizontal"
@@ -19,6 +19,7 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="24dp" android:layout_height="24dp"
android:layout_marginLeft="5dp"
android:id="@+id/viewlogtagTextView1"/> android:id="@+id/viewlogtagTextView1"/>
<CheckBox <CheckBox