Segunda revisión completa: fixes críticos aplicados

- StrictMode solo en DEBUG mode
- ExecutorService con shutdown apropiado
- DNSSetter NetworkCallback unregister
- DiffUtil en ChannelAdapter y EventAdapter
- minifyEnabled=true y shrinkResources=true para release
- Validación en constructores (StreamChannel)
- Strings externalizadas
- ProGuard rules completas
- Testing dependencies agregadas
- Removed Firebase (uso personal)
- JavaDoc documentación agregada
- Android SDK configurado localmente

Compilado exitosamente: StreamPlayer v9.4.2 debug APK (11MB)
This commit is contained in:
renato97
2026-01-11 19:24:28 -03:00
commit 0a1d6f295f
2006 changed files with 159128 additions and 0 deletions

93
generate_icons.py Normal file
View File

@@ -0,0 +1,93 @@
#!/usr/bin/env python3
import os
from PIL import Image, ImageDraw, ImageFont
import sys
def create_icon(size, filename):
"""Create a simple streaming app icon"""
# Create image with transparent background
img = Image.new('RGBA', (size, size), (0, 0, 0, 0))
draw = ImageDraw.Draw(img)
# Background circle - dark blue gradient effect
margin = size // 10
draw.ellipse([margin, margin, size-margin, size-margin],
fill=(25, 25, 112, 255), outline=(70, 130, 180, 255), width=2)
# Play button triangle
play_margin = size // 4
play_size = size - 2 * play_margin
points = [
(play_margin + play_size // 4, play_margin),
(play_margin + play_size // 4, play_margin + play_size),
(play_margin + 3 * play_size // 4, play_margin + play_size // 2)
]
draw.polygon(points, fill=(255, 255, 255, 255))
# Save image
img.save(filename, 'PNG')
print(f"Created icon: {filename} ({size}x{size})")
def create_adaptive_icon(filename, size):
"""Create adaptive icon (no background)"""
img = Image.new('RGBA', (size, size), (0, 0, 0, 0))
draw = ImageDraw.Draw(img)
# Center play button
margin = size // 4
play_size = size - 2 * margin
points = [
(margin + play_size // 4, margin),
(margin + play_size // 4, margin + play_size),
(margin + 3 * play_size // 4, margin + play_size // 2)
]
draw.polygon(points, fill=(255, 255, 255, 255))
# Add decorative circle
circle_margin = size // 8
draw.ellipse([circle_margin, circle_margin, size-circle_margin, size-circle_margin],
fill=None, outline=(100, 149, 237, 255), width=3)
img.save(filename, 'PNG')
print(f"Created adaptive icon: {filename} ({size}x{size})")
def main():
# Define icon sizes and paths
icons = [
('app/src/main/res/mipmap-mdpi/ic_launcher.png', 48),
('app/src/main/res/mipmap-hdpi/ic_launcher.png', 72),
('app/src/main/res/mipmap-xhdpi/ic_launcher.png', 96),
('app/src/main/res/mipmap-xxhdpi/ic_launcher.png', 144),
('app/src/main/res/mipmap-xxxhdpi/ic_launcher.png', 192),
]
round_icons = [
('app/src/main/res/mipmap-mdpi/ic_launcher_round.png', 48),
('app/src/main/res/mipmap-hdpi/ic_launcher_round.png', 72),
('app/src/main/res/mipmap-xhdpi/ic_launcher_round.png', 96),
('app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png', 144),
('app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png', 192),
]
adaptive_icons = [
('app/src/main/res/drawable/ic_launcher_foreground.xml', 108), # Not using PIL for XML
]
print("Creating app icons...")
# Create regular icons
for filename, size in icons:
create_icon(size, filename)
# Create round icons
for filename, size in round_icons:
create_icon(size, filename)
# Create adaptive icon foreground
create_adaptive_icon('app/src/main/res/drawable/ic_launcher_foreground.png', 108)
print("All icons created successfully!")
if __name__ == "__main__":
main()