Compare commits
7 Commits
appbase-v2
...
apputils-v
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2d71ae088 | ||
|
|
506d2619f2 | ||
|
|
17fa805a7f | ||
|
|
1dcf8cd007 | ||
|
|
d86d50212e | ||
|
|
af2e09c02a | ||
|
|
de6361b19b |
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Sat Jan 18 13:03:10 HKT 2025
|
#Wed Jan 22 17:19:38 HKT 2025
|
||||||
stageCount=2
|
stageCount=3
|
||||||
libraryProject=libapputils
|
libraryProject=libapputils
|
||||||
baseVersion=9.2
|
baseVersion=9.2
|
||||||
publishVersion=9.2.1
|
publishVersion=9.2.2
|
||||||
buildCount=0
|
buildCount=0
|
||||||
baseBetaVersion=9.2.2
|
baseBetaVersion=9.2.3
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import cc.winboll.studio.libapputils.app.WinBollActivityManager;
|
|||||||
import cc.winboll.studio.libapputils.log.LogActivity;
|
import cc.winboll.studio.libapputils.log.LogActivity;
|
||||||
import cc.winboll.studio.libapputils.log.LogUtils;
|
import cc.winboll.studio.libapputils.log.LogUtils;
|
||||||
import com.hjq.toast.ToastUtils;
|
import com.hjq.toast.ToastUtils;
|
||||||
|
import cc.winboll.studio.libapputils.activities.AboutActivity;
|
||||||
|
import cc.winboll.studio.libapputils.bean.APPInfo;
|
||||||
|
|
||||||
final public class MainActivity extends WinBollActivity {
|
final public class MainActivity extends WinBollActivity {
|
||||||
|
|
||||||
@@ -50,10 +52,13 @@ final public class MainActivity extends WinBollActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onLogUtilsClick(View view) {
|
public void onLogUtilsClick(View view) {
|
||||||
Intent intent = new Intent(this, LogActivity.class);
|
// Intent intent = new Intent(this, LogActivity.class);
|
||||||
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);
|
||||||
startActivity(intent);
|
// startActivity(intent);
|
||||||
|
|
||||||
|
//WinBollActivityManager.getInstance().printAvtivityListInfo();
|
||||||
|
WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -159,6 +164,15 @@ final public class MainActivity extends WinBollActivity {
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onTestAboutActivity(View view) {
|
||||||
|
Intent intent = new Intent(this, AboutActivity.class);
|
||||||
|
APPInfo appInfo = new APPInfo();
|
||||||
|
appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll);
|
||||||
|
appInfo.setAppName("Test APP");
|
||||||
|
intent.putExtra(AboutActivity.EXTRA_APPINFO, appInfo);
|
||||||
|
WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AboutActivity.class);
|
||||||
|
}
|
||||||
|
|
||||||
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");
|
||||||
|
|||||||
@@ -54,6 +54,21 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="right">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:text="Test AboutActivity"
|
||||||
|
android:onClick="onTestAboutActivity"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Sat Jan 18 13:02:39 HKT 2025
|
#Wed Jan 22 17:19:38 HKT 2025
|
||||||
stageCount=2
|
stageCount=3
|
||||||
libraryProject=libapputils
|
libraryProject=libapputils
|
||||||
baseVersion=9.2
|
baseVersion=9.2
|
||||||
publishVersion=9.2.1
|
publishVersion=9.2.2
|
||||||
buildCount=0
|
buildCount=0
|
||||||
baseBetaVersion=9.2.2
|
baseBetaVersion=9.2.3
|
||||||
|
|||||||
@@ -1,25 +1,31 @@
|
|||||||
package cc.winboll.studio.libapputils.activities;
|
package cc.winboll.studio.libapputils.activities;
|
||||||
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
import cc.winboll.studio.libapputils.R;
|
|
||||||
import cc.winboll.studio.libapputils.app.WinBollActivity;
|
|
||||||
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
|
|
||||||
import cc.winboll.studio.libapputils.log.LogUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen@QQ.COM
|
* @Author ZhanGSKen@QQ.COM
|
||||||
* @Date 2024/07/14 13:20:33
|
* @Date 2024/07/14 13:20:33
|
||||||
* @Describe AboutFragment Test
|
* @Describe 应用介绍页
|
||||||
*/
|
*/
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import cc.winboll.studio.libapputils.R;
|
||||||
|
import cc.winboll.studio.libapputils.app.WinBollActivity;
|
||||||
|
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
|
||||||
|
import cc.winboll.studio.libapputils.bean.APPInfo;
|
||||||
|
import cc.winboll.studio.libapputils.view.AboutView;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
|
|
||||||
final public class AboutActivity extends WinBollActivity {
|
final public class AboutActivity extends WinBollActivity {
|
||||||
|
|
||||||
public static final String TAG = "AboutActivity";
|
public static final String TAG = "AboutActivity";
|
||||||
|
public static final String EXTRA_APPINFO = "EXTRA_APPINFO";
|
||||||
|
|
||||||
|
|
||||||
|
APPInfo mAPPInfo;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTag() {
|
public String getTag() {
|
||||||
return TAG;
|
return TAG;
|
||||||
@@ -34,21 +40,19 @@ final public class AboutActivity extends WinBollActivity {
|
|||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_about);
|
setContentView(R.layout.activity_about);
|
||||||
|
Intent intent = getIntent();
|
||||||
|
if (intent != null) {
|
||||||
|
mAPPInfo = (APPInfo)intent.getSerializableExtra(EXTRA_APPINFO);
|
||||||
|
}
|
||||||
|
if (mAPPInfo == null) {
|
||||||
|
mAPPInfo = new APPInfo();
|
||||||
|
}
|
||||||
|
|
||||||
/*AboutView aboutView = findViewById(R.id.activityaboutAboutView1);
|
AboutView aboutView = new AboutView(this, mAPPInfo);
|
||||||
aboutView.setOnRequestDevUserInfoAutofillListener(new AboutView.OnRequestDevUserInfoAutofillListener(){
|
LinearLayout llMain = findViewById(R.id.activityaboutLinearLayout1);
|
||||||
|
llMain.addView(aboutView);
|
||||||
@Override
|
|
||||||
public void requestAutofill(EditText etDevUserName, EditText etDevUserPassword) {
|
|
||||||
AutofillManager autofillManager = (AutofillManager) getSystemService(AutofillManager.class);
|
|
||||||
if (autofillManager!= null) {
|
|
||||||
//ToastUtils.show("0");
|
|
||||||
autofillManager.requestAutofill(findViewById(R.id.usernameEditText));
|
|
||||||
autofillManager.requestAutofill(findViewById(R.id.passwordEditText));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});*/
|
|
||||||
|
|
||||||
|
ToastUtils.show(TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -79,9 +83,8 @@ final public class AboutActivity extends WinBollActivity {
|
|||||||
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);
|
||||||
}
|
}
|
||||||
// else if (item.getItemId() == android.R.id.home) {
|
|
||||||
// WinBollActivityManager.getInstance(this).finish(this);
|
|
||||||
// }
|
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -366,10 +366,16 @@ abstract public class WinBollActivity extends AppCompatActivity {
|
|||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
LogUtils.d(TAG, "onOptionsItemSelected");
|
LogUtils.d(TAG, "onOptionsItemSelected");
|
||||||
if (item.getItemId() == R.id.item_log) {
|
if (item.getItemId() == R.id.item_log) {
|
||||||
LogUtils.d(TAG, "item_log not yet.");
|
// LogUtils.d(TAG, "item_log not yet.");
|
||||||
|
// Intent intent = new Intent(this, LogActivity.class);
|
||||||
|
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
||||||
|
// intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
||||||
|
// startActivity(intent);
|
||||||
|
|
||||||
//WinBollActivityManager.getInstance().printAvtivityListInfo();
|
//WinBollActivityManager.getInstance().printAvtivityListInfo();
|
||||||
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
|
WinBollActivityManager.getInstance(this).startWinBollActivity(this, LogActivity.class);
|
||||||
} else if (item.getItemId() == R.id.item_exit) {
|
} else if (item.getItemId() == R.id.item_exit) {
|
||||||
|
//ToastUtils.show("item_exit");
|
||||||
WinBollActivityManager.getInstance(this).finishAll();
|
WinBollActivityManager.getInstance(this).finishAll();
|
||||||
} else if (item.getItemId() == R.id.item_info) {
|
} else if (item.getItemId() == R.id.item_info) {
|
||||||
WinBollApplication application = (WinBollApplication) getApplication();
|
WinBollApplication application = (WinBollApplication) getApplication();
|
||||||
|
|||||||
@@ -20,17 +20,16 @@ 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";
|
||||||
|
|
||||||
Context mContext;
|
Context mContext;
|
||||||
static WinBollActivityManager _mWinBollActivityManager;
|
static WinBollActivityManager _mWinBollActivityManager;
|
||||||
static Map<String, WinBollActivity> _mapActivityList;
|
static Map<String, WinBollActivity> _mapActivityList;
|
||||||
//static ArrayList<WinBollActivity> _mWinBollActivityList;
|
|
||||||
|
|
||||||
public WinBollActivityManager(Context context) {
|
public WinBollActivityManager(Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
LogUtils.d(TAG, "WinBollActivityManager()");
|
LogUtils.d(TAG, "WinBollActivityManager()");
|
||||||
_mapActivityList = new HashMap<String, WinBollActivity>();
|
_mapActivityList = new HashMap<String, WinBollActivity>();
|
||||||
//_mWinBollActivityList = new ArrayList<WinBollActivity>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized WinBollActivityManager getInstance(Context context) {
|
public static synchronized WinBollActivityManager getInstance(Context context) {
|
||||||
@@ -42,19 +41,10 @@ public class WinBollActivityManager {
|
|||||||
return _mWinBollActivityManager;
|
return _mWinBollActivityManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
//
|
||||||
* 把Activity添加到管理中
|
// 把Activity添加到管理中
|
||||||
*/
|
//
|
||||||
public <T extends WinBollActivity> void add(T activity) {
|
public <T extends WinBollActivity> void add(T activity) {
|
||||||
/*for (int i = 0; i < _mWinBollActivityList.size(); i++) {
|
|
||||||
LogUtils.d(TAG, String.format("add for i %d\nget(i).getTag() %s", i, _mWinBollActivityList.get(i).getTag()));
|
|
||||||
if (_mWinBollActivityList.get(i).getTag().equals(activity.getTag())) {
|
|
||||||
_mWinBollActivityList.add(i, activity);
|
|
||||||
_mWinBollActivityList.remove(i);
|
|
||||||
LogUtils.d(TAG, String.format("Replace activity : %s\nSize %d", activity.getTag(), _mWinBollActivityList.size()));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
if (isActive(activity.getTag())) {
|
if (isActive(activity.getTag())) {
|
||||||
LogUtils.d(TAG, String.format("add(...) %s is active.", activity.getTag()));
|
LogUtils.d(TAG, String.format("add(...) %s is active.", activity.getTag()));
|
||||||
} else {
|
} else {
|
||||||
@@ -66,7 +56,7 @@ public class WinBollActivityManager {
|
|||||||
|
|
||||||
//
|
//
|
||||||
// activity: 为 null 时,
|
// activity: 为 null 时,
|
||||||
// intent.putExtra 函数 "tag" 参数为 tag
|
// intent.putExtra 函数 EXTRA_TAG 参数为 tag
|
||||||
// activity: 不为 null 时,
|
// activity: 不为 null 时,
|
||||||
// intent.putExtra 函数 "tag" 参数为 activity.getTag()
|
// intent.putExtra 函数 "tag" 参数为 activity.getTag()
|
||||||
//
|
//
|
||||||
@@ -84,7 +74,7 @@ public class WinBollActivityManager {
|
|||||||
//打开多任务窗口 flags
|
//打开多任务窗口 flags
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
||||||
intent.putExtra("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());
|
||||||
@@ -105,18 +95,18 @@ public class WinBollActivityManager {
|
|||||||
//打开多任务窗口 flags
|
//打开多任务窗口 flags
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
||||||
intent.putExtra("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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
//
|
||||||
* 判断 tag绑定的 MyActivity是否存在
|
// 判断 tag绑定的 MyActivity是否存在
|
||||||
*/
|
//
|
||||||
public boolean isActive(String tag) {
|
public boolean isActive(String tag) {
|
||||||
printAvtivityListInfo();
|
//printAvtivityListInfo();
|
||||||
WinBollActivity activity = getWinBollActivity(tag);
|
WinBollActivity activity = getWinBollActivity(tag);
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
LogUtils.d(TAG, "isActive(...) activity != null tag " + tag);
|
LogUtils.d(TAG, "isActive(...) activity != null tag " + tag);
|
||||||
@@ -141,21 +131,21 @@ public class WinBollActivityManager {
|
|||||||
return _mapActivityList.get(tag);
|
return _mapActivityList.get(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
//
|
||||||
* 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
|
// 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
|
||||||
*/
|
//
|
||||||
public <T extends WinBollActivity> void resumeActivity(Context context, String tag) {
|
public <T extends WinBollActivity> void resumeActivity(Context context, String tag) {
|
||||||
LogUtils.d(TAG, "resumeActivty");
|
LogUtils.d(TAG, "resumeActivty");
|
||||||
T activity = (T)getWinBollActivity(tag);
|
T activity = (T)getWinBollActivity(tag);
|
||||||
LogUtils.d(TAG, "activity " + activity.getTag());
|
//LogUtils.d(TAG, "activity " + activity.getTag());
|
||||||
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
|
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
|
||||||
resumeActivity(context, activity);
|
resumeActivity(context, activity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
//
|
||||||
* 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
|
// 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
|
||||||
*/
|
//
|
||||||
public <T extends WinBollActivity> void resumeActivity(Context context, T activity) {
|
public <T extends WinBollActivity> void resumeActivity(Context context, T activity) {
|
||||||
ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
|
ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
|
||||||
//返回启动它的根任务(home 或者 MainActivity)
|
//返回启动它的根任务(home 或者 MainActivity)
|
||||||
@@ -170,39 +160,39 @@ public class WinBollActivityManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
//
|
||||||
* 结束所有 Activity
|
// 结束所有 Activity
|
||||||
*/
|
//
|
||||||
public void finishAll() {
|
public void finishAll() {
|
||||||
try {
|
try {
|
||||||
LogUtils.d(TAG, "finishAll no yet.");
|
for (String key : _mapActivityList.keySet()) {
|
||||||
//ToastUtils.show(String.format("finishAll() size : %d", _mWinBollActivityList.size()));
|
//System.out.println("Key: " + key + ", Value: " + _mapActivityList.get(key));
|
||||||
// for (int i = _mWinBollActivityList.size() - 1; i > -1; i--) {
|
WinBollActivity activity = _mapActivityList.get(key);
|
||||||
// WinBollActivity activity = _mWinBollActivityList.get(i);
|
//ToastUtils.show("finishAll() activity");
|
||||||
// ToastUtils.show("finishAll() activity");
|
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
|
||||||
// if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
|
//ToastUtils.show("activity != null ...");
|
||||||
// //ToastUtils.show("activity != null ...");
|
if (WinBollApplication.getWinBollUI_TYPE() == WinBollApplication.WinBollUI_TYPE.Service) {
|
||||||
// if (WinBollApplication.getWinBollUI_TYPE() == WinBollApplication.WinBollUI_TYPE.Service) {
|
// 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。
|
||||||
// // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。
|
activity.finishAndRemoveTask();
|
||||||
// activity.finishAndRemoveTask();
|
//ToastUtils.show("finishAll() activity.finishAndRemoveTask();");
|
||||||
// //ToastUtils.show("finishAll() activity.finishAndRemoveTask();");
|
} else if (WinBollApplication.getWinBollUI_TYPE() == WinBollApplication.WinBollUI_TYPE.Aplication) {
|
||||||
// } else if (WinBollApplication.getWinBollUI_TYPE() == WinBollApplication.WinBollUI_TYPE.Aplication) {
|
// 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。
|
||||||
// // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。
|
activity.finish();
|
||||||
// activity.finish();
|
//ToastUtils.show("finishAll() activity.finish();");
|
||||||
// //ToastUtils.show("finishAll() activity.finish();");
|
} else {
|
||||||
// } else {
|
LogUtils.d(TAG, "WinBollApplication.WinBollUI_TYPE error.");
|
||||||
// ToastUtils.show("WinBollApplication.WinBollUI_TYPE error.");
|
//ToastUtils.show("WinBollApplication.WinBollUI_TYPE error.");
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
//
|
||||||
* 结束指定Activity
|
// 结束指定Activity
|
||||||
*/
|
//
|
||||||
public <T extends WinBollActivity> void finish(T activity) {
|
public <T extends WinBollActivity> void finish(T activity) {
|
||||||
try {
|
try {
|
||||||
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
|
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
|
||||||
@@ -225,22 +215,6 @@ public class WinBollActivityManager {
|
|||||||
if (preActivity != null) {
|
if (preActivity != null) {
|
||||||
resumeActivity(mContext, preActivity);
|
resumeActivity(mContext, preActivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
// for (int i = 0; i < _mWinBollActivityList.size(); i++) {
|
|
||||||
// if (_mWinBollActivityList.get(i).getTag().equals(activity.getTag())) {
|
|
||||||
// //ToastUtils.show(String.format("equals i : %d\nTag : %s\nSize : %d", i, activity.getTag(), _mWinBollActivityList.size()));
|
|
||||||
// if (i == 0) {
|
|
||||||
// finishAll();
|
|
||||||
// //ToastUtils.show("finish finishAll");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// if (i > 0) {
|
|
||||||
// activity.finish();
|
|
||||||
// resumeActivity(mContext, _mWinBollActivityList.get(i - 1));
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -248,6 +222,9 @@ public class WinBollActivityManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// 获取窗口队列中的前一个窗口
|
||||||
|
//
|
||||||
WinBollActivity getPreActivity(WinBollActivity activity) {
|
WinBollActivity getPreActivity(WinBollActivity activity) {
|
||||||
try {
|
try {
|
||||||
boolean bingo = false;
|
boolean bingo = false;
|
||||||
@@ -271,12 +248,10 @@ public class WinBollActivityManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// 从管理列表中移除管理项
|
||||||
|
//
|
||||||
public <T extends WinBollActivity> boolean registeRemove(T activity) {
|
public <T extends WinBollActivity> boolean registeRemove(T activity) {
|
||||||
// for (int i = 0; i < _mWinBollActivityList.size(); i++) {
|
|
||||||
// if (registeRemove(activity, i)) {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
WinBollActivity activityTest = _mapActivityList.get(activity.getTag());
|
WinBollActivity activityTest = _mapActivityList.get(activity.getTag());
|
||||||
if (activityTest != null) {
|
if (activityTest != null) {
|
||||||
_mapActivityList.remove(activity.getTag());
|
_mapActivityList.remove(activity.getTag());
|
||||||
@@ -285,15 +260,9 @@ public class WinBollActivityManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public <T extends WinBollActivity> boolean registeRemove(T activity, int position) {
|
//
|
||||||
// if (_mWinBollActivityList.get(position) == activity) {
|
// 打印管理列表项列表里的信息
|
||||||
// _mWinBollActivityList.remove(position);
|
//
|
||||||
// //ToastUtils.show(String.format("registeRemove remove.\nTag %s\nposition %d", activity.getTag(), position));
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
public static void printAvtivityListInfo() {
|
public static void printAvtivityListInfo() {
|
||||||
//LogUtils.d(TAG, "printAvtivityListInfo");
|
//LogUtils.d(TAG, "printAvtivityListInfo");
|
||||||
if (!_mapActivityList.isEmpty()) {
|
if (!_mapActivityList.isEmpty()) {
|
||||||
@@ -310,6 +279,4 @@ public class WinBollActivityManager {
|
|||||||
LogUtils.d(TAG, "The map is empty.");
|
LogUtils.d(TAG, "The map is empty.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
package cc.winboll.studio.libapputils.bean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ZhanGSKen@QQ.COM
|
||||||
|
* @Date 2025/01/20 14:19:02
|
||||||
|
* @Describe 应用信息类
|
||||||
|
*/
|
||||||
|
import cc.winboll.studio.libapputils.R;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class APPInfo implements Serializable {
|
||||||
|
|
||||||
|
public static final String TAG = "APPInfo";
|
||||||
|
|
||||||
|
// 应用名称
|
||||||
|
String appName;
|
||||||
|
// 应用图标
|
||||||
|
int appIcon;
|
||||||
|
// 应用描述
|
||||||
|
String appDescription;
|
||||||
|
// 应用Git仓库地址
|
||||||
|
String appGitName;
|
||||||
|
// 应用主页
|
||||||
|
String appHomePage;
|
||||||
|
// 应用包名称
|
||||||
|
String appAPKName;
|
||||||
|
// 应用包存储文件夹名称
|
||||||
|
String appAPKFolderName;
|
||||||
|
|
||||||
|
public APPInfo(String appName, int appIcon, String appDescription, String appGitName, String appHomePage, String appAPKName, String appAPKFolderName) {
|
||||||
|
this.appName = appName;
|
||||||
|
this.appIcon = appIcon;
|
||||||
|
this.appDescription = appDescription;
|
||||||
|
this.appGitName = appGitName;
|
||||||
|
this.appHomePage = appHomePage;
|
||||||
|
this.appAPKName = appAPKName;
|
||||||
|
this.appAPKFolderName = appAPKFolderName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public APPInfo() {
|
||||||
|
this.appName = "WinBoll-APP";
|
||||||
|
this.appIcon = R.drawable.ic_launcher;
|
||||||
|
this.appDescription = "WinBoll APP";
|
||||||
|
this.appGitName = "APP";
|
||||||
|
this.appHomePage = "https://www.winboll.cc/studio/details.php?app=APP";
|
||||||
|
this.appAPKName = "APP";
|
||||||
|
this.appAPKFolderName = "APP";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppIcon(int appIcon) {
|
||||||
|
this.appIcon = appIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAppIcon() {
|
||||||
|
return appIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppDescription(String appDescription) {
|
||||||
|
this.appDescription = appDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppDescription() {
|
||||||
|
return appDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppAPKFolderName(String appAPKFolderName) {
|
||||||
|
this.appAPKFolderName = appAPKFolderName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppAPKFolderName() {
|
||||||
|
return appAPKFolderName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppName(String appName) {
|
||||||
|
this.appName = appName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppName() {
|
||||||
|
return appName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppGitName(String appGitName) {
|
||||||
|
this.appGitName = appGitName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppGitName() {
|
||||||
|
return appGitName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppHomePage(String appHomePage) {
|
||||||
|
this.appHomePage = appHomePage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppHomePage() {
|
||||||
|
return appHomePage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppAPKName(String appAPKName) {
|
||||||
|
this.appAPKName = appAPKName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppAPKName() {
|
||||||
|
return appAPKName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,30 +1,41 @@
|
|||||||
package cc.winboll.studio.libapputils.log;
|
package cc.winboll.studio.libapputils.log;
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
import cc.winboll.studio.libapputils.R;
|
|
||||||
import cc.winboll.studio.libapputils.app.WinBollActivity;
|
|
||||||
import cc.winboll.studio.libapputils.ads.ADsView;
|
|
||||||
import cc.winboll.studio.libapputils.app.WinBollApplication;
|
|
||||||
import android.view.View;
|
|
||||||
import android.app.Activity;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen@QQ.COM
|
* @Author ZhanGSKen@QQ.COM
|
||||||
* @Date 2024/08/12 15:07:58
|
* @Date 2024/08/12 15:07:58
|
||||||
* @Describe WinBoll 应用日志窗口
|
* @Describe WinBoll 应用日志窗口
|
||||||
*/
|
*/
|
||||||
public class LogActivity extends Activity {
|
import android.os.Bundle;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import cc.winboll.studio.libapputils.R;
|
||||||
|
import cc.winboll.studio.libapputils.app.WinBollActivity;
|
||||||
|
import cc.winboll.studio.libapputils.app.WinBollApplication;
|
||||||
|
|
||||||
|
public class LogActivity extends WinBollActivity {
|
||||||
|
|
||||||
public static final String TAG = "LogActivity";
|
public static final String TAG = "LogActivity";
|
||||||
|
|
||||||
LogView mLogView;
|
LogView mLogView;
|
||||||
//ADsView mADsView;
|
|
||||||
|
|
||||||
// @Override
|
@Override
|
||||||
// protected boolean isEnableDisplayHomeAsUp() {
|
public String getTag() {
|
||||||
// return false;
|
return TAG;
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Toolbar initToolBar() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isEnableDisplayHomeAsUp() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isAddWinBollToolBar() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -32,12 +43,8 @@ public class LogActivity extends Activity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_log);
|
setContentView(R.layout.activity_log);
|
||||||
mLogView = findViewById(R.id.logview);
|
mLogView = findViewById(R.id.logview);
|
||||||
//mADsView = findViewById(R.id.adsview);
|
|
||||||
//mADsView.loadUrl("https://www.winboll.cc");
|
|
||||||
//mLogView.setVisibility(WinBollApplication.isDebug()?View.GONE:View.VISIBLE);
|
|
||||||
//mADsView.setVisibility(WinBollApplication.isDebug()?View.GONE:View.VISIBLE);
|
|
||||||
|
|
||||||
if(WinBollApplication.isDebug()) { mLogView.start(); }
|
if (WinBollApplication.isDebug()) { mLogView.start(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -46,21 +53,4 @@ public class LogActivity extends Activity {
|
|||||||
super.onResume();
|
super.onResume();
|
||||||
mLogView.start();
|
mLogView.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
|
||||||
// protected boolean isAddWinBollToolBar() {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// protected Toolbar initToolBar() {
|
|
||||||
// LogUtils.d(TAG, "initToolBar");
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public String getTag() {
|
|
||||||
// LogUtils.d(TAG, "getTag");
|
|
||||||
// return TAG;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import cc.winboll.studio.libapputils.R;
|
|||||||
import cc.winboll.studio.libapputils.app.AppVersionUtils;
|
import cc.winboll.studio.libapputils.app.AppVersionUtils;
|
||||||
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
|
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
|
||||||
import cc.winboll.studio.libapputils.app.WinBollApplication;
|
import cc.winboll.studio.libapputils.app.WinBollApplication;
|
||||||
|
import cc.winboll.studio.libapputils.bean.APPInfo;
|
||||||
import cc.winboll.studio.libapputils.bean.DebugBean;
|
import cc.winboll.studio.libapputils.bean.DebugBean;
|
||||||
import cc.winboll.studio.libapputils.log.LogUtils;
|
import cc.winboll.studio.libapputils.log.LogUtils;
|
||||||
import cc.winboll.studio.libapputils.util.PrefUtils;
|
import cc.winboll.studio.libapputils.util.PrefUtils;
|
||||||
@@ -41,6 +42,8 @@ public class AboutView extends LinearLayout {
|
|||||||
public static final int MSG_APPUPDATE_CHECKED = 0;
|
public static final int MSG_APPUPDATE_CHECKED = 0;
|
||||||
|
|
||||||
Context mContext;
|
Context mContext;
|
||||||
|
APPInfo mAPPInfo;
|
||||||
|
|
||||||
WinBollServiceStatusView mWinBollServiceStatusView;
|
WinBollServiceStatusView mWinBollServiceStatusView;
|
||||||
OnRequestDevUserInfoAutofillListener mOnRequestDevUserInfoAutofillListener;
|
OnRequestDevUserInfoAutofillListener mOnRequestDevUserInfoAutofillListener;
|
||||||
String mszAppName = "";
|
String mszAppName = "";
|
||||||
@@ -59,23 +62,46 @@ public class AboutView extends LinearLayout {
|
|||||||
EditText metDevUserName;
|
EditText metDevUserName;
|
||||||
EditText metDevUserPassword;
|
EditText metDevUserPassword;
|
||||||
|
|
||||||
|
public AboutView(Context context, APPInfo appInfo) {
|
||||||
|
super(context);
|
||||||
|
setAPPInfo(appInfo);
|
||||||
|
initView(context);
|
||||||
|
}
|
||||||
|
|
||||||
public AboutView(Context context, AttributeSet attrs) {
|
public AboutView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
initView(context, attrs);
|
initView(context, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initView(Context context, AttributeSet attrs) {
|
public void setAPPInfo(APPInfo appInfo) {
|
||||||
mContext = context;
|
mAPPInfo = appInfo;
|
||||||
mszWinBollServerHost = WinBollApplication.isDebug() ? "http://10.8.0.13": "https://www.winboll.cc";
|
}
|
||||||
|
|
||||||
|
APPInfo createAppInfo(Context context, AttributeSet attrs) {
|
||||||
|
APPInfo appInfo = new APPInfo();
|
||||||
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AboutView);
|
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AboutView);
|
||||||
mszAppName = typedArray.getString(R.styleable.AboutView_app_name);
|
appInfo.setAppName(typedArray.getString(R.styleable.AboutView_app_name));
|
||||||
mszAppAPKFolderName = typedArray.getString(R.styleable.AboutView_app_apkfoldername);
|
appInfo.setAppAPKFolderName(typedArray.getString(R.styleable.AboutView_app_apkfoldername));
|
||||||
mszAppAPKName = typedArray.getString(R.styleable.AboutView_app_apkname);
|
appInfo.setAppAPKName(typedArray.getString(R.styleable.AboutView_app_apkname));
|
||||||
mszAppGitName = typedArray.getString(R.styleable.AboutView_app_gitname);
|
appInfo.setAppGitName(typedArray.getString(R.styleable.AboutView_app_gitname));
|
||||||
mszAppDescription = typedArray.getString(R.styleable.AboutView_appdescription);
|
appInfo.setAppDescription(typedArray.getString(R.styleable.AboutView_appdescription));
|
||||||
mnAppIcon = typedArray.getResourceId(R.styleable.AboutView_appicon, R.drawable.ic_winboll);
|
appInfo.setAppIcon(typedArray.getResourceId(R.styleable.AboutView_appicon, R.drawable.ic_winboll));
|
||||||
// 返回一个绑定资源结束的信号给资源
|
// 返回一个绑定资源结束的信号给资源
|
||||||
typedArray.recycle();
|
typedArray.recycle();
|
||||||
|
return appInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
void initView(Context context) {
|
||||||
|
mContext = context;
|
||||||
|
|
||||||
|
mszAppName = mAPPInfo.getAppName();
|
||||||
|
mszAppAPKFolderName = mAPPInfo.getAppAPKFolderName();
|
||||||
|
mszAppAPKName = mAPPInfo.getAppAPKName();
|
||||||
|
mszAppGitName = mAPPInfo.getAppGitName();
|
||||||
|
mszAppDescription = mAPPInfo.getAppDescription();
|
||||||
|
mnAppIcon = mAPPInfo.getAppIcon();
|
||||||
|
|
||||||
|
mszWinBollServerHost = WinBollApplication.isDebug() ? "http://10.8.0.13": "https://www.winboll.cc";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName;
|
mszAppVersionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName;
|
||||||
@@ -131,6 +157,11 @@ public class AboutView extends LinearLayout {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initView(Context context, AttributeSet attrs) {
|
||||||
|
mAPPInfo = createAppInfo(context, attrs);
|
||||||
|
initView(context);
|
||||||
|
}
|
||||||
|
|
||||||
public static String subBetaSuffix(String input) {
|
public static String subBetaSuffix(String input) {
|
||||||
if (input.endsWith(".beta")) {
|
if (input.endsWith(".beta")) {
|
||||||
return input.substring(0, input.length() - ".beta".length());
|
return input.substring(0, input.length() - ".beta".length());
|
||||||
|
|||||||
@@ -1,25 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<androidx.appcompat.widget.Toolbar
|
<androidx.appcompat.widget.Toolbar
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/activityaboutToolbar1"/>
|
android:id="@+id/activityaboutToolbar1"/>
|
||||||
|
|
||||||
<cc.winboll.studio.libapputils.view.AboutView
|
<LinearLayout
|
||||||
app:app_name= "APP"
|
android:orientation="vertical"
|
||||||
app:app_apkfoldername="APP"
|
android:layout_width="match_parent"
|
||||||
app:app_apkname="APP"
|
android:layout_height="0dp"
|
||||||
app:app_gitname="APP"
|
android:layout_weight="1.0"
|
||||||
app:appdescription="WinBoll.CC 网站客户端。"
|
android:id="@+id/activityaboutLinearLayout1"/>
|
||||||
app:appicon="@drawable/ic_winboll"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:id="@+id/activityaboutAboutView1"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
app:cardElevation="4dp"
|
app:cardElevation="4dp"
|
||||||
app:cardCornerRadius="4dp"
|
app:cardCornerRadius="4dp"
|
||||||
android:id="@+id/listviewauthinfoCardView1"
|
android:id="@+id/listviewauthinfoCardView1"
|
||||||
android:layout_marginLeft="10dp"
|
android:layout_marginLeft="0dp"
|
||||||
android:layout_marginRight="10dp">
|
android:layout_marginRight="5dp">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="24dp"
|
android:layout_height="24dp"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
android:id="@+id/viewlogtagTextView1"/>
|
android:id="@+id/viewlogtagTextView1"/>
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
|
|||||||
Reference in New Issue
Block a user