diff --git a/.gitmodules b/.gitmodules index 6828285..c97416e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "winboll-x"] - path = winboll-x - url = https://gitea.winboll.cc/Studio/WinBollX.git [submodule "libjc/jcc/libs"] path = libjc/jcc/libs url = https://gitea.winboll.cc/Studio/APP_libjc_jcc_libs.git diff --git a/aes/src/main/java/cc/winboll/studio/aes/WinBoLLActivity.java b/aes/src/main/java/cc/winboll/studio/aes/WinBoLLActivity.java deleted file mode 100644 index af25247..0000000 --- a/aes/src/main/java/cc/winboll/studio/aes/WinBoLLActivity.java +++ /dev/null @@ -1,60 +0,0 @@ -package cc.winboll.studio.aes; - -import android.app.Activity; -import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import cc.winboll.studio.libaes.beans.AESThemeBean; -import cc.winboll.studio.libaes.utils.AESThemeUtil; -import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; -import android.view.MenuItem; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/03/30 00:34:02 - * @Describe WinBoLL 活动窗口通用基类 - */ -public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity { - - public static final String TAG = "WinBoLLActivity"; - - protected volatile AESThemeBean.ThemeType mThemeType; - - @Override - public Activity getActivity() { - return this; - } - - @Override - public String getTag() { - return TAG; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - mThemeType = getThemeType(); - setThemeStyle(); - super.onCreate(savedInstanceState); - } - - AESThemeBean.ThemeType getThemeType() { - /*SharedPreferences sharedPreferences = getSharedPreferences( - SHAREDPREFERENCES_NAME, MODE_PRIVATE); - return AESThemeBean.ThemeType.values()[((sharedPreferences.getInt(DRAWER_THEME_TYPE, AESThemeBean.ThemeType.DEFAULT.ordinal())))]; - */ - return AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(getApplicationContext())); - } - - void setThemeStyle() { - //setTheme(AESThemeBean.getThemeStyle(getThemeType())); - setTheme(AESThemeUtil.getThemeTypeID(getApplicationContext())); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if(item.getItemId() == android.R.id.home) { - finish(); - return true; - } - return super.onOptionsItemSelected(item); - } -} diff --git a/appbase/build.properties b/appbase/build.properties index 3cb59e8..18395f7 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Apr 29 14:47:34 HKT 2025 +#Sat May 03 10:32:21 GMT 2025 stageCount=7 libraryProject=libappbase baseVersion=15.7 publishVersion=15.7.6 -buildCount=0 +buildCount=4 baseBetaVersion=15.7.7 diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/WinBoLLActivityBase.java b/apputils/src/main/java/cc/winboll/studio/apputils/WinBoLLActivityBase.java deleted file mode 100644 index 91c285e..0000000 --- a/apputils/src/main/java/cc/winboll/studio/apputils/WinBoLLActivityBase.java +++ /dev/null @@ -1,51 +0,0 @@ -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 cc.winboll.studio.libappbase.GlobalApplication; -import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; -import cc.winboll.studio.libappbase.winboll.WinBoLLActivityManager; - -public class WinBoLLActivityBase extends Activity 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/build.gradle b/build.gradle index ab63fe7..6e7cc62 100644 --- a/build.gradle +++ b/build.gradle @@ -31,6 +31,11 @@ buildscript { allprojects { repositories { + // 本地 Maven 仓库(默认路径为 ~/.m2/repository) + mavenLocal() + // 或自定义本地仓库路径 + maven { url "file:///sdcard/.m2/repository" } + // Nexus Maven 库地址 // "WinBoLL Release" maven { url "https://nexus.winboll.cc/repository/maven-public/" } diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/IWinBoLLClientServiceBinder.java b/libaes/src/main/java/cc/winboll/studio/libaes/winboll/IWinBoLLClientServiceBinder.java deleted file mode 100644 index 65087ad..0000000 --- a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/IWinBoLLClientServiceBinder.java +++ /dev/null @@ -1,17 +0,0 @@ -package cc.winboll.studio.libaes.winboll; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/03/28 19:08:45 - * @Describe WinBoLLService 服务 Binder。 - */ -import android.graphics.drawable.Drawable; - -public interface IWinBoLLClientServiceBinder { - - public static final String TAG = "IWinBoLLClientServiceBinder"; - - public WinBoLLClientService getService(); - - public Drawable getCurrentStatusIconDrawable(); -} diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLClientService.java b/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLClientService.java deleted file mode 100644 index 12fcd43..0000000 --- a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLClientService.java +++ /dev/null @@ -1,192 +0,0 @@ -package cc.winboll.studio.libaes.winboll; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/03/28 19:06:54 - * @Describe WinBoLL 客户端服务 - */ -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.libaes.winboll.AssistantService; -import cc.winboll.studio.libappbase.GlobalApplication; -import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.utils.ServiceUtils; -import cc.winboll.studio.libapputils.utils.PrefUtils; -import com.hjq.toast.ToastUtils; - -public class WinBoLLClientService extends Service implements IWinBoLLClientServiceBinder { - - public static final String TAG = "WinBoLLClientService"; - - WinBoLLClientServiceBean mWinBoLLClientServiceBean; - MyServiceConnection mMyServiceConnection; - volatile boolean mIsWinBoLLClientThreadRunning; - volatile boolean mIsEnableService; - volatile 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); - } - - synchronized void runMainThread() { - if (mWinBoLLClientThread == null) { - //ToastUtils.show("runMainThread()"); - mWinBoLLClientThread = new WinBoLLClientThread(); - mWinBoLLClientThread.start(); - } - } - - void syncWinBoLLClientThreadStatus() { - mWinBoLLClientServiceBean = WinBoLLClientServiceBean.loadWinBoLLClientServiceBean(this); - mIsEnableService = mWinBoLLClientServiceBean.isEnable(); - LogUtils.d(TAG, String.format("mIsEnableService %s", mIsEnableService)); - } - - - // 唤醒和绑定守护进程 - // - void wakeupAndBindAssistant() { - if (ServiceUtils.isServiceRunning(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() { - super.run(); - LogUtils.d(TAG, "run syncWinBoLLClientThreadStatus"); - syncWinBoLLClientThreadStatus(); - if (mIsEnableService) { - if (mIsWinBoLLClientThreadRunning == false) { - // 设置运行状态 - mIsWinBoLLClientThreadRunning = true; - LogUtils.d(TAG, "WinBoLLClientThread run()"); - - // 唤醒守护进程 - //wakeupAndBindAssistant(); - - while (mIsEnableService) { - // 显示运行状态 - WinBoLLServiceStatusView.startConnection(); - LogUtils.d(TAG, String.format("while mIsEnableService is %s", mIsEnableService)); - - try { - Thread.sleep(10 * 1000); - } catch (InterruptedException e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - syncWinBoLLClientThreadStatus(); - } - - // 服务进程退出, 重置进程运行状态 - WinBoLLServiceStatusView.stopConnection(); - mIsWinBoLLClientThreadRunning = false; - mWinBoLLClientThread = null; - } - } - } - } -} diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLClientServiceBean.java b/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLClientServiceBean.java deleted file mode 100644 index 000b5db..0000000 --- a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLClientServiceBean.java +++ /dev/null @@ -1,78 +0,0 @@ -package cc.winboll.studio.libaes.winboll; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/03/28 19:05:15 - * @Describe WinBoLLService 运行参数配置 - */ -import android.content.Context; -import android.util.JsonReader; -import android.util.JsonWriter; -import cc.winboll.studio.libappbase.BaseBean; -import java.io.IOException; - -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); - } -} diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLMail.java b/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLMail.java deleted file mode 100644 index 6f49c90..0000000 --- a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLMail.java +++ /dev/null @@ -1,22 +0,0 @@ -package cc.winboll.studio.libaes.winboll; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/03/28 19:13:20 - * @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; - } - -} diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLServerConnectionThread.java b/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLServerConnectionThread.java deleted file mode 100644 index 5e3e833..0000000 --- a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLServerConnectionThread.java +++ /dev/null @@ -1,106 +0,0 @@ -package cc.winboll.studio.libaes.winboll; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/03/29 15:57:28 - * @Describe WinBoLL 服务器服务情况测试访问进程。 - */ -import cc.winboll.studio.libappbase.LogUtils; -import java.io.IOException; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.Credentials; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - -// 新增自定义回调接口 -interface TextCallback { - void onSuccess(String text); - void onFailure(Exception e); -} - -public class WinBoLLServerConnectionThread extends Thread { - - public static final String TAG = "WinBoLLClientService"; - - private final String url; - private final String username; - private final String password; - private final int connectTimeout; - private final int readTimeout; - private final int maxRetries; - private final TextCallback callback; // 新增回调成员变量 - - // 新增带回调的构造函数 - public WinBoLLServerConnectionThread(String url, String username, String password, TextCallback callback) { - this(url, username, password, 10000, 10000, 5, callback); - } - - // 修改原有构造函数,添加回调参数 - public WinBoLLServerConnectionThread(String url, String username, String password, - int connectTimeout, int readTimeout, int maxRetries, TextCallback callback) { - this.url = url; - this.username = username; - this.password = password; - this.connectTimeout = connectTimeout; - this.readTimeout = readTimeout; - this.maxRetries = maxRetries; - this.callback = callback; - } - - @Override - public void run() { - LogUtils.d(TAG, String.format("run() url %s\nusername %s\npassword %s", url, username, password)); - String credential = Credentials.basic(username, password); - LogUtils.d(TAG, String.format("credential %s", credential)); - - OkHttpClient client = new OkHttpClient(); - Request request = new Request.Builder() - .url(url) - .header("Accept", "text/plain") - .header("Authorization", credential) - .build(); - - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, IOException e) { - // 优先调用自定义回调 - if (callback != null) { - callback.onFailure(e); - } else { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - } - - @Override - public void onResponse(Call call, Response response) throws IOException { - if (!response.isSuccessful()) { - if (callback != null) { - callback.onFailure(new Exception("Unexpected code " + response)); - } else { - LogUtils.d(TAG, "Unexpected code " + response, Thread.currentThread().getStackTrace()); - } - return; - } - - try { - String text = response.body().string(); - // 优先调用自定义回调 - if (callback != null) { - callback.onSuccess(text); - } else { - LogUtils.d(TAG, text); - } - } catch (Exception e) { - if (callback != null) { - callback.onFailure(e); - } else { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - } - } - }); - } -} diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLServiceStatusView.java b/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLServiceStatusView.java deleted file mode 100644 index f91acc9..0000000 --- a/libaes/src/main/java/cc/winboll/studio/libaes/winboll/WinBoLLServiceStatusView.java +++ /dev/null @@ -1,473 +0,0 @@ -package cc.winboll.studio.libaes.winboll; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/03/28 17:41:55 - * @Describe WinBoLL 服务主机连接状态视图 - */ -import cc.winboll.studio.libaes.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.libaes.winboll.WinBoLLClientService; -import cc.winboll.studio.libappbase.GlobalApplication; -import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libapputils.utils.PrefUtils; -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; - - static WinBoLLServiceStatusView _WinBoLLServiceStatusView; - Context mContext; - //boolean mIsConnected; - volatile 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() { - _WinBoLLServiceStatusView = this; - - 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) { - LogUtils.d(TAG, "onClick()"); - if (mConnectionStatus == ConnectionStatus.CONNECTED) { - LogUtils.d(TAG, "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); - //stopConnectionThread(); - mTextView.setText(""); - setImageViewByConnection(mImageView, false); - mConnectionStatus = ConnectionStatus.DISCONNECTED; - } else if (mConnectionStatus == ConnectionStatus.DISCONNECTED) { - LogUtils.d(TAG, "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); - //startConnectionThread(); - } - } - }; - 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); - } - } - - TextCallback apiTextCallback = new TextCallback() { - @Override - public void onSuccess(String text) { - // 处理成功响应 - LogUtils.d(TAG, text); - } - - @Override - public void onFailure(Exception e) { - // 处理失败情况 - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - }; - - TextCallback cipTextCallback = new TextCallback() { - @Override - public void onSuccess(String text) { - // 处理成功响应 - LogUtils.d(TAG, text); - LogUtils.d(TAG, "Develop Host Connection IP is : " + text); - mConnectionStatus = ConnectionStatus.CONNECTED; - // 获取当前时间 - LocalDateTime now = LocalDateTime.now(); - // 定义时间格式 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); - // 按照指定格式格式化时间并输出 - String formattedDateTime = now.format(formatter); - String msg = "ClientIP<" + formattedDateTime + ">: " + text; - mWinBoLLServiceViewHandler.postMessageText(msg); - mWinBoLLServiceViewHandler.postMessageConnectionStatus(true); - - } - - @Override - public void onFailure(Exception e) { - // 处理失败情况 - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - // 处理网络请求失败 - setImageViewByConnection(mImageView, false); - mWinBoLLServiceViewHandler.postMessageText(e.getMessage()); - mWinBoLLServiceViewHandler.postMessageConnectionStatus(false); - } - }; - - public void requestAPIWithBasicAuth() { - String targetUrl = "https://" + (GlobalApplication.isDebuging() ?"dev.winboll": "winboll") + ".cc/api/"; // 替换为实际测试的URL - requestWithBasicAuth(targetUrl, apiTextCallback); - } - - public void requestCIPWithBasicAuth() { - String targetUrl = mszServerHost + "/cip/?simple=true"; - requestWithBasicAuth(targetUrl, cipTextCallback); - } - - public void requestWithBasicAuth(String targetUrl, TextCallback callback) { - String username = ""; - String password = ""; - if (GlobalApplication.isDebuging()) { - username = PrefUtils.getString(mContext, "metDevUserName", ""); - password = PrefUtils.getString(mContext, "metDevUserPassword", ""); - } else { - username = "WinBoLL"; - password = "WinBoLLPowerByZhanGSKen"; - } - - LogUtils.d(TAG, String.format("Connection Start. targetUrl %s", targetUrl)); - WinBoLLServerConnectionThread thread = new WinBoLLServerConnectionThread( - targetUrl, - username, - password, - cipTextCallback - ); - thread.start(); - } - - /*void requestWithBasicAuth(final WinBoLLServiceViewHandler textViewHandler, String targetUrl, final String username, final String password) { - // 用户名和密码,替换为实际的认证信息 - //String username = "your_username"; - //String password = "your_password"; - LogUtils.d(TAG, "requestWithBasicAuth(...)"); - LogUtils.d(TAG, String.format("targetUrl %s", targetUrl)); - - // 构建包含认证信息的请求 - String credential = Credentials.basic(username, password); - LogUtils.d(TAG, String.format("credential %s", credential)); - - OkHttpClient client = new OkHttpClient(); - Request request = new Request.Builder() - .url(targetUrl) - .header("Accept", "text/plain") // 设置正确的Content-Type头 - .header("Authorization", credential) - .build(); - - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, IOException e) { - // 处理网络请求失败 - setImageViewByConnection(mImageView, false); - textViewHandler.postMessageText(e.getMessage()); - textViewHandler.postMessageConnectionStatus(false); - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - //String sz = "请求失败,状态码: " + response.code(); - //setImageViewByConnection(mImageView, false); - //LogUtils.d(TAG, sz); - } - - @Override - public void onResponse(Call call, Response response) throws IOException { - if (!response.isSuccessful()) { - setImageViewByConnection(mImageView, false); - textViewHandler.postMessageText("Unexpected code " + response); - textViewHandler.postMessageConnectionStatus(false); - LogUtils.d(TAG, "Unexpected code " + response, Thread.currentThread().getStackTrace()); - return; - } - - try { - // 读取响应体作为字符串,注意这里可能需要解码 - String text = response.body().string(); - LogUtils.d(TAG, "Develop Host Connection IP is : " + text); - mConnectionStatus = ConnectionStatus.CONNECTED; - // 获取当前时间 - LocalDateTime now = LocalDateTime.now(); - // 定义时间格式 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); - // 按照指定格式格式化时间并输出 - String formattedDateTime = now.format(formatter); - textViewHandler.postMessageText("ClientIP<" + formattedDateTime + ">: " + text); - textViewHandler.postMessageConnectionStatus(true); - - //org.jsoup.nodes.Document doc = org.jsoup.Jsoup.parse(text); - //LogUtils.d(TAG, doc.text()); - - // 使用id选择器找到具有特定id的元素 - //org.jsoup.nodes.Element elementWithId = doc.select("#LastRelease").first(); // 获取第一个匹配的元素 - - // 提取并打印元素的文本内容 - //mszNewestAppPackageName = elementWithId.text(); - //ToastUtils.delayedShow(text + "\n" + mszNewestAppPackageName, 5000); - - //mHandler.sendMessage(mHandler.obtainMessage(MSG_APPUPDATE_CHECKED)); - //System.out.println(response.body().string()); - // mConnectionStatus = ConnectionStatus.CONNECTED; - // // 获取当前时间 - // 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); - } catch (Exception e) { - 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); - } - } - - public static void startConnection() { - if (_WinBoLLServiceStatusView != null) { - _WinBoLLServiceStatusView.startConnectionThread(); - } - } - - public static void stopConnection() { - if (_WinBoLLServiceStatusView != null) { - _WinBoLLServiceStatusView.stopConnectionThread(); - } - } - - void startConnectionThread() { - if (mConnectionStatus == ConnectionStatus.DISCONNECTED) { - mConnectionStatus = ConnectionStatus.START_CONNECT; - LogUtils.d(TAG, "startConnectionThread"); - if (mConnectionThread != null) { - LogUtils.d(TAG, "mConnectionThread != null"); - mConnectionThread.mIsExist = true; - } - mConnectionThread = new ConnectionThread(); - mConnectionThread.start(); - } else if (mConnectionStatus == ConnectionStatus.CONNECTING) { - //LogUtils.d(TAG, "mConnectionStatus == ConnectionStatus.CONNECTING"); - } else if (mConnectionStatus == ConnectionStatus.CONNECTED) { - //LogUtils.d(TAG, "mConnectionStatus == ConnectionStatus.CONNECTED"); - } else { - LogUtils.d(TAG, String.format("Unknow mConnectionStatus %s, can not start ConnectionThread.", mConnectionStatus)); - } - } - - void stopConnectionThread() { - LogUtils.d(TAG, "stopConnectionThread"); - if (mConnectionThread != null) { - LogUtils.d(TAG, "mConnectionThread != null"); - mConnectionThread.mIsExist = true; - mConnectionThread = null; - } - } - - - - 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; - //requestAPIWithBasicAuth(); - requestCIPWithBasicAuth(); - } else if (mConnectionStatus == ConnectionStatus.CONNECTED - || mConnectionStatus == ConnectionStatus.DISCONNECTED) { - //ToastUtils.show("mWinBoLLServerHostConnectionStatus " + mConnectionStatus); - LogUtils.d(TAG, String.format("mConnectionStatus done %s", mConnectionStatus)); - } else { - LogUtils.d(TAG, String.format("mConnectionStatus unknow %s", 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/libappbase/build.properties b/libappbase/build.properties index faa715a..18395f7 100644 --- a/libappbase/build.properties +++ b/libappbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Apr 29 14:47:16 HKT 2025 +#Sat May 03 10:32:21 GMT 2025 stageCount=7 libraryProject=libappbase baseVersion=15.7 publishVersion=15.7.6 -buildCount=0 +buildCount=4 baseBetaVersion=15.7.7