命名空间调整

This commit is contained in:
ZhanGSKen 2025-03-28 20:23:58 +08:00
parent 6e8e32c497
commit 2a9ec064f9
23 changed files with 21 additions and 456 deletions

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Fri Mar 28 18:48:42 HKT 2025
#Fri Mar 28 12:21:28 GMT 2025
stageCount=19
libraryProject=libapputils
baseVersion=15.0
publishVersion=15.0.18
buildCount=0
buildCount=5
baseBetaVersion=15.0.19

View File

@ -13,10 +13,10 @@ import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toolbar;
import cc.winboll.studio.apputils.R;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.winboll.IWinBollActivity;
import cc.winboll.studio.apputils.R;
import cc.winboll.studio.libapputils.view.SimpleWebView;
import cc.winboll.studio.libapputils.views.SimpleWebView;
import java.io.IOException;
import java.io.InputStream;

View File

@ -8,7 +8,7 @@ import android.app.Activity;
import android.os.Bundle;
import android.widget.Toolbar;
import cc.winboll.studio.apputils.R;
import cc.winboll.studio.libapputils.view.StringToQrCodeView;
import cc.winboll.studio.libapputils.views.StringToQrCodeView;
public class TestStringToQRCodeViewActivity extends Activity {

View File

@ -11,7 +11,7 @@
android:layout_height="wrap_content"
android:id="@+id/toolbar"/>
<cc.winboll.studio.libapputils.view.SimpleWebView
<cc.winboll.studio.libapputils.views.SimpleWebView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0"

View File

@ -17,7 +17,7 @@
android:layout_height="0dp"
android:layout_weight="1.0">
<cc.winboll.studio.libapputils.view.StringToQrCodeView
<cc.winboll.studio.libapputils.views.StringToQrCodeView
android:layout_width="300dp"
android:layout_height="300dp"
android:id="@+id/activityteststringtoqrcodeviewStringToQrCodeView1"/>

View File

@ -42,7 +42,7 @@ dependencies {
// 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 'cc.winboll.studio:libappbase:15.1.4'
//
api 'com.google.zxing:core:3.4.1'

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Fri Mar 28 18:48:07 HKT 2025
#Fri Mar 28 12:21:28 GMT 2025
stageCount=19
libraryProject=libapputils
baseVersion=15.0
publishVersion=15.0.18
buildCount=0
buildCount=5
baseBetaVersion=15.0.19

View File

@ -1,95 +0,0 @@
package cc.winboll.studio.libapputils.service;
/**
* @Author ZhanGSKen@QQ.COM
* @Date 2024/12/08 20:15:42
* @Describe 应用主要服务组件类守护进程服务组件类
*/
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import cc.winboll.studio.libapputils.util.ServiceUtils;
public class AssistantService extends Service {
public final static String TAG = "AssistantService";
WinBollClientServiceBean mWinBollServiceBean;
MyServiceConnection mMyServiceConnection;
volatile boolean mIsServiceRunning;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mWinBollServiceBean = WinBollClientServiceBean.loadWinBollClientServiceBean(this);
if (mMyServiceConnection == null) {
mMyServiceConnection = new MyServiceConnection();
}
// 设置运行参数
mIsServiceRunning = false;
run();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
run();
return START_STICKY;
}
@Override
public void onDestroy() {
mIsServiceRunning = false;
super.onDestroy();
}
//
// 运行服务内容
//
void run() {
mWinBollServiceBean = WinBollClientServiceBean.loadWinBollClientServiceBean(this);
if (mWinBollServiceBean.isEnable()) {
if (mIsServiceRunning == false) {
// 设置运行状态
mIsServiceRunning = true;
// 唤醒和绑定主进程
wakeupAndBindMain();
}
}
}
//
// 唤醒和绑定主进程
//
void wakeupAndBindMain() {
if (ServiceUtils.isServiceAlive(getApplicationContext(), WinBollClientService.class.getName()) == false) {
startForegroundService(new Intent(AssistantService.this, WinBollClientService.class));
}
bindService(new Intent(AssistantService.this, WinBollClientService.class), mMyServiceConnection, Context.BIND_IMPORTANT);
}
//
// 主进程与守护进程连接时需要用到此类
//
class MyServiceConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
}
@Override
public void onServiceDisconnected(ComponentName name) {
mWinBollServiceBean = WinBollClientServiceBean.loadWinBollClientServiceBean(AssistantService.this);
if (mWinBollServiceBean.isEnable()) {
wakeupAndBindMain();
}
}
}
}

View File

@ -1,35 +0,0 @@
package cc.winboll.studio.libapputils.service;
/**
* @Author ZhanGSKen@QQ.COM
* @Date 2024/12/09 08:37:31
* @Describe WinBoll UI 状态图标枚举
*/
import cc.winboll.studio.libapputils.R;
public enum EWUIStatusIconDrawable {
NORMAL(0),
NEWS(1)
;
static final String TAG = "WUIStatusIconDrawable";
static String[] _mlistCNName = { "正常", "新的消息" };
private int value = 0;
private EWUIStatusIconDrawable(int value) { //必须是private的否则编译错误
this.value = value;
}
public static int getIconDrawableId(EWUIStatusIconDrawable drawableId) {
int res;
switch(drawableId){
case NEWS :
res = R.drawable.ic_winbollbeta;
break;
default :
res = R.drawable.ic_winboll;
}
return res;
}
}

