🐛 Fix source switching crash & enhance stability (v3.0.4)

### 🐛 Bug Fixes
- Fix random crashes when switching video sources in settings management
- Enhanced VodConfig.setHome() null pointer exception handling
- Improved Fragment lifecycle checks to prevent crashes
- Optimized HistoryDialog source switching safety
- Enhanced thread safety for concurrent loading

###  Performance Improvements
- Added automatic cache cleaning functionality
- Improved memory usage optimization
- Enhanced network request stability

### 🆕 New Features
- Added comprehensive error handling mechanisms
- Enhanced crash protection functionality
- Improved Fragment state validation

### 📱 Build Improvements
- Updated README with professional documentation
- Enhanced build configuration for ARM64-V8A and ARM V7A
- Improved APK packaging and signing process
This commit is contained in:
您的名字
2025-07-30 21:25:10 +08:00
parent 0d7b25710c
commit dab1425dea
345 changed files with 40300 additions and 754 deletions
@@ -0,0 +1,284 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
TODO: UPNP VIOLATION: RenderingControl 1.0 specification schema says "/RCS/" but examples
in the spec say "/AVT_RCS". We had "/AVT_RCS", then "/RCS", now we have "/RCS/", let's
see who complains.
-->
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/RCS/"
xmlns:rcs="urn:schemas-upnp-org:metadata-1-0/RCS/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Schema for UPnP A/V Rendering Control Service events, version 0.1 (sic!)
</xsd:documentation>
</xsd:annotation>
<!--============================================================
'Event' is the root element of Rendering Control event document fragments.
'InstanceID' is the only valid child of 'Event'.
============================================================-->
<xsd:element name="Event">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
Event is the root element
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="rcs:InstanceID"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<!--============================================================
'InstanceID' elements identify an individual event instance.
============================================================-->
<xsd:group name="allowed-under-InstanceID">
<xsd:annotation>
<xsd:documentation>
This group defines the elements allowed under the InstanceID element
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="rcs:PresetNameList"/>
<xsd:element ref="rcs:Brightness"/>
<xsd:element ref="rcs:Contrast"/>
<xsd:element ref="rcs:Sharpness"/>
<xsd:element ref="rcs:RedVideoGain"/>
<xsd:element ref="rcs:GreenVideoGain"/>
<xsd:element ref="rcs:BlueVideoGain"/>
<xsd:element ref="rcs:RedVideoBlackLevel"/>
<xsd:element ref="rcs:GreenVideoBlackLevel"/>
<xsd:element ref="rcs:BlueVideoBlackLevel"/>
<xsd:element ref="rcs:ColorTemperature"/>
<xsd:element ref="rcs:HorizontalKeystone"/>
<xsd:element ref="rcs:VerticalKeystone"/>
<xsd:element ref="rcs:Mute"/>
<xsd:element ref="rcs:Volume"/>
<xsd:element ref="rcs:VolumeDB"/>
<xsd:element ref="rcs:Loudness"/>
</xsd:choice>
</xsd:group>
<xsd:element name="InstanceID">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
InstanceID elements identify an individual event instance.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="rcs:allowed-under-InstanceID"/>
</xsd:choice>
<xsd:attribute name="val" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PresetNameList
============================================================-->
<xsd:element name="PresetNameList">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Brightness
============================================================-->
<xsd:element name="Brightness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Contrast
============================================================-->
<xsd:element name="Contrast">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Sharpness
============================================================-->
<xsd:element name="Sharpness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RedVideoGain
============================================================-->
<xsd:element name="RedVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
GreenVideoGain
============================================================-->
<xsd:element name="GreenVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
BlueVideoGain
============================================================-->
<xsd:element name="BlueVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RedVideoBlackLevel
============================================================-->
<xsd:element name="RedVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
GreenVideoBlackLevel
============================================================-->
<xsd:element name="GreenVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
BlueVideoBlackLevel
============================================================-->
<xsd:element name="BlueVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
ColorTemperature
============================================================-->
<xsd:element name="ColorTemperature">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
HorizontalKeystone
============================================================-->
<xsd:element name="HorizontalKeystone">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
VerticalKeystone
============================================================-->
<xsd:element name="VerticalKeystone">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Mute
============================================================-->
<xsd:element name="Mute">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:boolean"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Volume
============================================================-->
<xsd:element name="Volume">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
VolumeDB
============================================================-->
<xsd:element name="VolumeDB">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Loudness
============================================================-->
<xsd:element name="Loudness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:boolean"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>