更新类库,窗口管理模块置闲。
This commit is contained in:
parent
dc1b138dd7
commit
fe943fef85
@ -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'
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
|
@ -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() {
|
||||
|
@ -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'
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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() {
|
||||
|
@ -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() {
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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<String, IWinBollActivity> _mapIWinBollList;
|
||||
IWinBollActivity firstIWinBollActivity;
|
||||
|
||||
public WinBollActivityManager(Context context) {
|
||||
mContext = context;
|
||||
LogUtils.d(TAG, "WinBollActivityManager()");
|
||||
_mapIWinBollList = new HashMap<String, IWinBollActivity>();
|
||||
}
|
||||
|
||||
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 <T extends IWinBollActivity> 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 <T extends IWinBollActivity> void startWinBollActivity(Context context, Class<T> 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 <T extends IWinBollActivity> void startWinBollActivity(Context context, Intent intent, Class<T> 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 <T extends IWinBollActivity> 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 <T extends IWinBollActivity> 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 <T extends IWinBollActivity> 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<String, IWinBollActivity> 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 <T extends IWinBollActivity> 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<Map.Entry<String, IWinBollActivity>> iterator = _mapIWinBollList.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry<String, IWinBollActivity> 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<String, IWinBollActivity> _mapIWinBollList;
|
||||
// IWinBollActivity firstIWinBollActivity;
|
||||
//
|
||||
// public WinBollActivityManager(Context context) {
|
||||
// mContext = context;
|
||||
// LogUtils.d(TAG, "WinBollActivityManager()");
|
||||
// _mapIWinBollList = new HashMap<String, IWinBollActivity>();
|
||||
// }
|
||||
//
|
||||
// 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 <T extends IWinBollActivity> 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 <T extends IWinBollActivity> void startWinBollActivity(Context context, Class<T> 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 <T extends IWinBollActivity> void startWinBollActivity(Context context, Intent intent, Class<T> 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 <T extends IWinBollActivity> 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 <T extends IWinBollActivity> 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 <T extends IWinBollActivity> 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<String, IWinBollActivity> 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 <T extends IWinBollActivity> 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<Map.Entry<String, IWinBollActivity>> iterator = _mapIWinBollList.entrySet().iterator();
|
||||
// while (iterator.hasNext()) {
|
||||
// Map.Entry<String, IWinBollActivity> 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.");
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user