View File

@ -1,17 +0,0 @@
package cc.winboll.studio.libapputils.service;
/**
* @Author ZhanGSKen@QQ.COM
* @Date 2024/12/08 23:40:05
* @Describe WinBollService 服务 Binder
*/
import android.graphics.drawable.Drawable;
public interface IWinBollClientServiceBinder {
public static final String TAG = "IWinBollClientServiceBinder";
public WinBollClientService getService();
public Drawable getCurrentStatusIconDrawable();
}

View File

@ -1,189 +0,0 @@
package cc.winboll.studio.libapputils.service;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.graphics.drawable.Drawable;
import android.os.IBinder;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.utils.ToastUtils;
import cc.winboll.studio.libapputils.util.ServiceUtils;
/**
* @Author ZhanGSKen@QQ.COM
* @Date 2024/12/08 19:42:07
* @Describe WinBoll 客户端服务
*/
public class WinBollClientService extends Service implements IWinBollClientServiceBinder {
public static final String TAG = "WinBollClientService";
WinBollClientServiceBean mWinBollClientServiceBean;
MyServiceConnection mMyServiceConnection;
volatile boolean mIsWinBollClientThreadRunning;
volatile boolean mIsEnableService;
WinBollClientThread mWinBollClientThread;
public boolean isWinBollClientThreadRunning() {
return mIsWinBollClientThreadRunning;
}
@Override
public WinBollClientService getService() {
return WinBollClientService.this;
}
@Override
public Drawable getCurrentStatusIconDrawable() {
return mIsWinBollClientThreadRunning ?
getDrawable(EWUIStatusIconDrawable.getIconDrawableId(EWUIStatusIconDrawable.NORMAL))
: getDrawable(EWUIStatusIconDrawable.getIconDrawableId(EWUIStatusIconDrawable.NEWS));
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
ToastUtils.show("onCreate");
super.onCreate();
mWinBollClientThread = null;
mWinBollClientServiceBean = WinBollClientServiceBean.loadWinBollClientServiceBean(this);
mIsEnableService = mWinBollClientServiceBean.isEnable();
if (mMyServiceConnection == null) {
mMyServiceConnection = new MyServiceConnection();
}
// 由系统启动时应用可以通过下面函数实例化实际服务进程
runMainThread();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
ToastUtils.show("onStartCommand");
// 由应用 Intent 启动时应用可以通过下面函数实例化实际服务进程
runMainThread();
// 返回运行参数持久化存储后服务状态控制参数
// 无论 Intent 传入如何服务状态一直以持久化存储后的参数控制
// PS: 另外当然可以通过 Intent 传入的指标来修改 mWinBollServiceBean
// 不过本服务的应用方向会变得繁琐
// 现阶段只要满足手机端启动与停止本服务WinBoll 客户端实例运行在手机端就可以了
return mIsEnableService ? Service.START_STICKY: super.onStartCommand(intent, flags, startId);
}
void runMainThread() {
if (mWinBollClientThread == null) {
ToastUtils.show("runMainThread()");
mWinBollClientThread = new WinBollClientThread();
mWinBollClientThread.start();
}
}
void syncWinBollClientThreadStatus() {
mWinBollClientServiceBean = WinBollClientServiceBean.loadWinBollClientServiceBean(this);
mIsEnableService = mWinBollClientServiceBean.isEnable();
}
// 唤醒和绑定守护进程
//
void wakeupAndBindAssistant() {
if (ServiceUtils.isServiceAlive(getApplicationContext(), AssistantService.class.getName()) == false) {
startService(new Intent(WinBollClientService.this, AssistantService.class));
//LogUtils.d(TAG, "call wakeupAndBindAssistant() : Binding... AssistantService");
bindService(new Intent(WinBollClientService.this, AssistantService.class), mMyServiceConnection, Context.BIND_IMPORTANT);
}
}
// 主进程与守护进程连接时需要用到此类
//
private class MyServiceConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
}
@Override
public void onServiceDisconnected(ComponentName name) {
mWinBollClientServiceBean = WinBollClientServiceBean.loadWinBollClientServiceBean(WinBollClientService.this);
if (mWinBollClientServiceBean.isEnable()) {
// 唤醒守护进程
wakeupAndBindAssistant();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
ToastUtils.show("onDestroy");
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
void setWinBollServiceEnableStatus(boolean isEnable) {
WinBollClientServiceBean bean = WinBollClientServiceBean.loadWinBollClientServiceBean(this);
bean.setIsEnable(isEnable);
WinBollClientServiceBean.saveWinBollServiceBean(this, bean);
}
boolean getWinBollServiceEnableStatus(Context context) {
mWinBollClientServiceBean = WinBollClientServiceBean.loadWinBollClientServiceBean(context);
return mWinBollClientServiceBean.isEnable();
}
/*public interface OnServiceStatusChangeListener {
void onServerStatusChange(boolean isServiceAlive);
}
public void setOnServerStatusChangeListener(OnServiceStatusChangeListener l) {
mOnServerStatusChangeListener = l;
}*/
class WinBollClientThread extends Thread {
@Override
public void run() {
ToastUtils.show("WinBollClientThread");
super.run();
syncWinBollClientThreadStatus();
if (mIsEnableService) {
if (mIsWinBollClientThreadRunning == false) {
// 设置运行状态
mIsWinBollClientThreadRunning = true;
ToastUtils.show("run()");
// 唤醒守护进程
//wakeupAndBindAssistant();
while (mIsEnableService) {
// 显示运行状态
ToastUtils.show(TAG + " is running.");
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
}
syncWinBollClientThreadStatus();
//ToastUtils.show("syncServiceThreadStatus OK.");
//ToastUtils.show("mIsExist : " + Boolean.toString(!mIsEnableService));
//break;
}
// 服务进程退出, 重置进程运行状态
mIsWinBollClientThreadRunning = false;
mWinBollClientThread = null;
}
}
}
}
}

