fix: recover master-agent takeover session on android

This commit is contained in:
kris
2026-04-05 11:56:20 +08:00
parent 35913f9d1d
commit e00f7a55ea
2 changed files with 221 additions and 2 deletions

View File

@@ -40,7 +40,7 @@ public class MasterAgentTakeoverActivity extends BossScreenActivity {
setRefreshing(true);
executor.execute(() -> {
try {
BossApiClient.ApiResponse response = apiClient.getProjectAgentControls(projectId);
BossApiClient.ApiResponse response = loadTakeoverControls();
if (!response.ok()) {
throw new IllegalStateException(response.message());
}
@@ -98,7 +98,7 @@ public class MasterAgentTakeoverActivity extends BossScreenActivity {
setRefreshing(true);
executor.execute(() -> {
try {
BossApiClient.ApiResponse response = apiClient.updateProjectTakeoverSettings(
BossApiClient.ApiResponse response = saveTakeoverControls(
projectId,
null,
enabled
@@ -120,6 +120,44 @@ public class MasterAgentTakeoverActivity extends BossScreenActivity {
});
}
private BossApiClient.ApiResponse loadTakeoverControls() throws Exception {
BossApiClient.ApiResponse response = apiClient.getProjectAgentControls(projectId);
if (response.ok() || !isUnauthorized(response)) {
return response;
}
BossApiClient.ApiResponse loginResponse = apiClient.autoLogin();
if (!loginResponse.ok()) {
return response;
}
return apiClient.getProjectAgentControls(projectId);
}
private BossApiClient.ApiResponse saveTakeoverControls(
String projectId,
@Nullable Boolean takeoverEnabled,
@Nullable Boolean globalTakeoverEnabled
) throws Exception {
BossApiClient.ApiResponse response = apiClient.updateProjectTakeoverSettings(
projectId,
takeoverEnabled,
globalTakeoverEnabled
);
if (response.ok() || !isUnauthorized(response)) {
return response;
}
BossApiClient.ApiResponse loginResponse = apiClient.autoLogin();
if (!loginResponse.ok()) {
return response;
}
return apiClient.updateProjectTakeoverSettings(projectId, takeoverEnabled, globalTakeoverEnabled);
}
private boolean isUnauthorized(BossApiClient.ApiResponse response) {
return response != null
&& response.statusCode == 401
&& "UNAUTHORIZED".equals(response.message());
}
private void updateSaveAvailability() {
if (headerActionButton != null) {
headerActionButton.setEnabled(contentLoaded);