From 104d9fa2839746ffc7e8bdb2ed7561b7bf716c79 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 6 Feb 2025 07:37:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=B1=BB=E5=BA=93=EF=BC=8C?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=9F=BA=E7=A1=80=E6=B4=BB=E5=8A=A8=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E7=B1=BB=E4=B8=BA=E5=AE=9E=E9=99=85=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E7=B1=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apputils/build.properties | 4 +- .../java/cc/winboll/studio/apputils/App.java | 74 +++- .../winboll/studio/apputils/MainActivity.java | 195 +++++++++-- .../TestStringToQrCodeViewActivity.java | 3 +- .../studio/apputils/TestWinBollActivity.java | 3 +- libapputils/build.gradle | 2 +- libapputils/build.properties | 4 +- .../libapputils/activities/AboutActivity.java | 3 +- .../activities/AssetsHtmlActivity.java | 3 +- .../activities/QRCodeDecodeActivity.java | 3 +- .../studio/libapputils/ads/ADsView.java | 240 ------------- .../libapputils/app/BaseWinBollActivity.java | 321 ------------------ .../app/WinBollActivityManager.java | 30 +- .../app/WinBollGlobalApplication.java | 103 ------ .../studio/libapputils/log/LogActivity.java | 7 +- .../studio/libapputils/log/LogUtils.java | 4 +- .../studio/libapputils/view/AboutView.java | 14 +- 17 files changed, 289 insertions(+), 724 deletions(-) delete mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/ads/ADsView.java delete mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/BaseWinBollActivity.java delete mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollGlobalApplication.java diff --git a/apputils/build.properties b/apputils/build.properties index 7e8705b..a389ede 100644 --- a/apputils/build.properties +++ b/apputils/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Feb 05 02:35:15 GMT 2025 +#Wed Feb 05 23:35:25 GMT 2025 stageCount=1 libraryProject=libapputils baseVersion=9.3 publishVersion=9.3.0 -buildCount=58 +buildCount=63 baseBetaVersion=9.3.1 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 d297d7b..a3f6d27 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/App.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/App.java @@ -5,18 +5,86 @@ package cc.winboll.studio.apputils; * @Date 2024/12/08 15:10:51 * @Describe 全局应用类 */ +import android.app.Application; +import android.content.Context; +import android.view.Gravity; import android.widget.Toast; -import cc.winboll.studio.libapputils.app.WinBollGlobalApplication; +import cc.winboll.studio.libappbase.GlobalApplication; +import cc.winboll.studio.libapputils.app.MyActivityLifecycleCallbacks; +import cc.winboll.studio.libapputils.app.WinBollActivityManager; +import cc.winboll.studio.libapputils.bean.DebugBean; +import cc.winboll.studio.libapputils.log.LogUtils; +import com.hjq.toast.ToastUtils; +import com.hjq.toast.style.WhiteToastStyle; -public class App extends WinBollGlobalApplication { +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(); - //Toast.makeText(getApplication(), "Toast Test", Toast.LENGTH_SHORT).show(); + // 应用环境初始化, 基本调试环境 + // + // 初始化日志模块 + LogUtils.init(this); + + try { + // 初始化 Toast 框架 + ToastUtils.init(this); + // 设置 Toast 布局样式 + //ToastUtils.setView(R.layout.view_toast); + ToastUtils.setStyle(new WhiteToastStyle()); + ToastUtils.setGravity(Gravity.BOTTOM, 0, 200); + // 设置应用调试标志 + DebugBean debugBean = DebugBean.loadBean(this, DebugBean.class); + if (debugBean == null) { + //ToastUtils.show("debugBean == null"); + setIsDebug(false); + } else { + //ToastUtils.show("saveDebugStatus(" + String.valueOf(debugBean.isDebuging()) + ")"); + setIsDebug(debugBean.isDebuging()); + } + // 应用窗口管理模块参数设置 + // + mMyActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks(); + registerActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks); + // 设置默认 WinBoll 应用 UI 类型 + WinBollActivityManager.getInstance(this).setWinBollUI_TYPE(WinBollActivityManager.WinBollUI_TYPE.Service); + //ToastUtils.show("WinBollUI_TYPE " + getWinBollUI_TYPE()); + } catch (Exception e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); + } } } 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 0d25d22..eb49793 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java @@ -1,6 +1,10 @@ package cc.winboll.studio.apputils; +import android.content.ComponentName; import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; @@ -12,22 +16,25 @@ import cc.winboll.studio.apputils.R; import cc.winboll.studio.libapputils.activities.AboutActivity; import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity; import cc.winboll.studio.libapputils.activities.QRCodeDecodeActivity; -import cc.winboll.studio.libapputils.app.BaseWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.WinBollActivityManager; -import cc.winboll.studio.libapputils.app.WinBollFactory; import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.log.LogActivity; import cc.winboll.studio.libapputils.log.LogUtils; +import cc.winboll.studio.libapputils.view.AboutView; import cc.winboll.studio.libapputils.view.YesNoAlertDialog; import com.hjq.toast.ToastUtils; +import java.util.List; +import java.util.Set; -final public class MainActivity extends BaseWinBollActivity implements IWinBollActivity { +final public class MainActivity extends AppCompatActivity implements IWinBollActivity { public static final String TAG = "MainActivity"; public static final int REQUEST_QRCODEDECODE_ACTIVITY = 0; + Toolbar mToolbar; + @Override public AppCompatActivity getActivity() { return this; @@ -58,8 +65,19 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - Toolbar toolbar = findViewById(R.id.activitymainToolbar1); - setSupportActionBar(toolbar); + // 初始化工具栏 + mToolbar = findViewById(R.id.activitymainToolbar1); + setSupportActionBar(mToolbar); + if (isEnableDisplayHomeAsUp()) { + // 显示后退按钮 + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + getSupportActionBar().setSubtitle(getTag()); + + checkResolveActivity(); + archiveInstance(); + + // 接收并处理 Intent 数据,函数 Intent 处理接收就直接返回 //if (prosessIntents(getIntent())) return; @@ -71,6 +89,79 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA // LogUtils.d(TAG, "BuildConfig.DEBUG : " + Boolean.toString(BuildConfig.DEBUG)); } + boolean checkResolveActivity() { + PackageManager packageManager = getPackageManager(); + //Intent intent = new Intent("your_action_here"); + Intent intent = getIntent(); + if (intent != null) { + List resolveInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); + if (resolveInfoList.size() > 0) { + // 传入的Intent action在Activity清单的intent-filter的action节点里有定义 + if (intent.getAction() != null) { + if (intent.getAction().equals(cc.winboll.studio.libapputils.intent.action.DEBUGVIEW)) { + App.setIsDebug(true); + //ToastUtils.show!("WinBollApplication.setIsDebug(true) by action : " + intent.getAction()); + + } + } + return true; + } else { + // 传入的Intent action在Activity清单的intent-filter的action节点里没有定义 + //ToastUtils.show("false : " + intent.getAction()); + return false; + } + + } + + // action在清单文件中没有声明 + ToastUtils.show("false"); + return false; + } + + void archiveInstance() { + Intent intent = getIntent(); + StringBuilder sb = new StringBuilder("\n### Archive Instance ###\n"); + + if (intent != null) { + ComponentName componentName = intent.getComponent(); + if (componentName != null) { + String packageName = componentName.getPackageName(); + //Log.d("AppStarter", "启动本应用的应用包名: " + packageName); + sb.append("启动本应用的应用包名: \n" + packageName); + } + + sb.append("\nImplicit Intent Tracker :\n接收到的 Intent 动作: \n" + intent.getAction()); + Set categories = intent.getCategories(); + if (categories != null) { + for (String category : categories) { + sb.append("\n接收到的 Intent 类别 :\n" + category); + } + } + Uri data = intent.getData(); + if (data != null) { + sb.append("\n接收到的 Intent 数据 :\n" + data.toString()); + } + } else { + sb.append("Intent is null."); + } + sb.append("\n\n"); + LogUtils.d(TAG, sb.toString()); + } + + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // 缓存当前 activity + WinBollActivityManager.getInstance(this).add(this); + } + + @Override + public void onDestroy() { + WinBollActivityManager.getInstance(this).registeRemove(this); + super.onDestroy(); + } + public void onTestLogClick(View view) { LogUtils.d(TAG, "onTestLogClick"); Toast.makeText(getApplication(), "onTestLogClick", Toast.LENGTH_SHORT).show(); @@ -86,11 +177,6 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class); } - @Override - protected String getAppName() { - return getString(R.string.app_name); - } - // // 处理传入的 Intent 数据 // @@ -138,6 +224,14 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA public boolean onCreateOptionsMenu(Menu menu) { //ToastUtils.show("onCreateOptionsMenu"); getMenuInflater().inflate(R.menu.toolbar_main, menu); + if (isAddWinBollToolBar()) { + //ToastUtils.show("mIWinBoll.isAddWinBollToolBar()"); + getMenuInflater().inflate(R.menu.toolbar_winboll_shared_main, menu); + } + if (App.isDebug()) { + getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu); + } + return super.onCreateOptionsMenu(menu); } @@ -150,6 +244,30 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA } else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) { Intent intent = new Intent(this, QRCodeDecodeActivity.class); startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY); + } else if (item.getItemId() == R.id.item_testcrashreport) { + for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) { + getString(i); + } + return true; + } else if (item.getItemId() == R.id.item_log) { + WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class); + return true; + } else if (item.getItemId() == R.id.item_exit) { + exit(); + //ToastUtils.show("item_exit"); + //WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finishAll(); + return true; + } else if (item.getItemId() == R.id.item_info) { + LogUtils.d(TAG, "item_info not yet."); + return true; + //WinBollApplication application = (WinBollApplication) getApplication(); + //application.getMyActivityLifecycleCallbacks().showActivityeInfo(); + } else if (item.getItemId() == R.id.item_exitdebug) { + AboutView.setApp2NormalMode(this); + return true; + } else if (item.getItemId() == android.R.id.home) { + WinBollActivityManager.getInstance(this).finish(this); + return true; } else if (item.getItemId() == R.id.item_about) { openAboutActivity(); return true; @@ -174,6 +292,31 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AboutActivity.class); } + 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() { + if (WinBollActivityManager.getInstance(getApplicationContext()).isFirstIWinBollActivity(this)) { + exit(); + } else { + WinBollActivityManager.getInstance(this).finish(this); + super.onBackPressed(); + } + } public void onTestAboutActivity(View view) { //ToastUtils.show("onTestAboutActivity"); @@ -185,21 +328,21 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA intent.putExtra(AssetsHtmlActivity.EXTRA_HTMLFILENAME, "javascript_test.html"); WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AssetsHtmlActivity.class); } - + /*@Override - protected void onActivithyResult(int requestCode, int resultCode, Intent data) { - switch (requestCode) { - case REQUEST_QRCODEDECODE_ACTIVITY : { - if (data != null) { - String text = data.getStringExtra(QRCodeDecodeActivity.EXTRA_RESULT); - ToastUtils.show(text); - } - break; - } - default : { - //ToastUtils.show(String.format("%d, %d", requestCode, resultCode)); - super.prosessActivityResult(requestCode, resultCode, data); - } - } - }*/ + protected void onActivithyResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case REQUEST_QRCODEDECODE_ACTIVITY : { + if (data != null) { + String text = data.getStringExtra(QRCodeDecodeActivity.EXTRA_RESULT); + ToastUtils.show(text); + } + break; + } + default : { + //ToastUtils.show(String.format("%d, %d", requestCode, resultCode)); + super.prosessActivityResult(requestCode, resultCode, data); + } + } + }*/ } diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java index 2cceed2..c28e106 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java @@ -3,7 +3,6 @@ package cc.winboll.studio.apputils; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.libapputils.app.BaseWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.view.StringToQrCodeView; @@ -11,7 +10,7 @@ import cc.winboll.studio.libapputils.view.StringToQrCodeView; * @Author ZhanGSKen@QQ.COM * @Date 2025/01/17 19:50:46 */ -public class TestStringToQrCodeViewActivity extends BaseWinBollActivity implements IWinBollActivity { +public class TestStringToQrCodeViewActivity extends AppCompatActivity implements IWinBollActivity { public static final String TAG = "TestStringToQrCodeViewActivity"; diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java index a9c343d..2131691 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java @@ -7,10 +7,9 @@ package cc.winboll.studio.apputils; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.libapputils.app.BaseWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity; -public class TestWinBollActivity extends BaseWinBollActivity implements IWinBollActivity { +public class TestWinBollActivity extends AppCompatActivity implements IWinBollActivity { public static final String TAG = "TestWinBollActivity"; diff --git a/libapputils/build.gradle b/libapputils/build.gradle index 8966506..978448c 100644 --- a/libapputils/build.gradle +++ b/libapputils/build.gradle @@ -38,7 +38,7 @@ dependencies { api 'androidx.fragment:fragment:1.0.0' api 'com.google.android.material:material:1.0.0' - api 'cc.winboll.studio:libappbase:1.1.3' + api 'cc.winboll.studio:libappbase:1.2.0' api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/libapputils/build.properties b/libapputils/build.properties index 7e8705b..a389ede 100644 --- a/libapputils/build.properties +++ b/libapputils/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Feb 05 02:35:15 GMT 2025 +#Wed Feb 05 23:35:25 GMT 2025 stageCount=1 libraryProject=libapputils baseVersion=9.3 publishVersion=9.3.0 -buildCount=58 +buildCount=63 baseBetaVersion=9.3.1 diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java index fe73304..989caeb 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java @@ -13,14 +13,13 @@ import android.widget.LinearLayout; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.app.BaseWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity; 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 BaseWinBollActivity implements IWinBollActivity { +final public class AboutActivity extends AppCompatActivity implements IWinBollActivity { public static final String TAG = "AboutActivity"; diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java index 1512e07..8e38a5a 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java @@ -14,14 +14,13 @@ import android.view.MenuItem; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.app.BaseWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.log.LogUtils; import cc.winboll.studio.libapputils.view.SimpleWebView; import java.io.IOException; import java.io.InputStream; -public class AssetsHtmlActivity extends BaseWinBollActivity implements IWinBollActivity { +public class AssetsHtmlActivity extends AppCompatActivity implements IWinBollActivity { public static final String TAG = "AssetsHtmlActivity"; diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java index b12edf7..8e1b934 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java @@ -14,7 +14,6 @@ import androidx.appcompat.widget.Toolbar; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.app.BaseWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity; import com.google.zxing.ResultPoint; import com.journeyapps.barcodescanner.BarcodeCallback; @@ -22,7 +21,7 @@ import com.journeyapps.barcodescanner.BarcodeResult; import com.journeyapps.barcodescanner.DecoratedBarcodeView; import java.util.List; -public class QRCodeDecodeActivity extends BaseWinBollActivity implements IWinBollActivity { +public class QRCodeDecodeActivity extends AppCompatActivity implements IWinBollActivity { public static final String TAG = "QRCodeDecodeActivity"; diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/ads/ADsView.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/ads/ADsView.java deleted file mode 100644 index 2b3b86d..0000000 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/ads/ADsView.java +++ /dev/null @@ -1,240 +0,0 @@ -package cc.winboll.studio.libapputils.ads; - -/** - * @Author ZhanGSKen@QQ.COM - * @Date 2024/12/09 15:37:35 - * @Describe WinBoll 应用推广视图 - */ -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.webkit.WebView; -import android.webkit.WebViewClient; -import android.widget.RelativeLayout; -import com.hjq.toast.ToastUtils; - -public class ADsView extends RelativeLayout { - - public static final String TAG = "ADsView"; - - public volatile boolean mIsHandling; - public volatile boolean mIsAddNewLog; - - Context mContext; - WebView mWebView; - //ScrollView mScrollView; - //TextView mTextView; - //CheckBox mSelectableCheckBox; - //LogViewThread mLogViewThread; - //LogViewHandler mLogViewHandler; - //Spinner mLogLevelSpinner; - //ArrayAdapter mLogLevelSpinnerAdapter; - - public ADsView(Context context) { - super(context); - initView(context); - } - - public ADsView(Context context, AttributeSet attrs) { - super(context, attrs); - initView(context); - } - - public ADsView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - initView(context); - } - - public ADsView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - initView(context); - } - -// public void start() { -// mLogViewThread = new LogViewThread(LogView.this); -// mLogViewThread.start(); -// // 显示日志 -// showAndScrollLogView(); -// } -// -// public void scrollLogUp() { -// mScrollView.post(new Runnable() { -// @Override -// public void run() { -// mScrollView.fullScroll(ScrollView.FOCUS_DOWN); -// // 日志显示结束 -// mLogViewHandler.setIsHandling(false); -// // 检查是否添加了新日志 -// if (mLogViewHandler.isAddNewLog()) { -// // 有新日志添加,先更改新日志标志 -// mLogViewHandler.setIsAddNewLog(false); -// // 再次发送显示日志的显示 -// Message message = mLogViewHandler.obtainMessage(LogViewHandler.MSG_LOGVIEW_UPDATE); -// mLogViewHandler.sendMessage(message); -// } -// } -// }); -// } - - void initView(Context context) { - mContext = context; - -// mLogViewHandler = new LogViewHandler(); - // 加载视图布局 - View viewMain = inflate(mContext, cc.winboll.studio.libapputils.R.layout.view_ads, null); - mWebView = viewMain.findViewById(cc.winboll.studio.libapputils.R.id.viewadsWebView1); - mWebView.setWebViewClient(new WebViewClient() { - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - view.loadUrl(url); - ToastUtils.show(url); - return true; - } - }); - -// // 初始化日志子控件视图 -// // -// mScrollView = findViewById(cc.winboll.studio.libapputils.R.id.viewlogScrollViewLog); -// mTextView = findViewById(cc.winboll.studio.libapputils.R.id.viewlogTextViewLog); -// // 获取Log Level spinner实例 -// mLogLevelSpinner = findViewById(cc.winboll.studio.libapputils.R.id.viewlogSpinner1); -// -// (findViewById(cc.winboll.studio.libapputils.R.id.viewlogButtonClean)).setOnClickListener(new View.OnClickListener(){ -// -// @Override -// public void onClick(View v) { -// LogUtils.cleanLog(); -// LogUtils.d(TAG, "Log is cleaned."); -// } -// }); -// (findViewById(cc.winboll.studio.libapputils.R.id.viewlogButtonCopy)).setOnClickListener(new View.OnClickListener(){ -// -// @Override -// public void onClick(View v) { -// -// ClipboardManager cm = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); -// cm.setPrimaryClip(ClipData.newPlainText(mContext.getPackageName(), LogUtils.loadLog())); -// LogUtils.d(TAG, "Log is copied."); -// } -// }); -// mSelectableCheckBox = findViewById(cc.winboll.studio.libapputils.R.id.viewlogCheckBoxSelectable); -// mSelectableCheckBox.setOnClickListener(new View.OnClickListener(){ -// @Override -// public void onClick(View v) { -// if (mSelectableCheckBox.isChecked()) { -// setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); -// } else { -// setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); -// } -// } -// }); -// -// // 设置日志级别列表 -// ArrayList adapterItems = new ArrayList<>(); -// for (LogUtils.LOG_LEVEL e : LogUtils.LOG_LEVEL.values()) { -// adapterItems.add(e.name()); -// } -// // 假设你有一个字符串数组作为选项列表 -// //String[] options = {"Option 1", "Option 2", "Option 3"}; -// // 创建一个ArrayAdapter来绑定数据到spinner -// mLogLevelSpinnerAdapter = ArrayAdapter.createFromResource( -// context, cc.winboll.studio.libapputils.R.array.enum_loglevel_array, android.R.layout.simple_spinner_item); -// mLogLevelSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); -// -// // 设置适配器并将它应用到spinner上 -// mLogLevelSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 设置下拉视图样式 -// mLogLevelSpinner.setAdapter(mLogLevelSpinnerAdapter); -// // 为Spinner添加监听器 -// mLogLevelSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { -// @Override -// public void onItemSelected(AdapterView parent, View view, int position, long id) { -// //String selectedOption = mLogLevelSpinnerAdapter.getItem(position); -// // 处理选中的选项... -// LogUtils.setLogLevel(LogUtils.LOG_LEVEL.values()[position]); -// } -// @Override -// public void onNothingSelected(AdapterView parent) { -// // 如果没有选择,则执行此操作... -// } -// }); -// // 获取默认值的索引 -// int defaultValueIndex = LogUtils.getLogLevel().ordinal(); -// -// if (defaultValueIndex != -1) { -// // 如果找到了默认值,设置默认选项 -// mLogLevelSpinner.setSelection(defaultValueIndex); -// } -// -// // 设置滚动时不聚焦日志 -// setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); - } - - public void loadUrl(String url) { - mWebView.loadUrl(url); - //webView.loadUrl("https://www.winboll.cc"); - //webView.loadUrl("https://ads.winboll.cc"); - } - -// public void updateLogView() { -// if (mLogViewHandler.isHandling() == true) { -// // 正在处理日志显示, -// // 就先设置一个新日志标志位 -// // 以便日志显示完后,再次显示新日志内容 -// mLogViewHandler.setIsAddNewLog(true); -// } else { -// //LogUtils.d(TAG, "LogListener showLog(String path)"); -// Message message = mLogViewHandler.obtainMessage(LogViewHandler.MSG_LOGVIEW_UPDATE); -// mLogViewHandler.sendMessage(message); -// mLogViewHandler.setIsAddNewLog(false); -// } -// } -// -// void showAndScrollLogView() { -// mTextView.setText(LogUtils.loadLog()); -// scrollLogUp(); -// } -// -// class LogViewHandler extends Handler { -// -// final static int MSG_LOGVIEW_UPDATE = 0; -// volatile boolean isHandling; -// volatile boolean isAddNewLog; -// -// public LogViewHandler() { -// setIsHandling(false); -// setIsAddNewLog(false); -// } -// -// public void setIsHandling(boolean isHandling) { -// this.isHandling = isHandling; -// } -// -// public boolean isHandling() { -// return isHandling; -// } -// -// public void setIsAddNewLog(boolean isAddNewLog) { -// this.isAddNewLog = isAddNewLog; -// } -// -// public boolean isAddNewLog() { -// return isAddNewLog; -// } -// -// public void handleMessage(Message msg) { -// switch (msg.what) { -// case MSG_LOGVIEW_UPDATE:{ -// if (isHandling() == false) { -// setIsHandling(true); -// showAndScrollLogView(); -// } -// break; -// } -// default: -// break; -// } -// super.handleMessage(msg); -// } -// } - -} diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/BaseWinBollActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/BaseWinBollActivity.java deleted file mode 100644 index 691b8a2..0000000 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/BaseWinBollActivity.java +++ /dev/null @@ -1,321 +0,0 @@ -package cc.winboll.studio.libapputils.app; - -/** - * @Author ZhanGSKen@QQ.COM - * @Date 2024/08/12 14:32:08 - * @Describe WinBoll 活动窗口基础类 - */ -import android.content.ComponentName; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.net.Uri; -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.activities.AboutActivity; -import cc.winboll.studio.libapputils.log.LogActivity; -import cc.winboll.studio.libapputils.log.LogUtils; -import cc.winboll.studio.libapputils.view.AboutView; -import cc.winboll.studio.libapputils.view.YesNoAlertDialog; -import com.hjq.toast.ToastUtils; -import java.util.List; -import java.util.Set; - -public class BaseWinBollActivity extends AppCompatActivity implements IWinBollActivity { - - public static final String TAG = "BaseWinBollActivity"; - - public static final int REQUEST_LOG_ACTIVITY = 0; - - //IWinBollActivity mIWinBollActivity; - AppCompatActivity mCurrentAppCompatActivity; - - Toolbar mToolBar; - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - initCurrentAppCompatActivity(); - checkResolveActivity(); - LogUtils.d(TAG, "onCreate"); - //super.onCreate(savedInstanceState); - archiveInstance(); - } - - @Override - public void onDestroy() { - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).registeRemove(this); - super.onDestroy(); - } - - @Override - protected void onPostResume() { - super.onPostResume(); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - } - - @Override - protected void onStart() { - super.onStart(); - } - - @Override - protected void onStop() { - super.onStop(); - } - - @Override - protected void onTitleChanged(CharSequence title, int color) { - super.onTitleChanged(title, color); - } - - @Override - public AppCompatActivity getActivity() { - return this; - } - - @Override - public String getTag() { - return TAG; - } - - @Override - public Toolbar initToolBar() { - return null; - } - - @Override - public boolean isEnableDisplayHomeAsUp() { - return false; - } - - @Override - public boolean isAddWinBollToolBar() { - return false; - } - - public void initCurrentAppCompatActivity() { - mCurrentAppCompatActivity = getActivity(); - } - - boolean checkResolveActivity() { - PackageManager packageManager = mCurrentAppCompatActivity.getPackageManager(); - //Intent intent = new Intent("your_action_here"); - Intent intent = mCurrentAppCompatActivity.getIntent(); - if (intent != null) { - List resolveInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); - if (resolveInfoList.size() > 0) { - // 传入的Intent action在Activity清单的intent-filter的action节点里有定义 - if (intent.getAction() != null) { - if (intent.getAction().equals(cc.winboll.studio.libapputils.intent.action.DEBUGVIEW)) { - WinBollGlobalApplication.setIsDebug(true); - //ToastUtils.show!("WinBollApplication.setIsDebug(true) by action : " + intent.getAction()); - - } - } - return true; - } else { - // 传入的Intent action在Activity清单的intent-filter的action节点里没有定义 - //ToastUtils.show("false : " + intent.getAction()); - return false; - } - - } - - // action在清单文件中没有声明 - ToastUtils.show("false"); - return false; - } - - void archiveInstance() { - Intent intent = mCurrentAppCompatActivity.getIntent(); - StringBuilder sb = new StringBuilder("\n### Archive Instance ###\n"); - - if (intent != null) { - ComponentName componentName = intent.getComponent(); - if (componentName != null) { - String packageName = componentName.getPackageName(); - //Log.d("AppStarter", "启动本应用的应用包名: " + packageName); - sb.append("启动本应用的应用包名: \n" + packageName); - } - - sb.append("\nImplicit Intent Tracker :\n接收到的 Intent 动作: \n" + intent.getAction()); - Set categories = intent.getCategories(); - if (categories != null) { - for (String category : categories) { - sb.append("\n接收到的 Intent 类别 :\n" + category); - } - } - Uri data = intent.getData(); - if (data != null) { - sb.append("\n接收到的 Intent 数据 :\n" + data.toString()); - } - } else { - sb.append("Intent is null."); - } - sb.append("\n\n"); - LogUtils.d(TAG, sb.toString()); - } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - - // 缓存当前 activity - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).add(this); - - // 初始化工具栏 - mToolBar = initToolBar(); - if (mToolBar != null) { - mCurrentAppCompatActivity.setSupportActionBar(mToolBar); - if (isEnableDisplayHomeAsUp()) { - // 显示后退按钮 - mCurrentAppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); - } - mCurrentAppCompatActivity.getSupportActionBar().setSubtitle(getTag()); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - if (isAddWinBollToolBar()) { - //ToastUtils.show("mIWinBoll.isAddWinBollToolBar()"); - mCurrentAppCompatActivity.getMenuInflater().inflate(R.menu.toolbar_winboll_shared_main, menu); - } - if (WinBollGlobalApplication.isDebug()) { - mCurrentAppCompatActivity.getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu); - } - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - - LogUtils.d(TAG, "onOptionsItemSelected"); - //ToastUtils.show(String.format("%s onOptionsItemSelected", TAG)); - if (item.getItemId() == R.id.item_testcrashreport) { - for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) { - mCurrentAppCompatActivity.getString(i); - } - return true; - } else if (item.getItemId() == R.id.item_log) { -// 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(mCurrentAppCompatActivity).startWinBollActivity(mCurrentAppCompatActivity, LogActivity.class); - return true; - } else if (item.getItemId() == R.id.item_exit) { - exit(); - //ToastUtils.show("item_exit"); - //WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finishAll(); - return true; - } else if (item.getItemId() == R.id.item_info) { - LogUtils.d(TAG, "item_info not yet."); - return true; - //WinBollApplication application = (WinBollApplication) getApplication(); - //application.getMyActivityLifecycleCallbacks().showActivityeInfo(); - } else if (item.getItemId() == R.id.item_exitdebug) { - AboutView.setApp2NormalMode(mCurrentAppCompatActivity); - return true; - } else if (item.getItemId() == R.id.item_about) { - startAboutActivity(); - return true; - } else if (item.getItemId() == android.R.id.home) { - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finish(this); - return true; - } - // else if (item.getItemId() == android.R.id.home) { - // 回到主窗口速度缓慢,方法备用。现在用 WinBollActivityManager resumeActivity 和 finish 方法管理。 - // _mMainWinBollActivity 是 WinBollActivity 的静态属性 - // onCreate 函数下 _mMainWinBollActivity 为空时就用 _mMainWinBollActivity = this 赋值。 - //startWinBollActivity(new Intent(_mMainWinBollActivity, _mMainWinBollActivity.getClass()), _mMainWinBollActivity.getTag(), _mMainWinBollActivity); - //} - return super.onOptionsItemSelected(item); - } - - public boolean isAddWinBollInfoMenu() { - return true; - } - - @Override - public void onBackPressed() { - if (WinBollActivityManager.getInstance(getApplicationContext()).isFirstIWinBollActivity(this)) { - exit(); - } else { - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finish(this); - super.onBackPressed(); - } - } - - protected String getAppName() { - return getString(R.string.lib_name); - } - - void exit() { - YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){ - - @Override - public void onYes() { - WinBollActivityManager.getInstance(getApplicationContext()).finishAll(); - } - - @Override - public void onNo() { - } - }; - YesNoAlertDialog.show(this, "[ " + getAppName() + " ]", "Exit(Yes/No).\nIs close all activity?", listener); - - } - - // - // activity: 为 null 时, - // intent.putExtra 函数 "tag" 参数为 tag - // activity: 不为 null 时, - // intent.putExtra 函数 "tag" 参数为 activity.getTag() - // - public void startAboutActivity() { - Intent intent = new Intent(mCurrentAppCompatActivity, AboutActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); - intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - intent.putExtra("tag", AboutActivity.TAG); - mCurrentAppCompatActivity.startActivity(intent); - } - -// @Override -// public void startActivity(Intent intent) { -// //绑定唯一标识 tag,存在 则根据 taskId 移动到前台 -// String tag = intent.getStringExtra("tag"); -// //ToastUtils.show("startActivityForResult tag " + tag); -// //WinBollActivityManager.getInstance(this).printAvtivityListInfo(); -// if (WinBollActivityManager.getInstance(this).isActive(tag)) { -// //ToastUtils.show("resumeActivity"); -// LogUtils.d(TAG, "resumeActivity"); -// WinBollActivityManager.getInstance(this).resumeActivity(this, tag); -// } else { -// //ToastUtils.show("super.startActivity(intent);"); -// super.startActivity(intent); -// } -// } - - protected void prosessActivityResult(int requestCode, int targetFragment, Intent data) { - LogUtils.d(TAG, "onActivityResult"); - switch (requestCode) { - case REQUEST_LOG_ACTIVITY : { - LogUtils.d(TAG, "REQUEST_LOG_ACTIVITY"); - break; - } - } - } -} diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java index 3dee031..1df37ac 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java @@ -11,7 +11,6 @@ package cc.winboll.studio.libapputils.app; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.TaskStackBuilder; import cc.winboll.studio.libapputils.log.LogUtils; import java.util.HashMap; @@ -23,7 +22,16 @@ public class WinBollActivityManager { public static final String TAG = "WinBollActivityManager"; public static final String EXTRA_TAG = "EXTRA_TAG"; + public static enum WinBollUI_TYPE { + Aplication, // 退出应用后,保持最近任务栏任务记录主窗口 + Service // 退出应用后,清理所有最近任务栏任务记录窗口 + }; + + // 应用类型标志 + volatile static WinBollUI_TYPE _mWinBollUI_TYPE = WinBollUI_TYPE.Service; + Context mContext; + MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks; static WinBollActivityManager _mWinBollActivityManager; static Map _mapIWinBollList; IWinBollActivity firstIWinBollActivity; @@ -43,6 +51,20 @@ public class WinBollActivityManager { return _mWinBollActivityManager; } + // + // 设置 WinBoll 应用 UI 类型 + // + public synchronized static void setWinBollUI_TYPE(WinBollUI_TYPE mWinBollUI_TYPE) { + _mWinBollUI_TYPE = mWinBollUI_TYPE; + } + + // + // 获取 WinBoll 应用 UI 类型 + // + public synchronized static WinBollUI_TYPE getWinBollUI_TYPE() { + return _mWinBollUI_TYPE; + } + // // 把Activity添加到管理中 // @@ -82,6 +104,7 @@ public class WinBollActivityManager { //打开多任务窗口 flags intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(EXTRA_TAG, tag); mContext.startActivity(intent); } catch (InstantiationException | IllegalAccessException e) { @@ -103,6 +126,7 @@ public class WinBollActivityManager { //打开多任务窗口 flags intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(EXTRA_TAG, tag); mContext.startActivity(intent); } catch (InstantiationException | IllegalAccessException e) { @@ -183,11 +207,11 @@ public class WinBollActivityManager { //ToastUtils.show("finishAll() activity"); if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { //ToastUtils.show("activity != null ..."); - if (WinBollGlobalApplication.getWinBollUI_TYPE() == WinBollGlobalApplication.WinBollUI_TYPE.Service) { + if (getWinBollUI_TYPE() == WinBollUI_TYPE.Service) { // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。 iWinBoll.getActivity().finishAndRemoveTask(); //ToastUtils.show("finishAll() activity.finishAndRemoveTask();"); - } else if (WinBollGlobalApplication.getWinBollUI_TYPE() == WinBollGlobalApplication.WinBollUI_TYPE.Aplication) { + } else if (getWinBollUI_TYPE() == WinBollUI_TYPE.Aplication) { // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。 iWinBoll.getActivity().finish(); //ToastUtils.show("finishAll() activity.finish();"); diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollGlobalApplication.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollGlobalApplication.java deleted file mode 100644 index 4a27c1c..0000000 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollGlobalApplication.java +++ /dev/null @@ -1,103 +0,0 @@ -package cc.winboll.studio.libapputils.app; - -import android.app.Application; -import android.content.Context; -import android.view.Gravity; -import android.widget.Toast; -import cc.winboll.studio.libappbase.GlobalApplication; -import cc.winboll.studio.libapputils.bean.DebugBean; -import cc.winboll.studio.libapputils.log.LogUtils; -import com.hjq.toast.ToastUtils; -import com.hjq.toast.style.WhiteToastStyle; - -public class WinBollGlobalApplication extends GlobalApplication { - - public static final String TAG = "WinBollGlobalApplication"; - - public static enum WinBollUI_TYPE { - Aplication, // 退出应用后,保持最近任务栏任务记录主窗口 - Service // 退出应用后,清理所有最近任务栏任务记录窗口 - }; - - // 应用类型标志 - volatile static WinBollUI_TYPE _mWinBollUI_TYPE = WinBollUI_TYPE.Service; - - //static volatile WinBollApplication _WinBollApplication = null; - MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks; - - // 标记当前应用是否处于调试状态 - static volatile boolean isDebug = false; - - public synchronized static void setIsDebug(boolean isDebug) { - WinBollGlobalApplication.isDebug = isDebug; - } - - public static boolean isDebug() { - return isDebug; - } - - // - // 设置 WinBoll 应用 UI 类型 - // - public synchronized static void setWinBollUI_TYPE(WinBollUI_TYPE mWinBollUI_TYPE) { - _mWinBollUI_TYPE = mWinBollUI_TYPE; - } - - // - // 获取 WinBoll 应用 UI 类型 - // - public synchronized static WinBollUI_TYPE getWinBollUI_TYPE() { - return _mWinBollUI_TYPE; - } - - MyActivityLifecycleCallbacks getMyActivityLifecycleCallbacks() { - return mMyActivityLifecycleCallbacks; - } - - @Override - public Context getApplicationContext() { - return super.getApplicationContext(); - } - - @Override - public Application getApplication() { - return this; - } - - @Override - public void onCreate() { - super.onCreate(); - // 应用环境初始化, 基本调试环境 - // - // 初始化日志模块 - LogUtils.init(this); - - try { - // 初始化 Toast 框架 - ToastUtils.init(this); - // 设置 Toast 布局样式 - //ToastUtils.setView(R.layout.view_toast); - ToastUtils.setStyle(new WhiteToastStyle()); - ToastUtils.setGravity(Gravity.BOTTOM, 0, 200); - // 设置应用调试标志 - DebugBean debugBean = DebugBean.loadBean(this, DebugBean.class); - if (debugBean == null) { - //ToastUtils.show("debugBean == null"); - setIsDebug(false); - } else { - //ToastUtils.show("saveDebugStatus(" + String.valueOf(debugBean.isDebuging()) + ")"); - setIsDebug(debugBean.isDebuging()); - } - // 应用窗口管理模块参数设置 - // - mMyActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks(); - registerActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks); - // 设置默认 WinBoll 应用 UI 类型 - setWinBollUI_TYPE(WinBollUI_TYPE.Service); - //ToastUtils.show("WinBollUI_TYPE " + getWinBollUI_TYPE()); - } catch (Exception e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); - } - } -} diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java index 60a770f..c27e66d 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java @@ -8,12 +8,11 @@ package cc.winboll.studio.libapputils.log; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.app.BaseWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity; -import cc.winboll.studio.libapputils.app.WinBollGlobalApplication; -public class LogActivity extends BaseWinBollActivity implements IWinBollActivity { +public class LogActivity extends AppCompatActivity implements IWinBollActivity { public static final String TAG = "LogActivity"; @@ -51,7 +50,7 @@ public class LogActivity extends BaseWinBollActivity implements IWinBollActivity setContentView(R.layout.activity_log); mLogView = findViewById(R.id.logview); - if (WinBollGlobalApplication.isDebug()) { mLogView.start(); } + if (GlobalApplication.isDebuging()) { mLogView.start(); } } @Override diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogUtils.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogUtils.java index 57b024a..4a70559 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogUtils.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogUtils.java @@ -7,7 +7,7 @@ package cc.winboll.studio.libapputils.log; * @Describe 应用日志类 */ import android.content.Context; -import cc.winboll.studio.libapputils.app.WinBollGlobalApplication; +import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libapputils.util.FileUtils; import dalvik.system.DexFile; import java.io.BufferedReader; @@ -61,7 +61,7 @@ public class LogUtils { // 初始化函数 // public static void init(Context context, LOG_LEVEL logLevel) { - if (WinBollGlobalApplication.isDebug()) { + if (GlobalApplication.isDebuging()) { // 初始化日志缓存文件路径 _mfLogCacheDir = new File(context.getApplicationContext().getExternalCacheDir(), TAG); if (!_mfLogCacheDir.exists()) { diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java index bc5d96d..6485535 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java @@ -16,10 +16,10 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; +import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libapputils.R; import cc.winboll.studio.libapputils.app.AppVersionUtils; import cc.winboll.studio.libapputils.app.WinBollActivityManager; -import cc.winboll.studio.libapputils.app.WinBollGlobalApplication; import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.bean.DebugBean; import cc.winboll.studio.libapputils.log.LogUtils; @@ -106,7 +106,7 @@ public class AboutView extends LinearLayout { mszAppDescription = mAPPInfo.getAppDescription(); mnAppIcon = mAPPInfo.getAppIcon(); - mszWinBollServerHost = WinBollGlobalApplication.isDebug() ? "https://dev.winboll.cc": "https://www.winboll.cc"; + mszWinBollServerHost = GlobalApplication.isDebuging() ? "https://dev.winboll.cc": "https://www.winboll.cc"; try { mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName; @@ -117,7 +117,7 @@ public class AboutView extends LinearLayout { mszHomePage = mszWinBollServerHost + "/studio/details.php?app=" + mszAppAPKFolderName; mszGitea = "https://gitea.winboll.cc/" + mAPPInfo.getAppGitOwner() + "/" + mszAppGitName + "/src/branch/" + mAPPInfo.getAppGitAPPBranch() + "/" + mAPPInfo.getAppGitAPPSubProjectFolder(); - if (WinBollGlobalApplication.isDebug()) { + if (GlobalApplication.isDebuging()) { LayoutInflater inflater = LayoutInflater.from(mContext); View addedView = inflater.inflate(R.layout.view_about_dev, this, false); LinearLayout llMain = addedView.findViewById(R.id.viewaboutdevLinearLayout1); @@ -208,7 +208,7 @@ public class AboutView extends LinearLayout { // 定义应用调试按钮 // Element elementAppMode; - if (WinBollGlobalApplication.isDebug()) { + if (GlobalApplication.isDebuging()) { elementAppMode = new Element(mContext.getString(R.string.app_normal), R.drawable.ic_winboll); elementAppMode.setOnClickListener(mAppNormalOnClickListener); } else { @@ -274,7 +274,7 @@ public class AboutView extends LinearLayout { if (intent != null) { intent.setAction(cc.winboll.studio.libapputils.intent.action.DEBUGVIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - WinBollGlobalApplication.setIsDebug(true); + GlobalApplication.setIsDebuging(context, true); DebugBean.saveBean(context, new DebugBean(true)); WinBollActivityManager.getInstance(context).finishAll(); @@ -286,7 +286,7 @@ public class AboutView extends LinearLayout { Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); if (intent != null) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - WinBollGlobalApplication.setIsDebug(false); + GlobalApplication.setIsDebuging(context, false); DebugBean.saveBean(context, new DebugBean(false)); WinBollActivityManager.getInstance(context).finishAll(); @@ -312,7 +312,7 @@ public class AboutView extends LinearLayout { String szUrl = mszWinBollServerHost + "/studio/details.php?app=" + mszAppAPKFolderName; // 构建包含认证信息的请求 String credential = ""; - if (WinBollGlobalApplication.isDebug()) { + if (GlobalApplication.isDebuging()) { credential = Credentials.basic(metDevUserName.getText().toString(), metDevUserPassword.getText().toString()); PrefUtils.saveString(mContext, "metDevUserName", metDevUserName.getText().toString()); PrefUtils.saveString(mContext, "metDevUserPassword", metDevUserPassword.getText().toString());