更新类库,重构基础活动窗口类为实际活动窗口类。

This commit is contained in:
ZhanGSKen 2025-02-06 07:37:15 +08:00
parent dd041e5d78
commit 104d9fa283
17 changed files with 289 additions and 724 deletions

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #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 stageCount=1
libraryProject=libapputils libraryProject=libapputils
baseVersion=9.3 baseVersion=9.3
publishVersion=9.3.0 publishVersion=9.3.0
buildCount=58 buildCount=63
baseBetaVersion=9.3.1 baseBetaVersion=9.3.1

View File

@ -5,18 +5,86 @@ package cc.winboll.studio.apputils;
* @Date 2024/12/08 15:10:51 * @Date 2024/12/08 15:10:51
* @Describe 全局应用类 * @Describe 全局应用类
*/ */
import android.app.Application;
import android.content.Context;
import android.view.Gravity;
import android.widget.Toast; 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 TAG = "App";
public static final String _ACTION_DEBUGVIEW = App.class.getName() + "_ACTION_DEBUGVIEW"; 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 @Override
public void onCreate() { public void onCreate() {
super.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();
}
} }
} }

View File

@ -1,6 +1,10 @@
package cc.winboll.studio.apputils; package cc.winboll.studio.apputils;
import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; 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.AboutActivity;
import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity; import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity;
import cc.winboll.studio.libapputils.activities.QRCodeDecodeActivity; 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.IWinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager; 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.bean.APPInfo;
import cc.winboll.studio.libapputils.log.LogActivity; import cc.winboll.studio.libapputils.log.LogActivity;
import cc.winboll.studio.libapputils.log.LogUtils; import cc.winboll.studio.libapputils.log.LogUtils;
import cc.winboll.studio.libapputils.view.AboutView;
import cc.winboll.studio.libapputils.view.YesNoAlertDialog; import cc.winboll.studio.libapputils.view.YesNoAlertDialog;
import com.hjq.toast.ToastUtils; 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 String TAG = "MainActivity";
public static final int REQUEST_QRCODEDECODE_ACTIVITY = 0; public static final int REQUEST_QRCODEDECODE_ACTIVITY = 0;
Toolbar mToolbar;
@Override @Override
public AppCompatActivity getActivity() { public AppCompatActivity getActivity() {
return this; return this;
@ -58,8 +65,19 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); 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 处理接收就直接返回 // 接收并处理 Intent 数据函数 Intent 处理接收就直接返回
//if (prosessIntents(getIntent())) return; //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)); // 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<ResolveInfo> 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<String> 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) { public void onTestLogClick(View view) {
LogUtils.d(TAG, "onTestLogClick"); LogUtils.d(TAG, "onTestLogClick");
Toast.makeText(getApplication(), "onTestLogClick", Toast.LENGTH_SHORT).show(); 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); WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
} }
@Override
protected String getAppName() {
return getString(R.string.app_name);
}
// //
// 处理传入的 Intent 数据 // 处理传入的 Intent 数据
// //
@ -138,6 +224,14 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
//ToastUtils.show("onCreateOptionsMenu"); //ToastUtils.show("onCreateOptionsMenu");
getMenuInflater().inflate(R.menu.toolbar_main, menu); 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); return super.onCreateOptionsMenu(menu);
} }
@ -150,6 +244,30 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA
} else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) { } else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) {
Intent intent = new Intent(this, QRCodeDecodeActivity.class); Intent intent = new Intent(this, QRCodeDecodeActivity.class);
startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY); 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) { } else if (item.getItemId() == R.id.item_about) {
openAboutActivity(); openAboutActivity();
return true; return true;
@ -174,6 +292,31 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA
WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AboutActivity.class); 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) { public void onTestAboutActivity(View view) {
//ToastUtils.show("onTestAboutActivity"); //ToastUtils.show("onTestAboutActivity");
@ -185,21 +328,21 @@ final public class MainActivity extends BaseWinBollActivity implements IWinBollA
intent.putExtra(AssetsHtmlActivity.EXTRA_HTMLFILENAME, "javascript_test.html"); intent.putExtra(AssetsHtmlActivity.EXTRA_HTMLFILENAME, "javascript_test.html");
WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AssetsHtmlActivity.class); WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AssetsHtmlActivity.class);
} }
/*@Override /*@Override
protected void onActivithyResult(int requestCode, int resultCode, Intent data) { protected void onActivithyResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) { switch (requestCode) {
case REQUEST_QRCODEDECODE_ACTIVITY : { case REQUEST_QRCODEDECODE_ACTIVITY : {
if (data != null) { if (data != null) {
String text = data.getStringExtra(QRCodeDecodeActivity.EXTRA_RESULT); String text = data.getStringExtra(QRCodeDecodeActivity.EXTRA_RESULT);
ToastUtils.show(text); ToastUtils.show(text);
} }
break; break;
} }
default : { default : {
//ToastUtils.show(String.format("%d, %d", requestCode, resultCode)); //ToastUtils.show(String.format("%d, %d", requestCode, resultCode));
super.prosessActivityResult(requestCode, resultCode, data); super.prosessActivityResult(requestCode, resultCode, data);
} }
} }
}*/ }*/
} }

