From dd041e5d78552bb31b34cf75e3d02954ad11c1f0 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 5 Feb 2025 10:37:54 +0800 Subject: [PATCH] =?UTF-8?q?WinBollActivity=20=E7=B1=BB=E5=9E=8B=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apputils/build.properties | 4 +- .../java/cc/winboll/studio/apputils/App.java | 1 - .../winboll/studio/apputils/MainActivity.java | 81 ++--- .../TestStringToQrCodeViewActivity.java | 19 +- .../studio/apputils/TestWinBollActivity.java | 25 +- libapputils/build.properties | 4 +- .../libapputils/activities/AboutActivity.java | 26 +- .../activities/AssetsHtmlActivity.java | 23 +- .../activities/QRCodeDecodeActivity.java | 15 +- .../libapputils/app/BaseWinBollActivity.java | 321 ++++++++++++++++++ .../studio/libapputils/app/IWinBoll.java | 21 -- .../libapputils/app/IWinBollActivity.java | 233 +------------ .../app/WinBollActivityManager.java | 67 ++-- .../libapputils/app/WinBollFactory.java | 6 +- .../studio/libapputils/log/LogActivity.java | 7 +- libapputils/src/main/res/values/strings.xml | 2 +- 16 files changed, 452 insertions(+), 403 deletions(-) create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/BaseWinBollActivity.java delete mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBoll.java diff --git a/apputils/build.properties b/apputils/build.properties index a4e8992..7e8705b 100644 --- a/apputils/build.properties +++ b/apputils/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 04:18:10 GMT 2025 +#Wed Feb 05 02:35:15 GMT 2025 stageCount=1 libraryProject=libapputils baseVersion=9.3 publishVersion=9.3.0 -buildCount=21 +buildCount=58 baseBetaVersion=9.3.1 diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/App.java b/apputils/src/main/java/cc/winboll/studio/apputils/App.java index d0fbcf1..d297d7b 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/App.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/App.java @@ -19,5 +19,4 @@ public class App extends WinBollGlobalApplication { super.onCreate(); //Toast.makeText(getApplication(), "Toast Test", Toast.LENGTH_SHORT).show(); } - } diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java index b6ce025..0d25d22 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java @@ -8,29 +8,28 @@ import android.view.View; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.apputils.R; import cc.winboll.studio.libapputils.activities.AboutActivity; import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity; import cc.winboll.studio.libapputils.activities.QRCodeDecodeActivity; -import cc.winboll.studio.libapputils.app.IWinBoll; +import cc.winboll.studio.libapputils.app.BaseWinBollActivity; +import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.WinBollActivityManager; +import cc.winboll.studio.libapputils.app.WinBollFactory; import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.log.LogActivity; import cc.winboll.studio.libapputils.log.LogUtils; +import cc.winboll.studio.libapputils.view.YesNoAlertDialog; import com.hjq.toast.ToastUtils; -import cc.winboll.studio.libapputils.app.WinBollFactory; -import cc.winboll.studio.libapputils.app.IWinBollActivity; - -final public class MainActivity extends AppCompatActivity implements IWinBoll { +final public class MainActivity extends BaseWinBollActivity implements IWinBollActivity { public static final String TAG = "MainActivity"; - - IWinBollActivity mIWinBollActivity; public static final int REQUEST_QRCODEDECODE_ACTIVITY = 0; @Override - public AppCompatActivity getCurrentAppCompatActivity() { + public AppCompatActivity getActivity() { return this; } @@ -41,7 +40,6 @@ final public class MainActivity extends AppCompatActivity implements IWinBoll { @Override public boolean isAddWinBollToolBar() { - ToastUtils.show(String.format("%s isAddWinBollToolBar()", TAG)); return true; } @@ -49,7 +47,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBoll { public Toolbar initToolBar() { return findViewById(R.id.activitymainToolbar1); } - + @Override public boolean isEnableDisplayHomeAsUp() { return false; @@ -57,13 +55,9 @@ final public class MainActivity extends AppCompatActivity implements IWinBoll { @Override protected void onCreate(Bundle savedInstanceState) { - //ToastUtils.show("onCreate"); - mIWinBollActivity = WinBollFactory.buildWinBollActivity(this); - mIWinBollActivity.onCreate(savedInstanceState); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - //ToastUtils.show("setContentView"); - + Toolbar toolbar = findViewById(R.id.activitymainToolbar1); setSupportActionBar(toolbar); @@ -93,31 +87,10 @@ final public class MainActivity extends AppCompatActivity implements IWinBoll { } @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); -// setSubTitle(""); + protected String getAppName() { + return getString(R.string.app_name); } - - @Override - public void onBackPressed() { -// exit(); - } - -// void exit() { -// YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){ -// -// @Override -// public void onYes() { -// WinBollActivityManager.getInstance(getApplicationContext()).finishAll(); -// } -// -// @Override -// public void onNo() { -// } -// }; -// YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener); -// } - + // // 处理传入的 Intent 数据 // @@ -161,12 +134,10 @@ final public class MainActivity extends AppCompatActivity implements IWinBoll { return true; } - @Override public boolean onCreateOptionsMenu(Menu menu) { //ToastUtils.show("onCreateOptionsMenu"); getMenuInflater().inflate(R.menu.toolbar_main, menu); - mIWinBollActivity.inflateWinBollMenu(menu); return super.onCreateOptionsMenu(menu); } @@ -179,15 +150,13 @@ final public class MainActivity extends AppCompatActivity implements IWinBoll { } else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) { Intent intent = new Intent(this, QRCodeDecodeActivity.class); startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY); - } else if(item.getItemId() == R.id.item_about) { + } else if (item.getItemId() == R.id.item_about) { openAboutActivity(); return true; - } else if(mIWinBollActivity.onOptionsItemSelected(item)) { - return true; } return super.onOptionsItemSelected(item); } - + void openAboutActivity() { Intent intent = new Intent(this, AboutActivity.class); APPInfo appInfo = new APPInfo(); @@ -204,8 +173,8 @@ final public class MainActivity extends AppCompatActivity implements IWinBoll { intent.putExtra(AboutActivity.EXTRA_APPINFO, appInfo); WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AboutActivity.class); } - - + + public void onTestAboutActivity(View view) { //ToastUtils.show("onTestAboutActivity"); openAboutActivity(); @@ -216,19 +185,21 @@ final public class MainActivity extends AppCompatActivity implements IWinBoll { intent.putExtra(AssetsHtmlActivity.EXTRA_HTMLFILENAME, "javascript_test.html"); WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AssetsHtmlActivity.class); } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { + + /*@Override + protected void onActivithyResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_QRCODEDECODE_ACTIVITY : { - String text = data.getStringExtra(QRCodeDecodeActivity.EXTRA_RESULT); - ToastUtils.show(text); + if (data != null) { + String text = data.getStringExtra(QRCodeDecodeActivity.EXTRA_RESULT); + ToastUtils.show(text); + } break; } default : { - ToastUtils.show(String.format("%d, %d", requestCode, resultCode)); - super.onActivityResult(requestCode, resultCode, data); + //ToastUtils.show(String.format("%d, %d", requestCode, resultCode)); + super.prosessActivityResult(requestCode, resultCode, data); } } - } + }*/ } diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java index 7459bf5..2cceed2 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java @@ -3,25 +3,26 @@ package cc.winboll.studio.apputils; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.libapputils.app.IWinBoll; +import cc.winboll.studio.libapputils.app.BaseWinBollActivity; +import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.view.StringToQrCodeView; /** * @Author ZhanGSKen@QQ.COM * @Date 2025/01/17 19:50:46 */ -public class TestStringToQrCodeViewActivity extends AppCompatActivity implements IWinBoll { +public class TestStringToQrCodeViewActivity extends BaseWinBollActivity implements IWinBollActivity { + - public static final String TAG = "TestStringToQrCodeViewActivity"; - + StringToQrCodeView mStringToQrCodeView; @Override - public AppCompatActivity getCurrentAppCompatActivity() { + public AppCompatActivity getActivity() { return this; } - + @Override public String getTag() { return TAG; @@ -48,10 +49,4 @@ public class TestStringToQrCodeViewActivity extends AppCompatActivity implements setContentView(R.layout.activity_teststringtoqrcodeview); mStringToQrCodeView = findViewById(R.id.activityteststringtoqrcodeviewStringToQrCodeView1); } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - //setSubTitle(TAG); - } } diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java index 9492f9f..a9c343d 100644 --- a/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java +++ b/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java @@ -1,23 +1,24 @@ package cc.winboll.studio.apputils; -import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.libapputils.app.IWinBoll; - /** * @Author ZhanGSKen@QQ.COM * @Date 2025/01/13 15:09:46 */ -public class TestWinBollActivity extends AppCompatActivity implements IWinBoll { +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.libapputils.app.BaseWinBollActivity; +import cc.winboll.studio.libapputils.app.IWinBollActivity; + +public class TestWinBollActivity extends BaseWinBollActivity implements IWinBollActivity { public static final String TAG = "TestWinBollActivity"; @Override - public AppCompatActivity getCurrentAppCompatActivity() { + public AppCompatActivity getActivity() { return this; } - + @Override public String getTag() { return TAG; @@ -43,12 +44,4 @@ public class TestWinBollActivity extends AppCompatActivity implements IWinBoll { super.onCreate(savedInstanceState); setContentView(R.layout.activity_testwinboll); } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - //setSubTitle(TAG); - } - - } diff --git a/libapputils/build.properties b/libapputils/build.properties index a4e8992..7e8705b 100644 --- a/libapputils/build.properties +++ b/libapputils/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 04:18:10 GMT 2025 +#Wed Feb 05 02:35:15 GMT 2025 stageCount=1 libraryProject=libapputils baseVersion=9.3 publishVersion=9.3.0 -buildCount=21 +buildCount=58 baseBetaVersion=9.3.1 diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java index d5626c8..fe73304 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java @@ -13,25 +13,27 @@ import android.widget.LinearLayout; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.app.IWinBoll; +import cc.winboll.studio.libapputils.app.BaseWinBollActivity; +import cc.winboll.studio.libapputils.app.IWinBollActivity; 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 AppCompatActivity implements IWinBoll { +final public class AboutActivity extends BaseWinBollActivity implements IWinBollActivity { public static final String TAG = "AboutActivity"; + public static final String EXTRA_APPINFO = "EXTRA_APPINFO"; APPInfo mAPPInfo; @Override - public AppCompatActivity getCurrentAppCompatActivity() { + public AppCompatActivity getActivity() { return this; } - + @Override public String getTag() { return TAG; @@ -51,7 +53,7 @@ final public class AboutActivity extends AppCompatActivity implements IWinBoll { public Toolbar initToolBar() { return findViewById(R.id.activityaboutToolbar1); } - + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -63,28 +65,20 @@ final public class AboutActivity extends AppCompatActivity implements IWinBoll { if (mAPPInfo == null) { mAPPInfo = new APPInfo(); } - + AboutView aboutView = new AboutView(this, mAPPInfo); LinearLayout llMain = findViewById(R.id.activityaboutLinearLayout1); llMain.addView(aboutView); - + ToastUtils.show(TAG); } - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - //setSubTitle(TAG); - } - - @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_winboll_shared_about, menu); return super.onCreateOptionsMenu(menu); } - @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.item_help) { @@ -92,6 +86,4 @@ final public class AboutActivity extends AppCompatActivity implements IWinBoll { } return super.onOptionsItemSelected(item); } - - } diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java index 532e7f0..1512e07 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java @@ -11,24 +11,22 @@ import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; +import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libapputils.R; +import cc.winboll.studio.libapputils.app.BaseWinBollActivity; import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.log.LogUtils; import cc.winboll.studio.libapputils.view.SimpleWebView; -import com.hjq.toast.ToastUtils; import java.io.IOException; import java.io.InputStream; -import android.os.PersistableBundle; -import androidx.appcompat.app.AppCompatActivity; -import cc.winboll.studio.libapputils.app.IWinBoll; -public class AssetsHtmlActivity extends AppCompatActivity implements IWinBoll { +public class AssetsHtmlActivity extends BaseWinBollActivity implements IWinBollActivity { public static final String TAG = "AssetsHtmlActivity"; - + public static final String EXTRA_HTMLFILENAME = "EXTRA_HTMLFILENAME"; - + String mszHelpIndexFilePath = ""; Uri mszHelpIndexFileUri; Context mContext; @@ -37,10 +35,10 @@ public class AssetsHtmlActivity extends AppCompatActivity implements IWinBoll { String mszHtmlFileName; @Override - public AppCompatActivity getCurrentAppCompatActivity() { + public AppCompatActivity getActivity() { return this; } - + @Override public String getTag() { return TAG; @@ -114,13 +112,6 @@ public class AssetsHtmlActivity extends AppCompatActivity implements IWinBoll { // myWebView.loadUrl(mszHelpIndexFileUri.toString()); } - @Override - public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) { - super.onPostCreate(savedInstanceState, persistentState); - //setSubTitle(mszHtmlFileName); - //setSubTitle(TAG); - } - // void initWebViewFromAssets(String szHtmlFileName) { try { diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java index b7627b2..b12edf7 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java @@ -14,28 +14,29 @@ import androidx.appcompat.widget.Toolbar; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.app.IWinBoll; +import cc.winboll.studio.libapputils.app.BaseWinBollActivity; +import cc.winboll.studio.libapputils.app.IWinBollActivity; import com.google.zxing.ResultPoint; import com.journeyapps.barcodescanner.BarcodeCallback; import com.journeyapps.barcodescanner.BarcodeResult; import com.journeyapps.barcodescanner.DecoratedBarcodeView; import java.util.List; -public class QRCodeDecodeActivity extends AppCompatActivity implements IWinBoll { - +public class QRCodeDecodeActivity extends BaseWinBollActivity implements IWinBollActivity { public static final String TAG = "QRCodeDecodeActivity"; - public static final String EXTRA_RESULT = "EXTRA_RESULT"; + public static final String EXTRA_RESULT = "EXTRA_RESULT"; private static final int REQUEST_CAMERA_PERMISSION = 1; + TextView resultTextView; DecoratedBarcodeView barcodeView; @Override - public AppCompatActivity getCurrentAppCompatActivity() { + public AppCompatActivity getActivity() { return this; } - + @Override public String getTag() { return TAG; @@ -73,7 +74,7 @@ public class QRCodeDecodeActivity extends AppCompatActivity implements IWinBoll startScanning(); } - + } private void startScanning() { diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/BaseWinBollActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/BaseWinBollActivity.java new file mode 100644 index 0000000..691b8a2 --- /dev/null +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/BaseWinBollActivity.java @@ -0,0 +1,321 @@ +package cc.winboll.studio.libapputils.app; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2024/08/12 14:32:08 + * @Describe WinBoll 活动窗口基础类 + */ +import android.content.ComponentName; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.libapputils.R; +import cc.winboll.studio.libapputils.activities.AboutActivity; +import cc.winboll.studio.libapputils.log.LogActivity; +import cc.winboll.studio.libapputils.log.LogUtils; +import cc.winboll.studio.libapputils.view.AboutView; +import cc.winboll.studio.libapputils.view.YesNoAlertDialog; +import com.hjq.toast.ToastUtils; +import java.util.List; +import java.util.Set; + +public class BaseWinBollActivity extends AppCompatActivity implements IWinBollActivity { + + public static final String TAG = "BaseWinBollActivity"; + + public static final int REQUEST_LOG_ACTIVITY = 0; + + //IWinBollActivity mIWinBollActivity; + AppCompatActivity mCurrentAppCompatActivity; + + Toolbar mToolBar; + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initCurrentAppCompatActivity(); + checkResolveActivity(); + LogUtils.d(TAG, "onCreate"); + //super.onCreate(savedInstanceState); + archiveInstance(); + } + + @Override + public void onDestroy() { + WinBollActivityManager.getInstance(mCurrentAppCompatActivity).registeRemove(this); + super.onDestroy(); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + } + + @Override + protected void onStart() { + super.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + super.onTitleChanged(title, color); + } + + @Override + public AppCompatActivity getActivity() { + return this; + } + + @Override + public String getTag() { + return TAG; + } + + @Override + public Toolbar initToolBar() { + return null; + } + + @Override + public boolean isEnableDisplayHomeAsUp() { + return false; + } + + @Override + public boolean isAddWinBollToolBar() { + return false; + } + + public void initCurrentAppCompatActivity() { + mCurrentAppCompatActivity = getActivity(); + } + + boolean checkResolveActivity() { + PackageManager packageManager = mCurrentAppCompatActivity.getPackageManager(); + //Intent intent = new Intent("your_action_here"); + Intent intent = mCurrentAppCompatActivity.getIntent(); + if (intent != null) { + List resolveInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); + if (resolveInfoList.size() > 0) { + // 传入的Intent action在Activity清单的intent-filter的action节点里有定义 + if (intent.getAction() != null) { + if (intent.getAction().equals(cc.winboll.studio.libapputils.intent.action.DEBUGVIEW)) { + WinBollGlobalApplication.setIsDebug(true); + //ToastUtils.show!("WinBollApplication.setIsDebug(true) by action : " + intent.getAction()); + + } + } + return true; + } else { + // 传入的Intent action在Activity清单的intent-filter的action节点里没有定义 + //ToastUtils.show("false : " + intent.getAction()); + return false; + } + + } + + // action在清单文件中没有声明 + ToastUtils.show("false"); + return false; + } + + void archiveInstance() { + Intent intent = mCurrentAppCompatActivity.getIntent(); + StringBuilder sb = new StringBuilder("\n### Archive Instance ###\n"); + + if (intent != null) { + ComponentName componentName = intent.getComponent(); + if (componentName != null) { + String packageName = componentName.getPackageName(); + //Log.d("AppStarter", "启动本应用的应用包名: " + packageName); + sb.append("启动本应用的应用包名: \n" + packageName); + } + + sb.append("\nImplicit Intent Tracker :\n接收到的 Intent 动作: \n" + intent.getAction()); + Set categories = intent.getCategories(); + if (categories != null) { + for (String category : categories) { + sb.append("\n接收到的 Intent 类别 :\n" + category); + } + } + Uri data = intent.getData(); + if (data != null) { + sb.append("\n接收到的 Intent 数据 :\n" + data.toString()); + } + } else { + sb.append("Intent is null."); + } + sb.append("\n\n"); + LogUtils.d(TAG, sb.toString()); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + // 缓存当前 activity + WinBollActivityManager.getInstance(mCurrentAppCompatActivity).add(this); + + // 初始化工具栏 + mToolBar = initToolBar(); + if (mToolBar != null) { + mCurrentAppCompatActivity.setSupportActionBar(mToolBar); + if (isEnableDisplayHomeAsUp()) { + // 显示后退按钮 + mCurrentAppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + mCurrentAppCompatActivity.getSupportActionBar().setSubtitle(getTag()); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (isAddWinBollToolBar()) { + //ToastUtils.show("mIWinBoll.isAddWinBollToolBar()"); + mCurrentAppCompatActivity.getMenuInflater().inflate(R.menu.toolbar_winboll_shared_main, menu); + } + if (WinBollGlobalApplication.isDebug()) { + mCurrentAppCompatActivity.getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu); + } + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + + LogUtils.d(TAG, "onOptionsItemSelected"); + //ToastUtils.show(String.format("%s onOptionsItemSelected", TAG)); + if (item.getItemId() == R.id.item_testcrashreport) { + for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) { + mCurrentAppCompatActivity.getString(i); + } + return true; + } else if (item.getItemId() == R.id.item_log) { +// LogUtils.d(TAG, "item_log not yet."); +// Intent intent = new Intent(this, LogActivity.class); +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); +// intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); +// startActivity(intent); + + //WinBollActivityManager.getInstance().printAvtivityListInfo(); + WinBollActivityManager.getInstance(mCurrentAppCompatActivity).startWinBollActivity(mCurrentAppCompatActivity, LogActivity.class); + return true; + } else if (item.getItemId() == R.id.item_exit) { + exit(); + //ToastUtils.show("item_exit"); + //WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finishAll(); + return true; + } else if (item.getItemId() == R.id.item_info) { + LogUtils.d(TAG, "item_info not yet."); + return true; + //WinBollApplication application = (WinBollApplication) getApplication(); + //application.getMyActivityLifecycleCallbacks().showActivityeInfo(); + } else if (item.getItemId() == R.id.item_exitdebug) { + AboutView.setApp2NormalMode(mCurrentAppCompatActivity); + return true; + } else if (item.getItemId() == R.id.item_about) { + startAboutActivity(); + return true; + } else if (item.getItemId() == android.R.id.home) { + WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finish(this); + return true; + } + // else if (item.getItemId() == android.R.id.home) { + // 回到主窗口速度缓慢,方法备用。现在用 WinBollActivityManager resumeActivity 和 finish 方法管理。 + // _mMainWinBollActivity 是 WinBollActivity 的静态属性 + // onCreate 函数下 _mMainWinBollActivity 为空时就用 _mMainWinBollActivity = this 赋值。 + //startWinBollActivity(new Intent(_mMainWinBollActivity, _mMainWinBollActivity.getClass()), _mMainWinBollActivity.getTag(), _mMainWinBollActivity); + //} + return super.onOptionsItemSelected(item); + } + + public boolean isAddWinBollInfoMenu() { + return true; + } + + @Override + public void onBackPressed() { + if (WinBollActivityManager.getInstance(getApplicationContext()).isFirstIWinBollActivity(this)) { + exit(); + } else { + WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finish(this); + super.onBackPressed(); + } + } + + protected String getAppName() { + return getString(R.string.lib_name); + } + + void exit() { + YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){ + + @Override + public void onYes() { + WinBollActivityManager.getInstance(getApplicationContext()).finishAll(); + } + + @Override + public void onNo() { + } + }; + YesNoAlertDialog.show(this, "[ " + getAppName() + " ]", "Exit(Yes/No).\nIs close all activity?", listener); + + } + + // + // activity: 为 null 时, + // intent.putExtra 函数 "tag" 参数为 tag + // activity: 不为 null 时, + // intent.putExtra 函数 "tag" 参数为 activity.getTag() + // + public void startAboutActivity() { + Intent intent = new Intent(mCurrentAppCompatActivity, AboutActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); + intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + intent.putExtra("tag", AboutActivity.TAG); + mCurrentAppCompatActivity.startActivity(intent); + } + +// @Override +// public void startActivity(Intent intent) { +// //绑定唯一标识 tag,存在 则根据 taskId 移动到前台 +// String tag = intent.getStringExtra("tag"); +// //ToastUtils.show("startActivityForResult tag " + tag); +// //WinBollActivityManager.getInstance(this).printAvtivityListInfo(); +// if (WinBollActivityManager.getInstance(this).isActive(tag)) { +// //ToastUtils.show("resumeActivity"); +// LogUtils.d(TAG, "resumeActivity"); +// WinBollActivityManager.getInstance(this).resumeActivity(this, tag); +// } else { +// //ToastUtils.show("super.startActivity(intent);"); +// super.startActivity(intent); +// } +// } + + protected void prosessActivityResult(int requestCode, int targetFragment, Intent data) { + LogUtils.d(TAG, "onActivityResult"); + switch (requestCode) { + case REQUEST_LOG_ACTIVITY : { + LogUtils.d(TAG, "REQUEST_LOG_ACTIVITY"); + break; + } + } + } +} diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBoll.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBoll.java deleted file mode 100644 index 1b60140..0000000 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBoll.java +++ /dev/null @@ -1,21 +0,0 @@ -package cc.winboll.studio.libapputils.app; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; - -/** - * @Author ZhanGSKen@QQ.COM - * @Date 2025/02/04 10:20:16 - * @Describe WinBoll Activity 接口 - */ -public interface IWinBoll { - - public static final String TAG = "IWinBoll"; - - // 获取当前具有 IWinBoll 特征的 AppCompatActivity 活动窗口 - AppCompatActivity getCurrentAppCompatActivity(); - - abstract public String getTag(); - abstract Toolbar initToolBar(); - abstract boolean isEnableDisplayHomeAsUp(); - abstract boolean isAddWinBollToolBar(); -} diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java index e516d83..3533175 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/IWinBollActivity.java @@ -1,228 +1,21 @@ package cc.winboll.studio.libapputils.app; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; /** * @Author ZhanGSKen@QQ.COM - * @Date 2024/08/12 14:32:08 - * @Describe WinBoll 活动窗口基础类 + * @Date 2025/02/04 10:20:16 + * @Describe WinBoll Activity 接口 */ -import android.content.ComponentName; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.net.Uri; -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.activities.AboutActivity; -import cc.winboll.studio.libapputils.log.LogActivity; -import cc.winboll.studio.libapputils.log.LogUtils; -import cc.winboll.studio.libapputils.view.AboutView; -import com.hjq.toast.ToastUtils; -import java.util.List; -import java.util.Set; +public interface IWinBollActivity { -public class IWinBollActivity { + public static final String TAG = "IWinBollActivity"; - public static final String TAG = "WinBollActivity"; - - public static final int REQUEST_LOG_ACTIVITY = 0; - - IWinBoll mIWinBoll; - AppCompatActivity mCurrentAppCompatActivity; - - Toolbar mToolBar; - - public IWinBollActivity(IWinBoll iWinBoll) { - mIWinBoll = iWinBoll; - mCurrentAppCompatActivity = (AppCompatActivity)iWinBoll; - } - - public void onCreate(Bundle savedInstanceState) { - checkResolveActivity(); - LogUtils.d(TAG, "onCreate"); - //super.onCreate(savedInstanceState); - archiveInstance(); - - } - - boolean checkResolveActivity() { - PackageManager packageManager = mCurrentAppCompatActivity.getPackageManager(); - //Intent intent = new Intent("your_action_here"); - Intent intent = mCurrentAppCompatActivity.getIntent(); - if (intent != null) { - List resolveInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); - if (resolveInfoList.size() > 0) { - // 传入的Intent action在Activity清单的intent-filter的action节点里有定义 - if (intent.getAction() != null) { - if (intent.getAction().equals(cc.winboll.studio.libapputils.intent.action.DEBUGVIEW)) { - WinBollGlobalApplication.setIsDebug(true); - //ToastUtils.show!("WinBollApplication.setIsDebug(true) by action : " + intent.getAction()); - - } - } - return true; - } else { - // 传入的Intent action在Activity清单的intent-filter的action节点里没有定义 - //ToastUtils.show("false : " + intent.getAction()); - return false; - } - - } - - // action在清单文件中没有声明 - ToastUtils.show("false"); - return false; - } - - void archiveInstance() { - Intent intent = mCurrentAppCompatActivity.getIntent(); - StringBuilder sb = new StringBuilder("\n### Archive Instance ###\n"); - - if (intent != null) { - ComponentName componentName = intent.getComponent(); - if (componentName != null) { - String packageName = componentName.getPackageName(); - //Log.d("AppStarter", "启动本应用的应用包名: " + packageName); - sb.append("启动本应用的应用包名: \n" + packageName); - } - - sb.append("\nImplicit Intent Tracker :\n接收到的 Intent 动作: \n" + intent.getAction()); - Set categories = intent.getCategories(); - if (categories != null) { - for (String category : categories) { - sb.append("\n接收到的 Intent 类别 :\n" + category); - } - } - Uri data = intent.getData(); - if (data != null) { - sb.append("\n接收到的 Intent 数据 :\n" + data.toString()); - } - } else { - sb.append("Intent is null."); - } - sb.append("\n\n"); - LogUtils.d(TAG, sb.toString()); - } - - public void onPostCreate(Bundle savedInstanceState) { - mToolBar = mIWinBoll.initToolBar(); - mCurrentAppCompatActivity.setSupportActionBar(mToolBar); - if (mIWinBoll.isEnableDisplayHomeAsUp() && mToolBar != null) { - // 显示后退按钮 - mCurrentAppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); - } - - // 缓存当前 activity - LogUtils.d(TAG, "ActManager.getInstance().add(this);"); - //ToastUtils.show("getTag() " + getTag()); - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).add(mIWinBoll); - - mCurrentAppCompatActivity.getSupportActionBar().setSubtitle(mIWinBoll.getTag()); - } - - public void onDestroy() { - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).registeRemove(mIWinBoll); - } - - - public void inflateWinBollMenu(Menu menu) { - if (mIWinBoll.isAddWinBollToolBar()) { - mCurrentAppCompatActivity.getMenuInflater().inflate(R.menu.toolbar_winboll_shared_main, menu); - } - if (WinBollGlobalApplication.isDebug()) { - mCurrentAppCompatActivity.getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu); - } - } - - public boolean onOptionsItemSelected(MenuItem item) { - LogUtils.d(TAG, "onOptionsItemSelected"); - if (item.getItemId() == R.id.item_testcrashreport) { - for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) { - mCurrentAppCompatActivity.getString(i); - } - } else if (item.getItemId() == R.id.item_log) { -// LogUtils.d(TAG, "item_log not yet."); -// Intent intent = new Intent(this, LogActivity.class); -// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); -// intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); -// startActivity(intent); - - //WinBollActivityManager.getInstance().printAvtivityListInfo(); - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).startWinBollActivity(mCurrentAppCompatActivity, LogActivity.class); - } else if (item.getItemId() == R.id.item_exit) { - //ToastUtils.show("item_exit"); - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finishAll(); - } else if (item.getItemId() == R.id.item_info) { - LogUtils.d(TAG, "item_info not yet."); - //WinBollApplication application = (WinBollApplication) getApplication(); - //application.getMyActivityLifecycleCallbacks().showActivityeInfo(); - } else if (item.getItemId() == R.id.item_exitdebug) { - AboutView.setApp2NormalMode(mCurrentAppCompatActivity); - } else if (item.getItemId() == R.id.item_about) { - startAboutActivity(); - } else if (item.getItemId() == android.R.id.home) { - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finish(mIWinBoll); - } - // else if (item.getItemId() == android.R.id.home) { - // 回到主窗口速度缓慢,方法备用。现在用 WinBollActivityManager resumeActivity 和 finish 方法管理。 - // _mMainWinBollActivity 是 WinBollActivity 的静态属性 - // onCreate 函数下 _mMainWinBollActivity 为空时就用 _mMainWinBollActivity = this 赋值。 - //startWinBollActivity(new Intent(_mMainWinBollActivity, _mMainWinBollActivity.getClass()), _mMainWinBollActivity.getTag(), _mMainWinBollActivity); - //} - return true; - } - - public boolean isAddWinBollInfoMenu() { - return true; - } - - public void onBackPressed() { - //super.onBackPressed(); - //ToastUtils.show("onBackPressed"); - WinBollActivityManager.getInstance(mCurrentAppCompatActivity).finish(mIWinBoll); - } - - - // - // activity: 为 null 时, - // intent.putExtra 函数 "tag" 参数为 tag - // activity: 不为 null 时, - // intent.putExtra 函数 "tag" 参数为 activity.getTag() - // - public void startAboutActivity() { - Intent intent = new Intent(mCurrentAppCompatActivity, AboutActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); - intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - intent.putExtra("tag", AboutActivity.TAG); - mCurrentAppCompatActivity.startActivity(intent); - } - -// @Override -// public void startActivity(Intent intent) { -// //绑定唯一标识 tag,存在 则根据 taskId 移动到前台 -// String tag = intent.getStringExtra("tag"); -// //ToastUtils.show("startActivityForResult tag " + tag); -// //WinBollActivityManager.getInstance(this).printAvtivityListInfo(); -// if (WinBollActivityManager.getInstance(this).isActive(tag)) { -// //ToastUtils.show("resumeActivity"); -// LogUtils.d(TAG, "resumeActivity"); -// WinBollActivityManager.getInstance(this).resumeActivity(this, tag); -// } else { -// //ToastUtils.show("super.startActivity(intent);"); -// super.startActivity(intent); -// } -// } - - public void onActivityResult(int requestCode, int targetFragment, Intent data) { - LogUtils.d(TAG, "onActivityResult"); - switch (requestCode) { - case REQUEST_LOG_ACTIVITY : { - LogUtils.d(TAG, "REQUEST_LOG_ACTIVITY"); - break; - } - } - } + // 获取当前具有 IWinBoll 特征的 AppCompatActivity 活动窗口 + AppCompatActivity getActivity(); + + abstract public String getTag(); + abstract Toolbar initToolBar(); + abstract boolean isEnableDisplayHomeAsUp(); + abstract boolean isAddWinBollToolBar(); } diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java index e9bd071..3dee031 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java @@ -25,12 +25,13 @@ public class WinBollActivityManager { Context mContext; static WinBollActivityManager _mWinBollActivityManager; - static Map _mapIWinBollList; + static Map _mapIWinBollList; + IWinBollActivity firstIWinBollActivity; public WinBollActivityManager(Context context) { mContext = context; LogUtils.d(TAG, "WinBollActivityManager()"); - _mapIWinBollList = new HashMap(); + _mapIWinBollList = new HashMap(); } public static synchronized WinBollActivityManager getInstance(Context context) { @@ -45,10 +46,16 @@ public class WinBollActivityManager { // // 把Activity添加到管理中 // - public void add(T iWinBoll) { + public void add(T iWinBoll) { if (isActive(iWinBoll.getTag())) { LogUtils.d(TAG, String.format("add(...) %s is active.", iWinBoll.getTag())); } else { + // 设置起始活动窗口,以便最后退出时提问 + if (firstIWinBollActivity == null && _mapIWinBollList.size() == 0) { + firstIWinBollActivity = iWinBoll; + } + + // 添加到活动窗口列表 _mapIWinBollList.put(iWinBoll.getTag(), iWinBoll); LogUtils.d(TAG, String.format("Add activity : %s\n_mapActivityList.size() : %d", iWinBoll.getTag(), _mapIWinBollList.size())); } @@ -61,7 +68,7 @@ public class WinBollActivityManager { // activity: 不为 null 时, // intent.putExtra 函数 "tag" 参数为 activity.getTag() // - public void startWinBollActivity(Context context, Class clazz) { + public void startWinBollActivity(Context context, Class clazz) { try { // 如果窗口已存在就重启窗口 String tag = clazz.newInstance().getTag(); @@ -82,7 +89,7 @@ public class WinBollActivityManager { } } - public void startWinBollActivity(Context context, Intent intent, Class clazz) { + public void startWinBollActivity(Context context, Intent intent, Class clazz) { try { // 如果窗口已存在就重启窗口 String tag = clazz.newInstance().getTag(); @@ -103,17 +110,21 @@ public class WinBollActivityManager { } } + public boolean isFirstIWinBollActivity(IWinBollActivity iWinBollActivity) { + return firstIWinBollActivity != null && firstIWinBollActivity == iWinBollActivity; + } + // // 判断 tag绑定的 MyActivity是否存在 // public boolean isActive(String tag) { //printAvtivityListInfo(); - IWinBoll iWinBoll = getIWinBoll(tag); + IWinBollActivity iWinBoll = getIWinBoll(tag); if (iWinBoll != null) { LogUtils.d(TAG, "isActive(...) activity != null tag " + tag); //ToastUtils.show("activity != null tag " + tag); //判断是否为 BaseActivity,如果已经销毁,则移除 - if (iWinBoll.getCurrentAppCompatActivity().isFinishing() || iWinBoll.getCurrentAppCompatActivity().isDestroyed()) { + 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)); @@ -128,18 +139,18 @@ public class WinBollActivityManager { } } - static IWinBoll getIWinBoll(String tag) { + static IWinBollActivity getIWinBoll(String tag) { return _mapIWinBollList.get(tag); } // // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 // - public void resumeActivity(Context context, String tag) { + public void resumeActivity(Context context, String tag) { LogUtils.d(TAG, "resumeActivty"); T iWinBoll = (T)getIWinBoll(tag); //LogUtils.d(TAG, "activity " + activity.getTag()); - if (iWinBoll != null && !iWinBoll.getCurrentAppCompatActivity().isFinishing() && !iWinBoll.getCurrentAppCompatActivity().isDestroyed()) { + if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { resumeActivity(context, iWinBoll); } } @@ -147,8 +158,8 @@ public class WinBollActivityManager { // // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 // - public void resumeActivity(Context context, T iWinBoll) { - ActivityManager am = (ActivityManager) iWinBoll.getCurrentAppCompatActivity().getSystemService(Context.ACTIVITY_SERVICE); + public void resumeActivity(Context context, T iWinBoll) { + ActivityManager am = (ActivityManager) iWinBoll.getActivity().getSystemService(Context.ACTIVITY_SERVICE); //返回启动它的根任务(home 或者 MainActivity) Intent intent = new Intent(context, iWinBoll.getClass()); TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); @@ -157,7 +168,7 @@ public class WinBollActivityManager { //moveTaskToFront(YourTaskId, 0); LogUtils.d(TAG, "am.moveTaskToFront"); //ToastUtils.show("resumeActivity am.moveTaskToFront"); - am.moveTaskToFront(iWinBoll.getCurrentAppCompatActivity().getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION); + am.moveTaskToFront(iWinBoll.getActivity().getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION); } @@ -168,17 +179,17 @@ public class WinBollActivityManager { try { for (String key : _mapIWinBollList.keySet()) { //System.out.println("Key: " + key + ", Value: " + _mapActivityList.get(key)); - IWinBoll iWinBoll = _mapIWinBollList.get(key); + IWinBollActivity iWinBoll = _mapIWinBollList.get(key); //ToastUtils.show("finishAll() activity"); - if (iWinBoll != null && !iWinBoll.getCurrentAppCompatActivity().isFinishing() && !iWinBoll.getCurrentAppCompatActivity().isDestroyed()) { + if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { //ToastUtils.show("activity != null ..."); if (WinBollGlobalApplication.getWinBollUI_TYPE() == WinBollGlobalApplication.WinBollUI_TYPE.Service) { // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。 - iWinBoll.getCurrentAppCompatActivity().finishAndRemoveTask(); + iWinBoll.getActivity().finishAndRemoveTask(); //ToastUtils.show("finishAll() activity.finishAndRemoveTask();"); } else if (WinBollGlobalApplication.getWinBollUI_TYPE() == WinBollGlobalApplication.WinBollUI_TYPE.Aplication) { // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。 - iWinBoll.getCurrentAppCompatActivity().finish(); + iWinBoll.getActivity().finish(); //ToastUtils.show("finishAll() activity.finish();"); } else { LogUtils.d(TAG, "WinBollApplication.WinBollUI_TYPE error."); @@ -194,9 +205,9 @@ public class WinBollActivityManager { // // 结束指定Activity // - public void finish(T iWinBoll) { + public void finish(T iWinBoll) { try { - if (iWinBoll != null && !iWinBoll.getCurrentAppCompatActivity().isFinishing() && !iWinBoll.getCurrentAppCompatActivity().isDestroyed()) { + if (iWinBoll != null && !iWinBoll.getActivity().isFinishing() && !iWinBoll.getActivity().isDestroyed()) { //根据tag 移除 MyActivity //String tag= activity.getTag(); //_mWinBollActivityList.remove(tag); @@ -211,8 +222,8 @@ public class WinBollActivityManager { // ★:0 1 2 3 [4] >> 3 // ★:[0] >> 直接关闭当前窗口 LogUtils.d(TAG, "finish no yet."); - IWinBoll preIWinBoll = getPreIWinBoll(iWinBoll); - iWinBoll.getCurrentAppCompatActivity().finish(); + IWinBollActivity preIWinBoll = getPreIWinBoll(iWinBoll); + iWinBoll.getActivity().finish(); if (preIWinBoll != null) { resumeActivity(mContext, preIWinBoll); } @@ -226,11 +237,11 @@ public class WinBollActivityManager { // // 获取窗口队列中的前一个窗口 // - IWinBoll getPreIWinBoll(IWinBoll iWinBoll) { + IWinBollActivity getPreIWinBoll(IWinBollActivity iWinBoll) { try { boolean bingo = false; - IWinBoll preIWinBoll = null; - for (Map.Entry entity : _mapIWinBollList.entrySet()) { + IWinBollActivity preIWinBoll = null; + for (Map.Entry entity : _mapIWinBollList.entrySet()) { if (entity.getKey().equals(iWinBoll.getTag())) { bingo = true; LogUtils.d(TAG, "bingo"); @@ -252,8 +263,8 @@ public class WinBollActivityManager { // // 从管理列表中移除管理项 // - public boolean registeRemove(T activity) { - IWinBoll iWinBollTest = _mapIWinBollList.get(activity.getTag()); + public boolean registeRemove(T activity) { + IWinBollActivity iWinBollTest = _mapIWinBollList.get(activity.getTag()); if (iWinBollTest != null) { _mapIWinBollList.remove(activity.getTag()); return true; @@ -268,9 +279,9 @@ public class WinBollActivityManager { //LogUtils.d(TAG, "printAvtivityListInfo"); if (!_mapIWinBollList.isEmpty()) { StringBuilder sb = new StringBuilder("Map entries : " + Integer.toString(_mapIWinBollList.size())); - Iterator> iterator = _mapIWinBollList.entrySet().iterator(); + Iterator> iterator = _mapIWinBollList.entrySet().iterator(); while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); + Map.Entry entry = iterator.next(); sb.append("\nKey: " + entry.getKey() + ", \nValue: " + entry.getValue().getTag()); //ToastUtils.show("\nKey: " + entry.getKey() + ", Value: " + entry.getValue().getTag()); } diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollFactory.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollFactory.java index 4ccf86b..1f51eb4 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollFactory.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollFactory.java @@ -6,11 +6,13 @@ package cc.winboll.studio.libapputils.app; * @Date 2025/02/04 10:19:34 * @Describe WinBoll 工厂 */ +import androidx.appcompat.app.AppCompatActivity; + public class WinBollFactory { public static final String TAG = "WinBollFactory"; - public static IWinBollActivity buildWinBollActivity(IWinBoll iWinBoll) { - return new IWinBollActivity(iWinBoll); + public static AppCompatActivity buildAppCompatActivity(IWinBollActivity iWinBoll) { + return iWinBoll.getActivity(); } } diff --git a/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java b/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java index 3397129..60a770f 100644 --- a/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java +++ b/libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java @@ -9,17 +9,18 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libapputils.R; -import cc.winboll.studio.libapputils.app.IWinBoll; +import cc.winboll.studio.libapputils.app.BaseWinBollActivity; +import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.WinBollGlobalApplication; -public class LogActivity extends AppCompatActivity implements IWinBoll { +public class LogActivity extends BaseWinBollActivity implements IWinBollActivity { public static final String TAG = "LogActivity"; LogView mLogView; @Override - public AppCompatActivity getCurrentAppCompatActivity() { + public AppCompatActivity getActivity() { return this; } diff --git a/libapputils/src/main/res/values/strings.xml b/libapputils/src/main/res/values/strings.xml index 020e1c3..932b20e 100644 --- a/libapputils/src/main/res/values/strings.xml +++ b/libapputils/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ - library + libapputils Click here is switch to Normal APP Click here is switch to APP DEBUG GITEA HOME