更新类库,窗口管理模块置闲。
This commit is contained in:
parent
dc1b138dd7
commit
fe943fef85
@ -46,7 +46,6 @@ android {
|
|||||||
dependencies {
|
dependencies {
|
||||||
api project(':libapputils')
|
api project(':libapputils')
|
||||||
api fileTree(dir: 'libs', include: ['*.jar'])
|
api fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
implementation 'cc.winboll.studio:libappbase:15.0.5'
|
|
||||||
|
|
||||||
// 二维码类库
|
// 二维码类库
|
||||||
implementation 'com.google.zxing:core:3.4.1'
|
implementation 'com.google.zxing:core:3.4.1'
|
||||||
@ -63,4 +62,6 @@ dependencies {
|
|||||||
|
|
||||||
// 应用介绍页类库
|
// 应用介绍页类库
|
||||||
//implementation 'io.github.medyo:android-about-page:2.0.0'
|
//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
|
#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
|
stageCount=7
|
||||||
libraryProject=libapputils
|
libraryProject=libapputils
|
||||||
baseVersion=15.0
|
baseVersion=15.0
|
||||||
publishVersion=15.0.6
|
publishVersion=15.0.6
|
||||||
buildCount=0
|
buildCount=1
|
||||||
baseBetaVersion=15.0.7
|
baseBetaVersion=15.0.7
|
||||||
|
@ -77,7 +77,7 @@ public class App extends GlobalApplication {
|
|||||||
mMyActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks();
|
mMyActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks();
|
||||||
registerActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks);
|
registerActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks);
|
||||||
// 设置默认 WinBoll 应用 UI 类型
|
// 设置默认 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());
|
//ToastUtils.show("WinBollUI_TYPE " + getWinBollUI_TYPE());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
||||||
|
@ -36,11 +36,11 @@ final public class MainActivity extends Activity implements IWinBollActivity {
|
|||||||
|
|
||||||
Toolbar mToolbar;
|
Toolbar mToolbar;
|
||||||
LogView mLogView;
|
LogView mLogView;
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public Activity getActivity() {
|
// public Activity getActivity() {
|
||||||
return this;
|
// return this;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public APPInfo getAppInfo() {
|
public APPInfo getAppInfo() {
|
||||||
@ -177,12 +177,12 @@ final public class MainActivity extends Activity implements IWinBollActivity {
|
|||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
super.onPostCreate(savedInstanceState);
|
super.onPostCreate(savedInstanceState);
|
||||||
// 缓存当前 activity
|
// 缓存当前 activity
|
||||||
WinBollActivityManager.getInstance(this).add(this);
|
//WinBollActivityManager.getInstance(this).add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
WinBollActivityManager.getInstance(this).registeRemove(this);
|
//WinBollActivityManager.getInstance(this).registeRemove(this);
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ final public class MainActivity extends Activity implements IWinBollActivity {
|
|||||||
// startActivity(intent);
|
// startActivity(intent);
|
||||||
|
|
||||||
//WinBollActivityManager.getInstance().printAvtivityListInfo();
|
//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());
|
AboutActivityFactory.showAboutActivity(this, getAppInfo());
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.item_teststringtoqrcodeview) {
|
} 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) {
|
} 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);
|
||||||
@ -278,13 +278,13 @@ final public class MainActivity extends Activity implements IWinBollActivity {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.item_log) {
|
} else if (item.getItemId() == R.id.item_log) {
|
||||||
WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
|
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.item_exitdebug) {
|
} else if (item.getItemId() == R.id.item_exitdebug) {
|
||||||
//AboutView.setApp2NormalMode(this);
|
//AboutView.setApp2NormalMode(this);
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == android.R.id.home) {
|
} else if (item.getItemId() == android.R.id.home) {
|
||||||
WinBollActivityManager.getInstance(this).finish(this);
|
//WinBollActivityManager.getInstance(this).finish(this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
@ -301,7 +301,7 @@ final public class MainActivity extends Activity implements IWinBollActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onYes() {
|
public void onYes() {
|
||||||
WinBollActivityManager.getInstance(getApplicationContext()).finishAll();
|
//WinBollActivityManager.getInstance(getApplicationContext()).finishAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -314,12 +314,12 @@ final public class MainActivity extends Activity implements IWinBollActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (WinBollActivityManager.getInstance(getApplicationContext()).isFirstIWinBollActivity(this)) {
|
// if (WinBollActivityManager.getInstance(getApplicationContext()).isFirstIWinBollActivity(this)) {
|
||||||
exit();
|
// exit();
|
||||||
} else {
|
// } else {
|
||||||
WinBollActivityManager.getInstance(this).finish(this);
|
// WinBollActivityManager.getInstance(this).finish(this);
|
||||||
super.onBackPressed();
|
// super.onBackPressed();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onTestAboutActivity(View view) {
|
public void onTestAboutActivity(View view) {
|
||||||
@ -329,7 +329,7 @@ final public class MainActivity extends Activity implements IWinBollActivity {
|
|||||||
public void onTestJavascriptHtmlActivity(View view) {
|
public void onTestJavascriptHtmlActivity(View view) {
|
||||||
Intent intent = new Intent(this, AssetsHtmlActivity.class);
|
Intent intent = new Intent(this, AssetsHtmlActivity.class);
|
||||||
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
|
||||||
|
@ -17,11 +17,11 @@ public class TestStringToQrCodeViewActivity extends Activity implements IWinBoll
|
|||||||
public static final String TAG = "TestStringToQrCodeViewActivity";
|
public static final String TAG = "TestStringToQrCodeViewActivity";
|
||||||
|
|
||||||
StringToQrCodeView mStringToQrCodeView;
|
StringToQrCodeView mStringToQrCodeView;
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public Activity getActivity() {
|
// public Activity getActivity() {
|
||||||
return this;
|
// return this;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public APPInfo getAppInfo() {
|
public APPInfo getAppInfo() {
|
||||||
|
@ -21,7 +21,6 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api fileTree(dir: 'libs', include: ['*.jar'])
|
api fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
implementation 'cc.winboll.studio:libappbase:15.0.5'
|
|
||||||
|
|
||||||
// 二维码类库
|
// 二维码类库
|
||||||
implementation 'com.google.zxing:core:3.4.1'
|
implementation 'com.google.zxing:core:3.4.1'
|
||||||
@ -35,4 +34,9 @@ dependencies {
|
|||||||
|
|
||||||
// SSH
|
// SSH
|
||||||
//implementation 'com.jcraft:jsch:0.1.55'
|
//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
|
#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
|
stageCount=7
|
||||||
libraryProject=libapputils
|
libraryProject=libapputils
|
||||||
baseVersion=15.0
|
baseVersion=15.0
|
||||||
publishVersion=15.0.6
|
publishVersion=15.0.6
|
||||||
buildCount=0
|
buildCount=1
|
||||||
baseBetaVersion=15.0.7
|
baseBetaVersion=15.0.7
|
||||||
|
@ -85,9 +85,9 @@ final public class AboutActivity extends Activity implements IWinBollActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
if (item.getItemId() == R.id.item_help) {
|
// if (item.getItemId() == R.id.item_help) {
|
||||||
WinBollActivityManager.getInstance(this).startWinBollActivity(this, AssetsHtmlActivity.class);
|
// WinBollActivityManager.getInstance(this).startWinBollActivity(this, AssetsHtmlActivity.class);
|
||||||
}
|
// }
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,11 +33,11 @@ public class AssetsHtmlActivity extends Activity implements IWinBollActivity {
|
|||||||
|
|
||||||
// Assets 文件夹里的 Html 文件的名称
|
// Assets 文件夹里的 Html 文件的名称
|
||||||
String mszHtmlFileName;
|
String mszHtmlFileName;
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public Activity getActivity() {
|
// public Activity getActivity() {
|
||||||
return this;
|
// return this;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public APPInfo getAppInfo() {
|
public APPInfo getAppInfo() {
|
||||||
|
@ -19,11 +19,11 @@ public class LogActivity extends Activity implements IWinBollActivity {
|
|||||||
public static final String TAG = "LogActivity";
|
public static final String TAG = "LogActivity";
|
||||||
|
|
||||||
LogView mLogView;
|
LogView mLogView;
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public Activity getActivity() {
|
// public Activity getActivity() {
|
||||||
return this;
|
// return this;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public APPInfo getAppInfo() {
|
public APPInfo getAppInfo() {
|
||||||
|
@ -30,10 +30,10 @@ public class QRCodeDecodeActivity extends Activity implements IWinBollActivity {
|
|||||||
TextView resultTextView;
|
TextView resultTextView;
|
||||||
DecoratedBarcodeView barcodeView;
|
DecoratedBarcodeView barcodeView;
|
||||||
|
|
||||||
@Override
|
// @Override
|
||||||
public Activity getActivity() {
|
// public Activity getActivity() {
|
||||||
return this;
|
// return this;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public APPInfo getAppInfo() {
|
public APPInfo getAppInfo() {
|
||||||
|
@ -49,6 +49,6 @@ public class AboutActivityFactory {
|
|||||||
|
|
||||||
Intent intent = new Intent(context, AboutActivity.class);
|
Intent intent = new Intent(context, AboutActivity.class);
|
||||||
intent.putExtra(AboutActivity.EXTRA_APPINFO, (appInfo == null) ? AboutActivityFactory.buildDefaultAPPInfo():appInfo);
|
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";
|
public static final String TAG = "IWinBollActivity";
|
||||||
|
|
||||||
// 获取应用资源上下文
|
// 获取应用资源上下文
|
||||||
abstract public Context getApplicationContext();
|
//abstract public Context getApplicationContext();
|
||||||
abstract public APPInfo getAppInfo();
|
abstract public APPInfo getAppInfo();
|
||||||
abstract public String getTag();
|
abstract public String getTag();
|
||||||
abstract public Toolbar initToolBar();
|
abstract public Toolbar initToolBar();
|
||||||
|
@ -19,300 +19,300 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class WinBollActivityManager {
|
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;
|
|
||||||
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 static enum WinBollUI_TYPE {
|
||||||
|
// Aplication, // 退出应用后,保持最近任务栏任务记录主窗口
|
||||||
|
// Service // 退出应用后,清理所有最近任务栏任务记录窗口
|
||||||
|
// };
|
||||||
//
|
//
|
||||||
public synchronized static void setWinBollUI_TYPE(WinBollUI_TYPE mWinBollUI_TYPE) {
|
// // 应用类型标志
|
||||||
_mWinBollUI_TYPE = mWinBollUI_TYPE;
|
// volatile static WinBollUI_TYPE _mWinBollUI_TYPE = WinBollUI_TYPE.Service;
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 获取 WinBoll 应用 UI 类型
|
// Context mContext;
|
||||||
|
// MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks;
|
||||||
|
// static WinBollActivityManager _mWinBollActivityManager;
|
||||||
|
// static Map<String, IWinBollActivity> _mapIWinBollList;
|
||||||
|
// IWinBollActivity firstIWinBollActivity;
|
||||||
//
|
//
|
||||||
public synchronized static WinBollUI_TYPE getWinBollUI_TYPE() {
|
// public WinBollActivityManager(Context context) {
|
||||||
return _mWinBollUI_TYPE;
|
// mContext = context;
|
||||||
}
|
// LogUtils.d(TAG, "WinBollActivityManager()");
|
||||||
|
// _mapIWinBollList = new HashMap<String, IWinBollActivity>();
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// 把Activity添加到管理中
|
// 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;
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
public <T extends IWinBollActivity> void add(T iWinBoll) {
|
// //
|
||||||
if (isActive(iWinBoll.getTag())) {
|
// // 设置 WinBoll 应用 UI 类型
|
||||||
LogUtils.d(TAG, String.format("add(...) %s is active.", iWinBoll.getTag()));
|
// //
|
||||||
} else {
|
// public synchronized static void setWinBollUI_TYPE(WinBollUI_TYPE mWinBollUI_TYPE) {
|
||||||
// 设置起始活动窗口,以便最后退出时提问
|
// _mWinBollUI_TYPE = mWinBollUI_TYPE;
|
||||||
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
|
// // 获取 WinBoll 应用 UI 类型
|
||||||
// activity: 不为 null 时,
|
// //
|
||||||
// intent.putExtra 函数 "tag" 参数为 activity.getTag()
|
// public synchronized static WinBollUI_TYPE getWinBollUI_TYPE() {
|
||||||
|
// return _mWinBollUI_TYPE;
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
public <T extends IWinBollActivity> void startWinBollActivity(Context context, Class<T> clazz) {
|
// //
|
||||||
try {
|
// // 把Activity添加到管理中
|
||||||
// 如果窗口已存在就重启窗口
|
// //
|
||||||
String tag = clazz.newInstance().getTag();
|
// public <T extends IWinBollActivity> void add(T iWinBoll) {
|
||||||
if (isActive(tag)) {
|
// if (isActive(iWinBoll.getTag())) {
|
||||||
resumeActivity(context, tag);
|
// LogUtils.d(TAG, String.format("add(...) %s is active.", iWinBoll.getTag()));
|
||||||
return;
|
// } else {
|
||||||
}
|
// // 设置起始活动窗口,以便最后退出时提问
|
||||||
|
// if (firstIWinBollActivity == null && _mapIWinBollList.size() == 0) {
|
||||||
// 新建一个任务窗口
|
// firstIWinBollActivity = iWinBoll;
|
||||||
Intent intent = new Intent(context, clazz);
|
// }
|
||||||
//打开多任务窗口 flags
|
//
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
// // 添加到活动窗口列表
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
// _mapIWinBollList.put(iWinBoll.getTag(), iWinBoll);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
// LogUtils.d(TAG, String.format("Add activity : %s\n_mapActivityList.size() : %d", iWinBoll.getTag(), _mapIWinBollList.size()));
|
||||||
intent.putExtra(EXTRA_TAG, tag);
|
// }
|
||||||
mContext.startActivity(intent);
|
// }
|
||||||
} catch (InstantiationException | IllegalAccessException e) {
|
//
|
||||||
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
//
|
||||||
}
|
// //
|
||||||
}
|
// // activity: 为 null 时,
|
||||||
|
// // intent.putExtra 函数 EXTRA_TAG 参数为 tag
|
||||||
public <T extends IWinBollActivity> void startWinBollActivity(Context context, Intent intent, Class<T> clazz) {
|
// // activity: 不为 null 时,
|
||||||
try {
|
// // intent.putExtra 函数 "tag" 参数为 activity.getTag()
|
||||||
// 如果窗口已存在就重启窗口
|
// //
|
||||||
String tag = clazz.newInstance().getTag();
|
// public <T extends IWinBollActivity> void startWinBollActivity(Context context, Class<T> clazz) {
|
||||||
if (isActive(tag)) {
|
// try {
|
||||||
resumeActivity(context, tag);
|
// // 如果窗口已存在就重启窗口
|
||||||
return;
|
// String tag = clazz.newInstance().getTag();
|
||||||
}
|
// if (isActive(tag)) {
|
||||||
|
// resumeActivity(context, tag);
|
||||||
// 新建一个任务窗口
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 新建一个任务窗口
|
||||||
// Intent intent = new Intent(context, clazz);
|
// Intent intent = new Intent(context, clazz);
|
||||||
//打开多任务窗口 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.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) {
|
||||||
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
public boolean isFirstIWinBollActivity(IWinBollActivity iWinBollActivity) {
|
|
||||||
return firstIWinBollActivity != null && firstIWinBollActivity == iWinBollActivity;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 判断 tag绑定的 MyActivity是否存在
|
// 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;
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
public boolean isActive(String tag) {
|
// // 新建一个任务窗口
|
||||||
//printAvtivityListInfo();
|
// //Intent intent = new Intent(context, clazz);
|
||||||
IWinBollActivity iWinBoll = getIWinBoll(tag);
|
// //打开多任务窗口 flags
|
||||||
if (iWinBoll != null) {
|
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
||||||
LogUtils.d(TAG, "isActive(...) activity != null tag " + tag);
|
// intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
||||||
//ToastUtils.show("activity != null tag " + tag);
|
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
//判断是否为 BaseActivity,如果已经销毁,则移除
|
// intent.putExtra(EXTRA_TAG, tag);
|
||||||
if (iWinBoll.getActivity().isFinishing() || iWinBoll.getActivity().isDestroyed()) {
|
// mContext.startActivity(intent);
|
||||||
_mapIWinBollList.remove(iWinBoll.getTag());
|
// } catch (InstantiationException | IllegalAccessException e) {
|
||||||
//_mWinBollActivityList.remove(activity);
|
// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
||||||
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 boolean isFirstIWinBollActivity(IWinBollActivity iWinBollActivity) {
|
||||||
|
// return firstIWinBollActivity != null && firstIWinBollActivity == iWinBollActivity;
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
public <T extends IWinBollActivity> void resumeActivity(Context context, String tag) {
|
// //
|
||||||
LogUtils.d(TAG, "resumeActivty");
|
// // 判断 tag绑定的 MyActivity是否存在
|
||||||
T iWinBoll = (T)getIWinBoll(tag);
|
// //
|
||||||
//LogUtils.d(TAG, "activity " + activity.getTag());
|
// public boolean isActive(String tag) {
|
||||||
if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) {
|
// //printAvtivityListInfo();
|
||||||
resumeActivity(context, iWinBoll);
|
// 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;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
|
// static IWinBollActivity getIWinBoll(String tag) {
|
||||||
|
// return _mapIWinBollList.get(tag);
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
public <T extends IWinBollActivity> void resumeActivity(Context context, T iWinBoll) {
|
// //
|
||||||
ActivityManager am = (ActivityManager) iWinBoll.getActivity().getSystemService(Context.ACTIVITY_SERVICE);
|
// // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
|
||||||
//返回启动它的根任务(home 或者 MainActivity)
|
// //
|
||||||
Intent intent = new Intent(context, iWinBoll.getClass());
|
// public <T extends IWinBollActivity> void resumeActivity(Context context, String tag) {
|
||||||
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
|
// LogUtils.d(TAG, "resumeActivty");
|
||||||
stackBuilder.addNextIntentWithParentStack(intent);
|
// T iWinBoll = (T)getIWinBoll(tag);
|
||||||
stackBuilder.startActivities();
|
// //LogUtils.d(TAG, "activity " + activity.getTag());
|
||||||
//moveTaskToFront(YourTaskId, 0);
|
// if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) {
|
||||||
LogUtils.d(TAG, "am.moveTaskToFront");
|
// resumeActivity(context, iWinBoll);
|
||||||
//ToastUtils.show("resumeActivity am.moveTaskToFront");
|
// }
|
||||||
am.moveTaskToFront(iWinBoll.getActivity().getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION);
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 结束所有 Activity
|
// //
|
||||||
|
// // 找到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);
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
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
|
// //
|
||||||
|
// // 结束所有 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());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
public <T extends IWinBollActivity> void finish(T iWinBoll) {
|
// //
|
||||||
try {
|
// // 结束指定Activity
|
||||||
if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) {
|
// //
|
||||||
//根据tag 移除 MyActivity
|
// public <T extends IWinBollActivity> void finish(T iWinBoll) {
|
||||||
//String tag= activity.getTag();
|
// try {
|
||||||
//_mWinBollActivityList.remove(tag);
|
// if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) {
|
||||||
//ToastUtils.show("remove");
|
// //根据tag 移除 MyActivity
|
||||||
//ToastUtils.show("_mWinBollActivityArrayMap.size() " + Integer.toString(_mWinBollActivityArrayMap.size()));
|
// //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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 获取窗口队列中的前一个窗口
|
// // 窗口回调规则:
|
||||||
|
// // [] 当前窗口位置 >> 调度出的窗口位置
|
||||||
|
// // ★:[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);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
IWinBollActivity getPreIWinBoll(IWinBollActivity iWinBoll) {
|
// } catch (Exception e) {
|
||||||
try {
|
// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 从管理列表中移除管理项
|
// //
|
||||||
|
// // 获取窗口队列中的前一个窗口
|
||||||
|
// //
|
||||||
|
// 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();
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
public <T extends IWinBollActivity> boolean registeRemove(T activity) {
|
// if (bingo) {
|
||||||
IWinBollActivity iWinBollTest = _mapIWinBollList.get(activity.getTag());
|
// return preIWinBoll;
|
||||||
if (iWinBollTest != null) {
|
// }
|
||||||
_mapIWinBollList.remove(activity.getTag());
|
// } catch (Exception e) {
|
||||||
return true;
|
// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
||||||
}
|
// }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 打印管理列表项列表里的信息
|
// return null;
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
public static void printIWinBollListInfo() {
|
// //
|
||||||
//LogUtils.d(TAG, "printAvtivityListInfo");
|
// // 从管理列表中移除管理项
|
||||||
if (!_mapIWinBollList.isEmpty()) {
|
// //
|
||||||
StringBuilder sb = new StringBuilder("Map entries : " + Integer.toString(_mapIWinBollList.size()));
|
// public <T extends IWinBollActivity> boolean registeRemove(T activity) {
|
||||||
Iterator<Map.Entry<String, IWinBollActivity>> iterator = _mapIWinBollList.entrySet().iterator();
|
// IWinBollActivity iWinBollTest = _mapIWinBollList.get(activity.getTag());
|
||||||
while (iterator.hasNext()) {
|
// if (iWinBollTest != null) {
|
||||||
Map.Entry<String, IWinBollActivity> entry = iterator.next();
|
// _mapIWinBollList.remove(activity.getTag());
|
||||||
sb.append("\nKey: " + entry.getKey() + ", \nValue: " + entry.getValue().getTag());
|
// return true;
|
||||||
//ToastUtils.show("\nKey: " + entry.getKey() + ", Value: " + entry.getValue().getTag());
|
// }
|
||||||
}
|
// return false;
|
||||||
sb.append("\nMap entries end.");
|
// }
|
||||||
LogUtils.d(TAG, sb.toString());
|
//
|
||||||
} else {
|
// //
|
||||||
LogUtils.d(TAG, "The map is empty.");
|
// // 打印管理列表项列表里的信息
|
||||||
}
|
// //
|
||||||
}
|
// 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