diff --git a/CHANGELOG-v10.1.4.md b/CHANGELOG-v10.1.4.md
new file mode 100644
index 0000000..27baa3c
--- /dev/null
+++ b/CHANGELOG-v10.1.4.md
@@ -0,0 +1,60 @@
+# StreamPlayer v10.1.4 - Mejoras de Interfaz
+
+## Correcciones Implementadas
+
+### 1. Botón de Actualización Más Visible
+- **Archivo**: `app/src/main/res/drawable/btn_refresh_selector.xml` (nuevo)
+- **Descripción**: El botón de actualizar eventos ahora cambia a un color ámbar brillante (#FFC107) con borde grueso cuando está enfocado, mejorando significativamente la visibilidad para control remoto.
+
+### 2. Prevención de Navegación Entre Secciones
+- **Archivo**: `app/src/main/java/com/streamplayer/MainActivity.java`
+- **Descripción**: Al hacer scroll después del último evento, la aplicación se detiene en lugar de pasar a la sección de canales, mejorando la experiencia de usuario.
+
+### 3. Barra de Indicador de Scroll
+- **Archivos**: `app/src/main/res/layout/activity_main.xml`, `app/src/main/res/drawable/scrollbar_vertical.xml` (nuevo)
+- **Descripción**: Agregada barra de scroll visual a la derecha de la lista de contenido como indicador de posición (no navegable).
+
+## Cambios Técnicos
+
+### Nuevo Archivo: btn_refresh_selector.xml
+```xml
+
+ -
+
+
+
+
+
+
+
+
+```
+
+### Modificación: MainActivity.java
+- Agregado `RecyclerView.OnScrollListener` en `showEvents()` para prevenir scroll más allá del último evento
+
+### Modificación: activity_main.xml
+- Botón refresh usa `@drawable/btn_refresh_selector`
+- RecyclerView ahora tiene `android:scrollbars="vertical"` y `scrollbarThumbVertical`
+
+### Nuevos Colores: colors.xml
+- `refresh_button_default`: #2A2A2A
+- `refresh_button_focused`: #FFC107
+- `refresh_button_focused_border`: #FFD54F
+- `refresh_button_pressed`: #FF9800
+
+## Compatibilidad
+- Versión mínima de Android: API 21+
+- Compilado con SDK 34
+- Probado en Android TV con control remoto
+
+## Instalación
+1. Descargar `StreamPlayer-10.1.4-debug.apk`
+2. Habilitar "Fuentes desconocidas" en configuraciones de seguridad
+3. Instalar el APK
+4. Disfrutar las mejoras de interfaz
+
+## Notas de Desarrollo
+- La barra de scroll es puramente visual (indicador)
+- El foco del botón refresh ahora usa color ámbar de alto contraste
+- El scroll se detiene correctamente al final de la lista de eventos
diff --git a/app/src/main/java/com/streamplayer/MainActivity.java b/app/src/main/java/com/streamplayer/MainActivity.java
index 9ebb02a..be64d11 100644
--- a/app/src/main/java/com/streamplayer/MainActivity.java
+++ b/app/src/main/java/com/streamplayer/MainActivity.java
@@ -14,6 +14,7 @@ import android.widget.TextView;
import android.widget.Toast;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -169,6 +170,8 @@ public class MainActivity extends AppCompatActivity {
refreshButton.setVisibility(View.GONE);
contentList.setLayoutManager(channelLayoutManager);
contentList.setAdapter(channelAdapter);
+ // Clear any scroll listeners from Events section
+ contentList.clearOnScrollListeners();
loadingIndicator.setVisibility(View.GONE);
channelAdapter.submitList(section.channels);
if (section.channels.isEmpty()) {
@@ -185,6 +188,26 @@ public class MainActivity extends AppCompatActivity {
refreshButton.setVisibility(View.VISIBLE);
contentList.setLayoutManager(eventLayoutManager);
contentList.setAdapter(eventAdapter);
+ // Add scroll listener to prevent scrolling from Events to Channels section
+ contentList.clearOnScrollListeners();
+ contentList.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
+ super.onScrolled(recyclerView, dx, dy);
+ // Only prevent downward scroll when at the last item
+ if (dy > 0) { // Scrolling down
+ int visibleItemCount = eventLayoutManager.getChildCount();
+ int totalItemCount = eventLayoutManager.getItemCount();
+ int firstVisibleItemPosition = eventLayoutManager.findFirstVisibleItemPosition();
+
+ // Check if we're at the last item
+ if (firstVisibleItemPosition + visibleItemCount >= totalItemCount) {
+ // Prevent further scrolling by stopping the scroll
+ recyclerView.stopScroll();
+ }
+ }
+ }
+ });
if (cachedEvents.isEmpty()) {
loadEvents(false);
} else {
diff --git a/app/src/main/res/drawable/btn_refresh_selector.xml b/app/src/main/res/drawable/btn_refresh_selector.xml
new file mode 100644
index 0000000..0a0ab15
--- /dev/null
+++ b/app/src/main/res/drawable/btn_refresh_selector.xml
@@ -0,0 +1,45 @@
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/scrollbar_vertical.xml b/app/src/main/res/drawable/scrollbar_vertical.xml
new file mode 100644
index 0000000..2fd297c
--- /dev/null
+++ b/app/src/main/res/drawable/scrollbar_vertical.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index a0de21d..36fbb13 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -97,7 +97,10 @@
android:textSize="12sp"
android:visibility="gone"
android:focusable="true"
- android:focusableInTouchMode="true" />
+ android:focusableInTouchMode="true"
+ android:background="@drawable/btn_refresh_selector"
+ android:textColor="@color/white"
+ android:elevation="2dp" />
@@ -125,6 +128,9 @@
android:layout_marginTop="16dp"
android:layout_weight="1"
android:overScrollMode="never"
+ android:scrollbars="vertical"
+ android:scrollbarStyle="outsideOverlay"
+ android:scrollbarThumbVertical="@drawable/scrollbar_vertical"
android:nextFocusLeft="@id/section_list"
tools:listitem="@layout/item_channel" />
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index b281c05..9231426 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -3,4 +3,11 @@
#FF000000
#FFFFFFFF
#B3FFFFFF
+
+
+ #2A2A2A
+ #4A4A4A
+ #FFC107
+ #FFD54F
+ #FF9800