View File

@ -3,7 +3,6 @@ package cc.winboll.studio.apputils;
import android.os.Bundle; import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.app.BaseWinBollActivity;
import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity;
import cc.winboll.studio.libapputils.view.StringToQrCodeView; import cc.winboll.studio.libapputils.view.StringToQrCodeView;
@ -11,7 +10,7 @@ import cc.winboll.studio.libapputils.view.StringToQrCodeView;
* @Author ZhanGSKen@QQ.COM * @Author ZhanGSKen@QQ.COM
* @Date 2025/01/17 19:50:46 * @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"; public static final String TAG = "TestStringToQrCodeViewActivity";

View File

@ -7,10 +7,9 @@ package cc.winboll.studio.apputils;
import android.os.Bundle; import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.app.BaseWinBollActivity;
import cc.winboll.studio.libapputils.app.IWinBollActivity; 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"; public static final String TAG = "TestWinBollActivity";

View File

@ -38,7 +38,7 @@ dependencies {
api 'androidx.fragment:fragment:1.0.0' api 'androidx.fragment:fragment:1.0.0'
api 'com.google.android.material:material: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']) api fileTree(dir: 'libs', include: ['*.jar'])
} }

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #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 stageCount=1
libraryProject=libapputils libraryProject=libapputils
baseVersion=9.3 baseVersion=9.3
publishVersion=9.3.0 publishVersion=9.3.0
buildCount=58 buildCount=63
baseBetaVersion=9.3.1 baseBetaVersion=9.3.1

View File

@ -13,14 +13,13 @@ import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.R; 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.IWinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager; import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.view.AboutView; import cc.winboll.studio.libapputils.view.AboutView;
import com.hjq.toast.ToastUtils; 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"; public static final String TAG = "AboutActivity";

View File

@ -14,14 +14,13 @@ import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libapputils.R; 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.IWinBollActivity;
import cc.winboll.studio.libapputils.log.LogUtils; import cc.winboll.studio.libapputils.log.LogUtils;
import cc.winboll.studio.libapputils.view.SimpleWebView; import cc.winboll.studio.libapputils.view.SimpleWebView;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
public class AssetsHtmlActivity extends BaseWinBollActivity implements IWinBollActivity { public class AssetsHtmlActivity extends AppCompatActivity implements IWinBollActivity {
public static final String TAG = "AssetsHtmlActivity"; public static final String TAG = "AssetsHtmlActivity";

View File

@ -14,7 +14,6 @@ import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import cc.winboll.studio.libapputils.R; 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.IWinBollActivity;
import com.google.zxing.ResultPoint; import com.google.zxing.ResultPoint;
import com.journeyapps.barcodescanner.BarcodeCallback; import com.journeyapps.barcodescanner.BarcodeCallback;
@ -22,7 +21,7 @@ import com.journeyapps.barcodescanner.BarcodeResult;
import com.journeyapps.barcodescanner.DecoratedBarcodeView; import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import java.util.List; import java.util.List;
public class QRCodeDecodeActivity extends BaseWinBollActivity implements IWinBollActivity { public class QRCodeDecodeActivity extends AppCompatActivity implements IWinBollActivity {
public static final String TAG = "QRCodeDecodeActivity"; public static final String TAG = "QRCodeDecodeActivity";

View File

@ -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<CharSequence> 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<String> 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);
// }
// }
}

View File

@ -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<ResolveInfo> 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<String> 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 <T extends AboutActivity> 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;
}
}
}
}

View File

