更新类库,重构基础活动窗口类为实际活动窗口类。
This commit is contained in:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
				
			||||||
                }
 | 
					     }
 | 
				
			||||||
        }
 | 
					     }
 | 
				
			||||||
    }*/
 | 
					     }*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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'])
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
					 | 
				
			||||||
//        }
 | 
					 | 
				
			||||||
//    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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();");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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()) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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());
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user