1 Commits

Author SHA1 Message Date
22d2cf9eda Update v9.4.5: Forced Update Flow & Focus Highlight 2025-11-25 19:16:12 +00:00
8 changed files with 83 additions and 56 deletions

View File

@@ -8,8 +8,8 @@ android {
applicationId "com.streamplayer" applicationId "com.streamplayer"
minSdk 21 minSdk 21
targetSdk 33 targetSdk 33
versionCode 94400 versionCode 94500
versionName "9.4.4" versionName "9.4.5"
buildConfigField "String", "DEVICE_REGISTRY_URL", '"http://194.163.191.200:4000"' buildConfigField "String", "DEVICE_REGISTRY_URL", '"http://194.163.191.200:4000"'
} }

View File

@@ -296,8 +296,7 @@ public class MainActivity extends AppCompatActivity {
if (info == null) { if (info == null) {
return; return;
} }
boolean forceUpdate = info.isMandatory(BuildConfig.VERSION_CODE); showUpdateDialog(info, true);
showUpdateDialog(info, forceUpdate);
} }
private void showUpdateDialog(UpdateManager.UpdateInfo info, boolean mandatory) { private void showUpdateDialog(UpdateManager.UpdateInfo info, boolean mandatory) {
@@ -308,20 +307,15 @@ public class MainActivity extends AppCompatActivity {
updateDialog.dismiss(); updateDialog.dismiss();
} }
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.ThemeOverlay_StreamPlayer_AlertDialog) AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.ThemeOverlay_StreamPlayer_AlertDialog)
.setTitle(mandatory ? R.string.update_required_title : R.string.update_available_title) .setTitle(R.string.update_required_title)
.setMessage(buildUpdateMessage(info)) .setMessage(buildUpdateMessage(info))
.setPositiveButton(R.string.update_action_download, .setPositiveButton(R.string.update_action_download,
(dialog, which) -> updateManager.downloadUpdate(MainActivity.this, info)) (dialog, which) -> updateManager.downloadUpdate(MainActivity.this, info))
.setNeutralButton(R.string.update_action_view_release, .setNegativeButton(R.string.update_action_close_app,
(dialog, which) -> openReleasePage(info)); (dialog, which) -> closeAppCompletely())
if (mandatory) { .setCancelable(false);
builder.setCancelable(false);
builder.setNegativeButton(R.string.update_action_close_app,
(dialog, which) -> closeAppCompletely());
} else {
builder.setNegativeButton(R.string.update_action_later, null);
}
updateDialog = builder.show(); updateDialog = builder.show();
updateDialog.setCanceledOnTouchOutside(false);
} }
private CharSequence buildUpdateMessage(UpdateManager.UpdateInfo info) { private CharSequence buildUpdateMessage(UpdateManager.UpdateInfo info) {
@@ -349,30 +343,9 @@ public class MainActivity extends AppCompatActivity {
builder.append('\n'); builder.append('\n');
builder.append(info.getReleaseNotesPreview()); builder.append(info.getReleaseNotesPreview());
} }
if (!info.isMandatory(BuildConfig.VERSION_CODE)) {
builder.append("\n\n");
builder.append(getString(R.string.update_optional_hint));
}
return builder.toString(); return builder.toString();
} }
private void openReleasePage(UpdateManager.UpdateInfo info) {
String url = info.releasePageUrl;
if (url == null || url.isEmpty()) {
url = info.downloadUrl;
}
if (url == null || url.isEmpty()) {
Toast.makeText(this, R.string.update_error_missing_url, Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
try {
startActivity(intent);
} catch (Exception e) {
Toast.makeText(this, R.string.update_error_open_release, Toast.LENGTH_SHORT).show();
}
}
private void showBlockedDialog(String reason, String tokenPart) { private void showBlockedDialog(String reason, String tokenPart) {
if (isFinishing()) { if (isFinishing()) {
return; return;

View File

@@ -1,10 +1,62 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/accent_blue" /> <item android:state_enabled="false">
<corners android:radius="20dp" /> <shape>
<padding <solid android:color="@color/accent_blue_disabled" />
android:bottom="8dp" <corners android:radius="20dp" />
android:left="20dp" <padding
android:right="20dp" android:bottom="8dp"
android:top="8dp" /> android:left="20dp"
</shape> android:right="20dp"
android:top="8dp" />
</shape>
</item>
<item android:state_pressed="true">
<shape>
<solid android:color="@color/accent_blue_light" />
<corners android:radius="20dp" />
<padding
android:bottom="8dp"
android:left="20dp"
android:right="20dp"
android:top="8dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<solid android:color="@color/accent_blue_light" />
<corners android:radius="20dp" />
<padding
android:bottom="8dp"
android:left="20dp"
android:right="20dp"
android:top="8dp" />
</shape>
</item>
<item android:state_hovered="true">
<shape>
<solid android:color="@color/accent_blue_light" />
<corners android:radius="20dp" />
<padding
android:bottom="8dp"
android:left="20dp"
android:right="20dp"
android:top="8dp" />
</shape>
</item>
<item>
<shape>
<solid android:color="@color/accent_blue" />
<corners android:radius="20dp" />
<padding
android:bottom="8dp"
android:left="20dp"
android:right="20dp"
android:top="8dp" />
</shape>
</item>
</selector>

View File

@@ -95,6 +95,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:background="@drawable/bg_events_refresh_button" android:background="@drawable/bg_events_refresh_button"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:textColor="@color/white" android:textColor="@color/white"
android:text="@string/events_refresh_action" android:text="@string/events_refresh_action"
android:textAllCaps="false" android:textAllCaps="false"

View File

@@ -4,5 +4,7 @@
<color name="white">#FFFFFFFF</color> <color name="white">#FFFFFFFF</color>
<color name="text_secondary">#B3FFFFFF</color> <color name="text_secondary">#B3FFFFFF</color>
<color name="accent_blue">#FF1E88E5</color> <color name="accent_blue">#FF1E88E5</color>
<color name="accent_blue_light">#FF42A5F5</color>
<color name="accent_blue_disabled">#661E88E5</color>
<color name="dialog_background">#FF121212</color> <color name="dialog_background">#FF121212</color>
</resources> </resources>

View File

@@ -10,16 +10,13 @@
<string name="update_required_title">Actualización obligatoria</string> <string name="update_required_title">Actualización obligatoria</string>
<string name="update_available_title">Actualización disponible</string> <string name="update_available_title">Actualización disponible</string>
<string name="update_action_download">Actualizar</string> <string name="update_action_download">Actualizar</string>
<string name="update_action_view_release">Ver detalles</string>
<string name="update_action_close_app">Salir</string> <string name="update_action_close_app">Salir</string>
<string name="update_action_later">Más tarde</string>
<string name="update_current_version">Versión instalada: %1$s (%2$d)</string> <string name="update_current_version">Versión instalada: %1$s (%2$d)</string>
<string name="update_latest_version">Última versión publicada: %1$s (%2$d)</string> <string name="update_latest_version">Última versión publicada: %1$s (%2$d)</string>
<string name="update_min_supported">Versiones anteriores a %1$d ya no están permitidas.</string> <string name="update_min_supported">Versiones anteriores a %1$d ya no están permitidas.</string>
<string name="update_download_size">Tamaño aproximado: %1$s</string> <string name="update_download_size">Tamaño aproximado: %1$s</string>
<string name="update_downloads">Descargas registradas: %1$d</string> <string name="update_downloads">Descargas registradas: %1$d</string>
<string name="update_release_notes_title">Novedades</string> <string name="update_release_notes_title">Novedades</string>
<string name="update_optional_hint">Puedes continuar usando la app, pero recomendamos instalar la actualización para obtener el mejor rendimiento.</string>
<string name="update_error_checking">No se pudo verificar actualizaciones (%1$s)</string> <string name="update_error_checking">No se pudo verificar actualizaciones (%1$s)</string>
<string name="update_error_open_release">No se pudo abrir el detalle de la versión</string> <string name="update_error_open_release">No se pudo abrir el detalle de la versión</string>
<string name="update_error_empty_response">Respuesta vacía del servidor de releases</string> <string name="update_error_empty_response">Respuesta vacía del servidor de releases</string>

View File

@@ -6,8 +6,8 @@
"model": "SM-S928B", "model": "SM-S928B",
"manufacturer": "Samsung", "manufacturer": "Samsung",
"osVersion": "16 (API 36)", "osVersion": "16 (API 36)",
"appVersionName": "9.4.4", "appVersionName": "9.4.5",
"appVersionCode": 94400, "appVersionCode": 94500,
"firstSeen": "2025-11-23T22:31:13.359Z", "firstSeen": "2025-11-23T22:31:13.359Z",
"lastSeen": "2025-11-23T23:11:07.215Z", "lastSeen": "2025-11-23T23:11:07.215Z",
"blocked": false, "blocked": false,

View File

@@ -1,10 +1,10 @@
{ {
"versionCode": 94400, "versionCode": 94500,
"versionName": "9.4.4", "versionName": "9.4.5",
"minSupportedVersionCode": 91000, "minSupportedVersionCode": 91000,
"forceUpdate": false, "forceUpdate": true,
"downloadUrl": "https://gitea.cbcren.online/renato97/app/releases/download/v9.4.4/StreamPlayer-v9.4.4.apk", "downloadUrl": "https://gitea.cbcren.online/renato97/app/releases/download/v9.4.5/StreamPlayer-v9.4.5.apk",
"fileName": "StreamPlayer-v9.4.4.apk", "fileName": "StreamPlayer-v9.4.5.apk",
"sizeBytes": 5948849, "sizeBytes": 5947752,
"notes": "StreamPlayer v9.4.4\n\nCorrecciones y mejoras:\n\n- Los botones de actualización y cierre en los diálogos ahora se ven correctamente en temas claros y oscuros.\n- Nuevo estilo oscuro en los diálogos para mejorar el contraste del texto y acciones.\n- Botón \"Actualizar ahora\" de eventos con diseño sólido para que destaque en cualquier fondo.\n- Se mantiene la actualización silenciosa y el caché de eventos para que siempre encuentres la grilla fresca al reiniciar.\n\nRecomendamos actualizar para asegurar la mejor experiencia con la sección de eventos y el sistema de actualizaciones." "notes": "StreamPlayer v9.4.5\n\nNovedades:\n\n- El botón \"Actualizar ahora\" de Eventos resalta cuando está enfocado o presionado para que siempre sepas que quedó seleccionado.\n- Las actualizaciones in-app ahora son obligatorias: cuando hay una versión nueva solo verás las opciones Actualizar o Salir.\n- Se eliminó el botón de \"Ver detalles\" para evitar redirecciones; todo sucede dentro de la app.\n- Ajustes visuales adicionales en los diálogos para mantener el contraste óptimo.\n\nActualiza para asegurarte de recibir inmediatamente las últimas correcciones sin pasos adicionales."
} }