View File

@ -1,77 +0,0 @@
package cc.winboll.studio.libapputils.service;
import android.content.Context;
import android.util.JsonReader;
import android.util.JsonWriter;
import cc.winboll.studio.libappbase.BaseBean;
import java.io.IOException;
/**
* @Author ZhanGSKen@QQ.COM
* @Date 2024/12/08 19:44:57
* @Describe WinBollService 运行参数配置
*/
public class WinBollClientServiceBean extends BaseBean {
public static final String TAG = "WinBollClientServiceBean";
volatile boolean isEnable;
public WinBollClientServiceBean() {
isEnable = false;
}
public void setIsEnable(boolean isEnable) {
this.isEnable = isEnable;
}
public boolean isEnable() {
return isEnable;
}
@Override
public String getName() {
return WinBollClientServiceBean.class.getName();
}
@Override
public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
super.writeThisToJsonWriter(jsonWriter);
WinBollClientServiceBean bean = this;
jsonWriter.name("isEnable").value(bean.isEnable());
}
@Override
public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
if (name.equals("isEnable")) {
setIsEnable(jsonReader.nextBoolean());
} else {
return false;
}
}
return true;
}
@Override
public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
jsonReader.beginObject();
while (jsonReader.hasNext()) {
String name = jsonReader.nextName();
if (!initObjectsFromJsonReader(jsonReader, name)) {
jsonReader.skipValue();
}
}
// 结束 JSON 对象
jsonReader.endObject();
return this;
}
public static WinBollClientServiceBean loadWinBollClientServiceBean(Context context) {
WinBollClientServiceBean bean = WinBollClientServiceBean.loadBean(context, WinBollClientServiceBean.class);
return bean == null ? new WinBollClientServiceBean() : bean;
}
public static boolean saveWinBollServiceBean(WinBollClientService service, WinBollClientServiceBean bean) {
return WinBollClientServiceBean.saveBean(service, bean);
}
}

View File

@ -1,22 +0,0 @@
package cc.winboll.studio.libapputils.service;
/**
* @Author ZhanGSKen@QQ.COM
* @Date 2024/12/09 08:19:06
* @Describe WinBoll 邮件服务
*/
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class WinBollMail extends Service {
public static final String TAG = "WinBollMail";
@Override
public IBinder onBind(Intent intent) {
return null;
}
}

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.util;
package cc.winboll.studio.libapputils.utils;
/**
* @Author ZhanGSKen@AliYun.Com

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.util;
package cc.winboll.studio.libapputils.utils;
/**
* @Author ZhanGSKen@QQ.COM

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.util;
package cc.winboll.studio.libapputils.utils;
/**
* @Author ZhanGSKen@QQ.COM

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.util;
package cc.winboll.studio.libapputils.utils;
/**
* @Author ZhanGSKen@QQ.COM

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.util;
package cc.winboll.studio.libapputils.utils;
/**
* @Author ZhanGSKen@QQ.COM

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.util;
package cc.winboll.studio.libapputils.utils;
/**
* @Author ZhanGSKen@QQ.COM

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.util;
package cc.winboll.studio.libapputils.utils;
/**
* @Author ZhanGSKen@QQ.COM

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.view;
package cc.winboll.studio.libapputils.views;
/**
* @Author ZhanGSKen@QQ.COM

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.libapputils.view;
package cc.winboll.studio.libapputils.views;
/**
* @Author ZhanGSKen@QQ.COM
@ -14,7 +14,7 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import cc.winboll.studio.libapputils.util.QRCodeGenerator;
import cc.winboll.studio.libapputils.utils.QRCodeGenerator;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
public class StringToQrCodeView extends LinearLayout {

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="UtilsTheme" parent="@android:style/Theme.Holo.Light.NoActionBar">
<style name="UtilsTheme" parent="APPBaseTheme">
</style>
</resources>