@ -11,7 +11,6 @@ package cc.winboll.studio.libapputils.app;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.TaskStackBuilder; import androidx.core.app.TaskStackBuilder;
import cc.winboll.studio.libapputils.log.LogUtils; import cc.winboll.studio.libapputils.log.LogUtils;
import java.util.HashMap; import java.util.HashMap;
@ -23,7 +22,16 @@ public class WinBollActivityManager {
public static final String TAG = "WinBollActivityManager"; public static final String TAG = "WinBollActivityManager";
public static final String EXTRA_TAG = "EXTRA_TAG"; 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; Context mContext;
MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks;
static WinBollActivityManager _mWinBollActivityManager; static WinBollActivityManager _mWinBollActivityManager;
static Map<String, IWinBollActivity> _mapIWinBollList; static Map<String, IWinBollActivity> _mapIWinBollList;
IWinBollActivity firstIWinBollActivity; IWinBollActivity firstIWinBollActivity;
@ -43,6 +51,20 @@ public class WinBollActivityManager {
return _mWinBollActivityManager; 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添加到管理中 // 把Activity添加到管理中
// //
@ -82,6 +104,7 @@ public class WinBollActivityManager {
//打开多任务窗口 flags //打开多任务窗口 flags
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_TAG, tag); intent.putExtra(EXTRA_TAG, tag);
mContext.startActivity(intent); mContext.startActivity(intent);
} catch (InstantiationException | IllegalAccessException e) { } catch (InstantiationException | IllegalAccessException e) {
@ -103,6 +126,7 @@ public class WinBollActivityManager {
//打开多任务窗口 flags //打开多任务窗口 flags
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_TAG, tag); intent.putExtra(EXTRA_TAG, tag);
mContext.startActivity(intent); mContext.startActivity(intent);
} catch (InstantiationException | IllegalAccessException e) { } catch (InstantiationException | IllegalAccessException e) {
@ -183,11 +207,11 @@ public class WinBollActivityManager {
//ToastUtils.show("finishAll() activity"); //ToastUtils.show("finishAll() activity");
if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) {
//ToastUtils.show("activity != null ..."); //ToastUtils.show("activity != null ...");
if (WinBollGlobalApplication.getWinBollUI_TYPE() == WinBollGlobalApplication.WinBollUI_TYPE.Service) { if (getWinBollUI_TYPE() == WinBollUI_TYPE.Service) {
// 结束窗口和最近任务栏, 建议前台服务类应用使用可以方便用户再次调用 UI 操作 // 结束窗口和最近任务栏, 建议前台服务类应用使用可以方便用户再次调用 UI 操作
iWinBoll.getActivity().finishAndRemoveTask(); iWinBoll.getActivity().finishAndRemoveTask();
//ToastUtils.show("finishAll() activity.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(); iWinBoll.getActivity().finish();
//ToastUtils.show("finishAll() activity.finish();"); //ToastUtils.show("finishAll() activity.finish();");

View File

@ -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();
}
}
}

View File

@ -8,12 +8,11 @@ package cc.winboll.studio.libapputils.log;
import android.os.Bundle; import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libapputils.R; 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.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"; public static final String TAG = "LogActivity";
@ -51,7 +50,7 @@ public class LogActivity extends BaseWinBollActivity implements IWinBollActivity
setContentView(R.layout.activity_log); setContentView(R.layout.activity_log);
mLogView = findViewById(R.id.logview); mLogView = findViewById(R.id.logview);
if (WinBollGlobalApplication.isDebug()) { mLogView.start(); } if (GlobalApplication.isDebuging()) { mLogView.start(); }
} }
@Override @Override

View File

