diff --git a/positions/build.properties b/positions/build.properties index 2822afa..2d1f1dc 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Oct 01 12:10:23 GMT 2025 +#Wed Oct 01 12:59:11 GMT 2025 stageCount=4 libraryProject= baseVersion=15.0 publishVersion=15.0.3 -buildCount=58 +buildCount=63 baseBetaVersion=15.0.4 diff --git a/positions/src/beta/res/values-zh/strings.xml b/positions/src/beta/res/values-zh/strings.xml new file mode 100644 index 0000000..c413bdf --- /dev/null +++ b/positions/src/beta/res/values-zh/strings.xml @@ -0,0 +1,4 @@ + + + @笨笨龙@ + diff --git a/positions/src/main/java/cc/winboll/studio/positions/App.java b/positions/src/main/java/cc/winboll/studio/positions/App.java index 216d70e..9ca6fd7 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/App.java +++ b/positions/src/main/java/cc/winboll/studio/positions/App.java @@ -41,6 +41,7 @@ import java.util.Arrays; import java.util.Date; import java.util.LinkedHashMap; import java.util.concurrent.atomic.AtomicBoolean; +import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; public class App extends GlobalApplication { @@ -51,6 +52,8 @@ public class App extends GlobalApplication { super.onCreate(); setIsDebuging(BuildConfig.DEBUG); + WinBoLLActivityManager.init(this); + // 初始化 Toast 框架 ToastUtils.init(this); // 设置 Toast 布局样式 diff --git a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java index 5a0dac0..f6fc071 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java @@ -1,21 +1,20 @@ package cc.winboll.studio.positions; -import android.content.ComponentName; -import android.content.Context; +import android.app.Activity; import android.content.Intent; -import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; -import android.os.IBinder; import android.view.View; +import android.widget.Button; import android.widget.CompoundButton; import android.widget.Switch; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.libappbase.LogActivity; +import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; +import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.positions.activities.LocationActivity; +import cc.winboll.studio.positions.activities.WinBoLLActivity; import cc.winboll.studio.positions.services.MainService; import cc.winboll.studio.positions.utils.AppConfigsUtil; import com.hjq.toast.ToastUtils; @@ -26,17 +25,29 @@ import com.hjq.toast.ToastUtils; * 2. 跳转至“位置管理页(LocationActivity)”和“日志页(LogActivity)” * 3. Java 7 语法适配:无 Lambda、显式接口实现、兼容低版本 */ -public class MainActivity extends AppCompatActivity { +public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity { public static final String TAG = "MainActivity"; // 位置权限请求码(自定义唯一标识) private static final int REQUEST_LOCATION_PERMISSIONS = 1001; // UI 控件:服务控制开关、顶部工具栏 private Switch mServiceSwitch; + private Button mManagePositionsButton; private Toolbar mToolbar; // 服务相关:服务实例、绑定状态标记 //private DistanceRefreshService mDistanceService; private boolean isServiceBound = false; + + + @Override + public Activity getActivity() { + return this; + } + + @Override + public String getTag() { + return TAG; + } // ---------------------- 服务连接回调(仅用于获取服务状态,不依赖服务执行核心逻辑) ---------------------- // private final ServiceConnection mServiceConn = new ServiceConnection() { @@ -69,8 +80,8 @@ public class MainActivity extends AppCompatActivity { // 1. 初始化顶部 Toolbar(保留原逻辑,设置页面标题) initToolbar(); - // 2. 初始化服务控制开关(核心功能:绑定开关点击事件) - initServiceSwitch(); + // 2. 初始化其他控件 + initViews(); // 3. 检查并申请位置权限(含后台GPS权限,确保服务启动前权限就绪) if (!checkLocationPermissions()) { requestLocationPermissions(); @@ -106,9 +117,12 @@ public class MainActivity extends AppCompatActivity { /** * 初始化服务控制开关:读取SP状态、绑定点击事件(含权限检查) */ - private void initServiceSwitch() { + private void initViews() { mServiceSwitch = (Switch) findViewById(R.id.switch_service_control); // 显式强转 mServiceSwitch.setChecked(AppConfigsUtil.getInstance(this).isEnableMainService(true)); + + mManagePositionsButton = (Button) findViewById(R.id.btn_manage_positions); + mManagePositionsButton.setEnabled(mServiceSwitch.isChecked()); // Java 7 用匿名内部类实现 CompoundButton.OnCheckedChangeListener mServiceSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @@ -136,6 +150,8 @@ public class MainActivity extends AppCompatActivity { // } stopService(new Intent(MainActivity.this, MainService.class)); } + + mManagePositionsButton.setEnabled(isChecked); } }); } @@ -166,7 +182,7 @@ public class MainActivity extends AppCompatActivity { * 无服务状态限制,直接跳转 */ public void onLog(View view) { - LogActivity.startLogActivity(this); // 调用LogActivity静态方法跳转(保留原逻辑) + WinBoLLActivityManager.getInstance().startLogActivity(this); // 调用LogActivity静态方法跳转(保留原逻辑) } // ---------------------- 新增:位置权限处理(适配Java7 + 后台GPS权限) ---------------------- diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/LocationActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/LocationActivity.java index 7a01685..6d9df27 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/activities/LocationActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/LocationActivity.java @@ -5,15 +5,16 @@ package cc.winboll.studio.positions.activities; * @Date 2025/09/29 18:22 * @Describe 位置列表页面(直连服务数据+移除绑定,兼容服务私有字段) */ +import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Toast; -import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.positions.R; import cc.winboll.studio.positions.adapters.PositionAdapter; @@ -29,7 +30,7 @@ import java.util.ArrayList; * 3. 保留“直连服务实例”的核心需求,避免绑定,但尊重服务数据私有性 * 4. 兼容Java 7语法,无Lambda、显式类型转换 */ -public class LocationActivity extends AppCompatActivity { +public class LocationActivity extends WinBoLLActivity implements IWinBoLLActivity { public static final String TAG = "LocationActivity"; // SP配置常量(判断服务是否运行) @@ -43,6 +44,17 @@ public class LocationActivity extends AppCompatActivity { // 缓存服务数据(从服务PUBLIC方法获取,避免重复调用) private ArrayList mCachedPositionList; private ArrayList mCachedTaskList; + + + @Override + public Activity getActivity() { + return this; + } + + @Override + public String getTag() { + return TAG; + } // ---------------------- 页面生命周期(简化资源管理,无服务绑定) ---------------------- @Override diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/WinBoLLActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/WinBoLLActivity.java new file mode 100644 index 0000000..3cf13b7 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/WinBoLLActivity.java @@ -0,0 +1,60 @@ +package cc.winboll.studio.positions.activities; + +/** + * @Author ZhanGSKen&豆包大模型 + * @Date 2025/09/29 00:11 + * @Describe WinBoLL 窗口基础类 + */ +import android.app.Activity; +import android.os.Bundle; +import android.view.MenuItem; +import androidx.appcompat.app.AppCompatActivity; +import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; +import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; +import cc.winboll.studio.libappbase.LogUtils; + +public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity { + + public static final String TAG = "WinBoLLActivity"; + + @Override + public Activity getActivity() { + return this; + } + + @Override + public String getTag() { + return TAG; + } + + @Override + protected void onResume() { + super.onResume(); + LogUtils.d(TAG, String.format("onResume %s", getTag())); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + /*if (item.getItemId() == R.id.item_log) { + WinBoLLActivityManager.getInstance().startLogActivity(this); + return true; + } else if (item.getItemId() == R.id.item_home) { + startActivity(new Intent(this, MainActivity.class)); + return true; + }*/ + // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。 + return super.onOptionsItemSelected(item); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + WinBoLLActivityManager.getInstance().add(this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + WinBoLLActivityManager.getInstance().registeRemove(this); + } +} diff --git a/positions/src/main/res/layout/activity_main.xml b/positions/src/main/res/layout/activity_main.xml index 7673f9e..50dfe05 100644 --- a/positions/src/main/res/layout/activity_main.xml +++ b/positions/src/main/res/layout/activity_main.xml @@ -25,7 +25,8 @@ android:layout_height="wrap_content" android:layout_margin="16dp" android:onClick="onPositions" - android:text="进入位置管理"/> + android:text="进入位置管理" + android:id="@+id/btn_manage_positions"/>