diff --git a/appbase/build.gradle b/appbase/build.gradle index 85ff4b5..727c7be 100644 --- a/appbase/build.gradle +++ b/appbase/build.gradle @@ -24,13 +24,13 @@ android { defaultConfig { applicationId "cc.winboll.studio.appbase" - minSdkVersion 26 + minSdkVersion 24 targetSdkVersion 29 versionCode 1 // versionName 更新后需要手动设置 // .winboll/winbollBuildProps.properties 文件的 stageCount=0 // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" - versionName "15.1" + versionName "15.2" if(true) { versionName = genVersionName("${versionName}") } diff --git a/appbase/build.properties b/appbase/build.properties index 18d898d..ad1af13 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Mar 26 15:43:21 HKT 2025 +#Sat Mar 29 08:43:44 HKT 2025 stageCount=1 libraryProject=libappbase -baseVersion=15.1 -publishVersion=15.1.0 +baseVersion=15.2 +publishVersion=15.2.0 buildCount=0 -baseBetaVersion=15.1.1 +baseBetaVersion=15.2.1 diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml index 40fd259..3ff9087 100644 --- a/appbase/src/main/AndroidManifest.xml +++ b/appbase/src/main/AndroidManifest.xml @@ -8,15 +8,15 @@ android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/MyAPPBaseTheme" - android:resizeableActivity="true"> + android:resizeableActivity="true" + android:process=":App"> + android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"> @@ -32,7 +32,18 @@ - + + + - - - diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java index cf0133e..b25b6ac 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java @@ -1,12 +1,10 @@ package cc.winboll.studio.appbase; import android.app.Activity; -import android.app.ActivityOptions; import android.content.ComponentName; import android.content.Intent; -import android.graphics.Rect; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -16,17 +14,17 @@ import cc.winboll.studio.appbase.activities.NewActivity; import cc.winboll.studio.appbase.services.MainService; import cc.winboll.studio.appbase.services.TestDemoBindService; import cc.winboll.studio.appbase.services.TestDemoService; +import cc.winboll.studio.libappbase.CrashHandler; import cc.winboll.studio.libappbase.GlobalApplication; +import cc.winboll.studio.libappbase.GlobalCrashActivity; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.sos.SOS; import cc.winboll.studio.libappbase.utils.ToastUtils; import cc.winboll.studio.libappbase.widgets.StatusWidget; import cc.winboll.studio.libappbase.winboll.IWinBollActivity; -import cc.winboll.studio.libappbase.winboll.LogActivity; -import cc.winboll.studio.libappbase.winboll.WinBollActivityManager; -import android.support.v7.widget.Toolbar; +import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog; -public class MainActivity extends AppCompatActivity implements IWinBollActivity { +public class MainActivity extends WinBollActivityBase implements IWinBollActivity { public static final String TAG = "MainActivity"; @@ -65,15 +63,12 @@ public class MainActivity extends AppCompatActivity implements IWinBollActivity @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_main, menu); + getMenuInflater().inflate(R.menu.toolbar_appbase, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == cc.winboll.studio.appbase.R.id.item_log) { - onLogActivity(); - return true; - } // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。 return super.onOptionsItemSelected(item); } @@ -92,6 +87,12 @@ public class MainActivity extends AppCompatActivity implements IWinBollActivity boolean isDebuging = ((CheckBox)view).isChecked(); GlobalApplication.setIsDebuging(isDebuging); } + + public void onPreviewGlobalCrashActivity(View view) { + Intent intent = new Intent(this, GlobalCrashActivity.class); + intent.putExtra(CrashHandler.EXTRA_CRASH_INFO, "Demo log..."); + startActivity(intent); + } public void onStartCenter(View view) { MainService.startMainService(this); @@ -136,6 +137,8 @@ public class MainActivity extends AppCompatActivity implements IWinBollActivity startService(intent); } + + public void onStopTestDemoService(View view) { Intent intent = new Intent(this, TestDemoService.class); @@ -173,26 +176,8 @@ public class MainActivity extends AppCompatActivity implements IWinBollActivity } public void onTestOpenNewActivity(View view) { - WinBollActivityManager.getInstance(this).startWinBollActivity(this, NewActivity.class); + GlobalApplication.getWinBollActivityManager().startWinBollActivity(this, NewActivity.class); } - public void onLogActivity() { - - - Intent intent = new Intent(MainActivity.this, LogActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT); - // Define the bounds. - Rect bounds = new Rect(500, 300, 100, 0); - -// Set the bounds as an activity option. - - ActivityOptions options = ActivityOptions.makeBasic(); - - options.setLaunchBounds(bounds); - - //Intent intent = new Intent(this, LpgActivity.class); - - startActivity(intent, options.toBundle()); - //WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, LogActivity.class); - } + } diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/WinBollActivityBase.java b/appbase/src/main/java/cc/winboll/studio/appbase/WinBollActivityBase.java new file mode 100644 index 0000000..54765d8 --- /dev/null +++ b/appbase/src/main/java/cc/winboll/studio/appbase/WinBollActivityBase.java @@ -0,0 +1,82 @@ +package cc.winboll.studio.appbase; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/03/28 15:34:16 + * @Describe 应用活动窗口基类 + */ +import android.app.Activity; +import android.os.Bundle; +import android.os.PersistableBundle; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; +import cc.winboll.studio.appbase.App; +import cc.winboll.studio.appbase.R; +import cc.winboll.studio.libappbase.GlobalApplication; +import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog; +import cc.winboll.studio.libappbase.winboll.IWinBollActivity; +import cc.winboll.studio.libappbase.winboll.WinBollActivityManager; + +public class WinBollActivityBase extends AppCompatActivity implements IWinBollActivity { + + public static final String TAG = "WinBollActivityBase"; + + @Override + public Activity getActivity() { + return this; + } + + @Override + public String getTag() { + return TAG; + } + + WinBollActivityManager getWinBollActivityManager() { + return WinBollActivityManager.getInstance(GlobalApplication.getInstance()); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWinBollActivityManager().add(this); + } + + @Override + public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) { + super.onPostCreate(savedInstanceState, persistentState); + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == cc.winboll.studio.appbase.R.id.item_log) { + GlobalApplication.getWinBollActivityManager().startLogActivity(this); + return true; + } else if(item.getItemId() == cc.winboll.studio.appbase.R.id.item_minimal) { + //moveTaskToBack(true); + exit(); + } + // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。 + return super.onOptionsItemSelected(item); + } + + void exit() { + YesNoAlertDialog.show(this, "Exit " + getString(R.string.app_name), "Close all activity and exit?", new YesNoAlertDialog.OnDialogResultListener(){ + + @Override + public void onYes() { + App.getWinBollActivityManager().finishAll(); + } + + @Override + public void onNo() { + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + getWinBollActivityManager().registeRemove(this); + } +} diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/activities/New2Activity.java b/appbase/src/main/java/cc/winboll/studio/appbase/activities/New2Activity.java index 0df980f..37f4422 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/activities/New2Activity.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/activities/New2Activity.java @@ -7,16 +7,20 @@ package cc.winboll.studio.appbase.activities; */ import android.app.Activity; import android.os.Bundle; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import cc.winboll.studio.appbase.R; -import cc.winboll.studio.libappbase.LogView; +import cc.winboll.studio.appbase.WinBollActivityBase; +import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.winboll.IWinBollActivity; -import cc.winboll.studio.libappbase.winboll.WinBollActivityManager; -public class New2Activity extends Activity implements IWinBollActivity { +public class New2Activity extends WinBollActivityBase implements IWinBollActivity { public static final String TAG = "New2Activity"; + Toolbar mToolbar; //LogView mLogView; @Override @@ -36,6 +40,9 @@ public class New2Activity extends Activity implements IWinBollActivity { // mLogView = findViewById(R.id.logview); // mLogView.start(); + mToolbar = findViewById(R.id.toolbar); + setSupportActionBar(mToolbar); + } @Override @@ -45,14 +52,32 @@ public class New2Activity extends Activity implements IWinBollActivity { } public void onCloseThisActivity(View view) { - WinBollActivityManager.getInstance(this).finish(this); + GlobalApplication.getWinBollActivityManager().finish(this); } public void onCloseAllActivity(View view) { - WinBollActivityManager.getInstance(this).finishAll(); + GlobalApplication.getWinBollActivityManager().finishAll(); } public void onNewActivity(View view) { - WinBollActivityManager.getInstance(this).startWinBollActivity(this, NewActivity.class); + GlobalApplication.getWinBollActivityManager().startWinBollActivity(this, NewActivity.class); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.toolbar_main, menu); + getMenuInflater().inflate(R.menu.toolbar_appbase, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == cc.winboll.studio.appbase.R.id.item_log) { + GlobalApplication.getWinBollActivityManager().startLogActivity(this); + return true; + } + // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。 + return super.onOptionsItemSelected(item); } } diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/activities/NewActivity.java b/appbase/src/main/java/cc/winboll/studio/appbase/activities/NewActivity.java index 3a7c370..907c3ad 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/activities/NewActivity.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/activities/NewActivity.java @@ -6,16 +6,20 @@ package cc.winboll.studio.appbase.activities; */ import android.app.Activity; import android.os.Bundle; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import cc.winboll.studio.appbase.R; -import cc.winboll.studio.libappbase.LogView; +import cc.winboll.studio.appbase.WinBollActivityBase; +import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.winboll.IWinBollActivity; -import cc.winboll.studio.libappbase.winboll.WinBollActivityManager; -public class NewActivity extends Activity implements IWinBollActivity { +public class NewActivity extends WinBollActivityBase implements IWinBollActivity { public static final String TAG = "NewActivity"; + Toolbar mToolbar; //LogView mLogView; @Override @@ -34,6 +38,9 @@ public class NewActivity extends Activity implements IWinBollActivity { setContentView(R.layout.activity_new); // mLogView = findViewById(R.id.logview); // mLogView.start(); + mToolbar = findViewById(R.id.toolbar); + setSupportActionBar(mToolbar); + } @Override @@ -43,14 +50,32 @@ public class NewActivity extends Activity implements IWinBollActivity { } public void onCloseThisActivity(View view) { - WinBollActivityManager.getInstance(this).finish(this); + GlobalApplication.getWinBollActivityManager().finish(this); } public void onCloseAllActivity(View view) { - WinBollActivityManager.getInstance(this).finishAll(); + GlobalApplication.getWinBollActivityManager().finishAll(); } public void onNew2Activity(View view) { - WinBollActivityManager.getInstance(this).startWinBollActivity(this, New2Activity.class); + GlobalApplication.getWinBollActivityManager().startWinBollActivity(this, New2Activity.class); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.toolbar_main, menu); + getMenuInflater().inflate(R.menu.toolbar_appbase, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == cc.winboll.studio.appbase.R.id.item_log) { + GlobalApplication.getWinBollActivityManager().startLogActivity(this); + return true; + } + // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。 + return super.onOptionsItemSelected(item); } } diff --git a/appbase/src/main/res/layout/activity_main.xml b/appbase/src/main/res/layout/activity_main.xml index b86b6d4..193d0cc 100644 --- a/appbase/src/main/res/layout/activity_main.xml +++ b/appbase/src/main/res/layout/activity_main.xml @@ -39,28 +39,41 @@ android:layout_height="wrap_content" android:text="Android版本10的代号是“Q”,API级别是29。 Android 10开始谷歌不再公开使用甜品作为版本代号,但内部仍保留了大量与“Q”相关的元素。Android 10本身并没有严格对应某个特定的Java版本,但在开发Android 10应用时,通常可以使用Java 8或更高版本。 Java 8为Android开发带来了诸如Lambda表达式、方法引用等新特性,能提高开发效率和代码可读性,与Android 10开发适配良好。Java 9及更高版本也可用于Android 10开发,能使用一些新的语言特性和API,但可能需要注意兼容性和配置问题。"/> - + android:layout_height="wrap_content"> - + android:gravity="right|center_vertical" + android:layout_width="wrap_content"> -