重构 WinBollActivity
This commit is contained in:
		| @@ -1,8 +1,8 @@ | ||||
| #Created by .winboll/winboll_app_build.gradle | ||||
| #Tue Feb 04 08:54:19 HKT 2025 | ||||
| #Tue Feb 04 04:18:10 GMT 2025 | ||||
| stageCount=1 | ||||
| libraryProject=libapputils | ||||
| baseVersion=9.3 | ||||
| publishVersion=9.3.0 | ||||
| buildCount=0 | ||||
| buildCount=21 | ||||
| baseBetaVersion=9.3.1 | ||||
|   | ||||
| @@ -17,7 +17,7 @@ public class App extends WinBollGlobalApplication { | ||||
|     @Override | ||||
|     public void onCreate() { | ||||
|         super.onCreate(); | ||||
|         Toast.makeText(getApplication(), "Toast Test", Toast.LENGTH_SHORT).show(); | ||||
|         //Toast.makeText(getApplication(), "Toast Test", Toast.LENGTH_SHORT).show(); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -6,35 +6,66 @@ import android.view.Menu; | ||||
| import android.view.MenuItem; | ||||
| import android.view.View; | ||||
| import android.widget.Toast; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
| 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.WinBollActivity; | ||||
| import cc.winboll.studio.libapputils.app.IWinBoll; | ||||
| import cc.winboll.studio.libapputils.app.WinBollActivityManager; | ||||
| import cc.winboll.studio.libapputils.bean.APPInfo; | ||||
| import cc.winboll.studio.libapputils.log.LogActivity; | ||||
| import cc.winboll.studio.libapputils.log.LogUtils; | ||||
| import com.hjq.toast.ToastUtils; | ||||
| import cc.winboll.studio.libapputils.activities.AboutActivity; | ||||
| import cc.winboll.studio.libapputils.bean.APPInfo; | ||||
| 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 WinBollActivity { | ||||
|  | ||||
| 	public static final String TAG = "MainActivity"; | ||||
|      | ||||
|     IWinBollActivity mIWinBollActivity; | ||||
|  | ||||
|     public static final int REQUEST_QRCODEDECODE_ACTIVITY = 0; | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isEnableDisplayHomeAsUp() { | ||||
|     public AppCompatActivity getCurrentAppCompatActivity() { | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getTag() { | ||||
|         return TAG; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isAddWinBollToolBar() { | ||||
|         ToastUtils.show(String.format("%s isAddWinBollToolBar()", TAG)); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Toolbar initToolBar() { | ||||
|         return findViewById(R.id.activitymainToolbar1); | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     public boolean isEnableDisplayHomeAsUp() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         //ToastUtils.show("onCreate"); | ||||
|         mIWinBollActivity = WinBollFactory.buildWinBollActivity(this); | ||||
|         mIWinBollActivity.onCreate(savedInstanceState); | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setContentView(R.layout.activity_main); | ||||
|  | ||||
|         //Toolbar toolbar = findViewById(R.id.activitymainToolbar1); | ||||
|         //setActionBar(toolbar); | ||||
|         //ToastUtils.show("setContentView"); | ||||
|          | ||||
|         Toolbar toolbar = findViewById(R.id.activitymainToolbar1); | ||||
|         setSupportActionBar(toolbar); | ||||
|  | ||||
|         // 接收并处理 Intent 数据,函数 Intent 处理接收就直接返回 | ||||
|         //if (prosessIntents(getIntent())) return; | ||||
| @@ -130,24 +161,12 @@ final public class MainActivity extends WinBollActivity { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getTag() { | ||||
|         return TAG; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isAddWinBollToolBar() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Toolbar initToolBar() { | ||||
|         return findViewById(R.id.activitymainToolbar1); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean onCreateOptionsMenu(Menu menu) { | ||||
|         //ToastUtils.show("onCreateOptionsMenu"); | ||||
|         getMenuInflater().inflate(R.menu.toolbar_main, menu); | ||||
|         mIWinBollActivity.inflateWinBollMenu(menu); | ||||
|         return super.onCreateOptionsMenu(menu); | ||||
|     } | ||||
|  | ||||
| @@ -163,6 +182,8 @@ final public class MainActivity extends WinBollActivity { | ||||
|         } else if(item.getItemId() == R.id.item_about) { | ||||
|             openAboutActivity(); | ||||
|             return true; | ||||
|         } else if(mIWinBollActivity.onOptionsItemSelected(item)) { | ||||
|             return true; | ||||
|         } | ||||
|         return super.onOptionsItemSelected(item); | ||||
|     } | ||||
|   | ||||
| @@ -1,19 +1,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.WinBollActivity; | ||||
| import cc.winboll.studio.libapputils.app.IWinBoll; | ||||
| import cc.winboll.studio.libapputils.view.StringToQrCodeView; | ||||
|  | ||||
| /** | ||||
|  * @Author ZhanGSKen@QQ.COM | ||||
|  * @Date 2025/01/17 19:50:46 | ||||
|  */ | ||||
| public class TestStringToQrCodeViewActivity extends WinBollActivity { | ||||
| public class TestStringToQrCodeViewActivity extends AppCompatActivity implements IWinBoll { | ||||
|  | ||||
|      | ||||
|     public static final String TAG = "TestStringToQrCodeViewActivity"; | ||||
|      | ||||
|     StringToQrCodeView mStringToQrCodeView; | ||||
|  | ||||
|     @Override | ||||
|     public AppCompatActivity getCurrentAppCompatActivity() { | ||||
|         return this; | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     public String getTag() { | ||||
| @@ -21,17 +28,17 @@ public class TestStringToQrCodeViewActivity extends WinBollActivity { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Toolbar initToolBar() { | ||||
|     public Toolbar initToolBar() { | ||||
|         return findViewById(R.id.activityteststringtoqrcodeviewToolbar1); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isEnableDisplayHomeAsUp() { | ||||
|     public boolean isEnableDisplayHomeAsUp() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isAddWinBollToolBar() { | ||||
|     public boolean isAddWinBollToolBar() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
| @@ -45,6 +52,6 @@ public class TestStringToQrCodeViewActivity extends WinBollActivity { | ||||
|     @Override | ||||
|     protected void onPostCreate(Bundle savedInstanceState) { | ||||
|         super.onPostCreate(savedInstanceState); | ||||
|         setSubTitle(TAG); | ||||
|         //setSubTitle(TAG); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,38 +1,40 @@ | ||||
| package cc.winboll.studio.apputils; | ||||
|  | ||||
| import android.content.Intent; | ||||
| import android.os.Bundle; | ||||
| import android.view.View; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
| import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity; | ||||
| import cc.winboll.studio.libapputils.app.WinBollActivity; | ||||
| import cc.winboll.studio.libapputils.app.WinBollActivityManager; | ||||
| import cc.winboll.studio.libapputils.app.IWinBoll; | ||||
|  | ||||
| /** | ||||
|  * @Author ZhanGSKen@QQ.COM | ||||
|  * @Date 2025/01/13 15:09:46 | ||||
|  */ | ||||
| public class TestWinBollActivity extends WinBollActivity { | ||||
| public class TestWinBollActivity extends AppCompatActivity implements IWinBoll { | ||||
|  | ||||
|     public static final String TAG = "TestWinBollActivity"; | ||||
|  | ||||
|     @Override | ||||
|     public AppCompatActivity getCurrentAppCompatActivity() { | ||||
|         return this; | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     public String getTag() { | ||||
|         return TAG; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Toolbar initToolBar() { | ||||
|     public Toolbar initToolBar() { | ||||
|         return findViewById(R.id.activitytestwinbollToolbar1); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isEnableDisplayHomeAsUp() { | ||||
|     public boolean isEnableDisplayHomeAsUp() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isAddWinBollToolBar() { | ||||
|     public boolean isAddWinBollToolBar() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
| @@ -45,7 +47,7 @@ public class TestWinBollActivity extends WinBollActivity { | ||||
|     @Override | ||||
|     protected void onPostCreate(Bundle savedInstanceState) { | ||||
|         super.onPostCreate(savedInstanceState); | ||||
|         setSubTitle(TAG); | ||||
|         //setSubTitle(TAG); | ||||
|     } | ||||
|      | ||||
|      | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| #Created by .winboll/winboll_app_build.gradle | ||||
| #Tue Feb 04 08:54:03 HKT 2025 | ||||
| #Tue Feb 04 04:18:10 GMT 2025 | ||||
| stageCount=1 | ||||
| libraryProject=libapputils | ||||
| baseVersion=9.3 | ||||
| publishVersion=9.3.0 | ||||
| buildCount=0 | ||||
| buildCount=21 | ||||
| baseBetaVersion=9.3.1 | ||||
|   | ||||
| @@ -10,15 +10,16 @@ import android.os.Bundle; | ||||
| import android.view.Menu; | ||||
| import android.view.MenuItem; | ||||
| 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.WinBollActivity; | ||||
| import cc.winboll.studio.libapputils.app.IWinBoll; | ||||
| 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 AppCompatActivity implements IWinBoll { | ||||
|  | ||||
|     public static final String TAG = "AboutActivity"; | ||||
|     public static final String EXTRA_APPINFO = "EXTRA_APPINFO"; | ||||
| @@ -26,16 +27,31 @@ final public class AboutActivity extends WinBollActivity { | ||||
|  | ||||
|     APPInfo mAPPInfo; | ||||
|  | ||||
|     @Override | ||||
|     public AppCompatActivity getCurrentAppCompatActivity() { | ||||
|         return this; | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     public String getTag() { | ||||
|         return TAG; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isEnableDisplayHomeAsUp() { | ||||
|     public boolean isEnableDisplayHomeAsUp() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isAddWinBollToolBar() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Toolbar initToolBar() { | ||||
|         return findViewById(R.id.activityaboutToolbar1); | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
| @@ -58,18 +74,9 @@ final public class AboutActivity extends WinBollActivity { | ||||
|     @Override | ||||
|     protected void onPostCreate(Bundle savedInstanceState) { | ||||
|         super.onPostCreate(savedInstanceState); | ||||
|         setSubTitle(TAG); | ||||
|         //setSubTitle(TAG); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isAddWinBollToolBar() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Toolbar initToolBar() { | ||||
|         return findViewById(R.id.activityaboutToolbar1); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean onCreateOptionsMenu(Menu menu) { | ||||
|   | ||||
| @@ -13,15 +13,17 @@ 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.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 WinBollActivity { | ||||
| public class AssetsHtmlActivity extends AppCompatActivity implements IWinBoll { | ||||
|  | ||||
|     public static final String TAG = "AssetsHtmlActivity"; | ||||
|      | ||||
| @@ -34,24 +36,29 @@ public class AssetsHtmlActivity extends WinBollActivity { | ||||
|     // Assets 文件夹里的 Html 文件的名称 | ||||
|     String mszHtmlFileName; | ||||
|  | ||||
|     @Override | ||||
|     public AppCompatActivity getCurrentAppCompatActivity() { | ||||
|         return this; | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     public String getTag() { | ||||
|         return TAG; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isEnableDisplayHomeAsUp() { | ||||
|     public boolean isEnableDisplayHomeAsUp() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isAddWinBollToolBar() { | ||||
|     public boolean isAddWinBollToolBar() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Toolbar initToolBar() { | ||||
|     public Toolbar initToolBar() { | ||||
|         return findViewById(R.id.activityassetshtmlToolbar1); | ||||
|     } | ||||
|  | ||||
| @@ -110,7 +117,7 @@ public class AssetsHtmlActivity extends WinBollActivity { | ||||
|     @Override | ||||
|     public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) { | ||||
|         super.onPostCreate(savedInstanceState, persistentState); | ||||
|         setSubTitle(mszHtmlFileName); | ||||
|         //setSubTitle(mszHtmlFileName); | ||||
|         //setSubTitle(TAG); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -9,18 +9,20 @@ import android.content.Intent; | ||||
| import android.content.pm.PackageManager; | ||||
| import android.os.Bundle; | ||||
| import android.widget.TextView; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| 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.WinBollActivity; | ||||
| import cc.winboll.studio.libapputils.app.IWinBoll; | ||||
| 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 WinBollActivity { | ||||
| public class QRCodeDecodeActivity extends AppCompatActivity implements IWinBoll { | ||||
|  | ||||
|  | ||||
|     public static final String TAG = "QRCodeDecodeActivity"; | ||||
|     public static final String EXTRA_RESULT = "EXTRA_RESULT"; | ||||
| @@ -28,6 +30,11 @@ public class QRCodeDecodeActivity extends WinBollActivity { | ||||
|     private static final int REQUEST_CAMERA_PERMISSION = 1; | ||||
|     TextView resultTextView; | ||||
|     DecoratedBarcodeView barcodeView; | ||||
|  | ||||
|     @Override | ||||
|     public AppCompatActivity getCurrentAppCompatActivity() { | ||||
|         return this; | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     public String getTag() { | ||||
| @@ -35,18 +42,18 @@ public class QRCodeDecodeActivity extends WinBollActivity { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isEnableDisplayHomeAsUp() { | ||||
|     public boolean isEnableDisplayHomeAsUp() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isAddWinBollToolBar() { | ||||
|     public boolean isAddWinBollToolBar() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Toolbar initToolBar() { | ||||
|     public Toolbar initToolBar() { | ||||
|         return findViewById(R.id.activityqrcodedecodeToolbar1); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,21 @@ | ||||
| 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(); | ||||
| } | ||||
| @@ -0,0 +1,228 @@ | ||||
| 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.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 class 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<ResolveInfo> 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<String> 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 <T extends AboutActivity> 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; | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,490 +0,0 @@ | ||||
| package cc.winboll.studio.libapputils.app; | ||||
|  | ||||
| /** | ||||
|  * @Author ZhanGSKen@QQ.COM | ||||
|  * @Date 2024/08/12 14:32:08 | ||||
|  * @Describe WinBoll 活动窗口基础类 | ||||
|  */ | ||||
| import android.app.Activity; | ||||
| import android.content.BroadcastReceiver; | ||||
| import android.content.ComponentName; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.content.IntentFilter; | ||||
| import android.content.SharedPreferences; | ||||
| import android.content.pm.PackageManager; | ||||
| import android.content.pm.ResolveInfo; | ||||
| import android.content.res.Resources; | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| import android.os.Handler; | ||||
| import android.view.Menu; | ||||
| import android.view.MenuInflater; | ||||
| import android.view.MenuItem; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import androidx.appcompat.app.ActionBar; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.fragment.app.FragmentManager; | ||||
| 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; | ||||
|  | ||||
| abstract public class WinBollActivity extends AppCompatActivity { | ||||
|  | ||||
|     public static final String TAG = "WinBollActivity"; | ||||
|  | ||||
|     public static final int REQUEST_LOG_ACTIVITY = 0; | ||||
|  | ||||
|     Toolbar mToolBar; | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         checkResolveActivity(); | ||||
|         LogUtils.d(TAG, "onCreate"); | ||||
|         super.onCreate(savedInstanceState); | ||||
|         archiveInstance(); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     boolean checkResolveActivity() { | ||||
|         PackageManager packageManager = getPackageManager(); | ||||
|         //Intent intent = new Intent("your_action_here"); | ||||
|         Intent intent = getIntent(); | ||||
|         if (intent != null) { | ||||
|             List<ResolveInfo> 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; | ||||
|             } | ||||
|  | ||||
|             /* ResolveInfo resolveInfo = pm.resolveActivity(intent, 0); | ||||
|              if (resolveInfo != null) { | ||||
|              // action在清单文件中有声明 | ||||
|  | ||||
|              } else { | ||||
|  | ||||
|              }*/ | ||||
|         } | ||||
|  | ||||
|         // action在清单文件中没有声明 | ||||
|         ToastUtils.show("false"); | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     void archiveInstance() { | ||||
|         Intent intent = 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<String> 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); | ||||
|         mToolBar = initToolBar(); | ||||
|         setSupportActionBar(mToolBar); | ||||
|         if (isEnableDisplayHomeAsUp() && mToolBar != null) { | ||||
|             // 显示后退按钮 | ||||
|             getSupportActionBar().setDisplayHomeAsUpEnabled(true); | ||||
|         } | ||||
|  | ||||
|         // 缓存当前 activity | ||||
|         LogUtils.d(TAG, "ActManager.getInstance().add(this);"); | ||||
|         //ToastUtils.show("getTag() " + getTag()); | ||||
|         WinBollActivityManager.getInstance(this).add(this); | ||||
|         //WinBollActivityManager.getInstance().printAvtivityListInfo(); | ||||
|         //ToastUtils.show("WinBollUI_TYPE " + WinBollApplication.getWinBollUI_TYPE()); | ||||
|         //boolean isDebuging = WinBollApplication.loadDebugStatusIsDebuging(); | ||||
|         //ToastUtils.show(String.valueOf(isDebuging)); | ||||
|         //WinBollApplication.setIsDebug(true); | ||||
|  | ||||
|         setSubTitle(getTag()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void recreate() { | ||||
|         super.recreate(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onDestroy() { | ||||
|         WinBollActivityManager.getInstance(this).registeRemove(this); | ||||
|         super.onDestroy(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setContentView(int layoutResID) { | ||||
|         super.setContentView(layoutResID); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public <T extends View> T findViewById(int id) { | ||||
|         return super.findViewById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public MenuInflater getMenuInflater() { | ||||
|         return super.getMenuInflater(); | ||||
|     } | ||||
|  | ||||
|     public WinBollActivity getActivity() { | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Context getApplicationContext() { | ||||
|         return super.getApplicationContext(); | ||||
|     } | ||||
|  | ||||
|     public <T extends FragmentManager> T getWinBollActivitySupportFragmentManager() { | ||||
|         return (T)super.getSupportFragmentManager(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ActionBar getSupportActionBar() { | ||||
|         return super.getSupportActionBar(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setSupportActionBar(Toolbar toolbar) { | ||||
|         super.setSupportActionBar(toolbar); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setActionBar(android.widget.Toolbar toolbar) { | ||||
|         super.setActionBar(toolbar); | ||||
|     } | ||||
|  | ||||
|     public void setSubTitle(CharSequence title) { | ||||
|         LogUtils.d(TAG, "setSubTitle"); | ||||
|         if (super.getSupportActionBar() != null) { | ||||
|             super.getSupportActionBar().setSubtitle(title); | ||||
|             LogUtils.d(TAG, String.format("setSubtitle title : %s", title)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public CharSequence getSubTitle() { | ||||
|         if (super.getSupportActionBar() != null) { | ||||
|             return super.getSupportActionBar().getSubtitle(); | ||||
|         } | ||||
|         return ""; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setTitle(CharSequence title) { | ||||
|         //super.setTitle(title); | ||||
|         if (super.getSupportActionBar() != null) { | ||||
|             super.getSupportActionBar().setTitle(title); | ||||
|             LogUtils.d(TAG, String.format("setSubtitle title : %s", title)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setTitle(int titleId) { | ||||
|         //super.setTitle(titleId); | ||||
|         if (super.getSupportActionBar() != null) { | ||||
|             super.getSupportActionBar().setTitle(titleId); | ||||
|             //LogUtils.d(TAG, String.format("setSubtitle title : %s", title)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setTheme(Resources.Theme theme) { | ||||
|         super.setTheme(theme); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setTheme(int resid) { | ||||
|         super.setTheme(resid); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setTitleColor(int textColor) { | ||||
|         super.setTitleColor(textColor); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setContentView(View view, ViewGroup.LayoutParams params) { | ||||
|         super.setContentView(view, params); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setContentView(View view) { | ||||
|         super.setContentView(view); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SharedPreferences getSharedPreferences(String name, int mode) { | ||||
|         return super.getSharedPreferences(name, mode); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     @Override | ||||
|     public boolean releaseInstance() { | ||||
|         return super.releaseInstance(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, int flags) { | ||||
|         return super.registerReceiver(receiver, filter, flags); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler) { | ||||
|         return super.registerReceiver(receiver, filter, broadcastPermission, scheduler); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler, int flags) { | ||||
|         return super.registerReceiver(receiver, filter, broadcastPermission, scheduler, flags); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivities(Intent[] intents) { | ||||
|         super.startActivities(intents); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivityFromFragment(Fragment fragment, Intent intent, int requestCode) { | ||||
|         super.startActivityFromFragment(fragment, intent, requestCode); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivityFromFragment(android.app.Fragment fragment, Intent intent, int requestCode, Bundle options) { | ||||
|         super.startActivityFromFragment(fragment, intent, requestCode, options); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options) { | ||||
|         super.startActivityFromChild(child, intent, requestCode, options); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivities(Intent[] intents, Bundle options) { | ||||
|         super.startActivities(intents, options); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean startActivityIfNeeded(Intent intent, int requestCode) { | ||||
|         return super.startActivityIfNeeded(intent, requestCode); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean startActivityIfNeeded(Intent intent, int requestCode, Bundle options) { | ||||
|         return super.startActivityIfNeeded(intent, requestCode, options); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivityFromChild(Activity child, Intent intent, int requestCode) { | ||||
|         super.startActivityFromChild(child, intent, requestCode); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ComponentName startService(Intent service) { | ||||
|         return super.startService(service); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivityForResult(Intent intent, int requestCode) { | ||||
|         super.startActivityForResult(intent, requestCode); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivityForResult(Intent intent, int requestCode, Bundle options) { | ||||
|         super.startActivityForResult(intent, requestCode, options); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivityFromFragment(android.app.Fragment fragment, Intent intent, int requestCode) { | ||||
|         super.startActivityFromFragment(fragment, intent, requestCode); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivityFromFragment(Fragment requestIndex, Intent fragment, int intent, Bundle requestCode) { | ||||
|         super.startActivityFromFragment(requestIndex, fragment, intent, requestCode); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void startActivity(Intent intent, Bundle options) { | ||||
|         super.startActivity(intent, options); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean onCreateOptionsMenu(Menu menu) { | ||||
|         if (isAddWinBollToolBar()) { | ||||
|             getMenuInflater().inflate(R.menu.toolbar_winboll_shared_main, menu); | ||||
|         } | ||||
|         if (WinBollGlobalApplication.isDebug()) { | ||||
|             getMenuInflater().inflate(R.menu.toolbar_studio_debug, menu); | ||||
|         } | ||||
|         return super.onCreateOptionsMenu(menu); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     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++) { | ||||
|                 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(this).startWinBollActivity(this, LogActivity.class); | ||||
|         } else if (item.getItemId() == R.id.item_exit) { | ||||
|             //ToastUtils.show("item_exit"); | ||||
|             WinBollActivityManager.getInstance(this).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(getApplicationContext()); | ||||
|         } else if (item.getItemId() == R.id.item_about) { | ||||
|             startAboutActivity(); | ||||
|         } else if (item.getItemId() == android.R.id.home) { | ||||
|             WinBollActivityManager.getInstance(this).finish(this); | ||||
|         } | ||||
|         // 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); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onBackPressed() { | ||||
|         //super.onBackPressed(); | ||||
|         //ToastUtils.show("onBackPressed"); | ||||
|         WinBollActivityManager.getInstance(this).finish(this); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /*public void getInstanse() { | ||||
|      startWinBollActivity(new Intent(), getTag(), null); | ||||
|      }*/ | ||||
|  | ||||
|     // | ||||
|     // activity: 为 null 时, | ||||
|     // intent.putExtra 函数 "tag" 参数为 tag | ||||
|     // activity: 不为 null 时, | ||||
|     // intent.putExtra 函数 "tag" 参数为 activity.getTag() | ||||
|     // | ||||
| //    protected <T extends WinBollActivity> void startWinBollActivity(Intent intent, String tag, T activity) { | ||||
| //        LogUtils.d(TAG, "startWinBollActivityForResult tag " + tag); | ||||
| //        //ToastUtils.show("startWinBollActivityForResult tag " + tag); | ||||
| //        //打开多任务窗口 flags | ||||
| //        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); | ||||
| //        intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); | ||||
| //        if (activity != null) { | ||||
| //            intent.putExtra("tag", activity.getTag()); | ||||
| //        } else { | ||||
| //            intent.putExtra("tag", tag); | ||||
| //        } | ||||
| //        //ToastUtils.show("super.startActivityForResult(intent, requestCode); tag " + tag); | ||||
| //        LogUtils.d(TAG, "startActivityForResult(intent, requestCode);" + tag); | ||||
| //        startActivity(intent); | ||||
| //    } | ||||
|  | ||||
|     // | ||||
|     // activity: 为 null 时, | ||||
|     // intent.putExtra 函数 "tag" 参数为 tag | ||||
|     // activity: 不为 null 时, | ||||
|     // intent.putExtra 函数 "tag" 参数为 activity.getTag() | ||||
|     // | ||||
|     protected <T extends AboutActivity> void startAboutActivity() { | ||||
|         Intent intent = new Intent(this, AboutActivity.class); | ||||
|         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); | ||||
|         intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); | ||||
|         intent.putExtra("tag", AboutActivity.TAG); | ||||
|         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); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected 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; | ||||
|                 } | ||||
|             default : { | ||||
|                     super.onActivityResult(requestCode, targetFragment, data); | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public boolean isAddWinBollInfoMenu() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     abstract public String getTag(); | ||||
|     abstract protected Toolbar initToolBar(); | ||||
|     abstract protected boolean isEnableDisplayHomeAsUp(); | ||||
|     abstract protected boolean isAddWinBollToolBar(); | ||||
| } | ||||
| @@ -11,6 +11,7 @@ package cc.winboll.studio.libapputils.app; | ||||
| import android.app.ActivityManager; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.core.app.TaskStackBuilder; | ||||
| import cc.winboll.studio.libapputils.log.LogUtils; | ||||
| import java.util.HashMap; | ||||
| @@ -24,12 +25,12 @@ public class WinBollActivityManager { | ||||
|  | ||||
|     Context mContext; | ||||
|     static WinBollActivityManager _mWinBollActivityManager; | ||||
|     static Map<String, WinBollActivity> _mapActivityList; | ||||
|     static Map<String, IWinBoll> _mapIWinBollList; | ||||
|  | ||||
|     public WinBollActivityManager(Context context) { | ||||
|         mContext = context; | ||||
|         LogUtils.d(TAG, "WinBollActivityManager()"); | ||||
|         _mapActivityList = new HashMap<String, WinBollActivity>(); | ||||
|         _mapIWinBollList = new HashMap<String, IWinBoll>(); | ||||
|     } | ||||
|  | ||||
|     public static synchronized WinBollActivityManager getInstance(Context context) { | ||||
| @@ -44,12 +45,12 @@ public class WinBollActivityManager { | ||||
|     // | ||||
|     // 把Activity添加到管理中 | ||||
|     // | ||||
|     public <T extends WinBollActivity> void add(T activity) { | ||||
|         if (isActive(activity.getTag())) { | ||||
|             LogUtils.d(TAG, String.format("add(...) %s is active.", activity.getTag())); | ||||
|     public <T extends IWinBoll> void add(T iWinBoll) { | ||||
|         if (isActive(iWinBoll.getTag())) { | ||||
|             LogUtils.d(TAG, String.format("add(...) %s is active.", iWinBoll.getTag())); | ||||
|         } else { | ||||
|             _mapActivityList.put(activity.getTag(), activity); | ||||
|             LogUtils.d(TAG, String.format("Add activity : %s\n_mapActivityList.size() : %d", activity.getTag(), _mapActivityList.size())); | ||||
|             _mapIWinBollList.put(iWinBoll.getTag(), iWinBoll); | ||||
|             LogUtils.d(TAG, String.format("Add activity : %s\n_mapActivityList.size() : %d", iWinBoll.getTag(), _mapIWinBollList.size())); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -60,7 +61,7 @@ public class WinBollActivityManager { | ||||
|     // activity: 不为 null 时, | ||||
|     // intent.putExtra 函数 "tag" 参数为 activity.getTag() | ||||
|     // | ||||
|     public <T extends WinBollActivity> void startWinBollActivity(Context context, Class<T> clazz) { | ||||
|     public <T extends IWinBoll> void startWinBollActivity(Context context, Class<T> clazz) { | ||||
|         try { | ||||
|             // 如果窗口已存在就重启窗口 | ||||
|             String tag = clazz.newInstance().getTag(); | ||||
| @@ -81,7 +82,7 @@ public class WinBollActivityManager { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public <T extends WinBollActivity> void startWinBollActivity(Context context, Intent intent, Class<T> clazz) { | ||||
|     public <T extends IWinBoll> void startWinBollActivity(Context context, Intent intent, Class<T> clazz) { | ||||
|         try { | ||||
|             // 如果窗口已存在就重启窗口 | ||||
|             String tag = clazz.newInstance().getTag(); | ||||
| @@ -107,13 +108,13 @@ public class WinBollActivityManager { | ||||
|     // | ||||
|     public boolean isActive(String tag) { | ||||
|         //printAvtivityListInfo(); | ||||
|         WinBollActivity activity = getWinBollActivity(tag); | ||||
|         if (activity != null) { | ||||
|         IWinBoll iWinBoll = getIWinBoll(tag); | ||||
|         if (iWinBoll != null) { | ||||
|             LogUtils.d(TAG, "isActive(...) activity != null tag " + tag); | ||||
|             //ToastUtils.show("activity != null tag " + tag); | ||||
|             //判断是否为 BaseActivity,如果已经销毁,则移除 | ||||
|             if (activity.isFinishing() || activity.isDestroyed()) { | ||||
|                 _mapActivityList.remove(activity.getTag()); | ||||
|             if (iWinBoll.getCurrentAppCompatActivity().isFinishing() || iWinBoll.getCurrentAppCompatActivity().isDestroyed()) { | ||||
|                 _mapIWinBollList.remove(iWinBoll.getTag()); | ||||
|                 //_mWinBollActivityList.remove(activity); | ||||
|                 LogUtils.d(TAG, String.format("isActive(...) remove activity.\ntag : %s", tag)); | ||||
|                 return false; | ||||
| @@ -127,36 +128,36 @@ public class WinBollActivityManager { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static WinBollActivity getWinBollActivity(String tag) { | ||||
|         return _mapActivityList.get(tag); | ||||
|     static IWinBoll getIWinBoll(String tag) { | ||||
|         return _mapIWinBollList.get(tag); | ||||
|     } | ||||
|  | ||||
|     // | ||||
|     // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 | ||||
|     // | ||||
|     public <T extends WinBollActivity> void resumeActivity(Context context, String tag) { | ||||
|     public <T extends IWinBoll> void resumeActivity(Context context, String tag) { | ||||
|         LogUtils.d(TAG, "resumeActivty"); | ||||
|         T activity = (T)getWinBollActivity(tag); | ||||
|         T iWinBoll = (T)getIWinBoll(tag); | ||||
|         //LogUtils.d(TAG, "activity " + activity.getTag()); | ||||
|         if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) { | ||||
|             resumeActivity(context, activity); | ||||
|         if (iWinBoll != null && !iWinBoll.getCurrentAppCompatActivity().isFinishing() && !iWinBoll.getCurrentAppCompatActivity().isDestroyed()) { | ||||
|             resumeActivity(context, iWinBoll); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // | ||||
|     // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台 | ||||
|     // | ||||
|     public <T extends WinBollActivity> void resumeActivity(Context context, T activity) { | ||||
|         ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); | ||||
|     public <T extends IWinBoll> void resumeActivity(Context context, T iWinBoll) { | ||||
|         ActivityManager am = (ActivityManager) iWinBoll.getCurrentAppCompatActivity().getSystemService(Context.ACTIVITY_SERVICE); | ||||
|         //返回启动它的根任务(home 或者 MainActivity) | ||||
|         Intent intent = new Intent(context, activity.getClass()); | ||||
|         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(activity.getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION); | ||||
|         am.moveTaskToFront(iWinBoll.getCurrentAppCompatActivity().getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -165,19 +166,19 @@ public class WinBollActivityManager { | ||||
|     // | ||||
|     public void finishAll() { | ||||
|         try { | ||||
|             for (String key : _mapActivityList.keySet()) { | ||||
|             for (String key : _mapIWinBollList.keySet()) { | ||||
|                 //System.out.println("Key: " + key + ", Value: " + _mapActivityList.get(key)); | ||||
|                 WinBollActivity activity = _mapActivityList.get(key); | ||||
|                 IWinBoll iWinBoll = _mapIWinBollList.get(key); | ||||
|                 //ToastUtils.show("finishAll() activity"); | ||||
|                 if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) { | ||||
|                 if (iWinBoll != null && !iWinBoll.getCurrentAppCompatActivity().isFinishing() && !iWinBoll.getCurrentAppCompatActivity().isDestroyed()) { | ||||
|                     //ToastUtils.show("activity != null ..."); | ||||
|                     if (WinBollGlobalApplication.getWinBollUI_TYPE() == WinBollGlobalApplication.WinBollUI_TYPE.Service) { | ||||
|                         // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。 | ||||
|                         activity.finishAndRemoveTask(); | ||||
|                         iWinBoll.getCurrentAppCompatActivity().finishAndRemoveTask(); | ||||
|                         //ToastUtils.show("finishAll() activity.finishAndRemoveTask();"); | ||||
|                     } else if (WinBollGlobalApplication.getWinBollUI_TYPE() == WinBollGlobalApplication.WinBollUI_TYPE.Aplication) { | ||||
|                         // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。 | ||||
|                         activity.finish(); | ||||
|                         iWinBoll.getCurrentAppCompatActivity().finish(); | ||||
|                         //ToastUtils.show("finishAll() activity.finish();"); | ||||
|                     } else { | ||||
|                         LogUtils.d(TAG, "WinBollApplication.WinBollUI_TYPE error."); | ||||
| @@ -193,9 +194,9 @@ public class WinBollActivityManager { | ||||
|     // | ||||
|     // 结束指定Activity | ||||
|     // | ||||
|     public <T extends WinBollActivity> void finish(T activity) { | ||||
|     public <T extends IWinBoll> void finish(T iWinBoll) { | ||||
|         try { | ||||
|             if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) { | ||||
|             if (iWinBoll != null && !iWinBoll.getCurrentAppCompatActivity().isFinishing() && !iWinBoll.getCurrentAppCompatActivity().isDestroyed()) { | ||||
|                 //根据tag 移除 MyActivity | ||||
|                 //String tag= activity.getTag(); | ||||
|                 //_mWinBollActivityList.remove(tag); | ||||
| @@ -210,10 +211,10 @@ public class WinBollActivityManager { | ||||
|                 // ★:0 1 2 3 [4] >> 3 | ||||
|                 // ★:[0] >> 直接关闭当前窗口 | ||||
|                 LogUtils.d(TAG, "finish no yet."); | ||||
|                 WinBollActivity preActivity = getPreActivity(activity); | ||||
|                 activity.finish(); | ||||
|                 if (preActivity != null) { | ||||
|                     resumeActivity(mContext, preActivity); | ||||
|                 IWinBoll preIWinBoll = getPreIWinBoll(iWinBoll); | ||||
|                 iWinBoll.getCurrentAppCompatActivity().finish(); | ||||
|                 if (preIWinBoll != null) { | ||||
|                     resumeActivity(mContext, preIWinBoll); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @@ -225,21 +226,21 @@ public class WinBollActivityManager { | ||||
|     // | ||||
|     // 获取窗口队列中的前一个窗口 | ||||
|     // | ||||
|     WinBollActivity getPreActivity(WinBollActivity activity) { | ||||
|     IWinBoll getPreIWinBoll(IWinBoll iWinBoll) { | ||||
|         try { | ||||
|             boolean bingo = false; | ||||
|             WinBollActivity preActivity = null; | ||||
|             for (Map.Entry<String, WinBollActivity> entity : _mapActivityList.entrySet()) { | ||||
|                 if (entity.getKey().equals(activity.getTag())) { | ||||
|             IWinBoll preIWinBoll = null; | ||||
|             for (Map.Entry<String, IWinBoll> entity : _mapIWinBollList.entrySet()) { | ||||
|                 if (entity.getKey().equals(iWinBoll.getTag())) { | ||||
|                     bingo = true; | ||||
|                     LogUtils.d(TAG, "bingo"); | ||||
|                     break; | ||||
|                 } | ||||
|                 preActivity = entity.getValue(); | ||||
|                 preIWinBoll = entity.getValue(); | ||||
|             } | ||||
|  | ||||
|             if (bingo) { | ||||
|                 return preActivity; | ||||
|                 return preIWinBoll; | ||||
|             } | ||||
|         } catch (Exception e) { | ||||
|             LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); | ||||
| @@ -251,10 +252,10 @@ public class WinBollActivityManager { | ||||
|     // | ||||
|     // 从管理列表中移除管理项 | ||||
|     // | ||||
|     public <T extends WinBollActivity> boolean registeRemove(T activity) { | ||||
|         WinBollActivity activityTest = _mapActivityList.get(activity.getTag()); | ||||
|         if (activityTest != null) { | ||||
|             _mapActivityList.remove(activity.getTag()); | ||||
|     public <T extends IWinBoll> boolean registeRemove(T activity) { | ||||
|         IWinBoll iWinBollTest = _mapIWinBollList.get(activity.getTag()); | ||||
|         if (iWinBollTest != null) { | ||||
|             _mapIWinBollList.remove(activity.getTag()); | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
| @@ -263,13 +264,13 @@ public class WinBollActivityManager { | ||||
|     // | ||||
|     // 打印管理列表项列表里的信息 | ||||
|     // | ||||
|     public static void printAvtivityListInfo() { | ||||
|     public static void printIWinBollListInfo() { | ||||
|         //LogUtils.d(TAG, "printAvtivityListInfo"); | ||||
|         if (!_mapActivityList.isEmpty()) { | ||||
|             StringBuilder sb = new StringBuilder("Map entries : " + Integer.toString(_mapActivityList.size())); | ||||
|             Iterator<Map.Entry<String, WinBollActivity>> iterator = _mapActivityList.entrySet().iterator(); | ||||
|         if (!_mapIWinBollList.isEmpty()) { | ||||
|             StringBuilder sb = new StringBuilder("Map entries : " + Integer.toString(_mapIWinBollList.size())); | ||||
|             Iterator<Map.Entry<String, IWinBoll>> iterator = _mapIWinBollList.entrySet().iterator(); | ||||
|             while (iterator.hasNext()) { | ||||
|                 Map.Entry<String, WinBollActivity> entry = iterator.next(); | ||||
|                 Map.Entry<String, IWinBoll> entry = iterator.next(); | ||||
|                 sb.append("\nKey: " + entry.getKey() + ", \nValue: " + entry.getValue().getTag()); | ||||
|                 //ToastUtils.show("\nKey: " + entry.getKey() + ", Value: " + entry.getValue().getTag()); | ||||
|             } | ||||
|   | ||||
| @@ -0,0 +1,16 @@ | ||||
| package cc.winboll.studio.libapputils.app; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * @Author ZhanGSKen@QQ.COM | ||||
|  * @Date 2025/02/04 10:19:34 | ||||
|  * @Describe WinBoll 工厂 | ||||
|  */ | ||||
| public class WinBollFactory { | ||||
|  | ||||
|     public static final String TAG = "WinBollFactory"; | ||||
|  | ||||
|     public static IWinBollActivity buildWinBollActivity(IWinBoll iWinBoll) { | ||||
|         return new IWinBollActivity(iWinBoll); | ||||
|     } | ||||
| } | ||||
| @@ -6,34 +6,40 @@ package cc.winboll.studio.libapputils.log; | ||||
|  * @Describe WinBoll 应用日志窗口 | ||||
|  */ | ||||
| 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.WinBollActivity; | ||||
| import cc.winboll.studio.libapputils.app.IWinBoll; | ||||
| import cc.winboll.studio.libapputils.app.WinBollGlobalApplication; | ||||
|  | ||||
| public class LogActivity extends WinBollActivity { | ||||
| public class LogActivity extends AppCompatActivity implements IWinBoll { | ||||
|  | ||||
|     public static final String TAG = "LogActivity"; | ||||
|  | ||||
|     LogView mLogView; | ||||
|  | ||||
|      | ||||
|     @Override | ||||
|     public AppCompatActivity getCurrentAppCompatActivity() { | ||||
|         return this; | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     public String getTag() { | ||||
|         return TAG; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Toolbar initToolBar() { | ||||
|     public Toolbar initToolBar() { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isEnableDisplayHomeAsUp() { | ||||
|     public boolean isEnableDisplayHomeAsUp() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isAddWinBollToolBar() { | ||||
|     public boolean isAddWinBollToolBar() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ZhanGSKen
					ZhanGSKen