From fe943fef853392c1baf8507a5b7e458938877fc3 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 20 Mar 2025 01:22:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=B1=BB=E5=BA=93=EF=BC=8C?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97=E7=BD=AE?= =?UTF-8?q?=E9=97=B2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apputils/build.gradle | 5 +- apputils/build.properties | 4 +- .../java/cc/winboll/studio/apputils/App.java | 2 +- .../winboll/studio/apputils/MainActivity.java | 38 +- .../TestStringToQrCodeViewActivity.java | 10 +- libapputils/build.gradle | 6 +- libapputils/build.properties | 4 +- .../libapputils/activities/AboutActivity.java | 6 +- .../activities/AssetsHtmlActivity.java | 10 +- .../libapputils/activities/LogActivity.java | 10 +- .../activities/QRCodeDecodeActivity.java | 8 +- .../libapputils/app/AboutActivityFactory.java | 2 +- .../libapputils/app/IWinBollActivity.java | 2 +- .../app/WinBollActivityManager.java | 592 +++++++++--------- 14 files changed, 352 insertions(+), 347 deletions(-) diff --git a/apputils/build.gradle b/apputils/build.gradle index 9df9a3d..b66f2ba 100644 --- a/apputils/build.gradle +++ b/apputils/build.gradle @@ -46,8 +46,7 @@ android { dependencies { api project(':libapputils') api fileTree(dir: 'libs', include: ['*.jar']) - implementation 'cc.winboll.studio:libappbase:15.0.5' - + // 二维码类库 implementation 'com.google.zxing:core:3.4.1' implementation 'com.journeyapps:zxing-android-embedded:3.6.0' @@ -63,4 +62,6 @@ dependencies { // 应用介绍页类库 //implementation 'io.github.medyo:android-about-page:2.0.0' + + implementation 'cc.winboll.studio:libappbase:15.0.5' } diff --git a/apputils/build.properties b/apputils/build.properties index 6d60947..60f0ae5 100644 --- a/apputils/build.properties +++ b/apputils/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Mar 18 12:18:32 HKT 2025 +#Wed Mar 19 17:20:42 GMT 2025 stageCount=7 libraryProject=libapputils baseVersion=15.0 publishVersion=15.0.6 -buildCount=0 +buildCount=1 baseBetaVersion=15.0.7 diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/App.java b/apputils/src/main/java/cc/winboll/studio/apputils/App.java index 165e0e2..59e6796 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/App.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/App.java @@ -77,7 +77,7 @@ public class App extends GlobalApplication { mMyActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks(); registerActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks); // 设置默认 WinBoll 应用 UI 类型 - WinBollActivityManager.getInstance(this).setWinBollUI_TYPE(WinBollActivityManager.WinBollUI_TYPE.Service); + //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()); diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java index a68467a..7d1b245 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java @@ -36,11 +36,11 @@ final public class MainActivity extends Activity implements IWinBollActivity { Toolbar mToolbar; LogView mLogView; - - @Override - public Activity getActivity() { - return this; - } +// +// @Override +// public Activity getActivity() { +// return this; +// } @Override public APPInfo getAppInfo() { @@ -177,12 +177,12 @@ final public class MainActivity extends Activity implements IWinBollActivity { protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // 缓存当前 activity - WinBollActivityManager.getInstance(this).add(this); + //WinBollActivityManager.getInstance(this).add(this); } @Override public void onDestroy() { - WinBollActivityManager.getInstance(this).registeRemove(this); + //WinBollActivityManager.getInstance(this).registeRemove(this); super.onDestroy(); } @@ -198,7 +198,7 @@ final public class MainActivity extends Activity implements IWinBollActivity { // startActivity(intent); //WinBollActivityManager.getInstance().printAvtivityListInfo(); - WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class); + //WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class); } // @@ -268,7 +268,7 @@ final public class MainActivity extends Activity implements IWinBollActivity { AboutActivityFactory.showAboutActivity(this, getAppInfo()); return true; } else if (item.getItemId() == R.id.item_teststringtoqrcodeview) { - WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestStringToQrCodeViewActivity.class); + //WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestStringToQrCodeViewActivity.class); } else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) { Intent intent = new Intent(this, QRCodeDecodeActivity.class); startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY); @@ -278,13 +278,13 @@ final public class MainActivity extends Activity implements IWinBollActivity { } return true; } else if (item.getItemId() == R.id.item_log) { - WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class); + //WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class); return true; } 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); + //WinBollActivityManager.getInstance(this).finish(this); return true; } return super.onOptionsItemSelected(item); @@ -301,7 +301,7 @@ final public class MainActivity extends Activity implements IWinBollActivity { @Override public void onYes() { - WinBollActivityManager.getInstance(getApplicationContext()).finishAll(); + //WinBollActivityManager.getInstance(getApplicationContext()).finishAll(); } @Override @@ -314,12 +314,12 @@ final public class MainActivity extends Activity implements IWinBollActivity { @Override public void onBackPressed() { - if (WinBollActivityManager.getInstance(getApplicationContext()).isFirstIWinBollActivity(this)) { - exit(); - } else { - WinBollActivityManager.getInstance(this).finish(this); - super.onBackPressed(); - } +// if (WinBollActivityManager.getInstance(getApplicationContext()).isFirstIWinBollActivity(this)) { +// exit(); +// } else { +// WinBollActivityManager.getInstance(this).finish(this); +// super.onBackPressed(); +// } } public void onTestAboutActivity(View view) { @@ -329,7 +329,7 @@ final public class MainActivity extends Activity implements IWinBollActivity { public void onTestJavascriptHtmlActivity(View view) { Intent intent = new Intent(this, AssetsHtmlActivity.class); 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 diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java index 3f4b678..f209f92 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java @@ -17,11 +17,11 @@ public class TestStringToQrCodeViewActivity extends Activity implements IWinBoll public static final String TAG = "TestStringToQrCodeViewActivity"; StringToQrCodeView mStringToQrCodeView; - - @Override - public Activity getActivity() { - return this; - } +// +// @Override +// public Activity getActivity() { +// return this; +// } @Override public APPInfo getAppInfo() { diff --git a/libapputils/build.gradle b/libapputils/build.gradle index 39c69c9..9239a8c 100644 --- a/libapputils/build.gradle +++ b/libapputils/build.gradle @@ -21,7 +21,6 @@ android { dependencies { api fileTree(dir: 'libs', include: ['*.jar']) - implementation 'cc.winboll.studio:libappbase:15.0.5' // 二维码类库 implementation 'com.google.zxing:core:3.4.1' @@ -35,4 +34,9 @@ dependencies { // SSH //implementation 'com.jcraft:jsch:0.1.55' + + // 应用介绍页类库 + //implementation 'io.github.medyo:android-about-page:2.0.0' + + implementation 'cc.winboll.studio:libappbase:15.0.5' } diff --git a/libapputils/build.properties b/libapputils/build.properties index 3e195bf..60f0ae5 100644 --- a/libapputils/build.properties +++ b/libapputils/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Mar 18 12:18:22 HKT 2025 +#Wed Mar 19 17:20:42 GMT 2025 stageCount=7 libraryProject=libapputils baseVersion=15.0 publishVersion=15.0.6 -buildCount=0 +buildCount=1 baseBetaVersion=15.0.7 diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java index 82b1c72..fb96bb1 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java @@ -85,9 +85,9 @@ final public class AboutActivity extends Activity implements IWinBollActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.item_help) { - WinBollActivityManager.getInstance(this).startWinBollActivity(this, AssetsHtmlActivity.class); - } +// if (item.getItemId() == R.id.item_help) { +// WinBollActivityManager.getInstance(this).startWinBollActivity(this, AssetsHtmlActivity.class); +// } return super.onOptionsItemSelected(item); } } diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java index a3ec656..050869d 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java @@ -33,11 +33,11 @@ public class AssetsHtmlActivity extends Activity implements IWinBollActivity { // Assets 文件夹里的 Html 文件的名称 String mszHtmlFileName; - - @Override - public Activity getActivity() { - return this; - } +// +// @Override +// public Activity getActivity() { +// return this; +// } @Override public APPInfo getAppInfo() { diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/LogActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/LogActivity.java index 35eb8b5..8ed6667 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/LogActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/LogActivity.java @@ -19,11 +19,11 @@ public class LogActivity extends Activity implements IWinBollActivity { public static final String TAG = "LogActivity"; LogView mLogView; - - @Override - public Activity getActivity() { - return this; - } +// +// @Override +// public Activity getActivity() { +// return this; +// } @Override public APPInfo getAppInfo() { diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java index 6c31fa8..ab8b24b 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java @@ -30,10 +30,10 @@ public class QRCodeDecodeActivity extends Activity implements IWinBollActivity { TextView resultTextView; DecoratedBarcodeView barcodeView; - @Override - public Activity getActivity() { - return this; - } +// @Override +// public Activity getActivity() { +// return this; +// } @Override public APPInfo getAppInfo() { diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AboutActivityFactory.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AboutActivityFactory.java index 679dd8d..8ef141e 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AboutActivityFactory.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/AboutActivityFactory.java @@ -49,6 +49,6 @@ public class AboutActivityFactory { Intent intent = new Intent(context, AboutActivity.class); intent.putExtra(AboutActivity.EXTRA_APPINFO, (appInfo == null) ? AboutActivityFactory.buildDefaultAPPInfo():appInfo); - WinBollActivityManager.getInstance(context).startWinBollActivity(context, intent, AboutActivity.class); + //WinBollActivityManager.getInstance(context).startWinBollActivity(context, intent, AboutActivity.class); } } diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java index 0285c14..888ff84 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java @@ -14,7 +14,7 @@ public interface IWinBollActivity { public static final String TAG = "IWinBollActivity"; // 获取应用资源上下文 - abstract public Context getApplicationContext(); + //abstract public Context getApplicationContext(); abstract public APPInfo getAppInfo(); abstract public String getTag(); abstract public Toolbar initToolBar(); diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java index 4da3792..e0e1119 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java @@ -19,300 +19,300 @@ import java.util.Map; public class WinBollActivityManager { - public static final String TAG = "WinBollActivityManager"; - public static final String EXTRA_TAG = "EXTRA_TAG"; - - public static enum WinBollUI_TYPE { - Aplication, // 退出应用后,保持最近任务栏任务记录主窗口 - Service // 退出应用后,清理所有最近任务栏任务记录窗口 - }; - - // 应用类型标志 - volatile static WinBollUI_TYPE _mWinBollUI_TYPE = WinBollUI_TYPE.Service; - - Context mContext; - MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks; - static WinBollActivityManager _mWinBollActivityManager; - static Map _mapIWinBollList; - IWinBollActivity firstIWinBollActivity; - - public WinBollActivityManager(Context context) { - mContext = context; - LogUtils.d(TAG, "WinBollActivityManager()"); - _mapIWinBollList = new HashMap(); - } - - public static synchronized WinBollActivityManager getInstance(Context context) { - LogUtils.d(TAG, "getInstance"); - if (_mWinBollActivityManager == null) { - LogUtils.d(TAG, "_mWinBollActivityManager == null"); - _mWinBollActivityManager = new WinBollActivityManager(context); - } - 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添加到管理中 - // - public void add(T iWinBoll) { - if (isActive(iWinBoll.getTag())) { - LogUtils.d(TAG, String.format("add(...) %s is active.", iWinBoll.getTag())); - } else { - // 设置起始活动窗口,以便最后退出时提问 - if (firstIWinBollActivity == null && _mapIWinBollList.size() == 0) { - firstIWinBollActivity = iWinBoll; - } - - // 添加到活动窗口列表 - _mapIWinBollList.put(iWinBoll.getTag(), iWinBoll); - LogUtils.d(TAG, String.format("Add activity : %s\n_mapActivityList.size() : %d", iWinBoll.getTag(), _mapIWinBollList.size())); - } - } - - - // - // activity: 为 null 时, - // intent.putExtra 函数 EXTRA_TAG 参数为 tag - // activity: 不为 null 时, - // intent.putExtra 函数 "tag" 参数为 activity.getTag() - // - public void startWinBollActivity(Context context, Class clazz) { - try { - // 如果窗口已存在就重启窗口 - String tag = clazz.newInstance().getTag(); - if (isActive(tag)) { - resumeActivity(context, tag); - return; - } - - // 新建一个任务窗口 - Intent intent = new Intent(context, clazz); - //打开多任务窗口 flags - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); - intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra(EXTRA_TAG, tag); - mContext.startActivity(intent); - } catch (InstantiationException | IllegalAccessException e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - } - - public void startWinBollActivity(Context context, Intent intent, Class clazz) { - try { - // 如果窗口已存在就重启窗口 - String tag = clazz.newInstance().getTag(); - if (isActive(tag)) { - resumeActivity(context, tag); - return; - } - - // 新建一个任务窗口 - //Intent intent = new Intent(context, clazz); - //打开多任务窗口 flags - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); - intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra(EXTRA_TAG, tag); - mContext.startActivity(intent); - } catch (InstantiationException | IllegalAccessException e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - } - - public boolean isFirstIWinBollActivity(IWinBollActivity iWinBollActivity) { - return firstIWinBollActivity != null && firstIWinBollActivity == iWinBollActivity; - } - - // - // 判断 tag绑定的 MyActivity是否存在 - // - public boolean isActive(String tag) { - //printAvtivityListInfo(); - IWinBollActivity iWinBoll = getIWinBoll(tag); - if (iWinBoll != null) { - LogUtils.d(TAG, "isActive(...) activity != null tag " + tag); - //ToastUtils.show("activity != null tag " + tag); - //判断是否为 BaseActivity,如果已经销毁,则移除 - if (iWinBoll.getActivity().isFinishing() || iWinBoll.getActivity().isDestroyed()) { - _mapIWinBollList.remove(iWinBoll.getTag()); - //_mWinBollActivityList.remove(activity); - LogUtils.d(TAG, String.format("isActive(...) remove activity.\ntag : %s", tag)); - return false; - } else { - LogUtils.d(TAG, String.format("isActive(...) activity is exist.\ntag : %s", tag)); - return true; - } - } else { - LogUtils.d(TAG, String.format("isActive(...) activity == null\ntag : %s", tag)); - return false; - } - } - - static IWinBollActivity getIWinBoll(String tag) { - return _mapIWinBollList.get(tag); - } - - // - // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 - // - public void resumeActivity(Context context, String tag) { - LogUtils.d(TAG, "resumeActivty"); - T iWinBoll = (T)getIWinBoll(tag); - //LogUtils.d(TAG, "activity " + activity.getTag()); - if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { - resumeActivity(context, iWinBoll); - } - } - - // - // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 - // - public void resumeActivity(Context context, T iWinBoll) { - ActivityManager am = (ActivityManager) iWinBoll.getActivity().getSystemService(Context.ACTIVITY_SERVICE); - //返回启动它的根任务(home 或者 MainActivity) - Intent intent = new Intent(context, iWinBoll.getClass()); - TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); - stackBuilder.addNextIntentWithParentStack(intent); - stackBuilder.startActivities(); - //moveTaskToFront(YourTaskId, 0); - LogUtils.d(TAG, "am.moveTaskToFront"); - //ToastUtils.show("resumeActivity am.moveTaskToFront"); - am.moveTaskToFront(iWinBoll.getActivity().getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION); - } - - - // - // 结束所有 Activity - // - public void finishAll() { - try { - for (String key : _mapIWinBollList.keySet()) { - //System.out.println("Key: " + key + ", Value: " + _mapActivityList.get(key)); - IWinBollActivity iWinBoll = _mapIWinBollList.get(key); - //ToastUtils.show("finishAll() activity"); - if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { - //ToastUtils.show("activity != null ..."); - if (getWinBollUI_TYPE() == WinBollUI_TYPE.Service) { - // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。 - iWinBoll.getActivity().finishAndRemoveTask(); - //ToastUtils.show("finishAll() activity.finishAndRemoveTask();"); - } else if (getWinBollUI_TYPE() == WinBollUI_TYPE.Aplication) { - // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。 - iWinBoll.getActivity().finish(); - //ToastUtils.show("finishAll() activity.finish();"); - } else { - LogUtils.d(TAG, "WinBollApplication.WinBollUI_TYPE error."); - //ToastUtils.show("WinBollApplication.WinBollUI_TYPE error."); - } - } - } - } catch (Exception e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - } - - // - // 结束指定Activity - // - public void finish(T iWinBoll) { - try { - if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { - //根据tag 移除 MyActivity - //String tag= activity.getTag(); - //_mWinBollActivityList.remove(tag); - //ToastUtils.show("remove"); - //ToastUtils.show("_mWinBollActivityArrayMap.size() " + Integer.toString(_mWinBollActivityArrayMap.size())); - - // 窗口回调规则: - // [] 当前窗口位置 >> 调度出的窗口位置 - // ★:[0] 1 2 3 4 >> 1 - // ★:0 1 [2] 3 4 >> 1 - // ★:0 1 2 [3] 4 >> 2 - // ★:0 1 2 3 [4] >> 3 - // ★:[0] >> 直接关闭当前窗口 - LogUtils.d(TAG, "finish no yet."); - IWinBollActivity preIWinBoll = getPreIWinBoll(iWinBoll); - iWinBoll.getActivity().finish(); - if (preIWinBoll != null) { - resumeActivity(mContext, preIWinBoll); - } - } - - } catch (Exception e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - } - - // - // 获取窗口队列中的前一个窗口 - // - IWinBollActivity getPreIWinBoll(IWinBollActivity iWinBoll) { - try { - boolean bingo = false; - IWinBollActivity preIWinBoll = null; - for (Map.Entry entity : _mapIWinBollList.entrySet()) { - if (entity.getKey().equals(iWinBoll.getTag())) { - bingo = true; - LogUtils.d(TAG, "bingo"); - break; - } - preIWinBoll = entity.getValue(); - } - - if (bingo) { - return preIWinBoll; - } - } catch (Exception e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } - - return null; - } - - // - // 从管理列表中移除管理项 - // - public boolean registeRemove(T activity) { - IWinBollActivity iWinBollTest = _mapIWinBollList.get(activity.getTag()); - if (iWinBollTest != null) { - _mapIWinBollList.remove(activity.getTag()); - return true; - } - return false; - } - - // - // 打印管理列表项列表里的信息 - // - public static void printIWinBollListInfo() { - //LogUtils.d(TAG, "printAvtivityListInfo"); - if (!_mapIWinBollList.isEmpty()) { - StringBuilder sb = new StringBuilder("Map entries : " + Integer.toString(_mapIWinBollList.size())); - Iterator> iterator = _mapIWinBollList.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - sb.append("\nKey: " + entry.getKey() + ", \nValue: " + entry.getValue().getTag()); - //ToastUtils.show("\nKey: " + entry.getKey() + ", Value: " + entry.getValue().getTag()); - } - sb.append("\nMap entries end."); - LogUtils.d(TAG, sb.toString()); - } else { - LogUtils.d(TAG, "The map is empty."); - } - } +// public static final String TAG = "WinBollActivityManager"; +// public static final String EXTRA_TAG = "EXTRA_TAG"; +// +// public static enum WinBollUI_TYPE { +// Aplication, // 退出应用后,保持最近任务栏任务记录主窗口 +// Service // 退出应用后,清理所有最近任务栏任务记录窗口 +// }; +// +// // 应用类型标志 +// volatile static WinBollUI_TYPE _mWinBollUI_TYPE = WinBollUI_TYPE.Service; +// +// Context mContext; +// MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks; +// static WinBollActivityManager _mWinBollActivityManager; +// static Map _mapIWinBollList; +// IWinBollActivity firstIWinBollActivity; +// +// public WinBollActivityManager(Context context) { +// mContext = context; +// LogUtils.d(TAG, "WinBollActivityManager()"); +// _mapIWinBollList = new HashMap(); +// } +// +// public static synchronized WinBollActivityManager getInstance(Context context) { +// LogUtils.d(TAG, "getInstance"); +// if (_mWinBollActivityManager == null) { +// LogUtils.d(TAG, "_mWinBollActivityManager == null"); +// _mWinBollActivityManager = new WinBollActivityManager(context); +// } +// 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添加到管理中 +// // +// public void add(T iWinBoll) { +// if (isActive(iWinBoll.getTag())) { +// LogUtils.d(TAG, String.format("add(...) %s is active.", iWinBoll.getTag())); +// } else { +// // 设置起始活动窗口,以便最后退出时提问 +// if (firstIWinBollActivity == null && _mapIWinBollList.size() == 0) { +// firstIWinBollActivity = iWinBoll; +// } +// +// // 添加到活动窗口列表 +// _mapIWinBollList.put(iWinBoll.getTag(), iWinBoll); +// LogUtils.d(TAG, String.format("Add activity : %s\n_mapActivityList.size() : %d", iWinBoll.getTag(), _mapIWinBollList.size())); +// } +// } +// +// +// // +// // activity: 为 null 时, +// // intent.putExtra 函数 EXTRA_TAG 参数为 tag +// // activity: 不为 null 时, +// // intent.putExtra 函数 "tag" 参数为 activity.getTag() +// // +// public void startWinBollActivity(Context context, Class clazz) { +// try { +// // 如果窗口已存在就重启窗口 +// String tag = clazz.newInstance().getTag(); +// if (isActive(tag)) { +// resumeActivity(context, tag); +// return; +// } +// +// // 新建一个任务窗口 +// Intent intent = new Intent(context, clazz); +// //打开多任务窗口 flags +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); +// intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// intent.putExtra(EXTRA_TAG, tag); +// mContext.startActivity(intent); +// } catch (InstantiationException | IllegalAccessException e) { +// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); +// } +// } +// +// public void startWinBollActivity(Context context, Intent intent, Class clazz) { +// try { +// // 如果窗口已存在就重启窗口 +// String tag = clazz.newInstance().getTag(); +// if (isActive(tag)) { +// resumeActivity(context, tag); +// return; +// } +// +// // 新建一个任务窗口 +// //Intent intent = new Intent(context, clazz); +// //打开多任务窗口 flags +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); +// intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// intent.putExtra(EXTRA_TAG, tag); +// mContext.startActivity(intent); +// } catch (InstantiationException | IllegalAccessException e) { +// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); +// } +// } +// +// public boolean isFirstIWinBollActivity(IWinBollActivity iWinBollActivity) { +// return firstIWinBollActivity != null && firstIWinBollActivity == iWinBollActivity; +// } +// +// // +// // 判断 tag绑定的 MyActivity是否存在 +// // +// public boolean isActive(String tag) { +// //printAvtivityListInfo(); +// IWinBollActivity iWinBoll = getIWinBoll(tag); +// if (iWinBoll != null) { +// LogUtils.d(TAG, "isActive(...) activity != null tag " + tag); +// //ToastUtils.show("activity != null tag " + tag); +// //判断是否为 BaseActivity,如果已经销毁,则移除 +// if (iWinBoll.getActivity().isFinishing() || iWinBoll.getActivity().isDestroyed()) { +// _mapIWinBollList.remove(iWinBoll.getTag()); +// //_mWinBollActivityList.remove(activity); +// LogUtils.d(TAG, String.format("isActive(...) remove activity.\ntag : %s", tag)); +// return false; +// } else { +// LogUtils.d(TAG, String.format("isActive(...) activity is exist.\ntag : %s", tag)); +// return true; +// } +// } else { +// LogUtils.d(TAG, String.format("isActive(...) activity == null\ntag : %s", tag)); +// return false; +// } +// } +// +// static IWinBollActivity getIWinBoll(String tag) { +// return _mapIWinBollList.get(tag); +// } +// +// // +// // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 +// // +// public void resumeActivity(Context context, String tag) { +// LogUtils.d(TAG, "resumeActivty"); +// T iWinBoll = (T)getIWinBoll(tag); +// //LogUtils.d(TAG, "activity " + activity.getTag()); +// if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { +// resumeActivity(context, iWinBoll); +// } +// } +// +// // +// // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 +// // +// public void resumeActivity(Context context, T iWinBoll) { +// ActivityManager am = (ActivityManager) iWinBoll.getActivity().getSystemService(Context.ACTIVITY_SERVICE); +// //返回启动它的根任务(home 或者 MainActivity) +// Intent intent = new Intent(context, iWinBoll.getClass()); +// TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); +// stackBuilder.addNextIntentWithParentStack(intent); +// stackBuilder.startActivities(); +// //moveTaskToFront(YourTaskId, 0); +// LogUtils.d(TAG, "am.moveTaskToFront"); +// //ToastUtils.show("resumeActivity am.moveTaskToFront"); +// am.moveTaskToFront(iWinBoll.getActivity().getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION); +// } +// +// +// // +// // 结束所有 Activity +// // +// public void finishAll() { +// try { +// for (String key : _mapIWinBollList.keySet()) { +// //System.out.println("Key: " + key + ", Value: " + _mapActivityList.get(key)); +// IWinBollActivity iWinBoll = _mapIWinBollList.get(key); +// //ToastUtils.show("finishAll() activity"); +// if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { +// //ToastUtils.show("activity != null ..."); +// if (getWinBollUI_TYPE() == WinBollUI_TYPE.Service) { +// // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。 +// iWinBoll.getActivity().finishAndRemoveTask(); +// //ToastUtils.show("finishAll() activity.finishAndRemoveTask();"); +// } else if (getWinBollUI_TYPE() == WinBollUI_TYPE.Aplication) { +// // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。 +// iWinBoll.getActivity().finish(); +// //ToastUtils.show("finishAll() activity.finish();"); +// } else { +// LogUtils.d(TAG, "WinBollApplication.WinBollUI_TYPE error."); +// //ToastUtils.show("WinBollApplication.WinBollUI_TYPE error."); +// } +// } +// } +// } catch (Exception e) { +// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); +// } +// } +// +// // +// // 结束指定Activity +// // +// public void finish(T iWinBoll) { +// try { +// if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { +// //根据tag 移除 MyActivity +// //String tag= activity.getTag(); +// //_mWinBollActivityList.remove(tag); +// //ToastUtils.show("remove"); +// //ToastUtils.show("_mWinBollActivityArrayMap.size() " + Integer.toString(_mWinBollActivityArrayMap.size())); +// +// // 窗口回调规则: +// // [] 当前窗口位置 >> 调度出的窗口位置 +// // ★:[0] 1 2 3 4 >> 1 +// // ★:0 1 [2] 3 4 >> 1 +// // ★:0 1 2 [3] 4 >> 2 +// // ★:0 1 2 3 [4] >> 3 +// // ★:[0] >> 直接关闭当前窗口 +// LogUtils.d(TAG, "finish no yet."); +// IWinBollActivity preIWinBoll = getPreIWinBoll(iWinBoll); +// iWinBoll.getActivity().finish(); +// if (preIWinBoll != null) { +// resumeActivity(mContext, preIWinBoll); +// } +// } +// +// } catch (Exception e) { +// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); +// } +// } +// +// // +// // 获取窗口队列中的前一个窗口 +// // +// IWinBollActivity getPreIWinBoll(IWinBollActivity iWinBoll) { +// try { +// boolean bingo = false; +// IWinBollActivity preIWinBoll = null; +// for (Map.Entry entity : _mapIWinBollList.entrySet()) { +// if (entity.getKey().equals(iWinBoll.getTag())) { +// bingo = true; +// LogUtils.d(TAG, "bingo"); +// break; +// } +// preIWinBoll = entity.getValue(); +// } +// +// if (bingo) { +// return preIWinBoll; +// } +// } catch (Exception e) { +// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); +// } +// +// return null; +// } +// +// // +// // 从管理列表中移除管理项 +// // +// public boolean registeRemove(T activity) { +// IWinBollActivity iWinBollTest = _mapIWinBollList.get(activity.getTag()); +// if (iWinBollTest != null) { +// _mapIWinBollList.remove(activity.getTag()); +// return true; +// } +// return false; +// } +// +// // +// // 打印管理列表项列表里的信息 +// // +// public static void printIWinBollListInfo() { +// //LogUtils.d(TAG, "printAvtivityListInfo"); +// if (!_mapIWinBollList.isEmpty()) { +// StringBuilder sb = new StringBuilder("Map entries : " + Integer.toString(_mapIWinBollList.size())); +// Iterator> iterator = _mapIWinBollList.entrySet().iterator(); +// while (iterator.hasNext()) { +// Map.Entry entry = iterator.next(); +// sb.append("\nKey: " + entry.getKey() + ", \nValue: " + entry.getValue().getTag()); +// //ToastUtils.show("\nKey: " + entry.getKey() + ", Value: " + entry.getValue().getTag()); +// } +// sb.append("\nMap entries end."); +// LogUtils.d(TAG, sb.toString()); +// } else { +// LogUtils.d(TAG, "The map is empty."); +// } +// } }