Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 22d2cf9eda | |||
| d2c3041b0a |
@@ -8,8 +8,8 @@ android {
|
|||||||
applicationId "com.streamplayer"
|
applicationId "com.streamplayer"
|
||||||
minSdk 21
|
minSdk 21
|
||||||
targetSdk 33
|
targetSdk 33
|
||||||
versionCode 94300
|
versionCode 94500
|
||||||
versionName "9.4.3"
|
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"'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
10
app/src/main/res/drawable/bg_dialog_dark.xml
Normal file
10
app/src/main/res/drawable/bg_dialog_dark.xml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<solid android:color="@color/dialog_background" />
|
||||||
|
<corners android:radius="18dp" />
|
||||||
|
<padding
|
||||||
|
android:bottom="16dp"
|
||||||
|
android:left="16dp"
|
||||||
|
android:right="16dp"
|
||||||
|
android:top="16dp" />
|
||||||
|
</shape>
|
||||||
62
app/src/main/res/drawable/bg_events_refresh_button.xml
Normal file
62
app/src/main/res/drawable/bg_events_refresh_button.xml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_enabled="false">
|
||||||
|
<shape>
|
||||||
|
<solid android:color="@color/accent_blue_disabled" />
|
||||||
|
<corners android:radius="20dp" />
|
||||||
|
<padding
|
||||||
|
android:bottom="8dp"
|
||||||
|
android:left="20dp"
|
||||||
|
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>
|
||||||
@@ -94,6 +94,11 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
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:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:focusableInTouchMode="true"
|
||||||
|
android:textColor="@color/white"
|
||||||
android:text="@string/events_refresh_action"
|
android:text="@string/events_refresh_action"
|
||||||
android:textAllCaps="false"
|
android:textAllCaps="false"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
android:id="@+id/blocked_message_text"
|
android:id="@+id/blocked_message_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/white"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/device_blocked_token_label"
|
android:text="@string/device_blocked_token_label"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/white"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
android:layout_marginTop="4dp"
|
android:layout_marginTop="4dp"
|
||||||
android:background="@android:color/transparent"
|
android:background="@android:color/transparent"
|
||||||
android:padding="8dp"
|
android:padding="8dp"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/white"
|
||||||
android:textIsSelectable="true"
|
android:textIsSelectable="true"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -3,4 +3,8 @@
|
|||||||
<color name="black">#FF000000</color>
|
<color name="black">#FF000000</color>
|
||||||
<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_light">#FF42A5F5</color>
|
||||||
|
<color name="accent_blue_disabled">#661E88E5</color>
|
||||||
|
<color name="dialog_background">#FF121212</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -8,8 +8,16 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="ThemeOverlay.StreamPlayer.AlertDialog" parent="ThemeOverlay.AppCompat.Dialog.Alert">
|
<style name="ThemeOverlay.StreamPlayer.AlertDialog" parent="ThemeOverlay.AppCompat.Dialog.Alert">
|
||||||
|
<item name="android:windowBackground">@drawable/bg_dialog_dark</item>
|
||||||
|
<item name="android:colorBackground">@color/dialog_background</item>
|
||||||
|
<item name="colorBackgroundFloating">@color/dialog_background</item>
|
||||||
<item name="android:textColorPrimary">@color/white</item>
|
<item name="android:textColorPrimary">@color/white</item>
|
||||||
<item name="android:textColorSecondary">@color/white</item>
|
<item name="android:textColorSecondary">@color/text_secondary</item>
|
||||||
<item name="colorAccent">@color/white</item>
|
<item name="colorAccent">@color/accent_blue</item>
|
||||||
|
<item name="android:buttonStyle">@style/StreamPlayer.DialogButton</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="StreamPlayer.DialogButton" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
|
||||||
|
<item name="android:textColor">@color/accent_blue</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -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.3",
|
"appVersionName": "9.4.5",
|
||||||
"appVersionCode": 94300,
|
"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,
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"versionCode": 94300,
|
"versionCode": 94500,
|
||||||
"versionName": "9.4.3",
|
"versionName": "9.4.5",
|
||||||
"minSupportedVersionCode": 91000,
|
"minSupportedVersionCode": 91000,
|
||||||
"forceUpdate": false,
|
"forceUpdate": true,
|
||||||
"downloadUrl": "https://gitea.cbcren.online/renato97/app/releases/download/v9.4.3/StreamPlayer-v9.4.3.apk",
|
"downloadUrl": "https://gitea.cbcren.online/renato97/app/releases/download/v9.4.5/StreamPlayer-v9.4.5.apk",
|
||||||
"fileName": "StreamPlayer-v9.4.3.apk",
|
"fileName": "StreamPlayer-v9.4.5.apk",
|
||||||
"sizeBytes": 5947283,
|
"sizeBytes": 5947752,
|
||||||
"notes": "StreamPlayer v9.4.3\n\nNovedades destacadas:\n\n- Botón \"Actualizar ahora\" en la sección de Eventos para refrescar manualmente la grilla.\n- Sincronización silenciosa cada 60 minutos para precargar nuevos eventos sin interrumpir la reproducción.\n- Cache persiste y se aplica automáticamente al reiniciar la app para asegurar datos frescos.\n- Cierre completo al salir para garantizar que cada inicio recargue con la última información disponible.\n- Correcciones y mejoras generales de estabilidad en la sección de eventos."
|
"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."
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user