@ -7,7 +7,7 @@ package cc.winboll.studio.libapputils.log;
* @Describe 应用日志类 * @Describe 应用日志类
*/ */
import android.content.Context; 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 cc.winboll.studio.libapputils.util.FileUtils;
import dalvik.system.DexFile; import dalvik.system.DexFile;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -61,7 +61,7 @@ public class LogUtils {
// 初始化函数 // 初始化函数
// //
public static void init(Context context, LOG_LEVEL logLevel) { public static void init(Context context, LOG_LEVEL logLevel) {
if (WinBollGlobalApplication.isDebug()) { if (GlobalApplication.isDebuging()) {
// 初始化日志缓存文件路径 // 初始化日志缓存文件路径
_mfLogCacheDir = new File(context.getApplicationContext().getExternalCacheDir(), TAG); _mfLogCacheDir = new File(context.getApplicationContext().getExternalCacheDir(), TAG);
if (!_mfLogCacheDir.exists()) { if (!_mfLogCacheDir.exists()) {

View File

@ -16,10 +16,10 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libapputils.R; import cc.winboll.studio.libapputils.R;
import cc.winboll.studio.libapputils.app.AppVersionUtils; import cc.winboll.studio.libapputils.app.AppVersionUtils;
import cc.winboll.studio.libapputils.app.WinBollActivityManager; import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.app.WinBollGlobalApplication;
import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.bean.DebugBean; import cc.winboll.studio.libapputils.bean.DebugBean;
import cc.winboll.studio.libapputils.log.LogUtils; import cc.winboll.studio.libapputils.log.LogUtils;
@ -106,7 +106,7 @@ public class AboutView extends LinearLayout {
mszAppDescription = mAPPInfo.getAppDescription(); mszAppDescription = mAPPInfo.getAppDescription();
mnAppIcon = mAPPInfo.getAppIcon(); 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 { try {
mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName; mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName;
@ -117,7 +117,7 @@ public class AboutView extends LinearLayout {
mszHomePage = mszWinBollServerHost + "/studio/details.php?app=" + mszAppAPKFolderName; mszHomePage = mszWinBollServerHost + "/studio/details.php?app=" + mszAppAPKFolderName;
mszGitea = "https://gitea.winboll.cc/" + mAPPInfo.getAppGitOwner() + "/" + mszAppGitName + "/src/branch/" + mAPPInfo.getAppGitAPPBranch() + "/" + mAPPInfo.getAppGitAPPSubProjectFolder(); 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); LayoutInflater inflater = LayoutInflater.from(mContext);
View addedView = inflater.inflate(R.layout.view_about_dev, this, false); View addedView = inflater.inflate(R.layout.view_about_dev, this, false);
LinearLayout llMain = addedView.findViewById(R.id.viewaboutdevLinearLayout1); LinearLayout llMain = addedView.findViewById(R.id.viewaboutdevLinearLayout1);
@ -208,7 +208,7 @@ public class AboutView extends LinearLayout {
// 定义应用调试按钮 // 定义应用调试按钮
// //
Element elementAppMode; Element elementAppMode;
if (WinBollGlobalApplication.isDebug()) { if (GlobalApplication.isDebuging()) {
elementAppMode = new Element(mContext.getString(R.string.app_normal), R.drawable.ic_winboll); elementAppMode = new Element(mContext.getString(R.string.app_normal), R.drawable.ic_winboll);
elementAppMode.setOnClickListener(mAppNormalOnClickListener); elementAppMode.setOnClickListener(mAppNormalOnClickListener);
} else { } else {
@ -274,7 +274,7 @@ public class AboutView extends LinearLayout {
if (intent != null) { if (intent != null) {
intent.setAction(cc.winboll.studio.libapputils.intent.action.DEBUGVIEW); intent.setAction(cc.winboll.studio.libapputils.intent.action.DEBUGVIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
WinBollGlobalApplication.setIsDebug(true); GlobalApplication.setIsDebuging(context, true);
DebugBean.saveBean(context, new DebugBean(true)); DebugBean.saveBean(context, new DebugBean(true));
WinBollActivityManager.getInstance(context).finishAll(); WinBollActivityManager.getInstance(context).finishAll();
@ -286,7 +286,7 @@ public class AboutView extends LinearLayout {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
if (intent != null) { if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
WinBollGlobalApplication.setIsDebug(false); GlobalApplication.setIsDebuging(context, false);
DebugBean.saveBean(context, new DebugBean(false)); DebugBean.saveBean(context, new DebugBean(false));
WinBollActivityManager.getInstance(context).finishAll(); WinBollActivityManager.getInstance(context).finishAll();
@ -312,7 +312,7 @@ public class AboutView extends LinearLayout {
String szUrl = mszWinBollServerHost + "/studio/details.php?app=" + mszAppAPKFolderName; String szUrl = mszWinBollServerHost + "/studio/details.php?app=" + mszAppAPKFolderName;
// 构建包含认证信息的请求 // 构建包含认证信息的请求
String credential = ""; String credential = "";
if (WinBollGlobalApplication.isDebug()) { if (GlobalApplication.isDebuging()) {
credential = Credentials.basic(metDevUserName.getText().toString(), metDevUserPassword.getText().toString()); credential = Credentials.basic(metDevUserName.getText().toString(), metDevUserPassword.getText().toString());
PrefUtils.saveString(mContext, "metDevUserName", metDevUserName.getText().toString()); PrefUtils.saveString(mContext, "metDevUserName", metDevUserName.getText().toString());
PrefUtils.saveString(mContext, "metDevUserPassword", metDevUserPassword.getText().toString()); PrefUtils.saveString(mContext, "metDevUserPassword", metDevUserPassword.getText().toString());