Commit 5e99da86 authored by pham tuan dat's avatar pham tuan dat

init commit

parent 8e62fa32
#Tue Mar 11 13:49:45 ICT 2025
gradle.version=8.7
#Tue Mar 11 13:47:42 ICT 2025
java.home=E\:\\Android_Install\\jbr
# Default ignored files
/shelf/
/workspace.xml
Equalizes
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DeviceStreaming">
<option name="deviceSelectionList">
<list>
<PersistentDeviceSelectionData>
<option name="api" value="27" />
<option name="brand" value="DOCOMO" />
<option name="codename" value="F01L" />
<option name="id" value="F01L" />
<option name="manufacturer" value="FUJITSU" />
<option name="name" value="F-01L" />
<option name="screenDensity" value="360" />
<option name="screenX" value="720" />
<option name="screenY" value="1280" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="OnePlus" />
<option name="codename" value="OP5552L1" />
<option name="id" value="OP5552L1" />
<option name="manufacturer" value="OnePlus" />
<option name="name" value="CPH2415" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2412" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="OPPO" />
<option name="codename" value="OP573DL1" />
<option name="id" value="OP573DL1" />
<option name="manufacturer" value="OPPO" />
<option name="name" value="CPH2557" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="28" />
<option name="brand" value="DOCOMO" />
<option name="codename" value="SH-01L" />
<option name="id" value="SH-01L" />
<option name="manufacturer" value="SHARP" />
<option name="name" value="AQUOS sense2 SH-01L" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2160" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="Lenovo" />
<option name="codename" value="TB370FU" />
<option name="id" value="TB370FU" />
<option name="manufacturer" value="Lenovo" />
<option name="name" value="Tab P12" />
<option name="screenDensity" value="340" />
<option name="screenX" value="1840" />
<option name="screenY" value="2944" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="a15" />
<option name="id" value="a15" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="A15" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="a35x" />
<option name="id" value="a35x" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="A35" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="31" />
<option name="brand" value="samsung" />
<option name="codename" value="a51" />
<option name="id" value="a51" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy A51" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="akita" />
<option name="id" value="akita" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="arcfox" />
<option name="id" value="arcfox" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="razr plus 2024" />
<option name="screenDensity" value="360" />
<option name="screenX" value="1080" />
<option name="screenY" value="1272" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="motorola" />
<option name="codename" value="austin" />
<option name="id" value="austin" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g 5G (2022)" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="b0q" />
<option name="id" value="b0q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S22 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3088" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="32" />
<option name="brand" value="google" />
<option name="codename" value="bluejay" />
<option name="id" value="bluejay" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="caiman" />
<option name="id" value="caiman" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro" />
<option name="screenDensity" value="360" />
<option name="screenX" value="960" />
<option name="screenY" value="2142" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="comet" />
<option name="id" value="comet" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro Fold" />
<option name="screenDensity" value="390" />
<option name="screenX" value="2076" />
<option name="screenY" value="2152" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="29" />
<option name="brand" value="samsung" />
<option name="codename" value="crownqlteue" />
<option name="id" value="crownqlteue" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Note9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2220" />
<option name="screenY" value="1080" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="dm2q" />
<option name="id" value="dm2q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="S23 Plus" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="dm3q" />
<option name="id" value="dm3q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S23 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3088" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="e1q" />
<option name="id" value="e1q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S24" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="e3q" />
<option name="id" value="e3q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S24 Ultra" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1440" />
<option name="screenY" value="3120" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="eos" />
<option name="id" value="eos" />
<option name="manufacturer" value="Google" />
<option name="name" value="Eos" />
<option name="screenDensity" value="320" />
<option name="screenX" value="384" />
<option name="screenY" value="384" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="felix" />
<option name="id" value="felix" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="felix" />
<option name="id" value="felix" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="felix_camera" />
<option name="id" value="felix_camera" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold (Camera-enabled)" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="fogona" />
<option name="id" value="fogona" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g play - 2024" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="g0q" />
<option name="id" value="g0q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-S906U1" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="gts7xllite" />
<option name="id" value="gts7xllite" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-T738U" />
<option name="screenDensity" value="340" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="gts8uwifi" />
<option name="id" value="gts8uwifi" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S8 Ultra" />
<option name="screenDensity" value="320" />
<option name="screenX" value="1848" />
<option name="screenY" value="2960" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="gts8wifi" />
<option name="id" value="gts8wifi" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S8" />
<option name="screenDensity" value="274" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="gts9fe" />
<option name="id" value="gts9fe" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S9 FE 5G" />
<option name="screenDensity" value="280" />
<option name="screenX" value="1440" />
<option name="screenY" value="2304" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="husky" />
<option name="id" value="husky" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8 Pro" />
<option name="screenDensity" value="390" />
<option name="screenX" value="1008" />
<option name="screenY" value="2244" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="motorola" />
<option name="codename" value="java" />
<option name="id" value="java" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="G20" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="komodo" />
<option name="id" value="komodo" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro XL" />
<option name="screenDensity" value="360" />
<option name="screenX" value="1008" />
<option name="screenY" value="2244" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="lynx" />
<option name="id" value="lynx" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="motorola" />
<option name="codename" value="maui" />
<option name="id" value="maui" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g play - 2023" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="o1q" />
<option name="id" value="o1q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S21" />
<option name="screenDensity" value="421" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="31" />
<option name="brand" value="google" />
<option name="codename" value="oriole" />
<option name="id" value="oriole" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="panther" />
<option name="id" value="panther" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="q5q" />
<option name="id" value="q5q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold5" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1812" />
<option name="screenY" value="2176" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="q6q" />
<option name="id" value="q6q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold6" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1856" />
<option name="screenY" value="2160" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="r11" />
<option name="id" value="r11" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Watch" />
<option name="screenDensity" value="320" />
<option name="screenX" value="384" />
<option name="screenY" value="384" />
<option name="type" value="WEAR_OS" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="r11q" />
<option name="id" value="r11q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-S711U" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="redfin" />
<option name="id" value="redfin" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 5" />
<option name="screenDensity" value="440" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="shiba" />
<option name="id" value="shiba" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="t2q" />
<option name="id" value="t2q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S21 Plus" />
<option name="screenDensity" value="394" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="tangorpro" />
<option name="id" value="tangorpro" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Tablet" />
<option name="screenDensity" value="320" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="tokay" />
<option name="id" value="tokay" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2424" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="google" />
<option name="codename" value="tokay" />
<option name="id" value="tokay" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2424" />
</PersistentDeviceSelectionData>
</list>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="corretto-17" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/audiovisualizer2" />
<option value="$PROJECT_DIR$/equalizer" />
</set>
</option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AndroidLintUnsafeImplicitIntentLaunch" enabled="false" level="ERROR" enabled_by_default="false" />
</profile>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinJpsPluginSettings">
<option name="version" value="1.8.20" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
# Gradle files
.gradle/
build/
# Android Studio 3 in .gitignore file.
.idea/caches
.idea/modules.xml
# Local configuration file (sdk path, etc)
local.properties
*.iml
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
# Log/OS Files
*.log
# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json
# IntelliJ
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml
# Google Services (e.g. APIs or Firebase)
google-services.json
# Android Profiling
*.hprof
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-parcelize'
id 'kotlin-kapt'
id "io.sentry.android.gradle" version "3.11.1"
// id 'com.google.gms.google-services'
// id 'com.google.firebase.crashlytics'
}
android {
compileSdk 34
namespace = "com.bassbooster.equalizer"
defaultConfig {
applicationId "com.bassbooster.equalizer"
minSdk 21
targetSdk 34
versionCode 14
versionName "1.0.2"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
def formattedDate = new Date().format("MM.dd.yyyy")
archivesBaseName = "Equalizer_v${versionName}(${versionCode})_${formattedDate}"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// signingConfig signingConfigs.release
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
dataBinding true
}
viewBinding {
enabled = true
}
kapt {
correctErrorTypes = true
}
packagingOptions {
resources {
excludes += "META-INF/native-image/io.sentry/sentry/native-image.properties"
}
}
// kapt {
// correctErrorTypes true
// }
// flavorDimensions "default"
// productFlavors {
// appDev {
// //add your id ad here
// manifestPlaceholders = [ ad_app_id:"ca-app-pub-3940256099942544~3347511713"]
// buildConfigField "String", "App_open_resume", "\"ca-app-pub-3940256099942544/9257395921\""
// buildConfigField "String", "Inter_splash", "\"ca-app-pub-3940256099942544/1033173712\""
// buildConfigField "String", "Native_language", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "Native_tutorial", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "Native_home", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "Inter_home", "\"ca-app-pub-3940256099942544/1033173712\""
// buildConfigField "String", "Inter_save", "\"ca-app-pub-3940256099942544/1033173712\""
// buildConfigField "String", "Native_music", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "Banner", "\"ca-app-pub-3940256099942544/6300978111\""
// buildConfigField "String", "Native_saving", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_native_language", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_native_tutorial", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_native_home", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_native_music", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_banner", "\"ca-app-pub-3940256099942544/6300978111\""
// buildConfigField "Boolean", "env_dev", "true"
// }
// appProduct {
// //add your id ad here
// // ADS CONFIG BEGIN
// manifestPlaceholders = [ ad_app_id:"ca-app-pub-3940256099942544~3347511713"]
// buildConfigField "String", "App_open_resume", "\"ca-app-pub-3940256099942544/9257395921\""
// buildConfigField "String", "Inter_splash", "\"ca-app-pub-3940256099942544/1033173712\""
// buildConfigField "String", "Native_language", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "Native_tutorial", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "Native_home", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "Inter_home", "\"ca-app-pub-3940256099942544/1033173712\""
// buildConfigField "String", "Inter_save", "\"ca-app-pub-3940256099942544/1033173712\""
// buildConfigField "String", "Native_music", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "Banner", "\"ca-app-pub-3940256099942544/6300978111\""
// buildConfigField "String", "Native_saving", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_native_language", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_native_tutorial", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_native_home", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_native_music", "\"ca-app-pub-3940256099942544/2247696110\""
// buildConfigField "String", "allow_reload_banner", "\"ca-app-pub-3940256099942544/6300978111\""
// // ADS CONFIG END
// buildConfigField "Boolean", "env_dev", "false"
// }
// }
}
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20"
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation project(path: ':equalizer')
implementation project(path: ':audiovisualizer2')
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
// Added Dependencies
implementation "androidx.recyclerview:recyclerview:1.1.0"
implementation 'android.arch.lifecycle:extensions:1.1.1'
implementation 'com.github.bumptech.glide:glide:4.9.0'
// implementation 'com.amitshekhar.android:rx2-android-networking:1.0.2'
implementation("com.github.amitshekhariitbhu.Fast-Android-Networking:rx-android-networking:1.0.4")
implementation 'io.reactivex.rxjava2:rxjava:2.2.18'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'androidx.fragment:fragment-ktx:1.1.0'
//noinspection GradleCompatible
// implementation 'com.android.support:support-compat:28.0.0'
//noinspection GradleCompatible
// implementation 'com.android.support:support-media-compat:28.0.0'
//sdp
implementation 'com.intuit.sdp:sdp-android:1.1.0'
implementation("androidx.room:room-runtime:2.5.2")
annotationProcessor "androidx.room:room-compiler:2.5.2"
// To use Kotlin annotation processing tool (kapt)
kapt("androidx.room:room-compiler:2.5.2")
// optional - Kotlin Extensions and Coroutines support for Room
implementation("androidx.room:room-ktx:2.5.2")
// optional - RxJava2 support for Room
implementation "androidx.room:room-rxjava2:2.5.2"
// optional - RxJava3 support for Room
implementation "androidx.room:room-rxjava3:2.5.2"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:2.5.2"
// optional - Test helpers
testImplementation("androidx.room:room-testing:2.5.2")
implementation("com.android.support:multidex:1.0.3")
implementation 'com.h6ah4i.android.widget.verticalseekbar:verticalseekbar:0.7.0'
//add show log
implementation 'io.sentry:sentry-android:5.0.0'
implementation 'org.greenrobot:eventbus:3.2.0'
implementation 'androidx.media:media:1.6.0'
//ads
// implementation 'apero-inhouse:apero-ads:1.10.0-snapshot14'
// implementation 'com.facebook.android:facebook-android-sdk:12.0.0'
//firebase
// implementation 'com.google.firebase:firebase-crashlytics:18.3.7'
// implementation 'com.google.firebase:firebase-analytics:21.3.0'
// // Import the BoM for the Firebase platform
// implementation(platform("com.google.firebase:firebase-bom:32.1.1"))
// Add the dependencies for the Remote Config and Analytics libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
// implementation("com.google.firebase:firebase-config-ktx")
// implementation("com.google.firebase:firebase-analytics-ktx")
//loading
implementation 'com.github.ybq:Android-SpinKit:1.4.0'
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keep public class com.google.android.gms.** { public protected *; }
\ No newline at end of file
package com.bassbooster.soundeffects
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.example.demomvvm", appContext.packageName)
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application
android:name="com.bassbooster.soundeffects.equalizer.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Equalizes">
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.ActivityTutorialSplash"
android:screenOrientation="portrait"
android:exported="false" />
<!-- <receiver-->
<!-- android:name="com.bassbooster.soundeffects.equalizer.EqualizerWidget"-->
<!-- android:exported="false">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />-->
<!-- </intent-filter>-->
<!-- <meta-data-->
<!-- android:name="android.appwidget.provider"-->
<!-- android:resource="@xml/equalizer_widget_info" />-->
<!-- </receiver>-->
<!-- Required: set your sentry.io project identifier (DSN) -->
<meta-data
android:name="io.sentry.dsn"
android:value="https://15a8b5333393585da92e43e1b61f619c@log.toprate.io/20" /> <!-- enable automatic breadcrumbs for user interactions (clicks, swipes, scrolls) -->
<meta-data
android:name="io.sentry.traces.user-interaction.enable"
android:value="true" /> <!-- enable screenshot for crashes -->
<meta-data
android:name="io.sentry.attach-screenshot"
android:value="true" /> <!-- enable view hierarchy for crashes -->
<meta-data
android:name="io.sentry.attach-view-hierarchy"
android:value="true" /> <!-- enable the performance API by setting a sample-rate, adjust in production env -->
<meta-data
android:name="io.sentry.traces.sample-rate"
android:value="1.0" /> <!-- enable profiling when starting transactions, adjust in production env -->
<meta-data
android:name="io.sentry.traces.profiling.sample-rate"
android:value="1.0" />
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.activity.setting.permissions.PermissionsActivity"
android:screenOrientation="portrait"
android:exported="false"
tools:ignore="NewApi" />
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.activity.setting.language.LanguageActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.activity.setting.SettingActivity"
android:screenOrientation="portrait"
android:exported="false"
tools:targetApi="m" />
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.activity.SplashActivity"
android:screenOrientation="portrait"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.MainActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.activity.effects.EffectsActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.activity.EdgeLightingActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name="com.bassbooster.soundeffects.equalizer.view.activity.policy.PolicyActivity"
android:screenOrientation="portrait"
android:exported="false" />
<service
android:name="com.bassbooster.soundeffects.equalizer.utils.NotificationListener"
android:exported="true"
android:label="@string/app_name"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
<service
android:name="com.bassbooster.soundeffects.equalizer.view.MainService"
android:exported="false" />
<receiver
android:name="com.bassbooster.soundeffects.equalizer.utils.MyBroadcastReceiver"
android:exported="true">
<intent-filter>
<action android:name="EXTRA_BUTTON_CLICKED" />
</intent-filter>
</receiver>
<!-- <receiver-->
<!-- android:name="com.bassbooster.soundeffects.equalizer.EqualizerWidget"-->
<!-- android:enabled="true"-->
<!-- android:exported="false">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />-->
<!-- </intent-filter>-->
<!-- <meta-data-->
<!-- android:name="android.appwidget.provider"-->
<!-- android:resource="@xml/equalizer_widget_info" />-->
<!-- </receiver>-->
<!-- <meta-data-->
<!-- android:name="com.google.android.gms.ads.APPLICATION_ID"-->
<!-- android:value="${ad_app_id}" />-->
<!-- <meta-data-->
<!-- android:name="com.facebook.sdk.ApplicationId"-->
<!-- android:value="@string/facebook_app_id" />-->
<!-- <meta-data-->
<!-- android:name="com.facebook.sdk.ClientToken"-->
<!-- android:value="@string/facebook_client_token" />-->
<meta-data
android:name="com.facebook.sdk.AutoInitEnabled"
android:value="true" />
<meta-data
android:name="com.facebook.sdk.AutoLogAppEventsEnabled"
android:value="true" />
<meta-data
android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled"
android:value="true" />
<meta-data
android:name="io.sentry.additional-context"
android:value="false"
/>
<meta-data android:name="io.sentry.auto-init" android:value="false" />
</application>
</manifest>
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer
import android.app.Application
class App : Application() {
private val ADJUST_TOKEN = "v9p8b749aby8"
private val EVENT_PURCHASE_ADJUST = "6ml7tp"
private val EVENT_AD_IMPRESSION_ADJUST = "j5arsn"
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
override fun onCreate() {
super.onCreate()
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
//
// // Khởi tạo Firebase
// FirebaseApp.initializeApp(this)
// // Kích hoạt Crashlytics
// FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
}
}
\ No newline at end of file
package com.bassbooster.equalizer
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
import android.content.Intent
import android.widget.RemoteViews
/**
* Implementation of App Widget functionality.
*/
class AppWidget : AppWidgetProvider() {
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
// There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId,"mmmmm")
}
}
override fun onEnabled(context: Context) {
// Enter relevant functionality for when the first widget is created
}
override fun onDisabled(context: Context) {
// Enter relevant functionality for when the last widget is disabled
}
override fun onReceive(context: Context?, intent: Intent?) {
super.onReceive(context, intent)
val views = RemoteViews(context?.packageName, R.layout.app_widget)
views.apply {
setTextViewText(R.id.mTxtNameBass, "Bass:")
setTextViewText(R.id.mTxtNameStereo, "Stereo")
setTextViewText(R.id.textView, "text")
setTextViewText(R.id.mTxtStereo, "100")
// setOnClickPendingIntent(
// R.id.icLeft,
// CustomNotificationService.onButtonNotificationClick(
// context = context,
// id = R.id.icLeft,
// text = text
// )
// )
// setOnClickPendingIntent(
// R.id.icRight,
// CustomNotificationService.onButtonNotificationClick(
// context = context,
// id = R.id.icRight,
// text = text
// )
// )
// setOnClickPendingIntent(
// R.id.icLight,
// CustomNotificationService.onButtonNotificationClick(
// context = context,
// id = R.id.icLight
// )
// )
// setOnClickPendingIntent(
// R.id.mOff,
// CustomNotificationService.onButtonNotificationClick(context = context, id = R.id.mOff)
// )
}
// Instruct the widget manager to update the widget
// appWidgetManager.updateAppWidget(appWidgetId, views)
}
}
internal fun updateAppWidget(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetId: Int,
text: String
) {
// val widgetText = context.getString(R.string.appwidget_text)
// Construct the RemoteViews object
val views = RemoteViews(context.packageName, R.layout.app_widget)
views.apply {
setTextViewText(R.id.mTxtNameBass, "Bass:")
setTextViewText(R.id.mTxtNameStereo, "Stereo")
setTextViewText(R.id.textView, text)
setTextViewText(R.id.mTxtStereo, "100")
// setOnClickPendingIntent(
// R.id.icLeft,
// CustomNotificationService.onButtonNotificationClick(
// context = context,
// id = R.id.icLeft,
// text = text
// )
// )
// setOnClickPendingIntent(
// R.id.icRight,
// CustomNotificationService.onButtonNotificationClick(
// context = context,
// id = R.id.icRight,
// text = text
// )
// )
// setOnClickPendingIntent(
// R.id.icLight,
// CustomNotificationService.onButtonNotificationClick(
// context = context,
// id = R.id.icLight
// )
// )
// setOnClickPendingIntent(
// R.id.mOff,
// CustomNotificationService.onButtonNotificationClick(context = context, id = R.id.mOff)
// )
}
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views)
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
import android.widget.RemoteViews
import com.bassbooster.equalizer.R
/**
* Implementation of App Widget functionality.
*/
class EqualizerWidget : AppWidgetProvider() {
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
// There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
}
}
override fun onEnabled(context: Context) {
// Enter relevant functionality for when the first widget is created
}
override fun onDisabled(context: Context) {
// Enter relevant functionality for when the last widget is disabled
}
}
internal fun updateAppWidget(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetId: Int
) {
val widgetText = context.getString(R.string.appwidget_text)
// Construct the RemoteViews object
val views = RemoteViews(context.packageName, R.layout.equalizer_widget)
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views)
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
class MyAppWidgetProvider : AppWidgetProvider() {
override fun onUpdate(
context: Context?,
appWidgetManager: AppWidgetManager?,
appWidgetIds: IntArray?
) {
// Thực hiện cập nhật giao diện của App Widget tại đây
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.adapter
import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.AppMedia
class ChooseAppAdapter(
private val apps: ArrayList<AppMedia>, val onItemClicked:(String) -> Unit
) : RecyclerView.Adapter<ChooseAppAdapter.DataViewHolder>() {
class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(app: AppMedia) {
itemView.findViewById<ImageView>(R.id.imageViewAvatar).setImageBitmap(app.avatar)
itemView.findViewById<TextView>(R.id.textViewName).text = app.name
itemView.findViewById<ImageView>(R.id.ivCheck).isVisible = app.check
if(app.check){
itemView.setBackgroundResource(R.drawable.custom_image_nation_red)
}else{
itemView.setBackgroundResource(R.drawable.dra_custom_layout_play)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
DataViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_app, parent,
false
)
)
override fun getItemCount(): Int = apps.size
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: DataViewHolder, position: Int) {
holder.bind(apps[position])
holder.itemView.setOnClickListener{
resetCheck()
apps[position].check = true
notifyDataSetChanged()
onItemClicked(apps[position].packageName)
}
}
private fun resetCheck(){
for (item in this.apps){
item.check = false
}
}
fun addData(list: List<AppMedia>) {
apps.addAll(list)
}
}
package com.bassbooster.soundeffects.equalizer.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.appcompat.widget.AppCompatTextView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.User
class MainAdapter(
private val users: ArrayList<User>
) : RecyclerView.Adapter<MainAdapter.DataViewHolder>() {
class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(user: User) {
itemView.findViewById<AppCompatTextView>(R.id.textViewUserName).text = user.name
itemView.findViewById<AppCompatTextView>(R.id.textViewUserEmail).text = user.email
val imageView : ImageView = itemView.findViewById(R.id.imageViewAvatar)
Glide.with(imageView.context)
.load(user.avatar)
.into(imageView)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
DataViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.item_layout, parent,
false
)
)
override fun getItemCount(): Int = users.size
override fun onBindViewHolder(holder: DataViewHolder, position: Int) =
holder.bind(users[position])
fun addData(list: List<User>) {
users.addAll(list)
}
}
package com.bassbooster.soundeffects.equalizer.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.viewpager.widget.PagerAdapter
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.Tutorial
class TutorialSplashAdapter(private val itemList: ArrayList<Tutorial>) : PagerAdapter() {
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val view = LayoutInflater.from(container.context).inflate(
R.layout.item_viewpager_splash,
container,
false
)
view.findViewById<ImageView>(R.id.imgSplash).setImageResource(itemList[position].imgTutorial)
view.findViewById<TextView>(R.id.tvTitleSplash).text = itemList[position].tvTitle
container.addView(view)
return view
}
override fun getCount(): Int {
return itemList.size
}
override fun isViewFromObject(view: View, `object`: Any): Boolean {
return view == `object`
}
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
container.removeView(`object` as View?)
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.adapter
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
class ViewPagerAdapter(
fa: FragmentActivity, private val fragments: ArrayList<Fragment>
) : FragmentStateAdapter(fa) {
override fun getItemCount(): Int = fragments.size
override fun createFragment(position: Int): Fragment = fragments[position]
fun getFragment(position: Int): Fragment? {
if (position < 0 || position >= fragments.size) {
return null
}
return fragments[position]
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.cardview.widget.CardView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.VisualizerModel
import com.bassbooster.soundeffects.equalizer.view.fragment.PlayFragment
class VisualizerAdapter(val context: Context, val listImage: ArrayList<VisualizerModel>, val mListener: OnItemClickListener) : RecyclerView.Adapter<VisualizerAdapter.VisualizerViewHolder>() {
interface OnItemClickListener {
fun onItemClick(position: Int)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VisualizerViewHolder {
val inflater = LayoutInflater.from(parent.getContext())
val view = inflater.inflate(R.layout.adapter_visualizer, parent, false)
return VisualizerViewHolder(view)
}
override fun onBindViewHolder(holder: VisualizerViewHolder, position: Int) {
if (PlayFragment.positionType == position){
holder.isSelected.visibility = View.VISIBLE
}else{
holder.isSelected.visibility = View.GONE
}
holder.mImgVisual.setImageDrawable(listImage[position].image)
holder.mRlView.setOnClickListener {
PlayFragment.positionType = position
mListener.onItemClick(position)
}
}
override fun getItemCount(): Int {
return listImage.size
}
class VisualizerViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var mRlView : CardView = view.findViewById(R.id.mRlView)
var isSelected : ConstraintLayout = view.findViewById(R.id.isSelectView)
var mImgVisual : ImageView = view.findViewById(R.id.mImgVisual)
}
}
package com.bassbooster.soundeffects.equalizer.base
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.bassbooster.soundeffects.equalizer.data.api.ApiHelper
import com.bassbooster.soundeffects.equalizer.data.repository.MainRepository
import com.bassbooster.soundeffects.equalizer.viewmodel.MainViewModel
class ViewModelFactory(private val apiHelper: ApiHelper) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MainViewModel::class.java)) {
return MainViewModel(MainRepository(apiHelper)) as T
}
throw IllegalArgumentException("Unknown class name")
}
}
package com.bassbooster.soundeffects.equalizer.data.api
class ApiHelper(private val apiService: ApiService) {
fun getUsers() = apiService.getUsers()
}
package com.bassbooster.soundeffects.equalizer.data.api
import com.bassbooster.soundeffects.equalizer.data.model.User
import rx.Single
interface ApiService {
fun getUsers(): Single<MutableList<User>>
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.data.api
import com.bassbooster.soundeffects.equalizer.data.model.User
import com.rxandroidnetworking.RxAndroidNetworking
import rx.Single
class ApiServiceImpl : ApiService {
override fun getUsers(): Single<MutableList<User>> {
return RxAndroidNetworking.get("https://5e510330f2c0d300147c034c.mockapi.io/users").build()
.getObjectListSingle(User::class.java)
}
}
package com.bassbooster.soundeffects.equalizer.data.model
import android.graphics.Bitmap
import com.google.gson.annotations.SerializedName
class AppMedia(
@SerializedName("name")
val name: String = "",
@SerializedName("avatar")
val avatar: Bitmap,
val packageName: String,
var check: Boolean = false,
var startActivity: String = ""
)
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.data.model
class ColorEdgeModel(var image:Int, var color: String?) {
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.data.model
import android.graphics.drawable.Drawable
class EffectsModel(var name:String, var image: Drawable?)
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.data.model
import com.google.gson.annotations.SerializedName
class MediaInfo(
@SerializedName("title")
val title: String = "",
@SerializedName("description")
val description: String = ""
)
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.data.model
data class Nation(
val colorBorder: Int = 0,
val imgAvatar: Int = 0,
val name: String = "",
val imgVector: Int = 0,
)
package com.bassbooster.soundeffects.equalizer.data.model
data class Permissions(
val imgAvatar: Int = 0,
val tvTitle: String = "",
val tvBody: String = "",
)
package com.bassbooster.soundeffects.equalizer.data.model
data class Tutorial(
val imgTutorial: Int = 0,
val tvTitle: String = "",
)
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.data.model
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id")
val id: Int = 0,
@SerializedName("name")
val name: String = "",
@SerializedName("email")
val email: String = "",
@SerializedName("avatar")
val avatar: String = ""
)
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.data.model
import android.graphics.drawable.Drawable
class VisualizerModel(var type:String, var image: Drawable?)
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.data.repository
import com.bassbooster.soundeffects.equalizer.data.api.ApiHelper
import com.bassbooster.soundeffects.equalizer.data.model.User
class MainRepository(private val apiHelper: ApiHelper) {
fun getUsers(): rx.Single<MutableList<User>> {
return apiHelper.getUsers()
}
}
package com.bassbooster.soundeffects.equalizer.database
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.bassbooster.soundeffects.equalizer.database.dao.EffectsDao
@Database(entities = [EffectsData::class], version = 1, exportSchema = false)
abstract class AppDatabase() : RoomDatabase() {
abstract fun mEffectsDAO(): EffectsDao
companion object {
// Singleton prevents multiple instances of database opening at the
// same time.
@Volatile
private var INSTANCE: AppDatabase? = null
@Synchronized
fun getDatabase(context: Context): AppDatabase {
val tempInstance = INSTANCE
if (tempInstance != null) {
return tempInstance
}
synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"contact_database"
) // Wipes and rebuilds instead of migrating if no Migration object.
// Migration is not part of this codelab.
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
return instance
}
}
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.database
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "effects")
class EffectsData {
@PrimaryKey(autoGenerate = true)
var id: Int = 0
@ColumnInfo(name = "name")
var name: String = ""
@ColumnInfo(name = "seekbar0")
var seekbar0: Int = 0
@ColumnInfo(name = "seekbar1")
var seekbar1: Int = 0
@ColumnInfo(name = "seekbar2")
var seekbar2: Int = 0
@ColumnInfo(name = "seekbar3")
var seekbar3: Int = 0
@ColumnInfo(name = "seekbar4")
var seekbar4: Int = 0
@ColumnInfo(name = "bass_strength")
var bassStrength: Short = 0
@ColumnInfo(name = "reverb_preset")
var reverbPreset: Short = 0
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.database
import androidx.lifecycle.LiveData
import com.bassbooster.soundeffects.equalizer.database.EffectsData
import com.bassbooster.soundeffects.equalizer.database.dao.EffectsDao
class EffectsRepository(private val effectsDAO: EffectsDao) {
fun getAllData(): LiveData<List<EffectsData>> {
return effectsDAO.getAll()
}
suspend fun insert(myEntity: EffectsData) {
effectsDAO.insert(myEntity)
}
suspend fun delete(myEntity: EffectsData) {
effectsDAO.delete(myEntity)
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.database.dao
import androidx.lifecycle.LiveData
import androidx.room.*
import com.bassbooster.soundeffects.equalizer.database.EffectsData
@Dao
interface EffectsDao {
@Insert
suspend fun insert(myEntity: EffectsData)
@Query("SELECT * FROM effects")
fun getAll(): LiveData<List<EffectsData>>
@Delete
suspend fun delete(myEntity: EffectsData)
}
package com.bassbooster.soundeffects.equalizer.event
data class MessageEvent(val message: String)
data class PlayAdsEvent(val status: Boolean = false)
data class ServiceHideNavigationBarEvent(val status: Boolean)
/*
* Copyright 2018 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.bassbooster.soundeffects.equalizer.tasks
import android.os.AsyncTask
import com.bassbooster.soundeffects.equalizer.utils.MediaAppDetails
/**
* Base class for an async task that fetches a list of media apps.
*/
abstract class FindMediaAppsTask constructor(
private val callback: AppListUpdatedCallback, private val sortAlphabetical: Boolean
) : AsyncTask<Void, Void, List<MediaAppDetails>>() {
/**
* Callback used by [FindMediaAppsTask].
*/
interface AppListUpdatedCallback {
fun onAppListUpdated(mediaAppEntries: List<MediaAppDetails>)
}
protected abstract val mediaApps: List<MediaAppDetails>
override fun doInBackground(vararg params: Void): List<MediaAppDetails> {
val mediaApps = ArrayList(mediaApps)
if(sortAlphabetical) {
// Sort the list by localized app name for convenience.
mediaApps.sortWith(Comparator { left, right ->
left.appName.compareTo(right.appName, ignoreCase = true)
})
}
return mediaApps
}
override fun onPostExecute(mediaAppEntries: List<MediaAppDetails>) {
callback.onAppListUpdated(mediaAppEntries)
}
}
\ No newline at end of file
/*
* Copyright 2018 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.bassbooster.soundeffects.equalizer.tasks
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.content.res.Resources
import androidx.media.MediaBrowserServiceCompat
import com.bassbooster.soundeffects.equalizer.tasks.FindMediaAppsTask
import com.bassbooster.soundeffects.equalizer.utils.MediaAppDetails
import java.util.ArrayList
/**
* Implementation of [FindMediaAppsTask] that uses available implementations of
* MediaBrowser to populate the list of apps.
*/
class FindMediaBrowserAppsTask constructor(
context: Context, callback: AppListUpdatedCallback
) : FindMediaAppsTask(callback, sortAlphabetical = true) {
private val packageManager: PackageManager = context.packageManager
private val resources: Resources = context.resources
/**
* Finds installed packages that have registered a
* [android.service.media.MediaBrowserService] or
* [android.support.v4.media.MediaBrowserServiceCompat] service by
* looking for packages that have services that respond to the
* "android.media.browse.MediaBrowserService" action.
*/
override val mediaApps: List<MediaAppDetails>
get() {
val mediaApps = ArrayList<MediaAppDetails>()
val mediaBrowserIntent = Intent(MediaBrowserServiceCompat.SERVICE_INTERFACE)
// Build an Intent that only has the MediaBrowserService action and query
// the PackageManager for apps that have services registered that can
// receive it.
val services = packageManager.queryIntentServices(
mediaBrowserIntent,
PackageManager.GET_RESOLVED_FILTER
)
if (services != null && !services.isEmpty()) {
for (info in services) {
mediaApps.add(
MediaAppDetails(
info.serviceInfo,
packageManager,
resources
)
)
}
}
return mediaApps
}
}
\ No newline at end of file
/*
* Copyright 2018 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.bassbooster.soundeffects.equalizer.tasks
import android.annotation.TargetApi
import android.content.ComponentName
import android.content.pm.PackageManager
import android.content.res.Resources
import android.media.session.MediaSessionManager
import android.os.Build
import com.bassbooster.soundeffects.equalizer.utils.MediaAppDetails
/**
* Implementation of [FindMediaAppsTask] that uses active media sessions to populate the
* list of media apps.
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
class FindMediaSessionAppsTask constructor(
private val mediaSessionManager: MediaSessionManager,
private val listenerComponent: ComponentName,
private val packageManager: PackageManager,
private val resources: Resources,
callback: AppListUpdatedCallback
) : FindMediaAppsTask(callback, sortAlphabetical = false) {
override val mediaApps: List<MediaAppDetails>
get() = MediaAppControllerUtils.getMediaAppsFromControllers(
mediaSessionManager.getActiveSessions(listenerComponent),
packageManager,
resources
)
}
\ No newline at end of file
/*
* Copyright 2018 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.bassbooster.soundeffects.equalizer.tasks
import android.annotation.TargetApi
import android.content.ContentValues
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.content.res.Resources
import android.media.session.MediaController
import android.os.Build
import com.bassbooster.soundeffects.equalizer.utils.MediaAppDetails
import java.util.ArrayList
object MediaAppControllerUtils {
@JvmStatic
fun getMediaAppsFromControllers(
controllers: Collection<MediaController>,
packageManager: PackageManager,
resources: Resources
): List<MediaAppDetails> {
val mediaApps = ArrayList<MediaAppDetails>()
for (controller in controllers) {
val packageName = controller.packageName
mediaApps.add(
MediaAppDetails(
packageName,
controller.sessionToken,
resources
)
)
}
return mediaApps
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.utils;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Harjot on 23-May-16.
*/
public class AnalogController extends View {
float midx, midy;
Paint textPaint, circlePaint, circlePaint2, linePaint;
String angle;
float currdeg, deg = 3, downdeg;
int progressColor, lineColor;
onProgressChangedListener mListener;
String label;
public interface onProgressChangedListener {
void onProgressChanged(int progress);
}
public void setOnProgressChangedListener(onProgressChangedListener listener) {
mListener = listener;
}
public AnalogController(Context context) {
super(context);
init();
}
public AnalogController(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public AnalogController(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
void init() {
textPaint = new Paint();
textPaint.setColor(Color.WHITE);
textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextSize(33);
textPaint.setFakeBoldText(true);
textPaint.setTextAlign(Paint.Align.CENTER);
circlePaint = new Paint();
circlePaint.setColor(Color.parseColor("#222222"));
circlePaint.setStyle(Paint.Style.FILL);
circlePaint2 = new Paint();
circlePaint2.setColor(Color.parseColor("#E83565"));
circlePaint2.setStyle(Paint.Style.FILL);
linePaint = new Paint();
linePaint.setColor(Color.parseColor("#08E0FF"));
linePaint.setStrokeWidth(18);
angle = "0.0";
label = "Label";
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
midx = getWidth() / 2;
midy = getHeight() / 2;
int ang = 0;
float x = 0, y = 0;
int radius = (int) (Math.min(midx, midy) * ((float) 14.5 / 16));
float deg2 = Math.max(3, deg);
float deg3 = Math.min(deg, 21);
for (int i = (int) (deg2); i < 22; i++) {
float tmp = (float) i / 24;
x = midx + (float) (radius * Math.sin(2 * Math.PI * (1.0 - tmp)));
y = midy + (float) (radius * Math.cos(2 * Math.PI * (1.0 - tmp)));
circlePaint.setColor(Color.parseColor("#626262"));
canvas.drawCircle(x, y, ((float) radius / 15), circlePaint);
}
for (int i = 3; i <= deg3; i++) {
float tmp = (float) i / 24;
x = midx + (float) (radius * Math.sin(2 * Math.PI * (1.0 - tmp)));
y = midy + (float) (radius * Math.cos(2 * Math.PI * (1.0 - tmp)));
circlePaint2.setColor(Color.parseColor("#E83565"));
canvas.drawCircle(x, y, ((float) radius / 15), circlePaint2);
}
float tmp2 = deg / 24;
float x1 = midx + (float) (radius * ((float) 2 / 5) * Math.sin(2 * Math.PI * (1.0 - tmp2)));
float y1 = midy + (float) (radius * ((float) 2 / 5) * Math.cos(2 * Math.PI * (1.0 - tmp2)));
float x2 = midx + (float) (radius * ((float) 3 / 5) * Math.sin(2 * Math.PI * (1.0 - tmp2)));
float y2 = midy + (float) (radius * ((float) 3 / 5) * Math.cos(2 * Math.PI * (1.0 - tmp2)));
canvas.drawCircle(midx, midy, radius * ((float) 11.5 / 15), circlePaint);
circlePaint.setColor(Color.parseColor("#08E0FF"));
// paint.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
canvas.drawCircle(midx, midy, radius * ((float) 11.5 / 15), circlePaint);
circlePaint.setColor(Color.parseColor("#434343"));
canvas.drawCircle(midx, midy, radius * ((float) 11 / 15), circlePaint);
canvas.drawText(label, midx, midy + (float) (radius * 1.1), textPaint);
canvas.drawLine(x1, y1, x2, y2, linePaint);
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent e) {
mListener.onProgressChanged((int) (deg - 2));
if (e.getAction() == MotionEvent.ACTION_DOWN) {
float dx = e.getX() - midx;
float dy = e.getY() - midy;
downdeg = (float) ((Math.atan2(dy, dx) * 180) / Math.PI);
downdeg -= 90;
if (downdeg < 0) {
downdeg += 360;
}
downdeg = (float) Math.floor(downdeg / 15);
return true;
}
if (e.getAction() == MotionEvent.ACTION_MOVE) {
float dx = e.getX() - midx;
float dy = e.getY() - midy;
currdeg = (float) ((Math.atan2(dy, dx) * 180) / Math.PI);
currdeg -= 90;
if (currdeg < 0) {
currdeg += 360;
}
currdeg = (float) Math.floor(currdeg / 15);
if (currdeg == 0 && downdeg == 23) {
deg++;
if (deg > 21) {
deg = 21;
}
downdeg = currdeg;
} else if (currdeg == 23 && downdeg == 0) {
deg--;
if (deg < 3) {
deg = 3;
}
downdeg = currdeg;
} else {
deg += (currdeg - downdeg);
if (deg > 21) {
deg = 21;
}
if (deg < 3) {
deg = 3;
}
downdeg = currdeg;
}
angle = String.valueOf(deg);
invalidate();
return true;
}
return e.getAction() == MotionEvent.ACTION_UP || super.onTouchEvent(e);
}
public int getProgress() {
return (int) (deg - 2);
}
public void setProgress(int param) {
deg = param + 2;
}
public String getLabel() {
return label;
}
public void setLabel(String txt) {
label = txt;
}
public int getLineColor() {
return lineColor;
}
public void setLineColor(int lineColor) {
this.lineColor = lineColor;
}
public int getProgressColor() {
return progressColor;
}
public void setProgressColor(int progressColor) {
this.progressColor = progressColor;
}
}
package com.bassbooster.soundeffects.equalizer.utils;
import android.graphics.Bitmap;
public class AppInfo {
private String packageName;
private String appName;
private Bitmap icon;
private String startActivityName;
AppInfo(String appName, String startActivityName, Bitmap icon){
this.appName = appName;
this.icon = icon;
this.startActivityName = startActivityName;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public Bitmap getIcon() {
return icon;
}
public void setIcon(Bitmap icon) {
this.icon = icon;
}
public String getStartActivityName() {
return startActivityName;
}
public void setStartActivityName(String startActivityName) {
this.startActivityName = startActivityName;
}
}
package com.bassbooster.soundeffects.equalizer.utils;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.graphics.LinearGradient;
import android.graphics.Shader;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import android.os.Looper;
import android.text.TextPaint;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.bassbooster.equalizer.R;
public class AppUtils {
public static boolean haveNetworkConnection(Context context) {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
public static void setMargins(View view, int left, int top, int right, int bottom) {
if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(left, top, right, bottom);
view.requestLayout();
}
}
public static void setGradientTextView(TextView textView) {
Context context = textView.getContext();
TextPaint paint = textView.getPaint();
float width = paint.measureText(textView.getText().toString());
Shader textShader = new LinearGradient(0, 0, width, textView.getTextSize(), new int[]{
// ContextCompat.getColor(context, R.color.clr_05F1FF),
// ContextCompat.getColor(context, R.color.clr_005BE0)
},
null, Shader.TileMode.CLAMP);
textView.getPaint().setShader(textShader);
}
public static void hideNavigationBar(AppCompatActivity activity) {
int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
if (activity != null){
View decorView = activity.getWindow().getDecorView();
Handler handler = new Handler(Looper.getMainLooper());
handler.removeCallbacksAndMessages(null);
handler.postDelayed(()->decorView.setSystemUiVisibility(flags),1000);
}
}
public static AppInfo getAppInfo(String packageName, Resources resources){
AppInfo app;
switch (packageName) {
case "com.gaana" :
app = new AppInfo("Gaana", "com.gaana.SplashScreenActivity",
BitmapFactory.decodeResource(resources,R.drawable.ic_gaana));
app.setPackageName(packageName);
return app;
case "com.spotify.music" :
app = new AppInfo("Spotify", "com.spotify.music.MainActivity",
BitmapFactory.decodeResource(resources,R.drawable.ic_spotify));
return app;
case "com.soundcloud.android" :
app = new AppInfo("Soundcloud", "com.soundcloud.android.launcher.LauncherActivity",
BitmapFactory.decodeResource(resources,R.drawable.ic_soundcloud));
return app;
case "com.google.android.apps.youtube.music" :
app = new AppInfo("Youtube Music", "com.google.android.apps.youtube.music.activities.MusicActivity",
BitmapFactory.decodeResource(resources,R.drawable.ic_ytbmusic));
return app;
default: return new AppInfo("","",null);
//"com.soundcloud.android.playback.players.MediaService"
}
}
}
package com.bassbooster.soundeffects.equalizer.utils
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.media.AudioFormat
import android.media.AudioRecord
import android.media.MediaRecorder
import androidx.core.app.ActivityCompat
class AudioSessionIdHelper {
fun getMicrophoneAudioSessionId(context: Context): Int? {
val audioRecord: AudioRecord?
val bufferSize = AudioRecord.getMinBufferSize(
44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT
)
try {
if (ActivityCompat.checkSelfPermission(
context,
Manifest.permission.RECORD_AUDIO
) != PackageManager.PERMISSION_GRANTED
) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return 0
}
audioRecord = AudioRecord(
MediaRecorder.AudioSource.MIC,
44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize
)
} catch (e: Exception) {
e.printStackTrace()
return null
}
val audioSessionId = audioRecord.audioSessionId
audioRecord.release()
return audioSessionId
}
}
/*
* Copyright 2017 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.bassbooster.soundeffects.equalizer.utils;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import com.bassbooster.equalizer.R;
/**
* Utility class for {@link Bitmap}s.
*/
public final class BitmapUtils {
private BitmapUtils() {
// Utility class.
}
/**
* Converts a {@link Drawable} to an appropriately sized {@link Bitmap}.
*
* @param resources Resources for the current {@link android.content.Context}.
* @param drawable The {@link Drawable} to convert to a Bitmap.
* @param downScale Will downscale the Bitmap to {@code R.dimen.app_icon_size} dp.
* @return A Bitmap, no larger than {@code R.dimen.app_icon_size} dp if desired.
*/
public static Bitmap convertDrawable(@NonNull final Resources resources,
@NonNull final Drawable drawable,
final boolean downScale) {
final Bitmap bitmap;
if (drawable instanceof BitmapDrawable) {
bitmap = ((BitmapDrawable) drawable).getBitmap();
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
}
if (!downScale) {
return bitmap;
}
final int iconSize = resources.getDimensionPixelSize(R.dimen.app_icon_size);
if (bitmap.getHeight() > iconSize || bitmap.getWidth() > iconSize) {
// Which needs to be scaled to fit.
final int height = bitmap.getHeight();
final int width = bitmap.getWidth();
final int scaleHeight;
final int scaleWidth;
// Calculate the new size based on which dimension is larger.
if (height > width) {
scaleHeight = iconSize;
scaleWidth = (int) (width * ((float) iconSize) / height);
} else {
scaleWidth = iconSize;
scaleHeight = (int) (height * ((float) iconSize) / width);
}
return Bitmap.createScaledBitmap(bitmap, scaleWidth, scaleHeight, false);
} else {
return bitmap;
}
}
/**
* Creates a Material Design compliant {@link androidx.appcompat.widget.Toolbar} icon
* from a given full sized icon.
*
* @param resources Resources for the current {@link android.content.Context}.
* @param icon The bitmap to convert.
* @return A scaled Bitmap of the appropriate size and in-built padding.
*/
public static Bitmap createToolbarIcon(@NonNull Resources resources,
@NonNull final Bitmap icon) {
final int padding = resources.getDimensionPixelSize(R.dimen.margin_small);
final int iconSize = resources.getDimensionPixelSize(R.dimen.toolbar_icon_size);
final int sizeWithPadding = iconSize + (2 * padding);
// Create a Bitmap backed Canvas to be the toolbar icon.
final Bitmap toolbarIcon =
Bitmap.createBitmap(sizeWithPadding, sizeWithPadding, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(toolbarIcon);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
// Resize the app icon to Material Design size.
final Bitmap scaledIcon = Bitmap.createScaledBitmap(icon, iconSize, iconSize, false);
canvas.drawBitmap(scaledIcon, padding, padding, null);
return toolbarIcon;
}
}
package com.bassbooster.soundeffects.equalizer.utils;
public interface Constants {
//Ads
String App_open_resume = "App_open_resume";
String Inter_splash = "Inter_splash";
String Native_language = "Native_language";
String Native_tutorial = "Native_tutorial";
String Native_home = "Native_home";
String Inter_home = "Inter_home";
String Inter_save = "Inter_save";
String Native_music = "Native_music";
String Banner = "Banner";
String Native_saving = "Native_saving";
String allow_reload_native_language = "allow_reload_native_language";
String allow_reload_native_tutorial = "allow_reload_native_tutorial";
String allow_reload_native_home = "allow_reload_native_home";
String allow_reload_native_music = "allow_reload_native_music";
String allow_reload_banner = "allow_reload_banner";
}
package com.bassbooster.soundeffects.equalizer.utils
import android.annotation.SuppressLint
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Build
import android.view.View
import android.widget.RemoteViews
import androidx.annotation.IdRes
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.bassbooster.equalizer.R
class CustomNotificationService {
companion object {
const val EXTRA_BUTTON_CLICKED = "EXTRA_BUTTON_CLICKED"
const val EXTRA_BUTTON = "EXTRA_BUTTON"
const val EXTRA_BUTTON_TEXT = "EXTRA_BUTTON_TEXT"
const val EXTRA_BUTTON_NEXT = "EXTRA_BUTTON_NEXT"
const val EXTRA_BUTTON_LIGHT = "EXTRA_BUTTON_LIGHT"
const val EXTRA_BUTTON_OFF = "EXTRA_BUTTON_OFF"
var nameType = ""
var bass = 0
var stereo = 0
fun createNotificationChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "My Channel"
val descriptionText = "My Channel Description"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel("channel_id", name, importance).apply {
description = descriptionText
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Tạo và đăng ký kênh thông báo nếu bạn đang chạy trên Android 8.0 (API level 26) trở lên
channel.setSound(null, null) // Tắt âm thanh
channel.enableVibration(false)
}
val notificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
@SuppressLint("MissingPermission")
fun showBasicNotification(context: Context, text: String, statusOnOff : Boolean = false,isLightOn: Boolean = false) {
if (text.isNotEmpty()){
nameType = text
}
val notificationLayout = RemoteViews(context.packageName, R.layout.notification_custom)
notificationLayout.apply {
if (statusOnOff){
setViewVisibility(R.id.mOff,View.VISIBLE)
setViewVisibility(R.id.mOn,View.GONE)
}else{
setViewVisibility(R.id.mOff,View.GONE)
setViewVisibility(R.id.mOn,View.VISIBLE)
}
if(isLightOn){
setViewVisibility(R.id.icLightOff,View.GONE)
setViewVisibility(R.id.icLight,View.VISIBLE)
}else{
setViewVisibility(R.id.icLightOff,View.VISIBLE)
setViewVisibility(R.id.icLight,View.GONE)
}
setTextViewText(R.id.mTxtNameBass, "Bass:")
setTextViewText(R.id.mTxtNameStereo, "Stereo")
setTextViewText(R.id.textView, nameType)
setTextViewText(R.id.mTxtStereo, "100")
setOnClickPendingIntent(
R.id.icLeft,
onButtonNotificationClick(context = context, id = R.id.icLeft,text=text)
)
setOnClickPendingIntent(
R.id.icRight,
onButtonNotificationClick(context = context, id = R.id.icRight,text=text)
)
setOnClickPendingIntent(
R.id.icLightOff,
onButtonNotificationClick(context = context, id = R.id.icLightOff)
)
setOnClickPendingIntent(
R.id.icLight,
onButtonNotificationClick(context = context, id = R.id.icLight)
)
setOnClickPendingIntent(
R.id.mOff,
onButtonNotificationClick(context = context, id = R.id.mOff)
)
setOnClickPendingIntent(
R.id.mOn,
onButtonNotificationClick(context = context, id = R.id.mOn)
)
}
val builder = NotificationCompat.Builder(context, "channel_id")
.setSmallIcon(R.drawable.ic_logo)
.setContentTitle("Tiêu đề thông báo")
.setContentText("Nội dung thông báo")
.setOnlyAlertOnce(true)
.setAutoCancel(true)
.setOngoing(true)
.setCustomContentView(notificationLayout)
.setCustomBigContentView(notificationLayout)
.setPriority(NotificationCompat.PRIORITY_HIGH)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channel = NotificationChannel(
"channel_id",
"channel_name",
NotificationManager.IMPORTANCE_DEFAULT
)
channel.description = "Channel Equalizer"
notificationManager.createNotificationChannel(channel)
}
val notificationManager = NotificationManagerCompat.from(context)
notificationManager.notify(0, builder.build())
}
private fun onButtonNotificationClick(context: Context, @IdRes id: Int,text: String? = null): PendingIntent? {
val intent: Intent = Intent(EXTRA_BUTTON_CLICKED)
intent.putExtra(EXTRA_BUTTON, id)
intent.putExtra(EXTRA_BUTTON_TEXT,text)
// Sử dụng FLAG_MUTABLE nếu bạn muốn thay đổi PendingIntent sau khi đã tạo nó.
// Sử dụng FLAG_IMMUTABLE nếu bạn không cần thay đổi PendingIntent sau khi đã tạo nó.
val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
PendingIntent.FLAG_MUTABLE
} else {
PendingIntent.FLAG_UPDATE_CURRENT
}
return PendingIntent.getBroadcast(
context,
id,
intent,
flags
)
}
}
}
open class MyBroadcastReceiver : BroadcastReceiver() {
@RequiresApi(Build.VERSION_CODES.N)
override fun onReceive(context: Context?, intent: Intent?) {
}
}
package com.bassbooster.equalizer.utils
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.view.View
import android.widget.Button
import android.widget.FrameLayout
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.bassbooster.equalizer.R
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
object DialogUtils {
fun showDialogConfirmPer(context: Context?, title:String?,description: String?,
listenerOK:(() -> Unit)? = null, listenerCancel:(() -> Unit)? = null): AlertDialog? {
if (context == null) return null
val dialog : AlertDialog =
AlertDialog.Builder(context)
.setView(R.layout.layout_dialog_permission)
.create().apply {
setCancelable(false)
setCanceledOnTouchOutside(false)
}
dialog.apply {
window?.setBackgroundDrawableResource(R.drawable.custom_dialog)
show()
findViewById<AppCompatTextView>(R.id.tvTitle)?.text = title
findViewById<AppCompatTextView>(R.id.tvDescription)?.text = description
findViewById<AppCompatButton>(R.id.btnOK)?.setOnClickListener {
listenerOK?.invoke()
this.dismiss()
}
findViewById<AppCompatButton>(R.id.btnCancel)?.setOnClickListener {
listenerCancel?.invoke()
this.dismiss()
}
}
return dialog
}
fun showDialog(context: Context?,description: String?,
listenerOK:(() -> Unit)? = null, listenerCancel:(() -> Unit)? = null): AlertDialog? {
if (context == null) return null
val dialog : AlertDialog =
AlertDialog.Builder(context)
.setView(R.layout.layout_dialog)
.create().apply {
setCancelable(false)
setCanceledOnTouchOutside(false)
}
dialog.apply {
window?.setBackgroundDrawableResource(R.drawable.custom_dialog)
show()
findViewById<AppCompatTextView>(R.id.tvTitle)?.text = context.resources.getString(R.string.title_opp)
findViewById<AppCompatTextView>(R.id.tvDescription)?.text = description
findViewById<AppCompatButton>(R.id.btnOK)?.setOnClickListener {
listenerOK?.invoke()
this.dismiss()
}
}
return dialog
}
@SuppressLint("SetTextI18n")
fun showDialogSaveSuccess(
context: Context?,
title: String?,
listenerOK: (() -> Unit)? = null,
activity: Activity?
): AlertDialog? {
var progressStatus = 0
val handler = Handler(Looper.getMainLooper())
val totalTime = 4000 // 4 giây (4000 milliseconds)
val interval = 40 // Cập nhật giá trị mỗi 40 milliseconds
val steps = totalTime / interval // Số bước cần để đạt được tổng thời gian
var homeAdsLoaded = false
if (context == null) return null
val dialog: AlertDialog =
AlertDialog.Builder(context)
.setView(R.layout.layout_dialog_save)
.create().apply {
setCancelable(false)
setCanceledOnTouchOutside(false)
}
dialog.apply {
window?.setBackgroundDrawableResource(R.drawable.custom_dialog)
show()
val progressBar = findViewById<ProgressBar>(R.id.Prog)
val countProg = findViewById<TextView>(R.id.countProg)
val btnOK = findViewById<AppCompatButton>(R.id.btnOK)
Thread {
for (i in 0 until steps) {
progressStatus =
(i * 100) / steps // Tính giá trị của progressStatus từ 0 đến 100
handler.post {
progressBar?.progress = progressStatus + 1
countProg?.text = "${progressStatus + 1}%"
}
try {
Thread.sleep(interval.toLong()) // Đợi `interval` milliseconds trước khi cập nhật giá trị tiếp theo
} catch (e: InterruptedException) {
e.printStackTrace()
}
}
handler.post {
btnOK?.isEnabled = true
btnOK?.background = context.resources.getDrawable(R.drawable.button_border)
}
}.start()
findViewById<AppCompatTextView>(R.id.tvTitle)?.text = title
btnOK?.setOnClickListener {
listenerOK?.invoke()
this.dismiss()
}
}
return dialog
}
}
\ No newline at end of file
/*
* Copyright 2017 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.bassbooster.soundeffects.equalizer.utils;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.media.session.MediaSession;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.v4.media.session.MediaSessionCompat;
import android.util.Log;
import androidx.annotation.Nullable;
import java.util.List;
/**
* Stores details about a media app.
*/
public class MediaAppDetails implements Parcelable {
public String packageName;
public String appName;
public Bitmap icon;
@Nullable
public Bitmap banner;
public MediaSessionCompat.Token sessionToken;
public ComponentName componentName;
public boolean supportsAutomotive = false;
public boolean supportsAuto = false;
public MediaAppDetails(String packageName, String name, Bitmap appIcon,
@Nullable Bitmap appBanner, MediaSessionCompat.Token token) {
this.packageName = packageName;
appName = name;
sessionToken = token;
icon = appIcon;
// This TV app targets min sdk version 21, and a banner will only be present for the TV app
banner = appBanner;
componentName = null;
}
public MediaAppDetails(String packageName, String name, Bitmap appIcon,
@Nullable Bitmap appBanner, MediaSession.Token token) {
this(packageName, name, appIcon, appBanner, MediaSessionCompat.Token.fromToken(token));
}
public MediaAppDetails(String packageName,
@Nullable MediaSession.Token token, @Nullable Resources resources) {
this.packageName = packageName;
if (resources != null) {
this.appName = AppUtils.getAppInfo(packageName, resources).getAppName();
this.icon = AppUtils.getAppInfo(packageName, resources).getIcon();
}
if (token != null) {
// If we have a MediaSession Token, then we don't need to connect to the
// MediaBrowserService implementation, so componentName is null.
componentName = null;
sessionToken = MediaSessionCompat.Token.fromToken(token);
} else {
// If we don't have a MediaSession Token, then we need to connect to the
// MediaBrowserService implementation.
componentName = new ComponentName(packageName, AppUtils.getAppInfo(packageName, resources).getStartActivityName());
sessionToken = null;
}
}
public MediaAppDetails(PackageItemInfo info, PackageManager pm, Resources resources,
MediaSession.Token token) {
packageName = info.packageName;
appName = info.loadLabel(pm).toString();
Drawable appIcon = info.loadIcon(pm);
icon = BitmapUtils.convertDrawable(resources, appIcon, true);
// if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
// Drawable appBanner = info.loadBanner(pm);
// if (appBanner != null) {
// banner = BitmapUtils.convertDrawable(resources, appBanner, false);
// }
// }
if (token != null) {
// If we have a MediaSession Token, then we don't need to connect to the
// MediaBrowserService implementation, so componentName is null.
// componentName = null;
// sessionToken = MediaSessionCompat.Token.fromToken(token);
} else {
// If we don't have a MediaSession Token, then we need to connect to the
// MediaBrowserService implementation.
// componentName = new ComponentName(info.packageName, info.name);
// sessionToken = null;
}
try {
FeatureInfo[] features = pm.getPackageInfo(
packageName, PackageManager.GET_CONFIGURATIONS).reqFeatures;
supportsAutomotive = false;
if (features != null) {
for (FeatureInfo f : features) {
if (f.name != null && f.name.equals("android.hardware.type.automotive")) {
supportsAutomotive = true;
break;
}
}
}
Bundle metaData = pm.getApplicationInfo(packageName,
PackageManager.GET_META_DATA).metaData;
if (metaData != null) {
if (metaData.containsKey("com.google.android.gms.car.application")) {
supportsAuto = true;
}
}
} catch (PackageManager.NameNotFoundException e) {
Log.w("MediaAppDetails", "package name not found" + packageName);
}
}
public MediaAppDetails(PackageItemInfo info, PackageManager pm, Resources resources) {
// this(info, pm, resources, null);
}
/**
* Helper function to get the service info for the packagemanager for a given package.
*/
// public static ServiceInfo findServiceInfo(String packageName, PackageManager pm) {
// final Intent mediaBrowserIntent = new Intent(MediaBrowserServiceCompat.SERVICE_INTERFACE);
// final List<ResolveInfo> services =
// pm.queryIntentServices(mediaBrowserIntent,
// PackageManager.GET_RESOLVED_FILTER);
// for (ResolveInfo info : services) {
// if (info.serviceInfo.packageName.equals(packageName)) {
// return (info.serviceInfo);
// }
// }
// return null;
// }
public static List<ResolveInfo> findResolveInfo(
String packageName, PackageManager pm, String action) {
if (packageName != null) {
Intent prefsIntent = new Intent(action);
prefsIntent.setPackage(packageName);
return pm.queryIntentActivities(prefsIntent, 0);
}
return null;
}
private MediaAppDetails(final Parcel parcel) {
packageName = parcel.readString();
appName = parcel.readString();
icon = parcel.readParcelable(MediaAppDetails.class.getClassLoader());
// sessionToken = parcel.readParcelable(MediaAppDetails.class.getClassLoader());
// componentName = parcel.readParcelable(MediaAppDetails.class.getClassLoader());
supportsAuto = parcel.readInt() == 1;
supportsAutomotive = parcel.readInt() == 1;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(packageName);
dest.writeString(appName);
dest.writeParcelable(icon, flags);
// dest.writeParcelable(sessionToken, flags);
// dest.writeParcelable(componentName, flags);
dest.writeInt(supportsAuto ? 1 : 0);
dest.writeInt(supportsAutomotive ? 1 : 0);
}
public static final Creator<MediaAppDetails> CREATOR =
new Creator<MediaAppDetails>() {
public MediaAppDetails createFromParcel(Parcel source) {
return new MediaAppDetails(source);
}
public MediaAppDetails[] newArray(int size) {
return new MediaAppDetails[size];
}
};
}
package com.bassbooster.soundeffects.equalizer.utils;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build.VERSION_CODES;
import android.service.notification.NotificationListenerService;
import androidx.core.app.NotificationManagerCompat;
/**
* A notification listener service to allows us to grab active media sessions from their
* notifications.
* This class is only used on API 21+ because the Android media framework added getActiveSessions
* in API 21.
*/
@SuppressLint("ObsoleteSdkInt")
@TargetApi(VERSION_CODES.LOLLIPOP)
public class NotificationListener extends NotificationListenerService {
// Helper method to check if our notification listener is enabled. In order to get active media
// sessions, we need an enabled notification listener component.
public static boolean isEnabled(Context context) {
return NotificationManagerCompat
.getEnabledListenerPackages(context)
.contains(context.getPackageName());
}
}
package com.bassbooster.soundeffects.equalizer.utils
data class Resource<out T>(val status: Status, val data: T?, val message: String?) {
companion object {
fun <T> success(data: T?): Resource<T> {
return Resource(Status.SUCCESS, data, null)
}
fun <T> error(msg: String, data: T?): Resource<T> {
return Resource(Status.ERROR, data, msg)
}
fun <T> loading(data: T?): Resource<T> {
return Resource(Status.LOADING, data, null)
}
}
}
package com.bassbooster.soundeffects.equalizer.utils
import android.content.Context
import android.content.SharedPreferences
class SharedPreferencesUtil(private val context: Context) {
private val sharedPreferences: SharedPreferences =
context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
private val editor: SharedPreferences.Editor = sharedPreferences.edit()
fun saveString(key: String, value: String) {
editor.putString(key, value)
editor.apply()
}
fun getString(key: String, defaultValue: String = ""): String {
return sharedPreferences.getString(key, defaultValue) ?: defaultValue
}
fun saveInt(key: String, value: Int) {
editor.putInt(key, value)
editor.apply()
}
fun getInt(key: String, defaultValue: Int = 0): Int {
return sharedPreferences.getInt(key, defaultValue)
}
fun saveBoolean(key: String, value: Boolean) {
editor.putBoolean(key, value)
editor.apply()
}
fun getBoolean(key: String, defaultValue: Boolean = true): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
fun saveBooleanPlayControl(key: String, value: Boolean) {
editor.putBoolean(key, value)
editor.apply()
}
fun getBooleanPlayControl(key: String, defaultValue: Boolean = true): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
fun saveStatusWidgetEdge(key: String, value: Boolean) {
editor.putBoolean(key, value)
editor.apply()
}
fun getStatusWidgetEdge(key: String, defaultValue: Boolean = false): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
fun isFirstSplash(key: String, value: Boolean) {
editor.putBoolean(key, value)
editor.apply()
}
fun getIsFirstSplash(key: String, defaultValue: Boolean = false): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
fun saveStatusRestart(key: String, value: Boolean) {
editor.putBoolean(key, value)
editor.apply()
}
fun getStatusRestart(key: String, defaultValue: Boolean = false): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
fun saveIsOverLay(key: String, value: Boolean) {
editor.putBoolean(key, value)
editor.apply()
}
fun getIsOverLay(key: String, defaultValue: Boolean = false): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
fun saveIsStatusSelectMusic(key: String, value: Boolean) {
editor.putBoolean(key, value)
editor.apply()
}
fun getIsStatusSelectMusic(key: String, defaultValue: Boolean = false): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
fun removeValue(key: String) {
editor.remove(key)
editor.apply()
}
fun clearAll() {
editor.clear()
editor.apply()
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.utils
enum class Status {
SUCCESS,
ERROR,
LOADING
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.utils
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.inputmethod.InputMethodManager
import com.bassbooster.soundeffects.equalizer.database.EffectsData
import com.bassbooster.soundeffects.equalizer.database.EffectsRepository
object Utils {
suspend fun insertDateEffects(effectsRepository: EffectsRepository){
val newEffects = EffectsData()
newEffects.seekbar0 = 987
newEffects.seekbar1 = 0
newEffects.seekbar2 = 0
newEffects.seekbar3 = 0
newEffects.seekbar4 = 0
newEffects.bassStrength = 0
newEffects.reverbPreset = 2
effectsRepository.insert(newEffects)
}
fun hideKeyboard(view: View, context: Context) {
val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
}
fun hideAdsResume(){
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.os.SystemClock
import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS
import android.util.Log
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.res.ResourcesCompat
import androidx.viewpager.widget.ViewPager
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.Tutorial
import com.bassbooster.equalizer.databinding.ActivityTutorialSplashBinding
import com.bassbooster.equalizer.utils.DialogUtils
import com.bassbooster.soundeffects.equalizer.utils.AppUtils
import com.bassbooster.soundeffects.equalizer.utils.NotificationListener
import com.bassbooster.soundeffects.equalizer.view.activity.onboarding.OnBoardingPagerAdapter
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
import com.bassbooster.soundeffects.equalizer.utils.Utils
class ActivityTutorialSplash : AppCompatActivity() {
private lateinit var binding: ActivityTutorialSplashBinding
private lateinit var sharedPreferencesUtil: SharedPreferencesUtil
private val itemList = arrayListOf<Tutorial>()
private var nativeAdsLoaded = arrayListOf<Boolean>()
private var mLastClickTime: Long = 0
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
private var positions = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityTutorialSplashBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
sharedPreferencesUtil = SharedPreferencesUtil(this)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
binding.mRlNext.visibility = View.GONE
setUpViewPager()
addEvent()
AppUtils.hideNavigationBar(this)
}
override fun onResume() {
super.onResume()
AppUtils.hideNavigationBar(this)
}
override fun onPause() {
super.onPause()
Utils.hideAdsResume()
}
@SuppressLint("NewApi")
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
AppUtils.hideNavigationBar(this)
}
}
@SuppressLint("NewApi")
private fun addEvent() {
}
private fun setUpViewPager() {
// Gửi sự kiện "Chọn ngôn ngữ English" lên Firebase Analytics
val params = Bundle()
params.putString("onboarding1", "User views màn Onboarding 1")
// mFirebaseAnalytics!!.logEvent("onboarding_1_view", params)
val adapter = OnBoardingPagerAdapter(supportFragmentManager)
binding.onboardingViewPager.addOnPageChangeListener(object :
ViewPager.OnPageChangeListener {
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
if (positions>position){
// Gửi sự kiện "Chọn ngôn ngữ English" lên Firebase Analytics
val paramSwipeBack = Bundle()
paramSwipeBack.putString("swipeback", "User vuốt quay lại màn Onboarding ${positions+1}")
// mFirebaseAnalytics!!.logEvent("onboarding_${positions+1}_swipe_back", paramSwipeBack)
}
positions=position
binding.btnNext.text =
if (position == 2 && positionOffset == 0f) resources.getString(R.string.get_start) else resources.getString(R.string.next)
}
override fun onPageSelected(position: Int) {
prepareDot(position, arrayListOf(0,1,2))
Log.d("qqq", "onPageSelected: ")
}
override fun onPageScrollStateChanged(state: Int) {}
})
prepareDot(0, arrayListOf(0,1,2))
binding.onboardingViewPager.adapter = adapter
binding.btnNext.setOnClickListener {
if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
return@setOnClickListener
}
mLastClickTime = SystemClock.elapsedRealtime()
if (binding.onboardingViewPager.currentItem < adapter.count - 1) {
// Chuyển đến Fragment tiếp theo
binding.onboardingViewPager.currentItem = binding.onboardingViewPager.currentItem + 1
// Gửi sự kiện "Chọn ngôn ngữ English" lên Firebase Analytics
val params = Bundle()
params.putString("onboarding_next", "User clicks next ở màn Onboarding ${binding.onboardingViewPager.currentItem}")
// mFirebaseAnalytics!!.logEvent("onboarding_${binding.onboardingViewPager.currentItem}_next_click", params)
// Gửi sự kiện "Chọn ngôn ngữ English" lên Firebase Analytics
val paramView = Bundle()
paramView.putString("onboarding_view", "User views màn Onboarding ${binding.onboardingViewPager.currentItem+1}")
// mFirebaseAnalytics!!.logEvent("onboarding_${binding.onboardingViewPager.currentItem+1}_view", paramView)
binding.btnNext.text = resources.getString(R.string.next)
} else {
// Ví dụ: chuyển đến màn hình chính của ứng dụng
val params = Bundle()
params.putString("onboarding_get_start", "User clicks get start ở màn Onboarding ${binding.onboardingViewPager.currentItem+1}")
// mFirebaseAnalytics!!.logEvent("onboarding_${binding.onboardingViewPager.currentItem+1}_get_start_click", params)
sharedPreferencesUtil.isFirstSplash("isFirstSplash", true)
openHome()
}
}
}
private fun prepareDot(dotPosition: Int, listBanner: List<Int>) {
if (binding.dotsSlide.childCount > 0) {
binding.dotsSlide.removeAllViews()
}
for (i in listBanner.indices) {
val dot = ImageView(this)
if (i == dotPosition) {
dot.setImageDrawable(
ResourcesCompat.getDrawable(
resources,
R.drawable.indicator_main_unselected,
null
)
)
} else {
dot.setImageDrawable(
ResourcesCompat.getDrawable(
resources,
R.drawable.indicator_main_selected,
null
)
)
}
val layoutParams = LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
layoutParams.marginStart = 20
binding.dotsSlide.addView(dot, layoutParams)
}
}
private fun checkAudioPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this,
Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED
}
private fun checkModifyAudioPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this,
Manifest.permission.MODIFY_AUDIO_SETTINGS
) == PackageManager.PERMISSION_GRANTED
}
private fun requestAudioPermission() {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.RECORD_AUDIO),
28
)
}
private fun requestModifyAudioPermission() {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.MODIFY_AUDIO_SETTINGS),
27
)
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 28) { // Sử dụng requestCode bạn đã chọn ở bước 1
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
checkPermissionNotification()
} else {
DialogUtils.showDialog(this,
resources.getString(R.string.notification_content_visua),
listenerOK = {
val intent = Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivityForResult(intent,28)
})
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 28){
if (checkAudioPermission()) {
checkPermissionNotification()
} else {
DialogUtils.showDialog(this,
resources.getString(R.string.notification_content_visua),
listenerOK = {
val intent = Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivityForResult(intent,28)
})
}
}else{
openHome()
}
}
private fun checkPermissionNotification(){
if (checkModifyAudioPermission()) {
if (!NotificationListener.isEnabled(this)) {
DialogUtils.showDialogConfirmPer(this,
"Notification",
resources.getString(R.string.notification_content),
listenerOK = {
startActivityForResult(
Intent(
"android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"
), 100
)
// sharedPreferencesUtil.saveBoolean("NOTIFICATION_LISTENER_SETTINGS",true)
},
listenerCancel = {
openHome()
})
}else{
openHome()
}
} else {
requestModifyAudioPermission()
}
}
private fun openHome(){
val intent = Intent(
this@ActivityTutorialSplash, MainActivity::class.java
)
startActivity(intent)
finish()
}
override fun onBackPressed() {
finishAffinity()
}
}
package com.bassbooster.soundeffects.equalizer.view
import android.Manifest
import android.annotation.SuppressLint
import android.content.*
import android.content.pm.PackageManager
import android.media.AudioManager
import android.media.session.MediaSessionManager
import android.net.Uri
import android.os.*
import android.provider.Settings
import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS
import android.support.v4.media.MediaBrowserCompat
import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaControllerCompat
import android.support.v4.media.session.PlaybackStateCompat
import android.util.Log
import android.view.View
import android.widget.*
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.adapter.ViewPagerAdapter
import com.bassbooster.soundeffects.equalizer.base.ViewModelFactory
import com.bassbooster.soundeffects.equalizer.data.api.ApiHelper
import com.bassbooster.soundeffects.equalizer.data.api.ApiServiceImpl
import com.bassbooster.soundeffects.equalizer.data.model.MediaInfo
import com.bassbooster.soundeffects.equalizer.database.EffectsData
import com.bassbooster.equalizer.databinding.ActivityMainBinding
import com.bassbooster.equalizer.databinding.DialogBottomSaveBinding
import com.bassbooster.soundeffects.equalizer.event.MessageEvent
import com.bassbooster.soundeffects.equalizer.event.PlayAdsEvent
import com.bassbooster.equalizer.utils.*
import com.bassbooster.soundeffects.equalizer.adapter.ChooseAppAdapter
import com.bassbooster.soundeffects.equalizer.data.model.AppMedia
import com.bassbooster.soundeffects.equalizer.utils.CustomNotificationService.Companion.createNotificationChannel
import com.bassbooster.soundeffects.equalizer.view.activity.effects.EffectsActivity
import com.bassbooster.soundeffects.equalizer.view.activity.setting.SettingActivity
import com.bassbooster.soundeffects.equalizer.view.activity.setting.language.LanguageManager
import com.bassbooster.soundeffects.equalizer.view.fragment.HomeFragment
import com.bassbooster.soundeffects.equalizer.view.fragment.PlayFragment
import com.bassbooster.soundeffects.equalizer.viewmodel.MainViewModel
import com.bassbooster.soundeffects.equalizer.viewmodel.MyViewModel
import com.bullhead.equalizer.ButtonController
import com.bullhead.equalizer.EqualizerToAppListener
import com.bullhead.equalizer.Settings.equalizerModel
import com.bassbooster.soundeffects.equalizer.tasks.FindMediaAppsTask
import com.bassbooster.soundeffects.equalizer.utils.AppUtils
import com.bassbooster.soundeffects.equalizer.utils.MediaAppDetails
import com.bassbooster.soundeffects.equalizer.utils.NotificationListener
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
import com.bassbooster.soundeffects.equalizer.utils.Utils
import com.bassbooster.soundeffects.equalizer.tasks.FindMediaSessionAppsTask
import com.bassbooster.soundeffects.equalizer.tasks.MediaAppControllerUtils
import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
class MainActivity : AppCompatActivity(), EqualizerToAppListener {
private lateinit var binding: ActivityMainBinding
private lateinit var includeBinding: DialogBottomSaveBinding
private lateinit var mainViewModel: MainViewModel
private lateinit var sharedPreferencesUtil: SharedPreferencesUtil
private val mediaApps = arrayListOf<MediaAppDetails>()
private var mMediaAppDetails:MediaAppDetails? =
null
private var mController: MediaControllerCompat? = null
private var mBrowser: MediaBrowserCompat? = null
private var sessionId: Int? = null
private var positionTab = 0
val scope = CoroutineScope(Dispatchers.IO) // Sử dụng luồng nền
private lateinit var viewModel: MyViewModel
private val mMediaSessionListener: MediaSessionListener = MediaSessionListener()
private val searchHandler = Handler(Looper.getMainLooper())
private val listPresetName = arrayListOf<String>()
private val languageManager = LanguageManager()
private var statusPlayMedia = false
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
private var adsHomeIsVisible = true
companion object {
val RESTART_APP_FLAG = "restart_app_flag"
@SuppressLint("StaticFieldLeak")
// var nativeAdHelper: NativeAdHelper? = null
var statusFistTimeTab = false
var statusFistTimeSelectMusic = false
}
// val adCallback = object : AperoAdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Native_home_click","click ad tại màn Home","home_click")
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// if (!adsHomeIsVisible && viewPager2.currentItem != 0){
// binding.nativeHome.visibility = View.GONE
// adsHomeIsVisible = true
// }
// }
// }
private val mCallback: MediaControllerCompat.Callback =
object : MediaControllerCompat.Callback() {
override fun onPlaybackStateChanged(playbackState: PlaybackStateCompat?) {
if (playbackState!=null){
onUpdate()
Log.d("qqq", "onPlaybackStateChanged: " + playbackState.state)
if (playbackState.state == 2) {
mainViewModel.updateState(true)
} else {
if (playbackState.state == 0 || playbackState.state == 1) {
mainViewModel.updateState(true)
} else {
mainViewModel.updateState(false)
}
}
}
}
override fun onMetadataChanged(metadata: MediaMetadataCompat?) {
if (metadata!=null){
onUpdate()
}
}
override fun onSessionDestroyed() {
Log.d("iii", "onSessionDestroyed: ")
}
private fun onUpdate() {
try {
val metadata = mController?.metadata
if (metadata != null) {
val title =
metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE) ?: ""
val description =
metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST) ?: ""
mainViewModel.updateInfo(title, description)
}
} catch (ex: Exception) {
}
}
}
@RequiresApi(Build.VERSION_CODES.M)
@SuppressLint("QueryPermissionsNeeded")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedPreferencesUtil = SharedPreferencesUtil(this)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
if(sharedPreferencesUtil.getIsStatusSelectMusic("selectMusic")){
binding.mViewSelect.visibility = View.VISIBLE
binding.mViewNotSelect.visibility = View.GONE
}else{
binding.mViewSelect.visibility = View.GONE
binding.mViewNotSelect.visibility = View.VISIBLE
}
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
AppUtils.hideNavigationBar(this)
includeBinding = DialogBottomSaveBinding.inflate(layoutInflater)
mMediaSessionListener.onCreate(context = this)
setupViewModel()
val isReStartApp = sharedPreferencesUtil.getStatusRestart(RESTART_APP_FLAG)
if (isReStartApp) {
sharedPreferencesUtil.saveStatusRestart(RESTART_APP_FLAG, false)
init()
setupUI()
} else {
if (checkAudioPermission()) {
checkPermissionNotification()
} else {
requestAudioPermission()
}
}
setOnEvent()
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 28) { // Sử dụng requestCode bạn đã chọn ở bước 1
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
checkPermissionNotification()
} else {
DialogUtils.showDialog(this,
resources.getString(R.string.notification_content_visua),
listenerOK = {
val intent = Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivityForResult(intent, 28)
})
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 28) {
if (checkAudioPermission()) {
checkPermissionNotification()
} else {
DialogUtils.showDialog(this,
resources.getString(R.string.notification_content_visua),
listenerOK = {
val intent = Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivityForResult(intent, 28)
})
}
} else {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"allow_access_ok_allow","User cấp quyền cho app truy cập player ngoài","allow_access")
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
}
}
private fun checkPermissionNotification() {
if (checkModifyAudioPermission()) {
if (!NotificationListener.isEnabled(this)) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"allow_access_view","View màn Allow Access","allow_access")
DialogUtils.showDialogConfirmPer(this,
resources.getString(R.string.notification),
resources.getString(R.string.notification_content),
listenerOK = {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"allow_access_ok","User clicks ok -> vào màn cấp quyền","allow_access")
startActivityForResult(
Intent(
"android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"
), 100
)
// sharedPreferencesUtil.saveBoolean("NOTIFICATION_LISTENER_SETTINGS",true)
},
listenerCancel = {
init()
setupUI()
})
} else {
init()
setupUI()
}
} else {
requestModifyAudioPermission()
}
}
private fun checkAudioPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this,
Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED
}
private fun checkModifyAudioPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this,
Manifest.permission.MODIFY_AUDIO_SETTINGS
) == PackageManager.PERMISSION_GRANTED
}
private fun requestAudioPermission() {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.RECORD_AUDIO),
28
)
}
private fun requestModifyAudioPermission() {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.MODIFY_AUDIO_SETTINGS),
27
)
}
@SuppressLint("UnspecifiedRegisterReceiverFlag")
override fun onStart() {
super.onStart()
// mMediaSessionListener.onStart(this)
/*val intentFilter = IntentFilter(CustomNotificationService.EXTRA_BUTTON_CLICKED)
registerReceiver(notificationReceiver, intentFilter)*/
}
override fun onStop() {
super.onStop()
}
override fun onDestroy() {
super.onDestroy()
mMediaSessionListener.onStop()
//unregisterReceiver(notificationReceiver)
val svc = Intent(this, MainService::class.java)
stopService(svc)
}
@SuppressLint("QueryPermissionsNeeded")
private fun init() {
val fragmentList = arrayListOf(
HomeFragment.newInstance(sessionId ?: 0), PlayFragment.newInstance(sessionId ?: 0)
)
binding.viewPager2.adapter = ViewPagerAdapter(this, fragmentList)
binding.viewPager2.isUserInputEnabled = false
binding.viewPager2.offscreenPageLimit = 1
changeTab(0)
initListMedia()
mainViewModel.mediaAppDetailsList.observe(this, Observer { mediaList ->
Log.d("qqq", "init: " + mediaList.size)
mediaApps.addAll(0, mediaList)
val listDistinct = mediaApps.distinctBy { it.packageName }
mediaApps.clear()
mediaApps.addAll(listDistinct)
if (mediaApps.isNotEmpty()) {
val packageName: String = sharedPreferencesUtil.getString("appChoose")
mMediaAppDetails = mediaApps.firstOrNull { it.packageName == packageName }
Log.d("qqq", "packageName init: $packageName")
}
if (mMediaAppDetails != null) {
Log.d("qqq", "mMediaAppDetails init: " + mMediaAppDetails?.packageName)
setupMedia()
}
})
//creat notification
createNotificationChannel(this@MainActivity)
/*val eq = Equalizer(0, sessionId ?: 0)
for (i in 0 until eq.numberOfPresets) {
Log.d("Equalizer", eq.getPresetName(i.toShort()))
listPresetName.add(eq.getPresetName(i.toShort()))
}
if (listPresetName.isNotEmpty()) {
showBasicNotification(this@MainActivity, listPresetName[0], statusOnOff, isLightOn)
}*/
}
private fun setupUI() {
val stateObserver = Observer<MainViewModel.State> { newName ->
if (newName == null || (this.getSystemService(Context.AUDIO_SERVICE) as? AudioManager)?.isMusicActive == false) return@Observer
if (newName == MainViewModel.State.PAUSE) {
statusPlayMedia = true
binding.mPlay.setImageResource(R.drawable.ic_pause)
// binding.viewPager2.currentItem = positionTab + 1
} else {
statusPlayMedia = false
binding.mPlay.setImageResource(R.drawable.ic_play_music)
}
}
mainViewModel.updateState.observe(this, stateObserver)
val nameObserver = Observer<MediaInfo> { newName ->
if (newName == null) return@Observer
binding.tvNameApp.text = newName.title
binding.tvSigger.text = newName.description
}
mainViewModel.updateInformation.observe(this, nameObserver)
}
private fun onMusicClick() {
runOnUiThread({
binding.viewPager2.apply {
changeTab(1)
this.setCurrentItem(1, true)
}
})
}
@SuppressLint("ResourceAsColor")
fun changeTab(position: Int) {
binding.apply {
if (position == 0) {
binding.mRlViewPlay.visibility = View.VISIBLE
tab1Background.setBackgroundResource(R.color.tab_selected)
tab2Background.setBackgroundResource(R.color.transparent_00)
} else {
binding.mRlViewPlay.visibility = View.GONE
tab2Background.setBackgroundResource(R.color.tab_selected)
tab1Background.setBackgroundResource(R.color.transparent_00)
}
}
}
private fun setupViewModel() {
mainViewModel = ViewModelProviders.of(
this, ViewModelFactory(ApiHelper(ApiServiceImpl()))
).get(MainViewModel::class.java)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
}
@RequiresApi(Build.VERSION_CODES.M)
private fun setOnEvent() {
binding.cardTab1.setOnClickListener {
runOnUiThread {
binding.viewPager2.apply {
if (currentItem != 0) {
changeTab(0)
this.setCurrentItem(0, true)
}
}
}
}
binding.cardTab2.setOnClickListener {
if (binding.viewPager2.currentItem == 1) return@setOnClickListener
if (statusFistTimeTab){
EventBus.getDefault().post(PlayAdsEvent(true))
}else{
statusFistTimeTab = true
}
onMusicClick()
}
binding.imgSetting.setOnClickListener {
val intent = Intent(this@MainActivity, SettingActivity::class.java)
startActivity(intent)
}
binding.tvChooseMedia.setOnClickListener {
showBottomSheetDialog()
}
binding.mPlay.setOnClickListener {
if (mainViewModel.updateState.value == MainViewModel.State.PLAY) {
play()
} else {
pause()
}
onMusicClick()
binding.mRlViewPlay.visibility = View.GONE
}
binding.mNext.setOnClickListener {
skipToNext()
onMusicClick()
binding.mRlViewPlay.visibility = View.GONE
}
binding.mPrevious.setOnClickListener {
skipToPrevious()
onMusicClick()
binding.mRlViewPlay.visibility = View.GONE
}
binding.includeDialog.mRlDialog.setOnClickListener {
binding.includeDialog.mEdtEffects.setText("")
binding.includeDialog.mRlDialog.visibility = View.GONE
Utils.hideKeyboard(binding.includeDialog.mRlDialog, this@MainActivity)
}
binding.includeDialog.mViewType.setOnClickListener {}
binding.includeDialog.icDeleteDialog.setOnClickListener {
binding.includeDialog.mEdtEffects.setText("")
binding.includeDialog.mRlDialog.visibility = View.GONE
Utils.hideKeyboard(binding.includeDialog.mRlDialog, this@MainActivity)
}
binding.includeDialog.mLlSave.setOnClickListener {
if (binding.includeDialog.mEdtEffects.text.toString().trim().isNotEmpty()) {
val newEffects = EffectsData()
newEffects.name = binding.includeDialog.mEdtEffects.text.toString().trim()
newEffects.seekbar0 = equalizerModel.seekbarpos[0]
newEffects.seekbar1 = equalizerModel.seekbarpos[1]
newEffects.seekbar2 = equalizerModel.seekbarpos[2]
newEffects.seekbar3 = equalizerModel.seekbarpos[3]
newEffects.seekbar4 = equalizerModel.seekbarpos[4]
newEffects.bassStrength = equalizerModel.bassStrength
newEffects.reverbPreset = equalizerModel.reverbPreset
scope.launch {
viewModel.insertData(newEffects)
}
// Toast.makeText(this, resources.getString(R.string.save_success), Toast.LENGTH_LONG)
// .show()
val buttonController = ButtonController()
buttonController.onUpdateNameTypeEffects(
binding.includeDialog.mEdtEffects.text.toString().trim()
)
EventBus.getDefault()
.post(MessageEvent(binding.includeDialog.mEdtEffects.text.toString().trim()))
binding.includeDialog.mEdtEffects.setText("")
binding.includeDialog.mRlDialog.visibility = View.GONE
Utils.hideKeyboard(binding.includeDialog.mEdtEffects, this)
//set update name effects to save
// DialogUtils.showDialogSaveSuccess(context = this@MainActivity,"Saving", listenerOK = {
// Toast.makeText(this, resources.getString(R.string.save_success), Toast.LENGTH_LONG)
// .show()
// },mFirebaseAnalytics, activity = this@MainActivity)
} else {
Toast.makeText(
this, resources.getString(R.string.not_name_effects), Toast.LENGTH_LONG
).show()
}
}
binding.includeDialog.mEdtEffects.addTextChangedListener {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_equalizer_save_enter_name_click","Nhập tên","enter_name")
}
binding.mViewNotSelect.setOnClickListener {
showBottomSheetDialog()
}
binding.mImgSelectMusic.setOnClickListener {
showBottomSheetDialog()
}
}
private fun setupMedia() {
// Should now have a viable details.. connect to browser and service as needed.
try {
if (mMediaAppDetails!!.componentName != null) {
mBrowser = MediaBrowserCompat(
this,
mMediaAppDetails!!.componentName,
object : MediaBrowserCompat.ConnectionCallback() {
override fun onConnected() {
setupMediaController()
Log.d("qqq", "MediaBrowserdCompat onConnected: success")
}
override fun onConnectionSuspended() {
}
override fun onConnectionFailed() {
Log.d("qqq", "MediaBrowserCompat onConnected: failed")
}
},
null
)
// scope.launch {
mBrowser?.connect()
// }
} else if (mMediaAppDetails!!.sessionToken != null) {
setupMediaController()
} else {
Log.d("qqq", "else: failed")
}
} catch (ex: Exception) {
Log.d("qqq", "setupMedia: " + ex.message.toString())
}
}
@SuppressLint("SuspiciousIndentation")
private fun setupMediaController() {
try {
var token = mMediaAppDetails!!.sessionToken
if (token == null) {
token = mBrowser!!.sessionToken
}
mController = MediaControllerCompat(this, token)
// if (sharedPreferencesUtil.getString("appChoose") != "com.google.android.apps.youtube.music") {
mController?.registerCallback(mCallback)
// }
// Force update on connect.
mCallback.onPlaybackStateChanged(mController?.playbackState)
try {
if (mController?.metadata != null) {
mController?.metadata?.apply {
mCallback.onMetadataChanged(mController?.metadata)
}
}
} catch (ex: Exception) {
}
} catch (remoteException: RemoteException) {
Log.e(
"qqq", "Failed to create MediaController from session token", remoteException
)
}
}
private fun showBottomSheetDialog() {
val bottomSheetDialog = BottomSheetDialog(this)
bottomSheetDialog.setContentView(R.layout.bottom_sheet_dialog_layout)
val rvList = bottomSheetDialog.findViewById<RecyclerView>(R.id.rvList)
val rlSelect = bottomSheetDialog.findViewById<RelativeLayout>(R.id.rlSelect)
val appChoose: String = sharedPreferencesUtil.getString("appChoose")
val listApp = arrayListOf<AppMedia>()
val listAppNotAccess = arrayListOf(
"com.google.android.googlequicksearchbox",
"com.google.android.youtube",
"com.samsung.android.bixby.service",
"flipboard.boxer.app",
"com.ss.android.ugc.trill",
"org.telegram.messenger"
)
for (item in mediaApps) {
if (!listAppNotAccess.contains(item.packageName) && !item.packageName.contains("bluetooth")) {
try{
listApp.add(
AppMedia(
name = item.appName,
avatar = item.icon,
item.packageName,
check = item.packageName == appChoose
)
)
}catch (ex: Exception){
//Toast.makeText(this, ex.message, 10).show()
}
}
}
var packageName = sharedPreferencesUtil.getString("appChoose")
rvList?.adapter = ChooseAppAdapter(apps = listApp, onItemClicked = {
packageName = it
})
rlSelect?.setOnClickListener {
sharedPreferencesUtil.saveString("appChoose", packageName)
Log.d("111111", "user select : " + packageName)
mMediaAppDetails = mediaApps.firstOrNull { it.packageName == packageName }
if (mMediaAppDetails != null) {
setupMedia()
openMediaApp(mMediaAppDetails!!.packageName, this)
}
bottomSheetDialog.dismiss()
}
bottomSheetDialog.show()
}
fun play() {
checkPlayNextMedia(1)
}
fun pause() {
checkPlayNextMedia(2)
}
fun skipToNext() {
checkPlayNextMedia(3)
}
fun skipToPrevious() {
checkPlayNextMedia(4)
}
private fun openMediaApp(packageName: String, context: Context) {
val packageManager: PackageManager = packageManager
runOnUiThread {
try {
sharedPreferencesUtil.saveIsStatusSelectMusic("selectMusic",true)
binding.mViewSelect.visibility = View.VISIBLE
binding.mViewNotSelect.visibility = View.GONE
val intent = Intent()
intent.setComponent(ComponentName(packageName, AppUtils.getAppInfo(packageName, resources).startActivityName))
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
catch (e: ActivityNotFoundException){
binding.mViewSelect.visibility = View.GONE
binding.mViewNotSelect.visibility = View.VISIBLE
sharedPreferencesUtil.saveIsStatusSelectMusic("selectMusic",false)
DialogUtils.showDialog(context, resources.getString(R.string.not_install_app), listenerOK = {})
}
}
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onResume() {
super.onResume()
AppUtils.hideNavigationBar(this)
Log.d("qqq", "onResume: " + "call")
mMediaSessionListener.onStart(this)
// val swPlayControl = sharedPreferencesUtil.getBoolean("swPlayControl")
// if (swPlayControl.not()) {
// binding.mViewSigger.isVisible = true
// binding.tvChooseMedia.isVisible = false
// } else {
// binding.mViewSigger.isVisible = false
// binding.tvChooseMedia.isVisible = true
// }
}
override fun onPause() {
super.onPause()
Utils.hideAdsResume()
}
@SuppressLint("NewApi")
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
AppUtils.hideNavigationBar(this)
}
}
override fun onOpenActivitySave() {
binding.includeDialog.mRlDialog.visibility = View.VISIBLE
}
override fun onOpenActivityEffects(list: java.util.ArrayList<String>?) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_list_genres_click","User click vào màn List Effect","list_genres")
val intent = Intent(this, EffectsActivity::class.java)
intent.putStringArrayListExtra("listType", list)
startActivity(intent)
}
var statusMediaAppEntriesRun: Boolean = true
private inner class MediaSessionListener {
private val mSessionAppsUpdated: FindMediaAppsTask.AppListUpdatedCallback =
object : FindMediaAppsTask.AppListUpdatedCallback {
override fun onAppListUpdated(mediaAppEntries: List<MediaAppDetails>) {
if (mediaAppEntries.isEmpty()) {
Log.d("qqq", "mediaAppEntries : null return")
// Hiển thị thông báo lỗi nếu không tìm thấy ứng dụng nào.
return
}
mediaAppEntries.forEach {
Log.d("qqq", "mediaAppEntries : not null" + it.packageName)
}
if (statusMediaAppEntriesRun) {
statusMediaAppEntriesRun = false
Log.d("qqq", "setMediaAppDetailsList : not null")
mainViewModel.setMediaAppDetailsList(mediaAppEntries)
searchHandler.postDelayed({
statusMediaAppEntriesRun = true
}, 500)
}
}
}
private val mSessionsChangedListener =
MediaSessionManager.OnActiveSessionsChangedListener { list ->
try {
list?.let {
MediaAppControllerUtils.getMediaAppsFromControllers(
it, packageManager, resources
)
}?.let {
mSessionAppsUpdated.onAppListUpdated(it)
}
} catch (ex: Exception) {
Log.d("qqq", "onCreate: " + ex.message.toString())
}
}
private var mMediaSessionManager: MediaSessionManager? = null
fun onCreate(context: Context) {
if (!NotificationListener.isEnabled(context)) {
Log.d("qqq", "onCreate: " + "onCreate")
return
}
mMediaSessionManager =
getSystemService(Context.MEDIA_SESSION_SERVICE) as? MediaSessionManager
}
fun onStart(context: Context) {
if (!NotificationListener.isEnabled(context)) {
return
}
if (mMediaSessionManager == null) {
Log.d("qqq", "mMediaSessionManager: null ")
return
}
try {
val listenerComponent = ComponentName(
context,
NotificationListener::class.java
)
mMediaSessionManager?.addOnActiveSessionsChangedListener(
mSessionsChangedListener, listenerComponent
)
FindMediaSessionAppsTask(
mMediaSessionManager!!,
listenerComponent,
packageManager,
resources,
mSessionAppsUpdated
).execute()
} catch (ex: Exception) {
Log.d("qqq", "onStart: " + ex.message.toString())
}
}
fun onStop() {
if (mMediaSessionManager == null) {
return
}
mMediaSessionManager?.removeOnActiveSessionsChangedListener(mSessionsChangedListener)
}
}
/*private val notificationReceiver: BroadcastReceiver = object : BroadcastReceiver() {
@RequiresApi(Build.VERSION_CODES.N)
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == CustomNotificationService.EXTRA_BUTTON_CLICKED) {
Log.d(
"mmm", "intent EXTRA_BUTTON ${
intent.getIntExtra(
CustomNotificationService.EXTRA_BUTTON, -1
)
}"
)
val id = intent.getIntExtra(CustomNotificationService.EXTRA_BUTTON, -1)
val text = intent.getStringExtra(CustomNotificationService.EXTRA_BUTTON_TEXT)
when (id) {
R.id.icLeft -> {
if (context != null) {
val index = listPresetName.indexOf(text)
if (index > 1) {
showBasicNotification(
context,
listPresetName[index - 1],
statusOnOff,
isLightOn
)
val buttonController = ButtonController()
buttonController.onUpdateType(index - 1, listPresetName[index - 1])
this@MainActivity.findViewById<Button>(R.id.mSave)?.apply {
performClick()
}
} else {
showBasicNotification(
context,
listPresetName[listPresetName.lastIndex],
statusOnOff,
isLightOn
)
val buttonController = ButtonController()
buttonController.onUpdateType(
listPresetName.lastIndex,
listPresetName[listPresetName.lastIndex]
)
this@MainActivity.findViewById<Button>(R.id.mSave)?.apply {
performClick()
}
}
}
}
R.id.icRight -> {
if (context != null) {
val index = listPresetName.indexOf(text)
if (index < listPresetName.lastIndex) {
showBasicNotification(
context,
listPresetName[index + 1],
statusOnOff,
isLightOn
)
val buttonController = ButtonController()
buttonController.onUpdateType(index + 1, listPresetName[index + 1])
this@MainActivity.findViewById<Button>(R.id.mSave)?.apply {
performClick()
}
} else {
showBasicNotification(
context,
listPresetName[0],
statusOnOff,
isLightOn
)
val buttonController = ButtonController()
buttonController.onUpdateType(0, listPresetName[0])
this@MainActivity.findViewById<Button>(R.id.mSave)?.apply {
performClick()
}
}
}
}
R.id.icLightOff -> {
if (context != null) {
isLightOn = Settings.canDrawOverlays(this@MainActivity)
showBasicNotification(context, "", statusOnOff, isLightOn)
if (sharedPreferencesUtil.getStatusWidgetEdge("isCheckPermissionwidget")) {
launchMainService(true)
} else {
launchMainService(false)
}
}
}
R.id.icLight -> {
if (context != null) {
isLightOn = false
showBasicNotification(context, "", statusOnOff, isLightOn)
if (sharedPreferencesUtil.getStatusWidgetEdge("isCheckPermissionwidget")) {
launchMainService(false)
} else {
launchMainService(false)
}
}
}
R.id.mOff -> {
if (context != null) {
statusOnOff = false
Log.d("qqq", "onReceive: " + EqualizerFragment.bassBoost.properties)
showBasicNotification(context, "", statusOnOff, isLightOn)
val buttonController = ButtonController()
buttonController.setOnOffEqualizer(false)
}
}
R.id.mOn -> {
if (context != null) {
statusOnOff = true
Log.d("qqq", "onReceive: " + EqualizerFragment.bassBoost.properties)
showBasicNotification(context, "", statusOnOff, isLightOn)
val buttonController = ButtonController()
buttonController.setOnOffEqualizer(true)
// this@MainActivity.findViewById<Button>(R.id.mSave)?.apply {
// performClick()
// }
}
}
}
}
}
}*/
@RequiresApi(Build.VERSION_CODES.M)
private fun launchMainService(isCheck: Boolean = true) {
if (Settings.canDrawOverlays(this)) {
val svc = Intent(this, MainService::class.java)
stopService(svc)
if (isCheck) {
startService(svc)
}
}
// finish()
}
// private fun loadNativeAds() {
// if (FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Native_home) && AppUtils.haveNetworkConnection(this)) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Native_home_view","view ad tại màn Home","home_view")
// nativeAdHelper = initNativeAd()
// nativeAdHelper?.setNativeContentView(binding.nativeHome)
// nativeAdHelper?.registerAdListener(adCallback)
// val shimmerFrameLayout =
// findViewById<ShimmerFrameLayout>(R.id.shimmer_container_native)
// nativeAdHelper?.setShimmerLayoutView(shimmerFrameLayout)
// binding.nativeHome.visibility = View.VISIBLE
//
// if (nativeAdHelper?.nativeAd != null) {
// nativeAdHelper?.requestAds(NativeAdParam.Ready(nativeAdHelper?.nativeAd!!))
// }else{
// nativeAdHelper?.requestAds(NativeAdParam.Request.create())
// }
// } else {
// binding.nativeHome.visibility = View.GONE
// }
// }
override fun onBackPressed() {
finishAffinity()
}
private fun checkPlayNextMedia(status: Int) {
// 1. play 2. pause 3. skip 4. Previous
if (mController != null && (mController?.isSessionReady == true)) {
Log.d("qqq", "checkPlayNextMedia: "+mController?.playbackState?.state)
Log.d("qqq", "checkPlayNextMedia: "+mController?.playbackState?.playbackState)
if (sharedPreferencesUtil.getString("appChoose") != "ht.nct") {
if ((mController?.playbackState?.state == PlaybackStateCompat.STATE_NONE ||
mController?.playbackState?.state == PlaybackStateCompat.STATE_STOPPED) && (mController?.metadata === null)) {
DialogUtils.showDialog(this, resources.getString(R.string.not_control), listenerOK = {})
} else {
when (status) {
1 -> mController?.transportControls?.play()
2 -> mController?.transportControls?.pause()
3 -> mController?.transportControls?.skipToNext()
4 -> mController?.transportControls?.skipToPrevious()
}
}
} else {
if (mController?.playbackState?.state == PlaybackStateCompat.STATE_STOPPED) {
DialogUtils.showDialog(this, resources.getString(R.string.not_control), listenerOK = {})
}else{
when (status) {
1 -> mController?.transportControls?.play()
2 -> mController?.transportControls?.pause()
3 -> mController?.transportControls?.skipToNext()
4 -> mController?.transportControls?.skipToPrevious()
}
}
}
} else {
DialogUtils.showDialog(this, resources.getString(R.string.not_control), listenerOK = {})
}
}
private fun initListMedia(){
mediaApps.add(MediaAppDetails("com.gaana", null, resources));
mediaApps.add(MediaAppDetails("com.spotify.music", null, resources));
mediaApps.add(MediaAppDetails("com.soundcloud.android", null, resources));
mediaApps.add(MediaAppDetails("com.google.android.apps.youtube.music", null, resources));
if (!NotificationListener.isEnabled(this@MainActivity)) {
if (mediaApps.isNotEmpty()) {
val packageName: String = sharedPreferencesUtil.getString("appChoose")
mMediaAppDetails = mediaApps.firstOrNull { it.packageName == packageName }
Log.d("qqq", "packageName init: $packageName")
}
if (mMediaAppDetails != null) {
Log.d("qqq", "mMediaAppDetails init: " + mMediaAppDetails?.packageName)
setupMedia()
}
}
}
// private fun initNativeAd(): NativeAdHelper {
// val config = NativeAdConfig(
// BuildConfig.Native_home,
// true,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_native_home),
// // with native additional layout native ad
// R.layout.layout_loading_navite_small
// )
// return NativeAdHelper(this, this, config)
// }
}
package com.bassbooster.soundeffects.equalizer.view
import android.app.Service
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.PixelFormat
import android.os.IBinder
import android.util.Log
import android.view.*
import android.view.WindowManager.LayoutParams
import android.widget.FrameLayout
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.ColorEdgeModel
import com.bassbooster.soundeffects.equalizer.event.ServiceHideNavigationBarEvent
import com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview.ImageBorderView2
import org.greenrobot.eventbus.EventBus
class MainService : Service() {
private lateinit var windowManager: WindowManager
private var floatyView: View? = null
private val listShape: ArrayList<Int> = arrayListOf(
R.drawable.ic_ess,R.drawable.ic_fire,
R.drawable.icon_record,R.drawable.icon_stop,R.drawable.ic_play,
R.drawable.icon_record,R.drawable.icon_stop,R.drawable.ic_play)
val listColor: ArrayList<ColorEdgeModel> = arrayListOf(
ColorEdgeModel(R.drawable.ic_rectangle_red,"#EE2929"),
ColorEdgeModel(R.drawable.ic_rectangle_yel,"#EAB93D"),
ColorEdgeModel(R.drawable.ic_rectangle_blue,"#19E73A"),
ColorEdgeModel(R.drawable.ic_rectangle_blues,"#1188DD"),
ColorEdgeModel(R.drawable.ic_rectangle_t,"#CE1EEB")
)
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
EventBus.getDefault().post(ServiceHideNavigationBarEvent(true))
windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val durationTop = intent?.getFloatExtra("changeDurationTop",0f) ?: 0f
val durationBottom = intent?.getFloatExtra("changeDurationBottom",0f) ?: 0f
val with = intent?.getIntExtra("changeWith",0) ?: 0
val duration = intent?.getIntExtra("changeDuration",0) ?: 0
val shape = intent?.getIntExtra("createBitmapByShape",0) ?:0
val color = intent?.getStringExtra("changeColor")
addOverlayView()
floatyView?.findViewById<ImageBorderView2>(R.id.mImageBorder)?.apply {
if (durationTop != 0f) {
changeDurationTop(durationTop,durationTop)
}
if (durationBottom != 0f) {
changeDurationBottom(durationBottom,durationBottom)
}
if (with != 0) {
changeScaleFactor(with)
}
if (duration != 0) {
changeDuration(duration)
}
if (shape != 0) {
createBitmapByShape(shape)
}
if (color != null) {
changeColor(Color.parseColor(color))
}
}
return super.onStartCommand(intent, flags, startId)
}
// override fun onCreate() {
// super.onCreate()
//
// }
private fun addOverlayView() {
val params: LayoutParams
val layoutParamsType: Int = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
LayoutParams.TYPE_APPLICATION_OVERLAY
} else {
@Suppress("DEPRECATION")
LayoutParams.TYPE_PHONE
}
// 0
// FLAG_NOT_TOUCHABLE
params = LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT,
layoutParamsType,
LayoutParams.TYPE_WALLPAPER,
PixelFormat.TRANSLUCENT)
params.gravity = Gravity.CENTER or Gravity.START
params.x = 0
params.y = 0
val interceptorLayout = object : FrameLayout(this) {
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
// Only fire on the ACTION_DOWN event, or you'll get two events (one for _DOWN, one for _UP)
if (event.action == KeyEvent.ACTION_DOWN) {
// Check if the HOME button is pressed
if (event.keyCode == KeyEvent.KEYCODE_BACK) {
Log.v(TAG, "BACK Button Pressed")
// val intent = packageManager.getLaunchIntentForPackage(applicationContext.packageName)
// intent?.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
// startActivity(intent)
// EventBus.getDefault()
// .post(ServiceEvent(true))
// As we've taken action, we'll return true to prevent other apps from consuming the event as well
return true
}
}
if (event.action == KeyEvent.KEYCODE_BACK){
Log.d("qqq", "dispatchKeyEvent: "+"dfdsf")
}
// Otherwise don't intercept the event
return super.dispatchKeyEvent(event)
}
}
val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
floatyView = inflater.inflate(R.layout.floating_view, interceptorLayout)
floatyView?.let {
windowManager.addView(floatyView, params)
} ?: run {
Log.e(TAG, "Layout Inflater Service is null; can't inflate and display R.layout.floating_view")
}
}
override fun onDestroy() {
super.onDestroy()
floatyView?.let {
windowManager.removeView(it)
floatyView = null
}
}
companion object {
private val TAG = MainService::class.java.simpleName
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.bassbooster.equalizer.R
import com.bassbooster.equalizer.databinding.ActivitySplashBinding
import com.bassbooster.equalizer.utils.DialogUtils
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
import com.bassbooster.soundeffects.equalizer.view.MainActivity
import com.bassbooster.soundeffects.equalizer.utils.AppUtils
import com.bassbooster.soundeffects.equalizer.utils.NotificationListener
import com.bassbooster.soundeffects.equalizer.view.activity.setting.language.LanguageActivity
import com.bassbooster.soundeffects.equalizer.view.activity.setting.language.LanguageManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
class SplashActivity : AppCompatActivity() {
private lateinit var binding: ActivitySplashBinding
private lateinit var sharedPreferencesUtil: SharedPreferencesUtil
private val languageManager = LanguageManager()
private var isFirstRunApp = true
private var isAppOnBackground = false
val scope = CoroutineScope(Dispatchers.IO) // Sử dụng luồng nền
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
@SuppressLint("NewApi")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedPreferencesUtil = SharedPreferencesUtil(this)
languageManager.languageManager(this@SplashActivity)
binding = ActivitySplashBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
init()
}
private fun init() {
AppUtils.hideNavigationBar(this)
// Sử dụng coroutine để thực hiện công việc bất đồng bộ
startMain(true)
}
@SuppressLint("NewApi")
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
AppUtils.hideNavigationBar(this)
}
}
// var adCallback: AperoAdCallback = object : AperoAdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Inter_splash_click","click ad","splash_click")
//
// }
// override fun onAdFailedToLoad(i: ApAdError?) {
// super.onAdFailedToLoad(i)
// Log.d("TAG", "onAdLoaded")
// }
//
// override fun onAdLoaded() {
// super.onAdLoaded()
// Log.d("TAG", "onAdLoaded")
// }
//
// override fun onNextAction() {
// super.onNextAction()
// Log.d("TAG", "onNextAction")
//// startMain(false)
// }
//
// override fun onAdClosed() {
// super.onAdClosed()
// startMain(false)
// Log.d("TAG", "onAdClosed")
// }
// }
//
// private fun loadSplash() {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Inter_splash_view","view ad tại màn Splash","splash_view")
//
// Log.d("TAG", "onCreate: show splash ads")
// // AperoAd.getInstance().setInitCallback(() ->
//// AperoAd.getInstance().loadSplashInterstitialAds(SplashActivity.this,
//// BuildConfig.inter_splash, 30000, 3000, false, adCallback)
//// );
//// AppOpenManager.getInstance().setSplashAdId(BuildConfig.inter_splash);
// AperoAd.getInstance().setInitCallback {
// AperoAd.getInstance().loadSplashInterstitialAds(
// this,
// BuildConfig.Inter_splash,
// 30000,
// 2000,
// true,
// adCallback
// )
// }
//
// }
private fun startMain(delay: Boolean) {
sharedPreferencesUtil = SharedPreferencesUtil(this)
languageManager.updateResource(sharedPreferencesUtil.getString("lang"))
if (!sharedPreferencesUtil.getIsFirstSplash("isFirstSplash")) {
val intent = Intent(this@SplashActivity, LanguageActivity::class.java)
startActivity(intent)
finish()
} else {
val intent = Intent(this@SplashActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
}
override fun onResume() {
super.onResume()
AppUtils.hideNavigationBar(this)
Log.e("TAG", "Splash onPause: ")
if (isFirstRunApp) {
isFirstRunApp = false
return
}
}
private fun checkAudioPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this,
Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED
}
private fun checkModifyAudioPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this,
Manifest.permission.MODIFY_AUDIO_SETTINGS
) == PackageManager.PERMISSION_GRANTED
}
private fun requestAudioPermission() {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.RECORD_AUDIO),
28
)
}
private fun requestModifyAudioPermission() {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.MODIFY_AUDIO_SETTINGS),
27
)
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 28) { // Sử dụng requestCode bạn đã chọn ở bước 1
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
checkPermissionNotification()
} else {
DialogUtils.showDialog(this,
resources.getString(R.string.notification_content_visua),
listenerOK = {
val intent = Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivityForResult(intent, 28)
})
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 28) {
if (checkAudioPermission()) {
checkPermissionNotification()
} else {
DialogUtils.showDialog(this,
resources.getString(R.string.notification_content_visua),
listenerOK = {
val intent = Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivityForResult(intent, 28)
})
}
} else {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
}
}
private fun checkPermissionNotification() {
if (checkModifyAudioPermission()) {
if (!NotificationListener.isEnabled(this)) {
DialogUtils.showDialogConfirmPer(this,
resources.getString(R.string.notification),
resources.getString(R.string.notification_content),
listenerOK = {
startActivityForResult(
Intent(
"android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"
), 100
)
// sharedPreferencesUtil.saveBoolean("NOTIFICATION_LISTENER_SETTINGS",true)
},
listenerCancel = {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
})
} else {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
}
} else {
requestModifyAudioPermission()
}
}
override fun onStart() {
super.onStart()
isAppOnBackground = false
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.activity
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.util.Log
import android.view.View
import android.widget.SeekBar
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.ColorEdgeModel
import com.bassbooster.equalizer.databinding.ActivityEdgelightBinding
import com.bassbooster.equalizer.databinding.ItemBoderWidthBinding
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
import com.bassbooster.soundeffects.equalizer.utils.Utils
import com.bassbooster.soundeffects.equalizer.view.MainService
import com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.adapter.ColorBorderAdapter
import com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.adapter.ImageBoderAdapter
import com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview.ImageBorderView2
import com.bassbooster.soundeffects.equalizer.utils.AppUtils
class EdgeLightingActivity : AppCompatActivity() {
private lateinit var binding: ActivityEdgelightBinding
private lateinit var includeBorderWidth: ItemBoderWidthBinding
private var imageBorderAdapter: ImageBoderAdapter? = null
private var colorBorderAdapter: ColorBorderAdapter? = null
private lateinit var sharedPreferencesUtil: SharedPreferencesUtil
var durationTop: Float? = null
var durationBottom: Float? = null
var withSend:Int? = null
var duration: Int? = null
var shapePosition: Int? = null
var colorString: String? = null
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
// private var bannerAdHelper: BannerAdHelper? = null
companion object{
private const val REQUEST_CODE = 10101
}
// val adCallback = object : AdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Banner_click","click ad tại các màn hình: Edge ","banner_click")
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// }
// }
@RequiresApi(Build.VERSION_CODES.M)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityEdgelightBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
AppUtils.hideNavigationBar(this)
includeBorderWidth = ItemBoderWidthBinding.inflate(layoutInflater)
sharedPreferencesUtil = SharedPreferencesUtil(this)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_view","User view màn Edge Lighting","edge_lighting_view")
init()
setOnEvent()
loadBanner()
//kill service overlay when start activity
launchMainService(false)
}
private fun init() {
initImageBorderStyle()
initColorBorder()
sharedPreferencesUtil = SharedPreferencesUtil(this)
binding.mCheck.isChecked = sharedPreferencesUtil.getStatusWidgetEdge("isCheckPermissionwidget",false)
}
@RequiresApi(Build.VERSION_CODES.M)
private fun setOnEvent() {
binding.mImgBack.setOnClickListener {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_back_click","User thoát ra khỏi màn Edge Lighting","edge_lighting_back")
finish()
}
binding.mCheck.apply {
setOnCheckedChangeListener { _, isCheck ->
if(isCheck){
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_allowed_on_other_apps_click","User clicks vào Allow on other apps","on")
if(!Settings.canDrawOverlays(this@EdgeLightingActivity)){
checkDrawOverlayPermission()
}else{
sharedPreferencesUtil.saveStatusWidgetEdge("isCheckPermissionwidget",true)
}
}else{
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_allowed_on_other_apps_click","User clicks vào Allow on other apps","off")
sharedPreferencesUtil.saveStatusWidgetEdge("isCheckPermissionwidget",false)
}
}
isChecked = sharedPreferencesUtil.getStatusWidgetEdge("isCheckPermissionwidget")
}
val isOverLay = sharedPreferencesUtil.getIsOverLay("isOverLay",false)
if (isOverLay){
binding.mOff.background = ContextCompat.getDrawable(this,R.drawable.ic_on)
binding.includeBorderWidth.mLlBoderWidth.isVisible = true
}else{
binding.mOff.background = ContextCompat.getDrawable(this,R.drawable.ic_off)
binding.includeBorderWidth.mLlBoderWidth.isVisible = false
}
binding.mOff.setOnClickListener {
if (binding.includeBorderWidth.mLlBoderWidth.isVisible) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_turn_on_off_click","User clicks vào button ON OFF","off")
binding.mOff.background = ContextCompat.getDrawable(this,R.drawable.ic_off)
binding.includeBorderWidth.mLlBoderWidth.visibility = View.GONE
sharedPreferencesUtil.saveIsOverLay("isOverLay",false)
val svc = Intent(this, MainService::class.java)
stopService(svc)
} else {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_turn_on_off_click","User clicks vào button ON OFF","on")
binding.mOff.background = ContextCompat.getDrawable(this,R.drawable.ic_on)
binding.includeBorderWidth.mLlBoderWidth.visibility = View.VISIBLE
sharedPreferencesUtil.saveIsOverLay("isOverLay",true)
}
}
binding.mProgressBarTop.setOnSeekBarChangeListener(object :
SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
// Khi giá trị tiến trình thay đổi (khi vuốt)
// Bạn có thể làm gì đó với giá trị progress ở đây
// Ví dụ: hiển thị giá trị trên màn hình
// progressTextView.text = "Progress: $progress%"
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_top_radius_click","User tác động vào Top radius bar","radius_click")
binding.mTxtTop.text = progress.toString()
val imageBorderView = binding.includeBorderWidth.mLlBoderWidth.findViewById(R.id.mImageBorder) as ImageBorderView2
imageBorderView.changeDurationTop((progress * 4).toFloat(),(progress * 4).toFloat())
durationTop = (progress * 4).toFloat()
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
// Khi người dùng bắt đầu vuốt ProgressBar
// Bạn có thể xử lý ở đây nếu cần
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
// Khi người dùng kết thúc vuốt ProgressBar
// Bạn có thể xử lý ở đây nếu cần
}
})
binding.mProgressBarBottom.setOnSeekBarChangeListener(object :
SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_bottom_radius_click","User tác động vào Bottom radius bar","radius_click")
// Khi giá trị tiến trình thay đổi (khi vuốt)
// Bạn có thể làm gì đó với giá trị progress ở đây
// Ví dụ: hiển thị giá trị trên màn hình
// progressTextView.text = "Progress: $progress%"
binding.mTxtBottom.text = progress.toString()
val imageBorderView = binding.includeBorderWidth.mLlBoderWidth.findViewById(R.id.mImageBorder) as ImageBorderView2
imageBorderView.changeDurationBottom((progress * 4).toFloat(),(progress * 4).toFloat())
durationBottom = (progress * 4).toFloat()
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
// Khi người dùng bắt đầu vuốt ProgressBar
// Bạn có thể xử lý ở đây nếu cần
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
// Khi người dùng kết thúc vuốt ProgressBar
// Bạn có thể xử lý ở đây nếu cần
}
})
binding.mWidth.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_width_click","User tác động vào Width bar","width_click")
// Khi giá trị tiến trình thay đổi (khi vuốt)
// Bạn có thể làm gì đó với giá trị progress ở đây
// Ví dụ: hiển thị giá trị trên màn hình
// progressTextView.text = "Progress: $progress%"
binding.mTxtWidth.text = progress.toString()
try {
val imageBorderView = binding.includeBorderWidth.mLlBoderWidth.findViewById(R.id.mImageBorder) as ImageBorderView2
imageBorderView.changeScaleFactor(progress)
withSend = progress
}catch (ex: Exception){
Log.d("qqq", "onItemClick: "+ex.message.toString())
}
// coloredBorderView.setColorAnimatorDuration(duration.toLong())
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
// Khi người dùng bắt đầu vuốt ProgressBar
// Bạn có thể xử lý ở đây nếu cần
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
// Khi người dùng kết thúc vuốt ProgressBar
// Bạn có thể xử lý ở đây nếu cần
}
})
binding.mSpeed.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_speed_click","User tác động vào Speed bar","speed_click")
// Khi giá trị tiến trình thay đổi (khi vuốt)
// Bạn có thể làm gì đó với giá trị progress ở đây
// Ví dụ: hiển thị giá trị trên màn hình
// progressTextView.text = "Progress: $progress%"
binding.mTxtSpeed.text = progress.toString()
try {
val imageBorderView = binding.includeBorderWidth.mLlBoderWidth.findViewById(R.id.mImageBorder) as ImageBorderView2
imageBorderView.changeDuration(progress * 11)
duration = progress * 11
}catch (ex: Exception){
Log.d("qqq", "onItemClick: "+ex.message.toString())
}
// coloredBorderView.setColorAnimatorDuration(duration.toLong())
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
// Khi người dùng bắt đầu vuốt ProgressBar
// Bạn có thể xử lý ở đây nếu cần
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
// Khi người dùng kết thúc vuốt ProgressBar
// Bạn có thể xử lý ở đây nếu cần
}
})
}
fun initImageBorderStyle(){
val list: ArrayList<Int> = ArrayList()
list.add(R.drawable.ic_ess)
list.add(R.drawable.ic_fire)
list.add(R.drawable.icon_record)
list.add(R.drawable.icon_stop)
list.add(R.drawable.ic_play)
list.add(R.drawable.icon_record)
list.add(R.drawable.icon_stop)
list.add(R.drawable.ic_play)
// list.add(R.drawable.ic_ess)
// list.add(R.drawable.ic_fire)
// list.add(R.drawable.icon_record)
// list.add(R.drawable.icon_stop)
// list.add(R.drawable.ic_play)
// list.add(R.drawable.icon_record)
// list.add(R.drawable.icon_stop)
// list.add(R.drawable.ic_play)
// list.add(R.drawable.ic_ess)
// list.add(R.drawable.ic_fire)
// list.add(R.drawable.icon_record)
// list.add(R.drawable.icon_stop)
// list.add(R.drawable.ic_play)
// list.add(R.drawable.icon_record)
// list.add(R.drawable.icon_stop)
// list.add(R.drawable.ic_play)
val numberOfColumns = 8
val layoutManager = GridLayoutManager(this, numberOfColumns)
binding.mRcyclerStyle.layoutManager =
layoutManager
imageBorderAdapter = ImageBoderAdapter(
this,
list,
object : ImageBoderAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
try {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_border_style_click","User chọn loại border","style_click")
val imageBorderView = binding.includeBorderWidth.mLlBoderWidth.findViewById(R.id.mImageBorder) as ImageBorderView2
imageBorderView.createBitmapByShape(list[position])
shapePosition = list[position]
}catch (ex: Exception){
Log.d("qqq", "onItemClick: "+ex.message.toString())
}
imageBorderAdapter?.notifyDataSetChanged()
}
})
binding.mRcyclerStyle.adapter = imageBorderAdapter
}
fun initColorBorder(){
val list: ArrayList<ColorEdgeModel> = ArrayList()
list.add(ColorEdgeModel(R.drawable.ic_rectangle_red,"#EE2929"))
list.add(ColorEdgeModel(R.drawable.ic_rectangle_yel,"#EAB93D"))
list.add(ColorEdgeModel(R.drawable.ic_rectangle_blue,"#19E73A"))
list.add(ColorEdgeModel(R.drawable.ic_rectangle_blues,"#1188DD"))
list.add(ColorEdgeModel(R.drawable.ic_rectangle_t,"#CE1EEB"))
binding.mRecyclerColor.layoutManager =
LinearLayoutManager(this@EdgeLightingActivity, RecyclerView.HORIZONTAL, false)
colorBorderAdapter = ColorBorderAdapter(
this,
list,
object : ColorBorderAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
try {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_lighting_color_click","Chọn màu cho border",list[position].color.toString())
val imageBorderView = binding.includeBorderWidth.mLlBoderWidth.findViewById(R.id.mImageBorder) as ImageBorderView2
imageBorderView.changeColor(Color.parseColor(list[position].color))
colorString = list[position].color
// launchMainService(true)
}catch (ex: Exception){
Log.d("qqq", "onItemClick: "+ex.message.toString())
}
colorBorderAdapter?.notifyDataSetChanged()
sharedPreferencesUtil.saveInt("positionList", position)
}
})
binding.mRecyclerColor.adapter = colorBorderAdapter
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onDestroy() {
super.onDestroy()
checkStopAndStartWidget()
// bannerAdHelper?.unregisterAdListener(adCallback)
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onPause() {
super.onPause()
Utils.hideAdsResume()
checkStopAndStartWidget()
}
@SuppressLint("NewApi")
override fun onResume() {
super.onResume()
launchMainService(false)
AppUtils.hideNavigationBar(this)
}
@SuppressLint("NewApi")
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
AppUtils.hideNavigationBar(this)
}
}
@RequiresApi(Build.VERSION_CODES.M)
private fun launchMainService(isCheck: Boolean = true) {
if (Settings.canDrawOverlays(this)){
val svc = Intent(this, MainService::class.java)
stopService(svc)
if (isCheck){
svc.putExtra("changeDurationTop",durationTop)
svc.putExtra("changeDurationBottom",durationBottom)
svc.putExtra("changeWith",withSend)
svc.putExtra("changeDuration",duration)
svc.putExtra("createBitmapByShape",shapePosition)
svc.putExtra("changeColor",colorString)
startService(svc)
}
}
// finish()
}
@SuppressLint("NewApi")
fun checkStopAndStartWidget(){
if(sharedPreferencesUtil.getStatusWidgetEdge("isCheckPermissionwidget") && sharedPreferencesUtil.getIsOverLay("isOverLay")){
launchMainService(true)
}else{
launchMainService(false)
}
}
@RequiresApi(Build.VERSION_CODES.M)
private fun checkDrawOverlayPermission() {
// Checks if app already has permission to draw overlays
if (!Settings.canDrawOverlays(this)) {
// AppOpenManager.getInstance()
// .disableAdResumeByClickAction()
// If not, form up an Intent to launch the permission request
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:$packageName"))
// Launch Intent, with the supplied request code
startActivityForResult(intent, REQUEST_CODE)
}
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Check if a request code is received that matches that which we provided for the overlay draw request
if (requestCode == REQUEST_CODE) {
if (!Settings.canDrawOverlays(this)){
sharedPreferencesUtil.saveStatusWidgetEdge("isCheckPermissionwidget",false)
binding.mCheck.isChecked = sharedPreferencesUtil.getStatusWidgetEdge("isCheckPermissionwidget")
}else{
sharedPreferencesUtil.saveStatusWidgetEdge("isCheckPermissionwidget",true)
binding.mCheck.isChecked = sharedPreferencesUtil.getStatusWidgetEdge("isCheckPermissionwidget")
}
}
}
private fun loadBanner() {
// if (!FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Banner) && !AppUtils.haveNetworkConnection(this)) {
//
// } else {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Banner_view","view tại các màn hình: Edge","banner_view")
// bannerAdHelper = initBannerAd()
// bannerAdHelper?.setBannerContentView(binding.mLlBanner)
// bannerAdHelper?.registerAdListener(adCallback)
// if (bannerAdHelper?.bannerAdView != null) {
// bannerAdHelper?.requestAds(BannerAdParam.Ready(bannerAdHelper?.bannerAdView!!))
// }else{
// bannerAdHelper?.requestAds(BannerAdParam.Request.create())
// }
// binding.mLlBanner.setVisibility(View.VISIBLE)
// }
}
// private fun initBannerAd(): BannerAdHelper {
// val config = BannerAdConfig(
// BuildConfig.Banner,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Banner),
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_banner),
// // with native additional layout native ad
// )
// return BannerAdHelper(this, this, config)
// }
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.equalizer.databinding.ItemColorBorderBinding
import com.bassbooster.soundeffects.equalizer.data.model.ColorEdgeModel
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
class ColorBorderAdapter(val context: Context, val list: ArrayList<ColorEdgeModel>, val mListener: OnItemClickListener) : RecyclerView.Adapter<ColorBorderAdapter.ViewHolder>() {
var isSelect = -1
private var sharedPreferencesUtil = SharedPreferencesUtil(context)
interface OnItemClickListener {
fun onItemClick(position: Int)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemColorBorderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
if (isSelect == position){
holder.binding.mLlColor.background = ContextCompat.getDrawable(context, R.drawable.custome_border_rectangle_select)
}else{
holder.binding.mLlColor.background = ContextCompat.getDrawable(context,R.drawable.custome_border_rectangle)
}
if (sharedPreferencesUtil.getInt("positionList") == position) {
holder.binding.mLlColor.background = ContextCompat.getDrawable(context,R.drawable.custome_border_rectangle_select)
}
holder.binding.mImgColor.background = ContextCompat.getDrawable(context,list[position].image)
holder.binding.mLlColor.setOnClickListener {
isSelect = position
mListener.onItemClick(position)
}
}
override fun getItemCount(): Int {
return list.size
}
inner class ViewHolder(val binding: ItemColorBorderBinding) : RecyclerView.ViewHolder(binding.root)
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.databinding.AdapterEffectsBinding
import com.bassbooster.soundeffects.equalizer.data.model.EffectsModel
class EdgeLightingAdapter(val context: Context, val list: ArrayList<EffectsModel>, val mListener: OnItemClickListener) : RecyclerView.Adapter<EdgeLightingAdapter.ViewHolder>() {
var isSelect = 0
interface OnItemClickListener {
fun onItemClick(position: Int)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = AdapterEffectsBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// if (isSelect == position){
// holder.mRlView.background = ContextCompat.getDrawable(context,R.drawable.dra_custom_layout_play_select)
// }else{
// holder.mRlView.background = ContextCompat.getDrawable(context,R.drawable.dra_custom_layout_play)
// }
holder.binding.mTxtName.text = list[position].name
holder.binding.mImgType.setImageDrawable(list[position].image)
holder.binding.mLlView.setOnClickListener {
mListener.onItemClick(position)
}
}
override fun getItemCount(): Int {
return list.size
}
inner class ViewHolder(val binding: AdapterEffectsBinding) : RecyclerView.ViewHolder(binding.root)
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.equalizer.databinding.AdapterImageBoderBinding
class ImageBoderAdapter(val context: Context, val list: ArrayList<Int>, val mListener: OnItemClickListener) : RecyclerView.Adapter<ImageBoderAdapter.ViewHolder>() {
var isSelect = 0
interface OnItemClickListener {
fun onItemClick(position: Int)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = AdapterImageBoderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
if (isSelect == position){
holder.binding.mllImage.background = ContextCompat.getDrawable(context, R.drawable.custom_boder_select_grad)
}else{
holder.binding.mllImage.background = ContextCompat.getDrawable(context,R.drawable.boder_radius_style)
}
holder.binding.mImgStyle.background = ContextCompat.getDrawable(context,list[position])
holder.binding.mllImage.setOnClickListener {
isSelect = position
mListener.onItemClick(position)
}
}
override fun getItemCount(): Int {
return list.size
}
inner class ViewHolder(val binding: AdapterImageBoderBinding) : RecyclerView.ViewHolder(binding.root)
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview
import android.animation.ArgbEvaluator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View
import androidx.core.content.ContextCompat
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.bassbooster.equalizer.R
class ColoredBorderView(context: Context, attrs: AttributeSet?) : View(context, attrs) {
private val borderPaint = Paint()
private val borderRect = RectF()
private val borderWidth = 10f // Độ rộng của đường viền
private val padding = 30f // Padding bên trong view
private val startColor = ContextCompat.getColor(context, R.color.end)
private val endColor = ContextCompat.getColor(context, R.color.start)
private val center = ContextCompat.getColor(context, R.color.center)
private var currentColor = startColor // Màu sắc hiện tại của đường viền
private val colorAnimator: ValueAnimator
private val cornerRadius = 0f
init {
borderPaint.style = Paint.Style.STROKE
borderPaint.strokeWidth = borderWidth
borderPaint.pathEffect = DashPathEffect(floatArrayOf(30f, 30f), 0f) // Định dạng line nét đứt
// Tính toán khu vực bao quanh đường viền với padding
borderRect.set(
padding,
padding,
width.toFloat() - padding,
height.toFloat() - padding
)
// Khởi tạo và chạy animator để thay đổi màu sắc
colorAnimator = ValueAnimator.ofObject(
ArgbEvaluator(),
startColor,
center,
endColor
)
colorAnimator.addUpdateListener { animator ->
currentColor = animator.animatedValue as Int
invalidate()
}
colorAnimator.interpolator = FastOutSlowInInterpolator()
colorAnimator.duration = 1200 // Thời gian hoàn thành animation (ms)
colorAnimator.repeatCount = ValueAnimator.INFINITE
colorAnimator.start()
}
fun setColorAnimatorDuration(duration: Long) {
colorAnimator.duration = duration
invalidate()
}
@SuppressLint("DrawAllocation")
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
// Vẽ đường viền với màu sắc hiện tại
val width = width.toFloat()
val height = height.toFloat()
borderPaint.color = currentColor
// canvas.drawPath(path, borderPaint)
// Vẽ một đường viền dọc theo biên của view
// Tính toán khu vực bao quanh đường viền với padding
val borderRect = RectF(
padding,
padding,
width - padding,
height - padding
)
// Vẽ một đường viền dọc theo biên của view
// Log.d("qqq", "onDraw: "+cornerRadius)
val path = Path()
canvas.drawRoundRect(
borderRect,
cornerRadius.toFloat(), // Bán kính đường viền
cornerRadius.toFloat(), // Bán kính đường viền
borderPaint
)
}
}
package com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview
import android.animation.ArgbEvaluator
import android.animation.ValueAnimator
import android.content.Context
import android.graphics.*
import android.graphics.drawable.VectorDrawable
import android.util.AttributeSet
import android.util.Log
import android.view.View
import androidx.core.content.ContextCompat
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.bassbooster.equalizer.R
class ImageBorderView(context: Context, attrs: AttributeSet?) : View(context, attrs) {
private val borderPaint = Paint()
private val borderRect = RectF()
private val borderWidth = 10f // Độ rộng của đường viền
private val padding = 30f // Padding bên trong view
private val cornerRadius = 80f // Bán kính của các góc
private var dynamicWidth = width.toFloat() // Động width ban đầu
private val startColor = ContextCompat.getColor(context, R.color.end)
private val endColor = ContextCompat.getColor(context, R.color.start)
private val center = ContextCompat.getColor(context, R.color.center)
var currentColor = startColor // Màu sắc hiện tại của đường viền
private val path = Path()
private var resizedAndColoredBitmap: Bitmap? = null
private var resizedBitmap: Bitmap? = null
var colorAnimator : ValueAnimator? = null
private fun changeBitmapColor(sourceBitmap: Bitmap, color: Int): Bitmap {
val resultBitmap = sourceBitmap.copy(sourceBitmap.config, true)
val paint = Paint()
val filter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)
paint.colorFilter = filter
val canvas = Canvas(resultBitmap)
canvas.drawBitmap(resultBitmap, 0f, 0f, paint)
return resultBitmap
}
fun changeColor(end:Int){
colorAnimator?.cancel()
colorAnimator=null
colorAnimator = ValueAnimator.ofObject(
ArgbEvaluator(),
startColor,
center,
end
)
colorAnimator?.addUpdateListener { animator ->
currentColor = animator.animatedValue as Int
invalidate()
}
colorAnimator?.interpolator = FastOutSlowInInterpolator()
colorAnimator?.duration = 50 // Thời gian hoàn thành animation (ms)
colorAnimator?.repeatCount = ValueAnimator.INFINITE
colorAnimator?.start()
}
fun changeDuration(duration : Int){
if(duration!=0){
colorAnimator?.duration = duration.toLong() // Thời gian hoàn thành animation (ms)
}
invalidate()
}
init {
borderPaint.style = Paint.Style.STROKE
borderPaint.strokeWidth = borderWidth
borderPaint.pathEffect = DashPathEffect(floatArrayOf(30f, 30f), 0f) // Định dạng line nét đứt
val vectorDrawable =
resources.getDrawable(R.drawable.ic_ess) as VectorDrawable
val bitmap = Bitmap.createBitmap(
vectorDrawable.intrinsicWidth,
vectorDrawable.intrinsicHeight,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
vectorDrawable.setBounds(0, 0, canvas.width, canvas.height)
vectorDrawable.draw(canvas)
resizedAndColoredBitmap = bitmap
// Tạo một Bitmap có màu sắc đã thay đổi
//val coloredBitmap = changeBitmapColor(resizedBitmap, Color.BLUE)
// Khởi tạo và chạy ValueAnimator để thay đổi màu sắc
colorAnimator = ValueAnimator.ofObject(
ArgbEvaluator(),
startColor,
center,
endColor
)
colorAnimator?.addUpdateListener { animator ->
currentColor = animator.animatedValue as Int
invalidate()
}
colorAnimator?.interpolator = FastOutSlowInInterpolator()
colorAnimator?.duration = 3000 // Thời gian hoàn thành animation (ms)
colorAnimator?.repeatCount = ValueAnimator.INFINITE
colorAnimator?.start()
}
public fun createBitmapByShape(shape: Int) {
val vectorDrawable =
resources.getDrawable(shape) as VectorDrawable
val bitmap = Bitmap.createBitmap(
vectorDrawable.intrinsicWidth,
vectorDrawable.intrinsicHeight,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
vectorDrawable.setBounds(0, 0, canvas.width, canvas.height)
vectorDrawable.draw(canvas)
resizedAndColoredBitmap = bitmap
invalidate()
}
fun updateDynamicWidth(newWidth: Int) {
dynamicWidth = newWidth.toFloat()
invalidate() // Yêu cầu View vẽ lại khi width đã thay đổi
}
override fun onDraw(canvas: Canvas) {
Log.d("11111111", "ImageBorderView onDraw")
super.onDraw(canvas)
// Vẽ đường viền với màu sắc hiện tại
var width = width.toFloat()
val height = height.toFloat()
// Kích thước của hình tam giác
val triangleWidth = resizedAndColoredBitmap?.width ?: 0
val triangleHeight = resizedAndColoredBitmap?.height ?: 0
// Số lượng tam giác cần vẽ xung quanh màn hình
val numTriangles = ((width-padding) / triangleWidth).toInt()
val numTrianglesY = ((height-padding) / triangleHeight).toInt()
// Set khoảng cách giữa các hình tam giác
val spacingX = 2 * triangleWidth
val spacingY = 2 * triangleHeight
// Tính toán màu cho từng đoạn của đường viền
val sectionColors = intArrayOf(startColor, center, endColor)
val sectionWidth = width / sectionColors.size
// Vẽ đường viền bao quanh màn hình bằng các tam giác nhỏ
// Vẽ đường viền bằng các hình tam giác
val coloredBitmap = changeBitmapColor(resizedAndColoredBitmap!!, currentColor)
for (i in 0 until numTriangles ) {
val startX = i.toFloat() * spacingX + padding
val startY = 0f + padding
// Vẽ hình tam giác
canvas.drawBitmap(coloredBitmap!!, startX , startY, null)
val startY2 = height - triangleHeight - padding
canvas.drawBitmap(coloredBitmap!!, startX , startY2, null)
}
for (i in 0 until numTrianglesY) {
val startX = 0f + padding
val startY = i.toFloat() * spacingY + padding
// Vẽ hình tam giác
canvas.drawBitmap(coloredBitmap!!, startX, startY, null)
val startX2 = width - triangleWidth - padding
canvas.drawBitmap(coloredBitmap!!, startX2, startY, null)
}
}
}
package com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview
import android.animation.ArgbEvaluator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.DashPathEffect
import android.graphics.Paint
import android.graphics.Path
import android.graphics.PathMeasure
import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import android.graphics.RectF
import android.graphics.drawable.VectorDrawable
import android.util.AttributeSet
import android.view.View
import android.view.animation.AccelerateDecelerateInterpolator
import androidx.core.content.ContextCompat
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.bassbooster.equalizer.R
import kotlin.math.ceil
class ImageBorderView2(context: Context, attrs: AttributeSet?) : View(context, attrs) {
private val borderPaint = Paint()
private val paint = Paint()
private val borderRect = RectF()
private val borderWidth = 1f // Độ rộng của đường viền
private var padding = 30f // Padding bên trong view
private val startColor = ContextCompat.getColor(context, R.color.end)
private val endColor = ContextCompat.getColor(context, R.color.start)
private val center = ContextCompat.getColor(context, R.color.center)
public var currentColor = startColor // Màu sắc hiện tại của đường viền
private var path = Path()
private var resizedAndColoredBitmap: Bitmap? = null
public var colorAnimator: ValueAnimator? = null
private var cornerRadiusTopLeft = 0f // Độ cong của góc trên trái,
private var cornerRadiusTopRight = 0f // Độ cong của góc trên phải
private var cornerRadiusBottomLeft = 0f // Độ cong của góc dưới trái
private var cornerRadiusBottomRight = 0f // Độ cong của góc dưới phải
private var widthOfEdge = 900 // Độ rộng điều chỉnh của biên
// Số lần lặp (số lượng hình ảncanvas.drawPathh bitmap)
var numberOfBitmaps = 46
var duration = 1200
var scaleFactor = 1.toDouble()
init {
paint.setColor(resources.getColor(android.R.color.black))
paint.setStyle(Paint.Style.STROKE)
paint.setStrokeWidth(5.toFloat()) // Độ dày của đường bao (có thể cấu hình)
path = Path()
borderPaint.style = Paint.Style.STROKE
borderPaint.strokeWidth = borderWidth
borderPaint.pathEffect = DashPathEffect(floatArrayOf(30f, 30f), 0f) // Định dạng line nét đứt
val vectorDrawable =
resources.getDrawable(R.drawable.ic_ess) as VectorDrawable
val bitmap = Bitmap.createBitmap(
vectorDrawable.intrinsicWidth,
vectorDrawable.intrinsicHeight,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
vectorDrawable.setBounds(0, 0, canvas.width, canvas.height)
vectorDrawable.draw(canvas)
resizedAndColoredBitmap = bitmap
val colors = listOf(Color.RED, Color.GREEN, Color.BLUE)
val percentages = listOf(0.33f, 0.66f, 1.0f)
// Khởi tạo và chạy ValueAnimator để thay đổi màu sắc
colorAnimator = ValueAnimator.ofObject(
ArgbEvaluator(),
startColor,
center,
endColor
)
//colorAnimator = ValueAnimator.ofFloat(0.0f, 1.0f)
colorAnimator?.addUpdateListener { animator ->
currentColor = animator.animatedValue as Int
invalidate()
}
//colorAnimator.interpolator = FastOutSlowInInterpolator()
colorAnimator?.interpolator = AccelerateDecelerateInterpolator()
//colorAnimator.interpolator = CycleInterpolator(2.toFloat())
colorAnimator?.duration = duration.toLong() // Thời gian hoàn thành animation (ms)
colorAnimator?.repeatCount = ValueAnimator.INFINITE
colorAnimator?.repeatMode = ValueAnimator.RESTART
colorAnimator?.start()
}
@SuppressLint("DrawAllocation")
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val height = height.toFloat()
//padding = (width.toFloat() - widthOfEdge)/2
padding = 50.toFloat()
val scaledWidth = resizedAndColoredBitmap!!.width * scaleFactor
val scaledHeight = resizedAndColoredBitmap!!.height * scaleFactor
val resizedBitmap = Bitmap.createScaledBitmap(resizedAndColoredBitmap!!, scaledWidth.toInt(), scaledHeight.toInt(), true)
var coloredBitmap = changeBitmapColor(resizedBitmap!!, currentColor)
path.reset()
// Điểm bắt đầu ở góc trên bên trái
path.moveTo(padding + cornerRadiusTopLeft, padding)
// Đoạn đường ngang phía trên
path.lineTo(width - padding - cornerRadiusTopRight, padding)
// Góc trên phải
path.arcTo(
RectF(width -padding - 2 * cornerRadiusTopRight, padding, width - padding, padding + 2 * cornerRadiusTopRight),
-90f,
90f
)
// Đoạn đường dọc phía bên phải
path.lineTo(width - padding, height - padding - cornerRadiusBottomRight)
// Góc dưới phải
path.arcTo(
RectF(
width - padding - 2 * cornerRadiusBottomRight, height -padding - 2 * cornerRadiusBottomRight,
width - padding, height - padding
), 0f, 90f
)
// Đoạn đường ngang phía dưới
path.lineTo(padding + cornerRadiusBottomLeft, height - padding)
// Góc dưới trái
path.arcTo(
RectF(
padding,
height - padding - 2 * cornerRadiusBottomLeft,
padding + 2 * cornerRadiusBottomLeft,
height - padding
), 90f, 90f
)
// Đoạn đường dọc phía bên trái
path.lineTo(padding, padding + cornerRadiusTopLeft)
// Kết thúc ở góc trên trái
path.arcTo(RectF(padding, padding, padding + 2 * cornerRadiusTopLeft, padding + 2 * cornerRadiusTopLeft), 180f, 90f)
// Vẽ đường biên lên canvas
// canvas.drawPath(path, paint)
// Sử dụng PathMeasure để đo chiều dài của path
val pathMeasure = PathMeasure(path, false)
val pathLength = pathMeasure.length
// Khoảng cách giữa các hình ảnh bitmap
val distanceBetweenBitmaps = pathLength / numberOfBitmaps
val bitmapWidth = coloredBitmap.getWidth().toFloat();
val bitmapHeight = coloredBitmap.getHeight().toFloat();
for (i in 0 until numberOfBitmaps) {
val pos = FloatArray(2)
val tan = FloatArray(2)
// Tính toán vị trí và hướng tại điểm trên path
val distance = i * distanceBetweenBitmaps
pathMeasure.getPosTan(distance, pos, tan)
// Vẽ hình ảnh bitmap tại vị trí và hướng tính toán
canvas.save()
canvas.translate(pos[0] - bitmapWidth / 2, pos[1] - bitmapHeight / 2)
val rotationDegrees =
Math.toDegrees(Math.atan2(tan[1].toDouble(), tan[0].toDouble())).toFloat()
canvas.rotate(rotationDegrees, bitmapWidth / 2, bitmapHeight / 2)
canvas.drawBitmap(coloredBitmap, 0.toFloat(), 0.toFloat(), null)
canvas.restore()
}
}
fun changeColor(end:Int){
colorAnimator?.cancel()
colorAnimator=null
colorAnimator = ValueAnimator.ofObject(
ArgbEvaluator(),
startColor,
center,
end
)
colorAnimator?.addUpdateListener { animator ->
currentColor = animator.animatedValue as Int
invalidate()
}
colorAnimator?.interpolator = FastOutSlowInInterpolator()
colorAnimator?.duration = duration.toLong() // Thời gian hoàn thành animation (ms)
colorAnimator?.repeatCount = ValueAnimator.INFINITE
colorAnimator?.repeatMode = ValueAnimator.RESTART
colorAnimator?.start()
invalidate()
}
fun changeDurationTop(radiusTopLeft : Float,radiusTopRight: Float){
cornerRadiusTopLeft = radiusTopLeft
cornerRadiusTopRight = radiusTopRight
invalidate()
}
fun changeDurationBottom(radiusTopLeft : Float,radiusTopRight: Float){
cornerRadiusBottomLeft = radiusTopLeft
cornerRadiusBottomRight = radiusTopRight
invalidate()
}
fun changeWith(width : Int){
widthOfEdge = width+900
invalidate()
}
fun changeScaleFactor(sf : Int){
scaleFactor = 1+ ceil(sf.toFloat()*3/100)*0.8
if (scaleFactor <= 0) {
scaleFactor = 1.toDouble()
}
if (scaleFactor >= 2.5) {
numberOfBitmaps = 35
}
invalidate()
}
fun changeDuration(durations : Int){
colorAnimator?.cancel()
duration = 1200 - durations //Thời gian hoàn thành animation (ms)
if (duration <= 0) {
duration = 1
}
colorAnimator?.duration = duration.toLong()
colorAnimator?.start()
invalidate()
}
public fun createBitmapByShape(shape: Int) {
val vectorDrawable =
resources.getDrawable(shape) as VectorDrawable
val bitmap = Bitmap.createBitmap(
vectorDrawable.intrinsicWidth,
vectorDrawable.intrinsicHeight,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
vectorDrawable.setBounds(0, 0, canvas.width, canvas.height)
vectorDrawable.draw(canvas)
resizedAndColoredBitmap = bitmap
invalidate()
}
public fun changeColorAnimator(colors: IntArray) {
// Lấy danh sách màu hiện tại từ colorAnimator
val currentValues = (colorAnimator?.getValues() as? IntArray) ?: intArrayOf(startColor, center, endColor)
// Tạo một danh sách màu mới bằng cách thêm màu mới vào danh sách cũ
val newValues = currentValues.plus(colors)
colorAnimator?.cancel()
colorAnimator = null
colorAnimator = ValueAnimator.ofObject(
ArgbEvaluator(),
startColor,
Color.YELLOW,
Color.CYAN
)
colorAnimator?.addUpdateListener { animator ->
currentColor = animator.animatedValue as Int
/*val fraction = animator.animatedValue as Float
currentColor = calculateColor(colors, percentages, fraction)*/
invalidate()
}
//colorAnimator.interpolator = FastOutSlowInInterpolator()
colorAnimator?.interpolator = AccelerateDecelerateInterpolator()
//colorAnimator.interpolator = CycleInterpolator(2.toFloat())
colorAnimator?.duration = duration.toLong() // Thời gian hoàn thành animation (ms)
colorAnimator?.repeatCount = ValueAnimator.INFINITE
colorAnimator?.repeatMode = ValueAnimator.RESTART
colorAnimator?.start()
invalidate()
}
private fun changeBitmapColor(sourceBitmap: Bitmap, color: Int): Bitmap {
val resultBitmap = sourceBitmap.copy(sourceBitmap.config, true)
val paint = Paint()
val filter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)
paint.colorFilter = filter
val canvas = Canvas(resultBitmap)
canvas.drawBitmap(resultBitmap, 0f, 0f, paint)
return resultBitmap
}
}
package com.bassbooster.soundeffects.equalizer.view.activity.effects
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.adapter.ViewPagerAdapter
import com.bassbooster.equalizer.databinding.ActivityEffectsBinding
import com.bassbooster.soundeffects.equalizer.utils.Utils
import com.bassbooster.soundeffects.equalizer.view.activity.effects.fragment.EffectsFragment
import com.bassbooster.soundeffects.equalizer.view.activity.effects.fragment.MyEffectsFragment
import com.bassbooster.soundeffects.equalizer.viewmodel.MyViewModel
import com.bassbooster.soundeffects.equalizer.utils.AppUtils
class EffectsActivity : AppCompatActivity() {
private lateinit var binding: ActivityEffectsBinding
private lateinit var myEffectsFragment: MyEffectsFragment
private lateinit var viewModel: MyViewModel
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
// private var bannerAdHelper: BannerAdHelper? = null
// val adCallback = object : AdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Banner_click","click ad tại các màn hình:List Effects ","banner_click")
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// }
// }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityEffectsBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
AppUtils.hideNavigationBar(this)
init()
setOnEvent()
// loadBanner()
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_list_genres_view","View màn List Effect","list_genres")
}
override fun onResume() {
super.onResume()
AppUtils.hideNavigationBar(this)
}
@SuppressLint("NewApi")
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
AppUtils.hideNavigationBar(this)
}
}
override fun onPause() {
super.onPause()
Utils.hideAdsResume()
}
private fun init() {
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
val intent: Intent = intent
val listEff = intent.getStringArrayListExtra("listType")
myEffectsFragment = MyEffectsFragment.newInstance()
Log.d("qqq", "init: " + listEff?.size)
val fragmentList = arrayListOf(
EffectsFragment.newInstance(listEff ?: arrayListOf()),
myEffectsFragment
)
binding.viewPagerEffects.adapter = ViewPagerAdapter(this, fragmentList)
binding.viewPagerEffects.isUserInputEnabled = false
changeTab(0)
binding.cardTab1.setOnClickListener {
binding.viewPagerEffects.apply {
if (currentItem != 0) {
// if (!FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Banner) || !AppUtils.haveNetworkConnection(this@EffectsActivity)
// ) {
//
// }else{
// binding.mLlBanner.visibility = View.VISIBLE
// }
binding.mLlBanner.visibility = View.GONE
changeTab(0)
this.setCurrentItem(0, true)
}
}
}
binding.cardTab2.setOnClickListener {
binding.viewPagerEffects.apply {
if (currentItem != 1) {
viewModel.allData.observe(this@EffectsActivity, Observer { myData ->
if (myData.isEmpty()){
binding.mLlBanner.visibility = View.GONE
}
})
changeTab(1)
this.setCurrentItem(1, true)
}
}
}
}
@SuppressLint("ResourceAsColor")
fun changeTab(position: Int){
binding.apply {
if (position == 0) {
tab1Background.setBackgroundResource(R.color.tab_selected)
tab2Background.setBackgroundResource(R.color.transparent_00)
} else {
tab2Background.setBackgroundResource(R.color.tab_selected)
tab1Background.setBackgroundResource(R.color.transparent_00)
}
}
}
private fun setOnEvent() {
binding.mImgBack.setOnClickListener {
finish()
}
}
// private fun initBannerAd(): BannerAdHelper {
// val config = BannerAdConfig(
// BuildConfig.Banner,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Banner),
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_banner),
// // with native additional layout native ad
// )
// return BannerAdHelper(this, this, config)
// }
//
// private fun loadBanner() {
// if (!FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Banner) && !AppUtils.haveNetworkConnection(this)) {
// binding.mLlBanner.visibility = View.GONE
// } else {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Banner_view","view tại các màn hình: effects","banner_view")
// bannerAdHelper = initBannerAd()
// bannerAdHelper?.setBannerContentView(binding.mLlBanner)
// bannerAdHelper?.registerAdListener(adCallback)
// if (bannerAdHelper?.bannerAdView != null) {
// bannerAdHelper?.requestAds(BannerAdParam.Ready(bannerAdHelper?.bannerAdView!!))
// }else{
// bannerAdHelper?.requestAds(BannerAdParam.Request.create())
// }
// binding.mLlBanner.visibility = View.VISIBLE
// }
// }
//
// override fun onDestroy() {
// super.onDestroy()
// bannerAdHelper?.unregisterAdListener(adCallback)
// }
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.effects.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.soundeffects.equalizer.data.model.EffectsModel
import com.bassbooster.equalizer.databinding.AdapterEffectsBinding
class EffectsAdapter(val context: Context, val list: ArrayList<EffectsModel>, val mListener: OnItemClickListener) : RecyclerView.Adapter<EffectsAdapter.ViewHolder>() {
var isSelect = 0
interface OnItemClickListener {
fun onItemClick(position: Int)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = AdapterEffectsBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// if (isSelect == position){
// holder.mRlView.background = ContextCompat.getDrawable(context,R.drawable.dra_custom_layout_play_select)
// }else{
// holder.mRlView.background = ContextCompat.getDrawable(context,R.drawable.dra_custom_layout_play)
// }
holder.binding.mTxtName.text = list[position].name
holder.binding.mImgType.setImageDrawable(list[position].image)
holder.binding.mLlView.setOnClickListener {
mListener.onItemClick(position)
}
}
override fun getItemCount(): Int {
return list.size
}
inner class ViewHolder(val binding: AdapterEffectsBinding) : RecyclerView.ViewHolder(binding.root)
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.effects.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.soundeffects.equalizer.database.EffectsData
import com.bassbooster.equalizer.databinding.AdapterMyEffectsBinding
class MyEffectsAdapter(
val context: Context,
var list: List<EffectsData>,
val mListener: OnItemClickListener
) : RecyclerView.Adapter<MyEffectsAdapter.ViewHolder>() {
var showDeleteIcon = false
interface OnItemClickListener {
fun onItemClick(position: Int)
fun onDelete(position: Int)
}
fun updateData(newList: List<EffectsData>) {
list = newList
notifyDataSetChanged()
}
fun setDeleteIconVisibility(show: Boolean) {
showDeleteIcon = show
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding =
AdapterMyEffectsBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.binding.mTxtName.text = list[position].name
holder.binding.icDelete.setOnClickListener {
mListener.onDelete(position)
}
holder.binding.rlLayout.setOnClickListener {
mListener.onItemClick(position)
}
}
override fun getItemCount(): Int {
return list.size
}
inner class ViewHolder(val binding: AdapterMyEffectsBinding) :
RecyclerView.ViewHolder(binding.root)
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.effects.fragment
import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import com.bullhead.equalizer.ButtonController
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.EffectsModel
import com.bassbooster.equalizer.databinding.FragmentEffectsBinding
import com.bassbooster.soundeffects.equalizer.event.MessageEvent
import com.bassbooster.soundeffects.equalizer.view.activity.effects.adapter.EffectsAdapter
import org.greenrobot.eventbus.EventBus
import java.util.*
class EffectsFragment : Fragment() {
val EFFECTS_TYPE = "effects_type"
private var _binding: FragmentEffectsBinding? = null
private val binding get() = _binding!!
private var effectsAdapter : EffectsAdapter? = null
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
companion object {
fun newInstance(listEffectsType: ArrayList<String>): EffectsFragment {
val args = Bundle()
args.putStringArrayList(EffectsFragment().EFFECTS_TYPE, listEffectsType)
val fragment = EffectsFragment()
fragment.arguments = args
return fragment
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(requireContext())
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentEffectsBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
init()
}
@SuppressLint("UseRequireInsteadOfGet")
private fun init() {
val buttonController = ButtonController()
val listEffects = arguments!!.getStringArrayList(EFFECTS_TYPE)
val listImage: ArrayList<Drawable> = ArrayList()
val list: ArrayList<EffectsModel> = ArrayList()
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.bg_normal)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.bg_class)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.bg_dance)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_flat)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_heavy)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_folk)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.bg_hiphop)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_jazz)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_pop)!!)
listImage.add(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_rock)!!)
for (i in 0 until Math.min(listEffects?.size?:0, listImage.size)) {
list.add(EffectsModel(listEffects?.get(i)?:"", listImage.get(i)))
}
val numberOfColumns = 3
val layoutManager = GridLayoutManager(requireContext(), numberOfColumns)
binding.mRcyclerEffects.layoutManager =
layoutManager
effectsAdapter = EffectsAdapter(
requireActivity(),
list,
object : EffectsAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_list_genres_${list[position].name}_click","User clicks vào ${list[position].name}","list_genres_click")
val currentActivity: Activity? = activity
currentActivity?.finish()
buttonController.onUpdateType(position,list[position].name)
EventBus.getDefault().post(MessageEvent(list[position].name))
}
})
binding.mRcyclerEffects.adapter = effectsAdapter
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.effects.fragment
import android.app.Activity
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import com.bullhead.equalizer.ButtonController
import com.bassbooster.equalizer.databinding.FragmentMyEffectsBinding
import com.bassbooster.soundeffects.equalizer.event.MessageEvent
import com.bassbooster.soundeffects.equalizer.view.activity.effects.adapter.MyEffectsAdapter
import com.bassbooster.soundeffects.equalizer.viewmodel.MyViewModel
import org.greenrobot.eventbus.EventBus
class MyEffectsFragment : Fragment() {
private var _binding: FragmentMyEffectsBinding? = null
private val binding get() = _binding!!
private var myEffectsAdapter: MyEffectsAdapter? = null
private lateinit var viewModel: MyViewModel
private var isCheck = false
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
companion object {
fun newInstance() = MyEffectsFragment()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(requireContext())
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentMyEffectsBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
init()
}
override fun onResume() {
super.onResume()
}
private fun init() {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_list_genres_view","View màn My List Effect","list_genres")
val buttonController = ButtonController()
val numberOfColumns = 3
val layoutManager = GridLayoutManager(requireContext(), numberOfColumns)
binding.mRcyclerEffects.layoutManager =
layoutManager
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
viewModel.allData.observe(requireActivity(), Observer { myData ->
if (myData.isEmpty()) {
binding.imgIsEmpty.visibility = View.VISIBLE
binding.tvIsEmpty.visibility = View.VISIBLE
myEffectsAdapter?.updateData(myData)
binding.mRcyclerEffects.adapter = myEffectsAdapter
} else {
binding.imgIsEmpty.visibility = View.GONE
binding.tvIsEmpty.visibility = View.GONE
Log.e("qqq", "setOnEvent: " + myData.size)
myEffectsAdapter = MyEffectsAdapter(
requireActivity(),
myData ?: listOf(),
object : MyEffectsAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
EventBus.getDefault().post(MessageEvent(myData[position].name))
val currentActivity: Activity? = activity
currentActivity?.finish()
buttonController.onUpdateMyType(position,myData[position].name,myData[position].seekbar0,myData[position].seekbar1,myData[position].seekbar2,myData[position].seekbar3,myData[position].seekbar4)
}
override fun onDelete(position: Int) {
viewModel.deleteData(myData[position])
isCheck = true
myEffectsAdapter?.notifyDataSetChanged()
}
})
if (isCheck) {
myEffectsAdapter?.setDeleteIconVisibility(true)
} else {
myEffectsAdapter?.setDeleteIconVisibility(false)
}
}
binding.mRcyclerEffects.adapter = myEffectsAdapter
myEffectsAdapter?.notifyDataSetChanged()
})
}
fun getMyEffectsAdapter(): MyEffectsAdapter? {
val recyclerView = binding.mRcyclerEffects
return recyclerView.adapter as? MyEffectsAdapter
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.onboarding
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.bassbooster.equalizer.databinding.FragmentOnboarding1Binding
class OnBoarding1Fragment : Fragment(){
private var _binding: FragmentOnboarding1Binding? = null
private val binding get() = _binding!!
// private var nativeAdHelper: NativeAdHelper? = null
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
// val adCallback = object : AperoAdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// }
// }
//
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(requireContext())
// }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentOnboarding1Binding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
// private fun initNativeAd(): NativeAdHelper {
// val config = NativeAdConfig(
// BuildConfig.Native_tutorial,
// true,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_native_tutorial),
// // with native additional layout native ad
// R.layout.layout_onboarding_native
// )
// return NativeAdHelper(requireActivity(), requireActivity(), config)
// }
//
// override fun onDestroy() {
// super.onDestroy()
// nativeAdHelper?.unregisterAdListener(adCallback)
// }
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.onboarding
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.bassbooster.equalizer.databinding.FragmentOnboarding2Binding
class OnBoarding2Fragment : Fragment(){
private var _binding: FragmentOnboarding2Binding? = null
private val binding get() = _binding!!
// private var nativeAdHelper: NativeAdHelper? = null
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
// val adCallback = object : AperoAdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// }
// }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(requireContext())
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentOnboarding2Binding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
loadNativeAds()
}
private fun loadNativeAds() {
}
// private fun initNativeAd(): NativeAdHelper {
// val config = NativeAdConfig(
// BuildConfig.Native_tutorial,
// true,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_native_tutorial),
// // with native additional layout native ad
// R.layout.layout_onboarding_native
// )
// return NativeAdHelper(requireActivity(), this, config)
// }
//
// override fun onDestroy() {
// super.onDestroy()
// nativeAdHelper?.unregisterAdListener(adCallback)
// }
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.onboarding
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.bassbooster.equalizer.databinding.FragmentOnboarding3Binding
class OnBoarding3Fragment : Fragment(){
private var _binding: FragmentOnboarding3Binding? = null
private val binding get() = _binding!!
// private var nativeAdHelper: NativeAdHelper? = null
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
// val adCallback = object : AperoAdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// }
// }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(requireContext())
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentOnboarding3Binding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
loadNativeAds()
}
private fun loadNativeAds() {
// if (FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Native_tutorial) && AppUtils.haveNetworkConnection(requireContext())) {
// Utils.tracKingFirebaseAnalytics(mFirebaseAnalytics,"Native_tutorial_view","view ad tại 3 màn onboarding","tutorial_view")
// nativeAdHelper = initNativeAd()
// nativeAdHelper?.setNativeContentView(binding.nativeOnboarding)
// nativeAdHelper?.setShimmerLayoutView(ShimmerFrameLayout(requireContext()))
// nativeAdHelper?.registerAdListener(adCallback)
// binding.nativeOnboarding.visibility = View.VISIBLE
// if (nativeAdHelper?.nativeAd != null) {
// nativeAdHelper?.requestAds(NativeAdParam.Ready(nativeAdHelper?.nativeAd!!))
// }else{
// nativeAdHelper?.requestAds(NativeAdParam.Request.create())
// }
// } else {
//
// }
}
//
// private fun initNativeAd(): NativeAdHelper {
// val config = NativeAdConfig(
// BuildConfig.Native_tutorial,
// true,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_native_tutorial),
// // with native additional layout native ad
// R.layout.layout_onboarding_native
// )
// return NativeAdHelper(requireActivity(), this, config)
// }
//
// override fun onDestroy() {
// super.onDestroy()
// nativeAdHelper?.unregisterAdListener(adCallback)
// }
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.onboarding
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import com.bassbooster.soundeffects.equalizer.view.activity.onboarding.OnBoarding1Fragment
import com.bassbooster.soundeffects.equalizer.view.activity.onboarding.OnBoarding2Fragment
import com.bassbooster.soundeffects.equalizer.view.activity.onboarding.OnBoarding3Fragment
class OnBoardingPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
override fun getCount(): Int {
return 3
}
override fun getItem(position: Int): Fragment {
return when (position) {
0 -> OnBoarding1Fragment()
1 -> OnBoarding2Fragment()
2 -> OnBoarding3Fragment()
else -> throw IllegalArgumentException("Invalid position")
}
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.policy
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.bassbooster.equalizer.databinding.ActivityPolicyBinding
import com.bassbooster.soundeffects.equalizer.utils.Utils
class PolicyActivity : AppCompatActivity(){
private lateinit var binding: ActivityPolicyBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPolicyBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
init()
setOnEvent()
}
@SuppressLint("SetJavaScriptEnabled")
private fun init() {
// AppOpenManager.getInstance()
// .disableAdResumeByClickAction()
binding.webview.loadUrl("https://sites.google.com/view/equalizer-bass-booster-policy/home")
binding.webview.settings.javaScriptEnabled = true
}
private fun setOnEvent() {
binding.imgBack.setOnClickListener {
finish()
}
}
override fun onPause() {
super.onPause()
Utils.hideAdsResume()
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.activity.setting
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Build
import android.os.Bundle
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import com.bassbooster.equalizer.databinding.ActivitySettingBinding
import com.bassbooster.soundeffects.equalizer.view.MainService
import com.bassbooster.soundeffects.equalizer.utils.AppUtils
import com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.activity.EdgeLightingActivity
import com.bassbooster.soundeffects.equalizer.view.activity.policy.PolicyActivity
import com.bassbooster.soundeffects.equalizer.view.activity.setting.language.LanguageActivity
import com.bassbooster.soundeffects.equalizer.view.activity.setting.permissions.PermissionsActivity
import com.bassbooster.soundeffects.equalizer.utils.CustomNotificationService
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
import com.bassbooster.soundeffects.equalizer.utils.Utils
import com.bullhead.equalizer.ButtonController
import com.bullhead.equalizer.SharePreferenceUtilEqualizer
@RequiresApi(Build.VERSION_CODES.M)
class SettingActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingBinding
private lateinit var sharedPreferencesUtil: SharedPreferencesUtil
private lateinit var sharedPreferencesUtil2: SharePreferenceUtilEqualizer
private val VIBRATE_PERMISSION_REQUEST_CODE = 1
//// private var mFirebaseAnalytics: FirebaseAnalytics? = null
// private var bannerAdHelper: BannerAdHelper? = null
// val adCallback = object : AdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Banner_click","click ad tại các màn hình: Setting ","banner_click")
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// binding.mLlBanner.setVisibility(View.VISIBLE)
// }
// }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySettingBinding.inflate(layoutInflater)
val view = binding.root
sharedPreferencesUtil = SharedPreferencesUtil(this)
sharedPreferencesUtil2 = SharePreferenceUtilEqualizer(this)
binding.SCVisualizer.isChecked = true
setContentView(view)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
init()
setOnEvent()
}
@SuppressLint("SetJavaScriptEnabled")
private fun init() {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_vew","View màn setting","setting_vew")
AppUtils.hideNavigationBar(this)
}
@SuppressLint("NewApi")
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
AppUtils.hideNavigationBar(this)
}
}
override fun onPause() {
super.onPause()
Utils.hideAdsResume()
}
override fun onStart() {
super.onStart()
}
override fun onResume() {
super.onResume()
AppUtils.hideNavigationBar(this)
binding.SCVibrationRights.isChecked = sharedPreferencesUtil.getBoolean("vibrate")
binding.SCVisualizer.isChecked = sharedPreferencesUtil.getBoolean("visualizer")
}
private fun setOnEvent() {
val buttonController = ButtonController()
// binding.SCVibrationRights.setOnCheckedChangeListener { buttonView, isChecked ->
// sharedPreferencesUtil.saveBoolean("vibrate", isChecked)
// if (isChecked) {
// if (ContextCompat.checkSelfPermission(
// this@SettingActivity,
// Manifest.permission.VIBRATE
// ) != PackageManager.PERMISSION_GRANTED
// ) {
// ActivityCompat.requestPermissions(
// this,
// arrayOf(Manifest.permission.VIBRATE),
// VIBRATE_PERMISSION_REQUEST_CODE
// )
// Log.e("PREMISSIONS", "mở quyền rung: ")
// } else {
// Log.e("PREMISSIONS", "quyền rung đã được cấp từ đầu ")
// val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
// audioManager.ringerMode = AudioManager.RINGER_MODE_VIBRATE
// }
// } else {
// val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
// audioManager.ringerMode = AudioManager.RINGER_MODE_SILENT
// Log.e("PREMISSIONS", "bật chế độ im lặng ")
// }
// }
binding.SCVisualizer.setOnCheckedChangeListener { buttonView, isChecked ->
sharedPreferencesUtil.saveBoolean("visualizer", isChecked)
val result = if (isChecked) 0 else 1
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_visualizer_click","${result}","visualizer_click")
}
binding.SCControllerEffect.setOnCheckedChangeListener { buttonView, isChecked ->
sharedPreferencesUtil.saveBoolean("ControllerEffect", isChecked)
val result = if (isChecked) 0 else 1
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_eq_controls_all_effect_click","${result}","controls_all_effect")
}
binding.imgBack.setOnClickListener {
finish()
}
binding.clLanguage.setOnClickListener {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_language_click","setting language click","language_click")
val intent = Intent(this@SettingActivity, LanguageActivity::class.java)
startActivity(intent)
}
binding.clPermissions.setOnClickListener {
val intent = Intent(this@SettingActivity, PermissionsActivity::class.java)
startActivity(intent)
}
binding.mEdge.setOnClickListener {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_edge_lighting_click","User click vào Edge Lighting trong Setting","edge_lighting")
val intent = Intent(this@SettingActivity, EdgeLightingActivity::class.java)
startActivity(intent)
}
binding.swPlayControl.apply {
isChecked = sharedPreferencesUtil.getBooleanPlayControl("swPlayControl")
setOnCheckedChangeListener { _, isCheck ->
sharedPreferencesUtil.saveBooleanPlayControl("swPlayControl", isCheck)
val result = if (isChecked) 0 else 1
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_play_control_bar_click","${result}","play_control_bar")
}
}
binding.SCControllerEffect.apply {
isChecked = sharedPreferencesUtil.getBoolean("ControllerEffect")
setOnCheckedChangeListener { _ , isCheck ->
sharedPreferencesUtil.saveBoolean("ControllerEffect", isCheck)
sharedPreferencesUtil2.saveBoolean("ControllerEffect", isCheck)
}
}
binding.mPrivacy.setOnClickListener {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"setting_privacy_policy_click","setting privacy policy click","policy_click")
val intent = Intent(this@SettingActivity, PolicyActivity::class.java)
startActivity(intent)
}
}
private fun launchMainService(isCheck: Boolean) {
val svc = Intent(this, MainService::class.java)
svc.putExtra(CustomNotificationService.EXTRA_BUTTON_TEXT,"Normal")
stopService(svc)
if (isCheck){
startService(svc)
}
// finish()
}
private fun loadBanner() {
}
// private fun initBannerAd(): BannerAdHelper {
// val config = BannerAdConfig(
// BuildConfig.Banner,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Banner),
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_banner),
// // with native additional layout native ad
// )
// return BannerAdHelper(this, this, config)
// }
//
// override fun onDestroy() {
// super.onDestroy()
// bannerAdHelper?.unregisterAdListener(adCallback)
// }
}
package com.bassbooster.soundeffects.equalizer.view.activity.setting.language
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.Nation
import com.bassbooster.equalizer.databinding.ActivityLanguageBinding
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
import com.bassbooster.soundeffects.equalizer.utils.Utils
import com.bassbooster.soundeffects.equalizer.view.ActivityTutorialSplash
import com.bassbooster.soundeffects.equalizer.view.MainActivity
import com.bassbooster.soundeffects.equalizer.view.MainActivity.Companion.RESTART_APP_FLAG
import com.bassbooster.soundeffects.equalizer.utils.AppUtils
import com.bassbooster.soundeffects.equalizer.view.activity.setting.language.adapter.LanguageAdapter
import kotlin.system.exitProcess
class LanguageActivity : AppCompatActivity() {
private lateinit var myAdapter: LanguageAdapter
private var nations: ArrayList<Nation> = ArrayList<Nation>()
val languageManager = LanguageManager()
private lateinit var binding: ActivityLanguageBinding
private lateinit var sharedPreferencesUtil: SharedPreferencesUtil
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
// private var nativeAdHelper: NativeAdHelper? = null
// val adCallback = object : AperoAdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Native_language_click","click ad tại màn Language","language_click")
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// }
// }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityLanguageBinding.inflate(layoutInflater)
val view = binding.root
sharedPreferencesUtil = SharedPreferencesUtil(this)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
// Gửi sự kiện "Chọn ngôn ngữ English" lên Firebase Analytics
val params = Bundle()
params.putString("language", "User views Language")
// mFirebaseAnalytics!!.logEvent("language_view", params)
if (!sharedPreferencesUtil.getIsFirstSplash("isFirstSplash")) {
checkFirstTime()
setRecyclerFirstApp()
} else {
checkLanguage()
setRecyclerView()
setOnEvent()
}
setContentView(view)
AppUtils.hideNavigationBar(this)
loadNativeAds()
}
override fun onResume() {
super.onResume()
AppUtils.hideNavigationBar(this)
}
@SuppressLint("NewApi")
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
AppUtils.hideNavigationBar(this)
}
}
override fun onPause() {
super.onPause()
Utils.hideAdsResume()
}
fun isFirst(context: Context): Boolean {
val sharedPreferences: SharedPreferences =
context.getSharedPreferences("MyPre", Context.MODE_PRIVATE)
val isFirstLogin = sharedPreferences.getBoolean("isFirst", true)
if (isFirstLogin) {
val editor: SharedPreferences.Editor = sharedPreferences.edit()
editor.putBoolean("isFirst", false)
editor.apply()
}
return isFirstLogin
}
private fun checkFirstTime() {
binding.imgBack.visibility = View.GONE
binding.tvTitleLanguage.visibility = View.GONE
binding.tvTitleLanguageFirst.visibility = View.VISIBLE
binding.tvLine.visibility = View.VISIBLE
binding.icCheckFirst.visibility = View.VISIBLE
}
private fun checkLanguage() {
binding.imgBack.visibility = View.VISIBLE
binding.tvTitleLanguage.visibility = View.VISIBLE
binding.tvTitleLanguageFirst.visibility = View.GONE
binding.tvLine.visibility = View.GONE
binding.icCheckFirst.visibility = View.GONE
}
private fun setOnEvent() {
binding.imgBack.setOnClickListener {
finish()
}
}
private fun setRecyclerView() {
var index = sharedPreferencesUtil.getInt("isSeletedIndex")
languageManager.languageManager(this@LanguageActivity)
nations.add(Nation(R.color.color_neutral, R.drawable.ic_english, "English"))
nations.add(Nation(R.color.color_neutral, R.drawable.img_hindi, "Hindi"))
nations.add(Nation(R.color.color_neutral, R.drawable.img_france, "France"))
nations.add(Nation(R.color.color_neutral, R.drawable.img_spanish, "Spanish"))
nations.add(Nation(R.color.color_neutral, R.drawable.ic_flag, "Portuguese"))
nations.add(Nation(R.color.color_neutral, R.drawable.ic_dutch, "Russian"))
binding.rvLanguage.layoutManager =
LinearLayoutManager(this@LanguageActivity, RecyclerView.VERTICAL, false)
myAdapter = LanguageAdapter(
nations, object : LanguageAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
when (position) {
0 -> {
newSplash("en","English")
}
1 -> {
newSplash("hi","Hindi")
}
2 -> {
newSplash("fr","France")
}
3 -> {
newSplash("es","Spanish")
}
4 -> {
newSplash("de","Portuguese")
}
5 -> {
newSplash("zh","Russian")
}
}
sharedPreferencesUtil.saveInt("isSeletedIndex", position)
myAdapter?.notifyDataSetChanged()
}
}, index, this@LanguageActivity
)
binding.rvLanguage.adapter = myAdapter
}
private fun setRecyclerFirstApp() {
val index = sharedPreferencesUtil.getInt("isSeletedIndex")
languageManager.languageManager(this@LanguageActivity)
nations.add(Nation(R.color.color_neutral, R.drawable.ic_english, "English"))
nations.add(Nation(R.color.color_neutral, R.drawable.img_hindi, "Hindi"))
nations.add(Nation(R.color.color_neutral, R.drawable.img_france, "France"))
nations.add(Nation(R.color.color_neutral, R.drawable.img_spanish, "Spanish"))
nations.add(Nation(R.color.color_neutral, R.drawable.ic_flag, "Portuguese"))
nations.add(Nation(R.color.color_neutral, R.drawable.ic_dutch, "Russian"))
binding.rvLanguage.layoutManager =
LinearLayoutManager(this@LanguageActivity, RecyclerView.VERTICAL, false)
myAdapter = LanguageAdapter(
nations, object : LanguageAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
when (position) {
0 -> {
}
1 -> {
}
2 -> {
}
3 -> {
}
4 -> {
}
5 -> {
}
}
sharedPreferencesUtil.saveInt("isSeletedIndex", position)
myAdapter?.notifyDataSetChanged()
}
}, index, this@LanguageActivity
)
binding.rvLanguage.adapter = myAdapter
binding.icCheckFirst.setOnClickListener {
when (sharedPreferencesUtil.getInt("isSeletedIndex")) {
0 -> {
newTutorial("en","English")
}
1 -> {
newTutorial("hi","Hindi")
}
2 -> {
newTutorial("fr","France")
}
3 -> {
newTutorial("es","Spanish")
}
4 -> {
newTutorial("de","Portuguese")
}
5 -> {
newTutorial("zh","Russian")
}
}
}
}
fun newSplash(language: String,nameLang: String) {
// Gửi sự kiện "Chọn ngôn ngữ English" lên Firebase Analytics
val params = Bundle()
params.putString("language", "Chọn ngôn ngữ $nameLang")
// mFirebaseAnalytics!!.logEvent("language_choose_language_click", params)
sharedPreferencesUtil.saveString("lang", language)
languageManager.updateResource(language)
sharedPreferencesUtil.saveStatusRestart(RESTART_APP_FLAG,true)
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
}
fun newTutorial(language: String,nameLang: String) {
// Gửi sự kiện "Chọn ngôn ngữ English" lên Firebase Analytics
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"language","User clicks vào 'v' button $nameLang","language_v_click")
sharedPreferencesUtil.saveString("lang", language)
languageManager.updateResource(language)
val intent = Intent(this@LanguageActivity, ActivityTutorialSplash::class.java)
// intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(intent)
finish()
}
private fun loadNativeAds() {
}
override fun onBackPressed() {
if (!sharedPreferencesUtil.getIsFirstSplash("isFirstSplash")) {
exitProcess(0)
}else{
finish()
}
}
// private fun initNativeAd(): NativeAdHelper {
// val config = NativeAdConfig(
// BuildConfig.Native_language,
// true,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_native_language) ,
// // with native additional layout native ad
// R.layout.layout_language_native
// )
// return NativeAdHelper(this, this, config)
// }
//
// override fun onDestroy() {
// super.onDestroy()
// nativeAdHelper?.unregisterAdListener(adCallback)
// }
}
package com.bassbooster.soundeffects.equalizer.view.activity.setting.language
import android.content.Context
import android.content.SharedPreferences
import android.content.res.Configuration
import android.content.res.Resources
import java.util.Locale
@Suppress("DEPRECATION")
class LanguageManager {
private lateinit var mContext: Context;
private lateinit var sharedPreferences: SharedPreferences
fun languageManager(context: Context) {
mContext = context
sharedPreferences = mContext.getSharedPreferences("LANG", Context.MODE_PRIVATE)
}
fun updateResource(code: String) {
val locale = Locale(code)
Locale.setDefault(locale)
val resources: Resources = mContext.getResources()
val configuration: Configuration = resources.configuration
configuration.locale = locale
resources.updateConfiguration(configuration, resources.displayMetrics)
// setLang(code)
}
fun getLang(): String? {
return sharedPreferences.getString("lang", "en")
}
private fun setLang(code: String) {
val editor = sharedPreferences.edit()
editor.putString("lang", code)
editor.commit()
}
}
package com.bassbooster.soundeffects.equalizer.view.activity.setting.language.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.AppCompatImageView
import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.data.model.Nation
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
class LanguageAdapter(
private val nations: ArrayList<Nation>,
val mListener: OnItemClickListener,
var index : Int, var mContext : Context
) : RecyclerView.Adapter<LanguageAdapter.DataViewHolder>() {
private var sharedPreferencesUtil = SharedPreferencesUtil(mContext)
var isSelect = sharedPreferencesUtil.getInt("isSeletedIndex")
interface OnItemClickListener {
fun onItemClick(position: Int)
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): DataViewHolder {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.item_language, parent, false)
index = isSelect
return DataViewHolder(view)
}
override fun onBindViewHolder(holder: DataViewHolder, position: Int) {
if (isSelect == position) {
holder.clBorder.setBackgroundResource(R.drawable.custom_image_nation_red)
holder.imgVector.visibility = View.VISIBLE
holder.imgVectorDefault.visibility = View.GONE
} else {
holder.clBorder.setBackgroundResource(R.drawable.custom_image_nation)
holder.imgVector.visibility = View.GONE
holder.imgVectorDefault.visibility = View.VISIBLE
}
holder.clBorder.setOnClickListener {
isSelect = position
mListener.onItemClick(position)
}
holder.tvName.text = nations[position].name
holder.imgNation.setImageResource(nations[position].imgAvatar)
}
override fun getItemCount(): Int {
return nations.size
}
class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var tvName: AppCompatTextView = itemView.findViewById(R.id.tvTitleLanguage)
var imgNation: AppCompatImageView = itemView.findViewById(R.id.imgNation)
var clBorder: ConstraintLayout = itemView.findViewById(R.id.clBorder)
var imgVector: AppCompatImageView = itemView.findViewById(R.id.imgVector)
var imgVectorDefault: AppCompatImageView = itemView.findViewById(R.id.imgVectorDefault)
}
}
package com.bassbooster.soundeffects.equalizer.view.activity.setting.permissions
import android.Manifest
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.bassbooster.equalizer.R
import com.bassbooster.equalizer.databinding.ActivityPermissionsBinding
import com.bassbooster.soundeffects.equalizer.utils.AppUtils
@Suppress("DEPRECATION")
@RequiresApi(Build.VERSION_CODES.M)
class PermissionsActivity : AppCompatActivity() {
private lateinit var binding: ActivityPermissionsBinding
private val RECORD_AUDIO_PERMISSION_CODE = 1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPermissionsBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
AppUtils.hideNavigationBar(this)
binding.imgBackPermissions.setOnClickListener {
finish()
}
// setOnEvent()
}
override fun onResume() {
super.onResume()
AppUtils.hideNavigationBar(this)
}
@SuppressLint("NewApi")
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
AppUtils.hideNavigationBar(this)
}
}
// override fun onResume() {
// super.onResume()
// binding.imgSCMicro.isChecked = ContextCompat.checkSelfPermission(
// this,
// Manifest.permission.RECORD_AUDIO
// ) == PackageManager.PERMISSION_GRANTED
//
// binding.imgSCFloating.isChecked =
// !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this))
// }
private fun setOnEvent() {
binding.imgBackPermissions.setOnClickListener {
finish()
}
binding.imgSCMicro.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.RECORD_AUDIO),
RECORD_AUDIO_PERMISSION_CODE
)
}
} else {
showPermissionSettingDialog(
R.string.turn_off_microphone_access,
R.string.you_want_to_revoke_permission,
R.string.setting,
R.string.cancel
)
}
}
binding.imgSCFloating.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivity(intent)
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Settings.canDrawOverlays(this)) {
showFloatingPermissionSettingDialog(
R.string.turn_off_floating_window,
R.string.you_have_denied,
R.string.setting,
R.string.cancel
)
}
}
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == RECORD_AUDIO_PERMISSION_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("LOG", "was granted: ")
} else {
if (!shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)) {
showPermissionSettingDialog(
R.string.permission_denied,
R.string.you_have_denied,
R.string.setting,
R.string.cancel
)
}
}
}
}
private fun showPermissionSettingDialog(
tvTitle: Int,
tvBody: Int,
tvSetting: Int,
tvCancel: Int
) {
val builder = AlertDialog.Builder(this)
builder.setTitle(getColoredText(tvTitle, Color.WHITE))
.setMessage(getColoredText(tvBody, Color.WHITE))
.setPositiveButton(getColoredText(tvSetting, Color.WHITE)) { dialog, which ->
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivity(intent)
}
.setNegativeButton(getColoredText(tvCancel, Color.WHITE)) { dialog, which ->
recreate()
}
.setCancelable(false)
val dialog = builder.create()
dialog.window?.setBackgroundDrawableResource(R.drawable.custom_dialog)
dialog.show()
}
private fun getColoredText(stringResId: Int, color: Int): CharSequence {
val text = getString(stringResId)
val spannableString = SpannableString(text)
val colorSpan = ForegroundColorSpan(color)
spannableString.setSpan(colorSpan, 0, text.length, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE)
return spannableString
}
private fun showFloatingPermissionSettingDialog(
tvTitle: Int,
tvBody: Int,
tvSetting: Int,
tvCancel: Int
) {
val builder = AlertDialog.Builder(this)
builder.setTitle(getColoredText(tvTitle, Color.WHITE))
.setMessage(getColoredText(tvBody, Color.WHITE))
.setPositiveButton(getColoredText(tvSetting, Color.WHITE)) { dialog, which ->
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
startActivity(intent)
}
.setNegativeButton(getColoredText(tvCancel, Color.WHITE)) { dialog, which ->
recreate()
}
.setCancelable(false)
val dialog = builder.create()
dialog.window?.setBackgroundDrawableResource(R.drawable.custom_dialog)
dialog.show()
}
}
package com.bassbooster.soundeffects.equalizer.view.fragment
import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.bullhead.equalizer.EqualizerFragment
import com.bassbooster.equalizer.R
import com.bassbooster.equalizer.databinding.FragmentHomeBinding
class HomeFragment : Fragment() {
val ARG_AUDIO_SESSIOIN_ID = "audio_session_id"
private var sessionId: Int = 0
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!
var equalizerFragment: EqualizerFragment? = null
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
companion object {
fun newInstance(audioSessionId: Int): HomeFragment {
val args = Bundle()
args.putInt(HomeFragment().ARG_AUDIO_SESSIOIN_ID, audioSessionId)
val fragment = HomeFragment()
fragment.arguments = args
return fragment
}
}
@SuppressLint("UseRequireInsteadOfGet")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(requireContext())
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentHomeBinding.inflate(inflater, container, false)
val view = binding.root
setUpViewEqualizes()
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_equalizer_view","View màn Home, tab Equalizer","equalizer_view")
}
private fun setUpViewEqualizes() {
equalizerFragment = EqualizerFragment.newBuilder()
.setAccentColor(Color.parseColor("#4caf50"))
.setAudioSessionId(sessionId)
.build()
childFragmentManager.beginTransaction()
.replace(R.id.eqFrame, equalizerFragment!!)
.commit()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
if (equalizerFragment != null) {
equalizerFragment = null
}
}
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.view.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.bassbooster.equalizer.R
import com.bassbooster.soundeffects.equalizer.adapter.VisualizerAdapter
import com.bassbooster.soundeffects.equalizer.data.model.MediaInfo
import com.bassbooster.soundeffects.equalizer.data.model.VisualizerModel
import com.bassbooster.equalizer.databinding.FragmentPlayBinding
import com.bassbooster.soundeffects.equalizer.event.MessageEvent
import com.bassbooster.soundeffects.equalizer.event.PlayAdsEvent
import com.bassbooster.soundeffects.equalizer.utils.SharedPreferencesUtil
import com.bassbooster.soundeffects.equalizer.view.MainActivity
import com.bassbooster.soundeffects.equalizer.viewmodel.MainViewModel
import com.bullhead.equalizer.ButtonController
import com.bullhead.equalizer.EqualizerFragment
import com.bullhead.equalizer.EqualizerToAppListener
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
class PlayFragment : Fragment() {
private var visualizerAdapter: VisualizerAdapter? = null
private var sessionId: Int = 0
val ARG_AUDIO_SESSIOIN_ID = "audio_session_id"
private var _binding: FragmentPlayBinding? = null
private val binding get() = _binding!!
var isCheck = true
var mListType: ArrayList<String>? = null
private lateinit var sharedPreferencesUtil: SharedPreferencesUtil
var isPlayClick = true
var isPauseClick = true
var isSkipClick = true
var isNextClick = true
var musicAdsLoaded = false
// private var mFirebaseAnalytics: FirebaseAnalytics? = null
// private var nativeAdHelper: NativeAdHelper? = null
// val adCallback = object : AperoAdCallback() {
// override fun onAdClicked() {
// super.onAdClicked()
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Native_music_click","view ad tại màn Music","music_view")
// }
//
// override fun onAdImpression() {
// super.onAdImpression()
// }
// }
companion object {
fun newInstance(audioSessionId: Int): PlayFragment {
val args = Bundle()
args.putInt(PlayFragment().ARG_AUDIO_SESSIOIN_ID, audioSessionId)
val fragment = PlayFragment()
fragment.arguments = args
return fragment
}
var positionType = 0
}
@SuppressLint("UseRequireInsteadOfGet")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
// Khởi tạo Firebase Analytics
// mFirebaseAnalytics = FirebaseAnalytics.getInstance(requireContext())
}
private val mainViewModel: MainViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentPlayBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_music_view","View màn Home, Music","music_view")
binding.mNameType.text = EqualizerFragment.nameTypeEffects
sharedPreferencesUtil = SharedPreferencesUtil(requireActivity())
setOnEvents()
try {
loadNativeMusicAds()
} catch (ex: Exception){
Log.e("11111111", ex.toString())
}
}
private fun setOnEvents() {
binding.mOff.setOnClickListener {
// tracKingFirebaseAnalytics(
// mFirebaseAnalytics,
// "home_turn_on_click",
// "Bật adjust",
// "turn_on"
// )
val buttonController = ButtonController()
buttonController.setOnOffEqualizer(false)
binding.mOn.visibility= View.VISIBLE
binding.mOff.visibility= View.GONE
}
binding.mOn.setOnClickListener {
// tracKingFirebaseAnalytics(
// mFirebaseAnalytics,
// "home_turn_off_click",
// "Tắt adjust",
// "turn_off"
// )
Toast.makeText(requireContext(), "Adjusting the bands is disabled.", Toast.LENGTH_LONG)
.show()
val buttonController = ButtonController()
buttonController.setOnOffEqualizer(true)
binding.mOn.visibility= View.GONE
binding.mOff.visibility= View.VISIBLE
}
binding.RLSpinner.setOnClickListener {
if (!sharedPreferencesUtil.getBoolean("ControllerEffect")) {
Toast.makeText(requireActivity(), "Adjusting the bands is disabled.", Toast.LENGTH_LONG)
.show()
} else {
(context as EqualizerToAppListener).onOpenActivityEffects(
EqualizerFragment.mListType
)
}
}
// binding.ivloading.setOnClickListener { }
}
private fun init() {
val list: ArrayList<VisualizerModel> = ArrayList()
list.add(
VisualizerModel(
"0",
ContextCompat.getDrawable(requireActivity(), R.drawable.ic_wave)
)
)
list.add(
VisualizerModel(
"1",
ContextCompat.getDrawable(requireActivity(), R.drawable.ic_objects)
)
)
list.add(
VisualizerModel(
"2",
ContextCompat.getDrawable(requireActivity(), R.drawable.ic_visual)
)
)
list.add(
VisualizerModel(
"3",
ContextCompat.getDrawable(requireActivity(), R.drawable.ic_around_visual)
)
)
binding.mRecyclerChart.layoutManager =
LinearLayoutManager(requireActivity(), RecyclerView.HORIZONTAL, false)
visualizerAdapter = VisualizerAdapter(
requireActivity(),
list,
object : VisualizerAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_music_visualizer_click","User lựa chọn visualizer mình muốn",position.toString())
when (list[position].type) {
"0" -> {
positionType = position
setUpVisualizer()
}
"1" -> {
positionType = position
setUpLineVisualizer()
}
"2" -> {
positionType = position
setUpBarVisualizer()
}
"3" -> {
positionType = position
setUpCirVisualizer()
}
}
visualizerAdapter?.notifyDataSetChanged()
}
})
binding.mRecyclerChart.adapter = visualizerAdapter
}
override fun onResume() {
super.onResume()
try {
binding.mNameType.text = EqualizerFragment.nameTypeEffects
if (EqualizerFragment.bassBoost != null){
if (EqualizerFragment.bassBoost.enabled){
binding.mOff.visibility = View.GONE
binding.mOn.visibility = View.VISIBLE
}else{
binding.mOff.visibility = View.VISIBLE
binding.mOn.visibility = View.GONE
}
}
}catch (ex :Exception){
Log.d("nnn", "onResume Play: "+ex.toString())
}
if (!sharedPreferencesUtil.getBoolean("visualizer")) {
binding.mLineBarVisualizer.release()
binding.mCircleBarVisualizer.release()
binding.mVisualizerPlay.release()
binding.mRecyclerChart.visibility = View.GONE
} else {
binding.mRecyclerChart.visibility = View.VISIBLE
init()
try {
if (sessionId != -1) {
when (positionType) {
0 -> {
setUpVisualizer()
}
1 -> {
setUpLineVisualizer()
}
2 -> {
setUpBarVisualizer()
}
3 -> {
setUpCirVisualizer()
}
}
}
} catch (ex: Exception) {
//ignore
}
}
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
if (binding.mVisualizerPlay != null) binding.mVisualizerPlay.release()
// nativeAdHelper?.unregisterAdListener(adCallback)
}
private fun setUpVisualizer() {
setHideVisualizer()
binding.mVisualizerPlay.visibility = View.VISIBLE
// set custom color to the line.
// define custom number of bars you want in the visualizer between (10 - 256).
binding.mVisualizerPlay.setDensity(22F)
// set Gap
binding.mVisualizerPlay.setGap(2)
// Set your media player to the visualizer.
binding.mVisualizerPlay.setPlayer(sessionId)
}
private fun setUpLineVisualizer() {
setHideVisualizer()
binding.mLineBarVisualizer.visibility = View.VISIBLE
// set custom color to the line.
// define custom number of bars you want in the visualizer between (10 - 256).
binding.mLineBarVisualizer.setDensity(60F)
// Set your media player to the visualizer.
binding.mLineBarVisualizer.setPlayer(sessionId)
}
private fun setUpCirVisualizer() {
setHideVisualizer()
binding.mCircleBarVisualizer.visibility = View.VISIBLE
// Set your media player to the visualizer.
binding.mCircleBarVisualizer.setPlayer(sessionId)
}
private fun setUpBarVisualizer() {
setHideVisualizer()
binding.mBarVisualizer.visibility = View.VISIBLE
// set custom color to the line.
binding.mBarVisualizer.setColor(
ContextCompat.getColor(
requireActivity(),
R.color.center
)
)
// Set your media player to the visualizer.
binding.mBarVisualizer.setPlayer(sessionId)
}
private fun setHideVisualizer() {
binding.mLineBarVisualizer.visibility = View.GONE
binding.mCircleBarVisualizer.visibility = View.GONE
binding.mVisualizerPlay.visibility = View.GONE
binding.mBarVisualizer.visibility = View.GONE
}
override fun onStart() {
super.onStart()
val nameObserver = Observer<MediaInfo> { newName ->
if (newName == null) return@Observer
binding.mTxtName.text = newName.title
binding.mTxtSinger.text = newName.description
}
mainViewModel.updateInformation.observe(this, nameObserver)
val stateObserver = Observer<MainViewModel.State> { newName ->
if (newName == null) return@Observer
Log.d("qqq", "stateObserver: "+newName)
if (newName == MainViewModel.State.PAUSE) {
binding.ivPause.visibility = View.VISIBLE
binding.ivPlay.visibility = View.GONE
} else {
binding.ivPause.visibility = View.GONE
binding.ivPlay.visibility = View.VISIBLE
}
}
mainViewModel.updateState.observe(this, stateObserver)
binding.ivPlay.setOnClickListener {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_music_play_click","User click Play","play_click")
if (isPlayClick){
isPlayClick = false
(activity as MainActivity).play()
Handler().postDelayed({
isPlayClick = true
},1000)
}
}
binding.ivPause.setOnClickListener {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_music_pause_click","User click Pause","play_click")
if (isPauseClick){
isPauseClick = false
(activity as MainActivity).pause()
Handler().postDelayed({
isPauseClick = true
},1200)
}
}
binding.ivSkip.setOnClickListener {
if (isSkipClick){
isSkipClick = false
if (activity is MainActivity) {
(activity as MainActivity).skipToPrevious()
}
Handler().postDelayed({
isSkipClick = true
},1200)
}
}
binding.ivNext.setOnClickListener {
if (isNextClick){
isNextClick = false
if (activity is MainActivity) {
(activity as MainActivity).skipToNext()
}
Handler().postDelayed({
isNextClick = true
},1000)
}
}
}
@Subscribe
fun onMessageEvent(event: MessageEvent) {
// Xử lý sự kiện tại đây
val message = event.message
binding.mNameType.text = message
}
@Subscribe
fun onMessageEvent(event: PlayAdsEvent) {
// Xử lý sự kiện tại đây
// if (event.status){
// if (nativeAdHelper!=null){
// nativeAdHelper?.requestAds(NativeAdParam.Request.create())
// }
// }
}
private fun loadNativeMusicAds() {
// if (FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.Native_music) && AppUtils.haveNetworkConnection(activity)) {
// tracKingFirebaseAnalytics(mFirebaseAnalytics,"Native_music_view","view ad tại màn Music","music_view")
// nativeAdHelper = initNativeAd()
// nativeAdHelper?.setNativeContentView(binding.nativeMusic)
// nativeAdHelper?.setShimmerLayoutView(ShimmerFrameLayout(requireContext()))
// nativeAdHelper?.registerAdListener(adCallback)
// binding.nativeMusic.visibility = View.VISIBLE
// if (nativeAdHelper?.nativeAd != null) {
// nativeAdHelper?.requestAds(NativeAdParam.Ready(nativeAdHelper?.nativeAd!!))
// }else{
// nativeAdHelper?.requestAds(NativeAdParam.Request.create())
// }
// } else {
//
// }
}
// private fun initNativeAd(): NativeAdHelper {
// val config = NativeAdConfig(
// BuildConfig.Native_music,
// true,
// FirebaseRemoteConfig.getInstance()
// .getBoolean(Constants.allow_reload_native_music),
// // with native additional layout native ad
// R.layout.custom_native_admod_mediums
// )
// return NativeAdHelper(requireActivity(), requireActivity(), config)
// }
}
\ No newline at end of file
package com.bassbooster.soundeffects.equalizer.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.bassbooster.soundeffects.equalizer.data.repository.MainRepository
import com.bassbooster.soundeffects.equalizer.data.model.MediaInfo
import com.bassbooster.soundeffects.equalizer.data.model.User
import com.bassbooster.soundeffects.equalizer.utils.MediaAppDetails
import com.bassbooster.soundeffects.equalizer.utils.Resource
import io.reactivex.rxjava3.disposables.CompositeDisposable
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
class MainViewModel(private val mainRepository: MainRepository) : ViewModel() {
enum class State {
PLAY,
PAUSE
}
private val users = MutableLiveData<Resource<List<User>>>()
private val compositeDisposable = CompositeDisposable()
val updateInformation = MutableLiveData<MediaInfo>()
val updateState = MutableLiveData<State>(State.PLAY)
val updateApp = MutableLiveData<List<MediaAppDetails>>()
private val _mediaAppDetailsList = MutableLiveData<List<MediaAppDetails>>()
val mediaAppDetailsList: LiveData<List<MediaAppDetails>> = _mediaAppDetailsList
fun setMediaAppDetailsList(mediaAppDetailsList: List<MediaAppDetails>) {
_mediaAppDetailsList.value = mediaAppDetailsList
}
init {
fetchUsers()
}
private fun fetchUsers() {
users.postValue(Resource.loading(null))
mainRepository.getUsers().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe {
users.postValue(Resource.success(it))
}
// compositeDisposable.add(
// mainRepository.getUsers()
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe({ userList ->
// users.postValue(Resource.success(userList))
// }, { throwable ->
// users.postValue(Resource.error("Something Went Wrong", null))
// })
// )
}
override fun onCleared() {
super.onCleared()
compositeDisposable.dispose()
}
fun getUsers(): LiveData<Resource<List<User>>> {
return users
}
fun updateInfo(title: String, description: String){
val newValue = MediaInfo(title,description)
updateInformation.postValue(newValue)
}
fun updateState(isPlay: Boolean){
if (isPlay){
updateState.postValue(State.PLAY)
}else{
updateState.postValue(State.PAUSE)
}
}
fun updateApp(app: List<MediaAppDetails>){
updateApp.postValue(app)
}
}
package com.bassbooster.soundeffects.equalizer.viewmodel
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.bassbooster.soundeffects.equalizer.database.AppDatabase
import com.bassbooster.soundeffects.equalizer.database.EffectsData
import com.bassbooster.soundeffects.equalizer.database.EffectsRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class MyViewModel(application: Application) : AndroidViewModel(application) {
private val repository: EffectsRepository
val allData: LiveData<List<EffectsData>>
private val _text = MutableLiveData<String>()
val text: LiveData<String> = _text
// Phương thức để cập nhật dữ liệu
fun updateText(newText: String?) {
_text.value = newText
}
init {
val myDao = AppDatabase.getDatabase(application).mEffectsDAO()
repository = EffectsRepository(myDao)
allData = repository.getAllData()
}
fun insertData(myEntity: EffectsData) {
viewModelScope.launch(Dispatchers.IO) {
repository.insert(myEntity)
}
}
fun deleteData(myEntity: EffectsData) {
viewModelScope.launch(Dispatchers.IO) {
repository.delete(myEntity)
}
}
}
<?xml version="1.0" encoding="utf-8"?><!--
Background for widgets to make the rounded corners based on the
appWidgetRadius attribute value
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="?attr/appWidgetRadius" />
<solid android:color="?android:attr/colorBackground" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?><!--
Background for views inside widgets to make the rounded corners based on the
appWidgetInnerRadius attribute value
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="?attr/appWidgetInnerRadius" />
<solid android:color="?android:attr/colorAccent" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#434343" />
<stroke android:color="#E83565" android:width="1dp" />
<corners android:radius="@dimen/_8sdp" />
</shape>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#ffffff"
android:fillAlpha="0.15"/>
<path
android:pathData="M18,9.667V13"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#08E0FF"
android:strokeLineCap="round"/>
<path
android:pathData="M18.625,10.292C18.625,9.946 18.345,9.667 18,9.667C17.655,9.667 17.375,9.946 17.375,10.292V13.625C17.375,13.97 17.655,14.25 18,14.25C18.345,14.25 18.625,13.97 18.625,13.625V10.292Z"
android:fillColor="#08E0FF"/>
<path
android:pathData="M15.327,12.289C15.644,12.155 15.793,11.788 15.659,11.47C15.525,11.152 15.158,11.003 14.84,11.138C11.924,12.37 9.875,15.257 9.875,18.625C9.875,23.112 13.513,26.75 18,26.75C22.487,26.75 26.125,23.112 26.125,18.625C26.125,15.257 24.076,12.37 21.16,11.138C20.842,11.003 20.475,11.152 20.341,11.47C20.207,11.788 20.355,12.155 20.673,12.289C23.143,13.333 24.875,15.777 24.875,18.625C24.875,22.422 21.797,25.5 18,25.5C14.203,25.5 11.125,22.422 11.125,18.625C11.125,15.777 12.856,13.333 15.327,12.289Z"
android:fillColor="#08E0FF"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000"
android:strokeColor="#9F9F9F"/>
</vector>
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners android:radius="12dp" />
<stroke
android:width="1dp"
android:color="#626262" />
<stroke
android:width="10dp"
android:color="#626262" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="40dp" />
<stroke
android:width="@dimen/_8sdp"
android:color="#424048" />
<solid android:color="#E83565"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/_4sdp"/>
<stroke android:color="#E83565"
android:width="@dimen/_1sdp"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/_10sdp" />
<solid android:color="@color/color_neutral" />
<stroke android:color="@color/color_neutral" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/_10sdp" />
<solid android:color="@color/color_neutral" />
<stroke android:color="@color/color_neutral" />
</shape>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="28dp"
android:height="28dp"
android:viewportWidth="28"
android:viewportHeight="28">
<path
android:pathData="M14,0L14,0A14,14 0,0 1,28 14L28,14A14,14 0,0 1,14 28L14,28A14,14 0,0 1,0 14L0,14A14,14 0,0 1,14 0z"
android:fillColor="#ffffff"
android:fillAlpha="0.75"/>
<path
android:pathData="M6.5,9.322C6.5,8.918 6.788,8.591 7.143,8.591L9.363,8.59C9.804,8.578 10.193,8.259 10.343,7.787C10.347,7.774 10.352,7.759 10.368,7.703L10.464,7.377C10.522,7.177 10.573,7.003 10.645,6.847C10.927,6.231 11.448,5.804 12.051,5.694C12.204,5.666 12.365,5.667 12.551,5.667H15.449C15.635,5.667 15.796,5.666 15.949,5.694C16.552,5.804 17.073,6.231 17.355,6.847C17.427,7.003 17.478,7.177 17.536,7.377L17.632,7.703C17.648,7.759 17.653,7.774 17.657,7.787C17.807,8.259 18.273,8.578 18.714,8.591H20.857C21.212,8.591 21.5,8.918 21.5,9.322C21.5,9.725 21.212,10.053 20.857,10.053H7.143C6.788,10.053 6.5,9.725 6.5,9.322Z"
android:fillColor="#EB1C1C"/>
<path
android:pathData="M13.663,22.333H14.337C16.656,22.333 17.815,22.333 18.569,21.595C19.323,20.857 19.4,19.646 19.555,17.224L19.777,13.734C19.861,12.42 19.902,11.763 19.524,11.346C19.146,10.93 18.507,10.93 17.23,10.93H10.77C9.493,10.93 8.854,10.93 8.476,11.346C8.098,11.763 8.14,12.42 8.223,13.734L8.445,17.224C8.6,19.646 8.677,20.857 9.431,21.595C10.185,22.333 11.344,22.333 13.663,22.333ZM12.539,14.157C12.504,13.796 12.198,13.532 11.854,13.568C11.511,13.604 11.26,13.927 11.295,14.288L11.711,18.674C11.746,19.036 12.052,19.299 12.396,19.263C12.739,19.227 12.99,18.905 12.955,18.543L12.539,14.157ZM16.146,13.568C16.489,13.604 16.74,13.927 16.705,14.288L16.289,18.674C16.254,19.036 15.948,19.299 15.604,19.263C15.261,19.227 15.01,18.905 15.045,18.543L15.461,14.157C15.496,13.796 15.802,13.532 16.146,13.568Z"
android:fillColor="#EB1C1C"
android:fillType="evenOdd"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#E83565" />
<corners android:radius="20dp" />
<padding
android:bottom="@dimen/_4sdp"
android:left="@dimen/_4sdp"
android:right="@dimen/_4sdp"
android:top="@dimen/_4sdp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#C1C1C1" />
<corners android:radius="20dp" />
<padding
android:bottom="@dimen/_4sdp"
android:left="@dimen/_4sdp"
android:right="@dimen/_4sdp"
android:top="@dimen/_4sdp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="ring"
android:thicknessRatio="16"
android:useLevel="false">
<solid android:color="#B8B8B8"/>
</shape>
</item>
<item>
<shape
android:shape="ring"
android:thicknessRatio="16"
android:useLevel="true">
<solid android:color="#ffffff"/>
</shape>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners android:radius="12dp" />
<gradient
android:startColor="#E83565"
android:centerColor="#8644F6"
android:endColor="#08E0FF"
/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners android:radius="@dimen/_16sdp" />
<gradient
android:startColor="#E83565"
android:centerColor="#8644F6"
android:endColor="#08E0FF"
/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/_10sdp" />
<solid android:color="@color/color_bg" />
<stroke android:color="@color/color_bg" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/_5sdp" />
<solid android:color="@color/color_neutral"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/_12sdp" />
<stroke
android:width="@dimen/_1sdp"
android:color="@color/color_circlePaint" />
<solid android:color="#37363C"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<corners android:radius="20dp" />
<solid android:color="#626262" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape
android:shape="rectangle" >
<size android:height="5dp"/>
<corners
android:radius="12dp" />
<gradient
android:startColor="#E83565"
android:endColor="#08E0FF"
/>
</shape>
</clip>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false">
<shape android:shape="oval">
<solid android:color="#ffffff" />
<size android:width="@dimen/_16sdp" android:height="@dimen/_16sdp" />
</shape>
</item>
<item android:state_checked="true">
<shape android:shape="oval">
<solid android:color="#ffffff" />
<size android:width="@dimen/_16sdp" android:height="@dimen/_16sdp" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false">
<shape android:shape="rectangle">
<corners android:radius="@dimen/_100sdp" />
<solid android:color="#626262" />
<size android:height="20dp" />
</shape>
</item>
<item android:state_checked="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/_100sdp" />
<solid android:color="#E83565" />
<size android:height="20dp" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#434343" />
<corners android:radius="@dimen/_24sdp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="8dp" />
<solid android:color="@color/color_neutral" />
<stroke android:color="@color/color_neutral" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="8dp" />
<solid android:color="@color/white" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:bottomLeftRadius="16dp"
android:bottomRightRadius="16dp"
android:topLeftRadius="16dp"
android:topRightRadius="16dp" />
<solid android:color="#313036" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/color_brand" />
<corners android:radius="30dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#37363C" />
<corners android:radius="@dimen/_12sdp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#E83565" />
<corners android:radius="20dp" />
<padding
android:bottom="@dimen/_4sdp"
android:left="@dimen/_4sdp"
android:right="@dimen/_4sdp"
android:top="@dimen/_4sdp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#434343" />
<corners android:radius="30dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#434343" />
<corners android:radius="@dimen/_8sdp" />
</shape>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
<path
android:pathData="M2.954,5.675C3.133,5.465 3.449,5.441 3.659,5.62L8,9.341L12.341,5.62C12.551,5.441 12.867,5.465 13.046,5.675C13.226,5.884 13.202,6.2 12.992,6.38L8.325,10.38C8.138,10.54 7.862,10.54 7.675,10.38L3.008,6.38C2.798,6.2 2.774,5.884 2.954,5.675Z"
android:fillColor="#E1E1E1"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="38dp"
android:height="32dp"
android:viewportWidth="38"
android:viewportHeight="32">
<path
android:pathData="M15.62,0.516L36.305,13.016C36.823,13.329 37.251,13.768 37.548,14.29C37.844,14.813 38,15.402 38,16.001C38,16.6 37.844,17.19 37.548,17.712C37.251,18.235 36.823,18.674 36.305,18.987L15.62,31.487C15.083,31.811 14.467,31.988 13.837,31.999C13.207,32.011 12.585,31.857 12.035,31.553C11.486,31.249 11.028,30.806 10.71,30.269C10.392,29.733 10.224,29.122 10.224,28.501V17.19C10.34,17.136 10.467,17.108 10.596,17.11C10.717,17.11 10.836,17.133 10.948,17.179C11.06,17.225 11.161,17.292 11.246,17.377C11.332,17.461 11.399,17.562 11.445,17.672C11.491,17.782 11.514,17.901 11.514,18.02V24.203C11.508,24.454 11.597,24.697 11.762,24.887C11.927,25.077 12.158,25.2 12.409,25.233C12.547,25.245 12.686,25.23 12.818,25.187C12.949,25.143 13.07,25.074 13.172,24.982C13.275,24.89 13.357,24.778 13.413,24.653C13.469,24.528 13.498,24.393 13.498,24.256V18.002C13.489,17.878 13.506,17.753 13.548,17.635C13.591,17.517 13.657,17.41 13.743,17.318C13.83,17.227 13.934,17.154 14.05,17.104C14.166,17.055 14.291,17.029 14.418,17.029C14.544,17.029 14.67,17.055 14.786,17.104C14.902,17.154 15.006,17.227 15.092,17.318C15.179,17.41 15.245,17.517 15.288,17.635C15.33,17.753 15.347,17.878 15.338,18.002V22.158C15.333,22.409 15.421,22.653 15.586,22.844C15.751,23.034 15.982,23.158 16.234,23.192C16.372,23.204 16.511,23.188 16.642,23.144C16.773,23.101 16.893,23.03 16.995,22.938C17.097,22.846 17.179,22.733 17.234,22.608C17.29,22.483 17.318,22.348 17.317,22.211V18.002C17.317,17.761 17.415,17.529 17.588,17.359C17.761,17.188 17.995,17.092 18.24,17.092C18.485,17.092 18.719,17.188 18.892,17.359C19.065,17.529 19.163,17.761 19.163,18.002V20.533C19.158,20.783 19.247,21.026 19.412,21.216C19.577,21.405 19.807,21.529 20.058,21.562C20.196,21.574 20.335,21.558 20.466,21.514C20.597,21.471 20.718,21.4 20.82,21.308C20.922,21.216 21.003,21.104 21.059,20.978C21.114,20.853 21.142,20.718 21.142,20.582V11.306C21.142,11.17 21.114,11.035 21.059,10.91C21.003,10.784 20.922,10.672 20.82,10.58C20.718,10.487 20.597,10.417 20.466,10.373C20.335,10.33 20.196,10.313 20.058,10.326C19.807,10.359 19.577,10.483 19.412,10.672C19.247,10.862 19.158,11.105 19.163,11.355V14.623C19.163,14.865 19.065,15.096 18.892,15.267C18.719,15.437 18.485,15.533 18.24,15.533C17.995,15.533 17.761,15.437 17.588,15.267C17.415,15.096 17.317,14.865 17.317,14.623V9.765C17.324,9.514 17.236,9.269 17.071,9.078C16.906,8.888 16.674,8.764 16.422,8.731C16.284,8.719 16.145,8.735 16.013,8.779C15.882,8.823 15.761,8.893 15.659,8.985C15.556,9.077 15.475,9.19 15.419,9.315C15.363,9.44 15.334,9.575 15.334,9.712V14.619C15.342,14.743 15.325,14.868 15.283,14.986C15.241,15.104 15.174,15.212 15.088,15.303C15.002,15.394 14.897,15.467 14.781,15.517C14.665,15.566 14.54,15.592 14.413,15.592C14.287,15.592 14.162,15.566 14.046,15.517C13.929,15.467 13.825,15.394 13.739,15.303C13.652,15.212 13.586,15.104 13.544,14.986C13.502,14.868 13.484,14.743 13.493,14.619V11.527C13.498,11.277 13.409,11.034 13.244,10.844C13.079,10.655 12.849,10.531 12.597,10.498C12.459,10.486 12.32,10.502 12.189,10.546C12.057,10.589 11.937,10.66 11.834,10.752C11.732,10.844 11.65,10.956 11.594,11.081C11.538,11.207 11.509,11.342 11.509,11.479V14.623C11.516,14.776 11.482,14.929 11.411,15.065C11.34,15.201 11.234,15.317 11.104,15.401C10.974,15.484 10.824,15.533 10.669,15.542C10.514,15.552 10.359,15.521 10.219,15.454V3.502C10.219,2.88 10.387,2.268 10.705,1.731C11.024,1.194 11.482,0.751 12.032,0.447C12.582,0.142 13.205,-0.012 13.836,0.001C14.467,0.013 15.083,0.191 15.62,0.516ZM9.669,7.883V14.619C9.666,14.793 9.715,14.965 9.809,15.113C9.902,15.261 10.037,15.379 10.197,15.454V17.172C10.032,17.24 9.891,17.355 9.792,17.503C9.694,17.652 9.643,17.825 9.646,18.002V20.847C9.646,20.983 9.617,21.119 9.561,21.244C9.505,21.369 9.424,21.481 9.321,21.573C9.219,21.666 9.098,21.736 8.967,21.779C8.835,21.823 8.696,21.839 8.558,21.827C8.307,21.794 8.077,21.67 7.912,21.481C7.747,21.291 7.658,21.048 7.662,20.798V18.002C7.671,17.878 7.654,17.753 7.612,17.635C7.569,17.517 7.503,17.41 7.417,17.318C7.331,17.227 7.226,17.154 7.11,17.104C6.994,17.055 6.869,17.029 6.742,17.029C6.616,17.029 6.49,17.055 6.374,17.104C6.258,17.154 6.154,17.227 6.068,17.318C5.981,17.41 5.915,17.517 5.873,17.635C5.83,17.753 5.813,17.878 5.822,18.002V23.117C5.823,23.254 5.794,23.389 5.738,23.515C5.683,23.64 5.601,23.753 5.498,23.845C5.396,23.938 5.275,24.008 5.143,24.051C5.011,24.095 4.872,24.11 4.734,24.097C4.482,24.064 4.252,23.941 4.087,23.751C3.922,23.561 3.834,23.318 3.838,23.068V18.002C3.838,17.761 3.741,17.529 3.568,17.359C3.395,17.188 3.16,17.092 2.915,17.092C2.671,17.092 2.436,17.188 2.263,17.359C2.09,17.529 1.993,17.761 1.993,18.002V19.826C1.994,19.964 1.965,20.101 1.909,20.227C1.852,20.353 1.77,20.466 1.666,20.558C1.563,20.651 1.441,20.721 1.308,20.764C1.175,20.806 1.035,20.821 0.896,20.807C0.645,20.773 0.415,20.65 0.25,20.46C0.084,20.271 -0.004,20.028 0,19.778V12.675C-0,12.535 0.029,12.397 0.088,12.269C0.146,12.141 0.231,12.027 0.337,11.934C0.444,11.842 0.569,11.772 0.705,11.731C0.84,11.69 0.983,11.677 1.124,11.695C1.376,11.727 1.606,11.851 1.772,12.04C1.937,12.23 2.025,12.474 2.02,12.724V14.619C2.02,14.86 2.117,15.092 2.29,15.262C2.463,15.433 2.698,15.529 2.942,15.529C3.187,15.529 3.422,15.433 3.595,15.262C3.768,15.092 3.865,14.86 3.865,14.619V10.714C3.865,10.578 3.894,10.444 3.95,10.319C4.005,10.194 4.087,10.083 4.189,9.991C4.291,9.899 4.411,9.829 4.542,9.786C4.673,9.742 4.811,9.726 4.949,9.738C5.2,9.771 5.431,9.894 5.596,10.084C5.761,10.274 5.85,10.517 5.844,10.767V14.619C5.835,14.743 5.853,14.868 5.895,14.986C5.937,15.104 6.004,15.212 6.09,15.303C6.176,15.394 6.281,15.467 6.397,15.517C6.513,15.566 6.638,15.592 6.765,15.592C6.891,15.592 7.016,15.566 7.132,15.517C7.248,15.467 7.353,15.394 7.439,15.303C7.526,15.212 7.592,15.104 7.634,14.986C7.676,14.868 7.694,14.743 7.685,14.619V7.83C7.686,7.694 7.715,7.559 7.771,7.434C7.827,7.309 7.909,7.197 8.011,7.105C8.114,7.013 8.234,6.943 8.365,6.899C8.496,6.855 8.635,6.838 8.773,6.85C9.025,6.883 9.256,7.007 9.421,7.198C9.586,7.389 9.674,7.633 9.669,7.883Z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startX="39.633"
android:startY="15.895"
android:endX="0"
android:endY="15.897"
android:type="linear">
<item android:offset="0" android:color="#FF8644F7"/>
<item android:offset="1" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M15.488,4.431C15.803,4.7 15.839,5.174 15.569,5.488L9.988,12L15.569,18.512C15.839,18.826 15.803,19.3 15.488,19.569C15.174,19.839 14.7,19.803 14.431,19.488L8.431,12.488C8.19,12.207 8.19,11.793 8.431,11.512L14.431,4.512C14.7,4.197 15.174,4.161 15.488,4.431Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M10.53,5.47C10.823,5.763 10.823,6.237 10.53,6.53L5.811,11.25H20C20.414,11.25 20.75,11.586 20.75,12C20.75,12.414 20.414,12.75 20,12.75H5.811L10.53,17.47C10.823,17.763 10.823,18.237 10.53,18.53C10.237,18.823 9.763,18.823 9.47,18.53L3.47,12.53C3.177,12.237 3.177,11.763 3.47,11.47L9.47,5.47C9.763,5.177 10.237,5.177 10.53,5.47Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0L28,0A8,8 0,0 1,36 8L36,28A8,8 0,0 1,28 36L8,36A8,8 0,0 1,0 28L0,8A8,8 0,0 1,8 0z"
android:fillColor="#222222"/>
<path
android:pathData="M15.953,23H15.896H15.896C14.015,23 12.526,23 11.36,22.839C10.16,22.673 9.189,22.323 8.424,21.535C7.658,20.748 7.318,19.749 7.157,18.515C7,17.316 7,15.783 7,13.849V13.849V13.79C7,13.354 7.344,13 7.767,13C8.191,13 8.535,13.354 8.535,13.79C8.535,15.797 8.537,17.223 8.678,18.304C8.816,19.363 9.076,19.974 9.509,20.419C9.942,20.865 10.535,21.132 11.565,21.274C12.616,21.419 14.002,21.421 15.953,21.421C16.377,21.421 16.721,21.774 16.721,22.211C16.721,22.646 16.377,23 15.953,23ZM20.046,21.421C21.998,21.421 23.384,21.419 24.435,21.274C25.465,21.132 26.058,20.865 26.491,20.419C26.924,19.974 27.184,19.363 27.322,18.304C27.463,17.223 27.465,15.797 27.465,13.79C27.465,13.354 27.809,13 28.233,13C28.656,13 29,13.354 29,13.79V13.849V13.849C29,15.783 29,17.316 28.843,18.515C28.682,19.749 28.342,20.748 27.576,21.535C26.811,22.323 25.84,22.673 24.64,22.839C23.474,23 21.985,23 20.104,23H20.104H20.046C19.623,23 19.279,22.646 19.279,22.211C19.279,21.774 19.623,21.421 20.046,21.421Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="19dp"
android:height="19dp"
android:viewportWidth="19"
android:viewportHeight="19">
<path
android:pathData="M10.019,1.766C9.908,1.756 9.796,1.756 9.5,1.756C7.509,1.756 6.079,1.757 4.99,1.903C3.92,2.047 3.275,2.321 2.798,2.798C2.321,3.275 2.047,3.92 1.903,4.99C1.757,6.079 1.756,7.509 1.756,9.5C1.756,11.491 1.757,12.921 1.903,14.01C2.047,15.08 2.321,15.725 2.798,16.202C3.228,16.632 3.795,16.897 4.686,17.05L4.686,16.991C4.686,16.239 4.686,15.612 4.753,15.114C4.824,14.588 4.979,14.114 5.36,13.733C5.742,13.351 6.216,13.196 6.742,13.125C7.24,13.058 7.867,13.058 8.619,13.058H10.381C11.133,13.058 11.76,13.058 12.258,13.125C12.784,13.196 13.258,13.351 13.64,13.733C14.021,14.114 14.176,14.588 14.247,15.114C14.314,15.612 14.314,16.239 14.314,16.991L14.314,17.05C15.205,16.897 15.772,16.632 16.202,16.202C16.679,15.725 16.953,15.08 17.097,14.01C17.243,12.921 17.244,11.491 17.244,9.5C17.244,9.204 17.244,9.092 17.234,8.98C17.186,8.431 16.962,7.89 16.607,7.468C16.535,7.382 16.454,7.3 16.24,7.086L11.914,2.76C11.7,2.546 11.618,2.465 11.532,2.393C11.11,2.038 10.569,1.814 10.019,1.766ZM13.058,17.186V17.035C13.058,16.228 13.057,15.686 13.002,15.281C12.95,14.895 12.861,14.73 12.752,14.62C12.642,14.511 12.477,14.422 12.091,14.37C11.686,14.315 11.144,14.314 10.337,14.314H8.663C7.856,14.314 7.314,14.315 6.909,14.37C6.523,14.422 6.357,14.511 6.248,14.62C6.139,14.73 6.05,14.895 5.998,15.281C5.943,15.686 5.942,16.228 5.942,17.035V17.186C6.884,17.243 8.042,17.244 9.5,17.244C10.958,17.244 12.116,17.243 13.058,17.186ZM9.526,0.5C9.787,0.5 9.956,0.5 10.129,0.515C10.935,0.585 11.72,0.911 12.34,1.431C12.473,1.542 12.594,1.664 12.783,1.853L12.802,1.872L17.147,6.217C17.336,6.406 17.458,6.527 17.569,6.66C18.089,7.28 18.415,8.065 18.485,8.871C18.5,9.044 18.5,9.213 18.5,9.474V9.548C18.5,11.481 18.5,12.995 18.341,14.177C18.178,15.386 17.839,16.341 17.09,17.09C16.341,17.839 15.386,18.178 14.177,18.341C12.995,18.5 11.481,18.5 9.548,18.5H9.452C7.519,18.5 6.005,18.5 4.823,18.341C3.614,18.178 2.659,17.839 1.91,17.09C1.161,16.341 0.821,15.386 0.659,14.177C0.5,12.995 0.5,11.481 0.5,9.548V9.452C0.5,7.519 0.5,6.005 0.659,4.823C0.821,3.614 1.161,2.659 1.91,1.91C2.659,1.161 3.614,0.821 4.823,0.659C6.005,0.5 7.519,0.5 9.452,0.5L9.526,0.5ZM4.686,6.151C4.686,5.804 4.967,5.523 5.314,5.523H10.337C10.684,5.523 10.965,5.804 10.965,6.151C10.965,6.498 10.684,6.779 10.337,6.779H5.314C4.967,6.779 4.686,6.498 4.686,6.151Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="21dp"
android:height="20dp"
android:viewportWidth="21"
android:viewportHeight="20">
<path
android:pathData="M20.25,10C20.25,15.523 15.773,20 10.25,20C4.727,20 0.25,15.523 0.25,10C0.25,4.477 4.727,0 10.25,0C15.773,0 20.25,4.477 20.25,10ZM14.28,6.97C14.573,7.263 14.573,7.737 14.28,8.03L9.28,13.03C8.987,13.323 8.513,13.323 8.22,13.03L6.22,11.03C5.927,10.737 5.927,10.263 6.22,9.97C6.513,9.677 6.987,9.677 7.28,9.97L8.75,11.439L10.985,9.205L13.22,6.97C13.513,6.677 13.987,6.677 14.28,6.97Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M22,12C22,17.523 17.523,22 12,22C6.477,22 2,17.523 2,12C2,6.477 6.477,2 12,2C17.523,2 22,6.477 22,12ZM16.03,8.97C16.323,9.263 16.323,9.737 16.03,10.03L11.03,15.03C10.737,15.323 10.263,15.323 9.97,15.03L7.97,13.03C7.677,12.737 7.677,12.263 7.97,11.97C8.263,11.677 8.737,11.677 9.03,11.97L10.5,13.439L12.735,11.205L14.97,8.97C15.263,8.677 15.737,8.677 16.03,8.97Z"
android:fillColor="#626262"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<group>
<clip-path
android:pathData="M0,0h24v24h-24z"/>
<path
android:pathData="M9.55,15.15L18.025,6.675C18.225,6.475 18.462,6.375 18.737,6.375C19.013,6.375 19.25,6.475 19.45,6.675C19.65,6.875 19.75,7.113 19.75,7.387C19.75,7.662 19.65,7.9 19.45,8.1L10.25,17.3C10.05,17.5 9.817,17.6 9.55,17.6C9.283,17.6 9.05,17.5 8.85,17.3L4.55,13C4.35,12.8 4.254,12.563 4.263,12.288C4.271,12.012 4.375,11.775 4.575,11.575C4.775,11.375 5.013,11.275 5.288,11.275C5.563,11.275 5.8,11.375 6,11.575L9.55,15.15Z"
android:fillColor="#E83565"/>
</group>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M22,12C22,17.523 17.523,22 12,22C6.477,22 2,17.523 2,12C2,6.477 6.477,2 12,2C17.523,2 22,6.477 22,12ZM16.03,8.97C16.323,9.263 16.323,9.737 16.03,10.03L11.03,15.03C10.737,15.323 10.263,15.323 9.97,15.03L7.97,13.03C7.677,12.737 7.677,12.263 7.97,11.97C8.263,11.677 8.737,11.677 9.03,11.97L10.5,13.439L12.735,11.205L14.97,8.97C15.263,8.677 15.737,8.677 16.03,8.97Z"
android:fillColor="#19E73A"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M20,10C20,15.523 15.523,20 10,20C4.477,20 0,15.523 0,10C0,4.477 4.477,0 10,0C15.523,0 20,4.477 20,10ZM6.97,6.97C7.263,6.677 7.737,6.677 8.03,6.97L10,8.939L11.97,6.97C12.262,6.677 12.737,6.677 13.03,6.97C13.323,7.263 13.323,7.737 13.03,8.03L11.061,10L13.03,11.97C13.323,12.262 13.323,12.737 13.03,13.03C12.737,13.323 12.262,13.323 11.97,13.03L10,11.061L8.03,13.03C7.737,13.323 7.263,13.323 6.97,13.03C6.677,12.737 6.677,12.262 6.97,11.97L8.939,10L6.97,8.03C6.677,7.737 6.677,7.263 6.97,6.97Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M10.03,8.97C9.737,8.677 9.263,8.677 8.97,8.97C8.677,9.263 8.677,9.737 8.97,10.03L10.939,12L8.97,13.97C8.677,14.262 8.677,14.737 8.97,15.03C9.263,15.323 9.737,15.323 10.03,15.03L12,13.061L13.97,15.03C14.262,15.323 14.737,15.323 15.03,15.03C15.323,14.737 15.323,14.262 15.03,13.97L13.061,12L15.03,10.03C15.323,9.737 15.323,9.263 15.03,8.97C14.737,8.677 14.262,8.677 13.97,8.97L12,10.939L10.03,8.97Z"
android:fillColor="#9F9F9F"/>
<path
android:pathData="M12,1.25C6.063,1.25 1.25,6.063 1.25,12C1.25,17.937 6.063,22.75 12,22.75C17.937,22.75 22.75,17.937 22.75,12C22.75,6.063 17.937,1.25 12,1.25ZM2.75,12C2.75,6.891 6.891,2.75 12,2.75C17.109,2.75 21.25,6.891 21.25,12C21.25,17.109 17.109,21.25 12,21.25C6.891,21.25 2.75,17.109 2.75,12Z"
android:fillColor="#9F9F9F"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M9.12,1.042H10.88C12.412,1.042 13.625,1.042 14.574,1.169C15.551,1.301 16.342,1.577 16.966,2.201C17.21,2.445 17.21,2.841 16.966,3.085C16.722,3.329 16.326,3.329 16.082,3.085C15.729,2.732 15.246,2.521 14.408,2.408C13.551,2.293 12.422,2.292 10.833,2.292H9.167C7.578,2.292 6.449,2.293 5.592,2.408C4.754,2.521 4.271,2.732 3.918,3.085C3.566,3.438 3.354,3.921 3.241,4.759C3.126,5.615 3.125,6.744 3.125,8.333V11.667C3.125,13.256 3.126,14.384 3.241,15.241C3.354,16.079 3.566,16.562 3.918,16.915C4.271,17.268 4.754,17.479 5.592,17.592C6.449,17.707 7.578,17.708 9.167,17.708H10.833C12.422,17.708 13.551,17.707 14.408,17.592C15.246,17.479 15.729,17.268 16.082,16.915C16.662,16.335 16.837,15.434 16.868,13.324C16.873,12.979 17.157,12.703 17.502,12.708C17.847,12.713 18.123,12.997 18.118,13.342C18.088,15.365 17.958,16.807 16.966,17.799C16.342,18.423 15.551,18.699 14.574,18.831C13.625,18.958 12.412,18.958 10.88,18.958H9.12C7.588,18.958 6.375,18.958 5.426,18.831C4.449,18.699 3.658,18.423 3.034,17.799C2.411,17.175 2.134,16.385 2.003,15.408C1.875,14.458 1.875,13.245 1.875,11.714V8.286C1.875,6.755 1.875,5.542 2.003,4.592C2.134,3.615 2.411,2.825 3.034,2.201C3.658,1.577 4.449,1.301 5.426,1.169C6.375,1.042 7.588,1.042 9.12,1.042ZM15.094,5.871C15.978,4.987 17.411,4.987 18.295,5.871C19.179,6.755 19.179,8.188 18.295,9.072L14.333,13.035C14.117,13.251 13.971,13.397 13.808,13.524C13.616,13.674 13.408,13.802 13.188,13.907C13.001,13.997 12.805,14.062 12.516,14.158L10.779,14.737C10.396,14.865 9.973,14.765 9.687,14.479C9.402,14.193 9.302,13.771 9.43,13.387L9.997,11.686C10.001,11.674 10.005,11.663 10.009,11.651C10.105,11.362 10.17,11.166 10.259,10.979C10.364,10.759 10.493,10.551 10.643,10.359C10.77,10.196 10.916,10.05 11.132,9.834C11.14,9.825 11.149,9.817 11.158,9.808L15.094,5.871ZM17.412,6.755C17.016,6.359 16.374,6.359 15.978,6.755L15.827,6.907C15.835,6.935 15.844,6.964 15.855,6.995C15.934,7.221 16.082,7.52 16.364,7.802C16.646,8.084 16.945,8.233 17.171,8.311C17.202,8.322 17.232,8.332 17.26,8.34L17.412,8.188C17.807,7.793 17.807,7.151 17.412,6.755ZM16.305,9.295C16.041,9.155 15.754,8.96 15.481,8.686C15.207,8.412 15.011,8.126 14.872,7.861L12.042,10.692C11.791,10.943 11.703,11.032 11.628,11.128C11.534,11.248 11.453,11.379 11.388,11.517C11.336,11.626 11.295,11.745 11.183,12.081L10.849,13.082L11.085,13.318L12.085,12.984C12.422,12.872 12.541,12.831 12.65,12.779C12.788,12.713 12.918,12.632 13.039,12.538C13.134,12.464 13.224,12.376 13.475,12.125L16.305,9.295ZM6.042,7.5C6.042,7.155 6.321,6.875 6.667,6.875H12.083C12.429,6.875 12.708,7.155 12.708,7.5C12.708,7.845 12.429,8.125 12.083,8.125H6.667C6.321,8.125 6.042,7.845 6.042,7.5ZM6.042,10.833C6.042,10.488 6.321,10.208 6.667,10.208H8.75C9.095,10.208 9.375,10.488 9.375,10.833C9.375,11.179 9.095,11.458 8.75,11.458H6.667C6.321,11.458 6.042,11.179 6.042,10.833ZM6.042,14.167C6.042,13.821 6.321,13.542 6.667,13.542H7.917C8.262,13.542 8.542,13.821 8.542,14.167C8.542,14.512 8.262,14.792 7.917,14.792H6.667C6.321,14.792 6.042,14.512 6.042,14.167Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M4.648,4.452C3.195,5.854 2.292,7.821 2.292,10C2.292,14.257 5.743,17.708 10,17.708C10.106,17.708 10.212,17.706 10.317,17.702C10.146,16.942 10.123,15.921 10.645,14.937C11.188,13.913 12.314,13.469 13.141,13.265C13.574,13.159 13.976,13.106 14.268,13.08C14.414,13.067 14.535,13.06 14.621,13.057C14.664,13.055 14.698,13.054 14.722,13.054L14.752,13.053L14.759,13.053C16.152,13.039 16.78,12.585 17.114,12.153C17.398,11.784 17.506,11.414 17.615,11.04C17.629,10.992 17.642,10.944 17.657,10.896C17.691,10.602 17.708,10.303 17.708,10C17.708,7.897 16.866,5.99 15.5,4.599C15.493,4.627 15.485,4.655 15.478,4.683C15.342,5.177 15.123,5.684 14.885,6.046C14.672,6.369 14.258,6.696 13.915,6.942C13.689,7.105 13.453,7.243 13.24,7.366C13.214,7.381 13.189,7.395 13.164,7.41C12.974,7.519 12.803,7.617 12.638,7.726C12.278,7.964 12,8.22 11.812,8.606C11.747,8.741 11.745,8.873 11.783,9.015C11.846,9.241 11.888,9.495 11.889,9.755C11.89,10.296 11.615,10.735 11.26,11.02C10.911,11.302 10.453,11.463 9.993,11.458C7.947,11.436 6.689,9.775 6.523,7.929C6.457,7.194 6.135,6.451 5.728,5.801C5.355,5.205 4.934,4.726 4.648,4.452ZM5.621,3.655C5.967,4.004 6.401,4.52 6.788,5.138C7.252,5.88 7.678,6.815 7.768,7.817C7.894,9.217 8.779,10.195 10.007,10.208C10.176,10.21 10.351,10.148 10.476,10.047C10.597,9.949 10.639,9.846 10.639,9.758C10.638,9.629 10.616,9.485 10.578,9.346C10.477,8.978 10.463,8.524 10.688,8.061C11.009,7.399 11.484,6.99 11.949,6.683C12.148,6.551 12.355,6.433 12.542,6.325C12.567,6.311 12.591,6.297 12.616,6.283C12.828,6.16 13.015,6.049 13.185,5.927C13.544,5.669 13.772,5.463 13.841,5.358C13.993,5.127 14.164,4.746 14.272,4.352C14.358,4.04 14.382,3.8 14.374,3.652C13.131,2.794 11.624,2.292 10,2.292C8.373,2.292 6.865,2.795 5.621,3.655ZM18.899,11.033C18.938,10.694 18.958,10.349 18.958,10C18.958,5.052 14.948,1.042 10,1.042C5.052,1.042 1.042,5.052 1.042,10C1.042,14.948 5.052,18.958 10,18.958C14.55,18.958 18.308,15.566 18.882,11.172C18.898,11.119 18.911,11.075 18.923,11.042L18.899,11.033ZM16.587,14.005C16.091,14.187 15.493,14.296 14.772,14.303L14.765,14.303V14.303L14.763,14.303L14.746,14.303C14.73,14.304 14.704,14.304 14.67,14.306C14.603,14.308 14.503,14.314 14.379,14.325C14.131,14.347 13.795,14.392 13.439,14.479C12.688,14.664 12.029,14.995 11.749,15.523C11.37,16.238 11.424,17.016 11.565,17.549C13.689,17.111 15.494,15.799 16.587,14.005Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M6.51,0H13.49C13.722,-0 13.901,-0 14.057,0.015C15.164,0.124 16.071,0.79 16.456,1.687H3.544C3.929,0.79 4.836,0.124 5.943,0.015C6.099,-0 6.277,-0 6.51,0Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M4.311,2.723C2.92,2.723 1.78,3.563 1.399,4.677C1.391,4.7 1.384,4.723 1.376,4.747C1.774,4.626 2.189,4.548 2.608,4.494C3.689,4.355 5.054,4.355 6.64,4.355H13.532C15.118,4.355 16.483,4.355 17.564,4.494C17.983,4.548 18.398,4.626 18.796,4.747C18.789,4.723 18.781,4.7 18.773,4.677C18.392,3.563 17.252,2.723 15.862,2.723H4.311Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M9.25,15C9.25,14.586 8.914,14.25 8.5,14.25C8.086,14.25 7.75,14.586 7.75,15C7.75,15.414 8.086,15.75 8.5,15.75C8.914,15.75 9.25,15.414 9.25,15Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M6.672,5.542H13.328C16.702,5.542 18.39,5.542 19.338,6.529C20.285,7.516 20.063,9.04 19.617,12.09L19.194,14.981C18.844,17.372 18.669,18.568 17.772,19.284C16.875,20 15.551,20 12.905,20H7.095C4.449,20 3.126,20 2.228,19.284C1.331,18.568 1.156,17.372 0.806,14.981L0.384,12.09C-0.063,9.04 -0.286,7.516 0.662,6.529C1.61,5.542 3.298,5.542 6.672,5.542ZM10.75,8.5C10.75,8.086 10.414,7.75 10,7.75C9.586,7.75 9.25,8.086 9.25,8.5V12.878C9.015,12.795 8.763,12.75 8.5,12.75C7.257,12.75 6.25,13.757 6.25,15C6.25,16.243 7.257,17.25 8.5,17.25C9.743,17.25 10.75,16.243 10.75,15V11.32C11.42,11.863 12.262,12.25 13,12.25C13.414,12.25 13.75,11.914 13.75,11.5C13.75,11.086 13.414,10.75 13,10.75C12.695,10.75 12.115,10.531 11.583,10.06C11.065,9.601 10.75,9.039 10.75,8.5Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,8.75C11.5858,8.75 11.25,8.4142 11.25,8V5C11.25,4.5858 11.5858,4.25 12,4.25C12.4142,4.25 12.75,4.5858 12.75,5V8C12.75,8.4142 12.4142,8.75 12,8.75Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M4,12C2.8954,12 2,11.1046 2,10C2,8.8954 2.8954,8 4,8C5.1046,8 6,8.8954 6,10C6,11.1046 5.1046,12 4,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M10,12C10,10.8954 10.8954,10 12,10C13.1046,10 14,10.8954 14,12C14,13.1046 13.1046,14 12,14C10.8954,14 10,13.1046 10,12Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M18,14C18,12.8954 18.8954,12 20,12C21.1046,12 22,12.8954 22,14C22,15.1046 21.1046,16 20,16C18.8954,16 18,15.1046 18,14Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M19.25,10C19.25,10.4142 19.5858,10.75 20,10.75C20.4142,10.75 20.75,10.4142 20.75,10V5C20.75,4.5858 20.4142,4.25 20,4.25C19.5858,4.25 19.25,4.5858 19.25,5V10Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M4,13.25C3.5858,13.25 3.25,13.5858 3.25,14L3.25,19C3.25,19.4142 3.5858,19.75 4,19.75C4.4142,19.75 4.75,19.4142 4.75,19L4.75,14C4.75,13.5858 4.4142,13.25 4,13.25Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M11.25,19C11.25,19.4142 11.5858,19.75 12,19.75C12.4142,19.75 12.75,19.4142 12.75,19V16C12.75,15.5858 12.4142,15.25 12,15.25C11.5858,15.25 11.25,15.5858 11.25,16V19Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M20,19.75C19.5858,19.75 19.25,19.4142 19.25,19V18C19.25,17.5858 19.5858,17.25 20,17.25C20.4142,17.25 20.75,17.5858 20.75,18V19C20.75,19.4142 20.4142,19.75 20,19.75Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M3.25,5C3.25,4.5858 3.5858,4.25 4,4.25C4.4142,4.25 4.75,4.5858 4.75,5V6C4.75,6.4142 4.4142,6.75 4,6.75C3.5858,6.75 3.25,6.4142 3.25,6L3.25,5Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M21.838,11.126L21.609,13.562C21.231,17.574 21.042,19.58 19.86,20.79C18.677,22 16.905,22 13.36,22H10.64C7.095,22 5.323,22 4.14,20.79C2.957,19.58 2.769,17.574 2.391,13.562L2.162,11.126C1.982,9.214 1.892,8.257 2.219,7.862C2.396,7.648 2.637,7.517 2.894,7.495C3.37,7.453 3.967,8.133 5.162,9.493C5.78,10.196 6.089,10.548 6.433,10.603C6.624,10.633 6.819,10.602 6.995,10.513C7.314,10.353 7.526,9.918 7.95,9.049L10.187,4.465C10.989,2.822 11.39,2 12,2C12.61,2 13.011,2.822 13.813,4.465L16.05,9.049C16.474,9.918 16.687,10.353 17.005,10.513C17.181,10.602 17.376,10.633 17.567,10.603C17.911,10.548 18.22,10.196 18.838,9.493C20.033,8.133 20.63,7.453 21.106,7.495C21.363,7.517 21.604,7.648 21.781,7.862C22.108,8.257 22.018,9.214 21.838,11.126ZM12.952,12.699L12.854,12.523C12.474,11.841 12.284,11.5 12,11.5C11.716,11.5 11.526,11.841 11.146,12.523L11.048,12.699C10.94,12.893 10.886,12.99 10.802,13.054C10.717,13.117 10.613,13.141 10.403,13.189L10.212,13.232C9.474,13.399 9.105,13.482 9.017,13.764C8.929,14.047 9.181,14.341 9.684,14.929L9.814,15.081C9.957,15.248 10.029,15.332 10.061,15.436C10.093,15.539 10.082,15.65 10.061,15.873L10.041,16.076C9.965,16.861 9.927,17.254 10.156,17.428C10.386,17.603 10.732,17.444 11.423,17.125L11.601,17.043C11.798,16.953 11.896,16.908 12,16.908C12.104,16.908 12.202,16.953 12.399,17.043L12.577,17.125C13.268,17.444 13.614,17.603 13.844,17.428C14.073,17.254 14.035,16.861 13.959,16.076L13.939,15.873C13.918,15.65 13.907,15.539 13.939,15.436C13.971,15.332 14.043,15.248 14.186,15.081L14.316,14.929C14.819,14.341 15.071,14.047 14.983,13.764C14.895,13.482 14.526,13.399 13.788,13.232L13.597,13.189C13.387,13.141 13.283,13.117 13.198,13.054C13.114,12.99 13.06,12.893 12.952,12.699Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12.832,21.801C15.958,21.175 20,18.926 20,13.111C20,7.82 16.127,4.296 13.342,2.677C12.724,2.318 12,2.79 12,3.505V5.333C12,6.775 11.394,9.407 9.709,10.502C8.849,11.061 7.921,10.224 7.816,9.204L7.73,8.366C7.63,7.392 6.638,6.801 5.86,7.395C4.461,8.461 3,10.33 3,13.111C3,20.222 8.289,22 10.933,22C11.087,22 11.249,21.996 11.417,21.986C10.111,21.874 8,21.064 8,18.444C8,16.395 9.495,15.009 10.631,14.335C10.936,14.153 11.294,14.389 11.294,14.744V15.333C11.294,15.784 11.469,16.489 11.884,16.971C12.353,17.517 13.043,16.945 13.099,16.227C13.116,16.001 13.344,15.856 13.54,15.971C14.181,16.346 15,17.146 15,18.444C15,20.492 13.871,21.434 12.832,21.801Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="36dp"
android:viewportWidth="40"
android:viewportHeight="36">
<path
android:pathData="M1.91,4.122C0,6.751 0,10.5 0,18C0,25.5 0,29.249 1.91,31.878C2.527,32.727 3.273,33.473 4.122,34.09C6.751,36 10.5,36 18,36H22C29.5,36 33.249,36 35.878,34.09C36.727,33.473 37.473,32.727 38.09,31.878C40,29.249 40,25.5 40,18C40,10.5 40,6.751 38.09,4.122C37.473,3.273 36.727,2.527 35.878,1.91C33.249,0 29.5,0 22,0H18C10.5,0 6.751,0 4.122,1.91C3.273,2.527 2.527,3.273 1.91,4.122ZM18.348,18.881C18,19.738 18,20.826 18,23C18,25.174 18,26.262 18.348,27.119C18.812,28.263 19.702,29.171 20.822,29.645C21.662,30 22.727,30 24.857,30H27.143C29.273,30 30.338,30 31.178,29.645C32.298,29.171 33.188,28.263 33.652,27.119C34,26.262 34,25.174 34,23C34,20.826 34,19.738 33.652,18.881C33.188,17.737 32.298,16.829 31.178,16.355C30.338,16 29.273,16 27.143,16H24.857C22.727,16 21.662,16 20.822,16.355C19.702,16.829 18.812,17.737 18.348,18.881Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M9.944,1.25L10,1.25C10.414,1.25 10.75,1.586 10.75,2C10.75,2.414 10.414,2.75 10,2.75C8.093,2.75 6.739,2.752 5.711,2.89C4.705,3.025 4.125,3.279 3.702,3.702C3.279,4.125 3.025,4.705 2.89,5.711C2.752,6.739 2.75,8.093 2.75,10C2.75,10.414 2.414,10.75 2,10.75C1.586,10.75 1.25,10.414 1.25,10L1.25,9.944C1.25,8.106 1.25,6.65 1.403,5.511C1.561,4.339 1.893,3.39 2.641,2.641C3.39,1.893 4.339,1.561 5.511,1.403C6.65,1.25 8.106,1.25 9.944,1.25ZM18.289,2.89C17.261,2.752 15.907,2.75 14,2.75C13.586,2.75 13.25,2.414 13.25,2C13.25,1.586 13.586,1.25 14,1.25L14.056,1.25C15.894,1.25 17.35,1.25 18.489,1.403C19.661,1.561 20.61,1.893 21.359,2.641C22.107,3.39 22.439,4.339 22.597,5.511C22.75,6.65 22.75,8.106 22.75,9.944V10C22.75,10.414 22.414,10.75 22,10.75C21.586,10.75 21.25,10.414 21.25,10C21.25,8.093 21.248,6.739 21.11,5.711C20.975,4.705 20.721,4.125 20.298,3.702C19.875,3.279 19.295,3.025 18.289,2.89ZM2,13.25C2.414,13.25 2.75,13.586 2.75,14C2.75,15.907 2.752,17.261 2.89,18.289C3.025,19.295 3.279,19.875 3.702,20.298C4.125,20.721 4.705,20.975 5.711,21.11C6.739,21.248 8.093,21.25 10,21.25C10.414,21.25 10.75,21.586 10.75,22C10.75,22.414 10.414,22.75 10,22.75H9.944C8.106,22.75 6.65,22.75 5.511,22.597C4.339,22.439 3.39,22.107 2.641,21.359C1.893,20.61 1.561,19.661 1.403,18.489C1.25,17.35 1.25,15.894 1.25,14.056L1.25,14C1.25,13.586 1.586,13.25 2,13.25ZM22,13.25C22.414,13.25 22.75,13.586 22.75,14V14.056C22.75,15.894 22.75,17.35 22.597,18.489C22.439,19.661 22.107,20.61 21.359,21.359C20.61,22.107 19.661,22.439 18.489,22.597C17.35,22.75 15.894,22.75 14.056,22.75H14C13.586,22.75 13.25,22.414 13.25,22C13.25,21.586 13.586,21.25 14,21.25C15.907,21.25 17.261,21.248 18.289,21.11C19.295,20.975 19.875,20.721 20.298,20.298C20.721,19.875 20.975,19.295 21.11,18.289C21.248,17.261 21.25,15.907 21.25,14C21.25,13.586 21.586,13.25 22,13.25Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="80dp"
android:height="80dp"
android:viewportWidth="80"
android:viewportHeight="80">
<path
android:pathData="M10,1L70,1A9,9 0,0 1,79 10L79,70A9,9 0,0 1,70 79L10,79A9,9 0,0 1,1 70L1,10A9,9 0,0 1,10 1z"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
<path
android:pathData="M40.262,36.976C42.34,36.976 44.025,38.66 44.025,40.738C44.025,42.816 42.34,44.5 40.262,44.5C38.184,44.5 36.5,42.816 36.5,40.738C36.5,38.66 38.184,36.976 40.262,36.976Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M41,60C52.046,60 61,51.046 61,40C61,28.954 52.046,20 41,20C29.954,20 21,28.954 21,40C21,51.046 29.954,60 41,60ZM45.974,22.569C45.518,22.426 45.022,22.508 44.637,22.791C44.252,23.073 44.025,23.522 44.025,24V35.118C42.949,34.397 41.655,33.976 40.262,33.976C36.528,33.976 33.5,37.003 33.5,40.738C33.5,44.472 36.528,47.5 40.262,47.5C43.997,47.5 47.025,44.472 47.025,40.738V26.187C51.078,28.075 54.213,31.607 55.569,35.925C55.817,36.715 56.659,37.155 57.45,36.906C58.24,36.658 58.679,35.816 58.431,35.026C56.571,29.103 51.897,24.429 45.974,22.569Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="54dp"
android:height="54dp"
android:viewportWidth="54"
android:viewportHeight="54">
<path
android:pathData="M26.016,22.968C28.787,22.968 31.033,25.214 31.033,27.984C31.033,30.754 28.787,33 26.016,33C23.246,33 21,30.754 21,27.984C21,25.214 23.246,22.968 26.016,22.968Z"
android:fillColor="#E1E1E1"/>
<path
android:pathData="M27,53.667C41.728,53.667 53.667,41.728 53.667,27C53.667,12.272 41.728,0.333 27,0.333C12.272,0.333 0.333,12.272 0.333,27C0.333,41.728 12.272,53.667 27,53.667ZM33.632,3.759C33.024,3.568 32.362,3.678 31.849,4.054C31.336,4.431 31.033,5.03 31.033,5.667V20.491C29.598,19.529 27.873,18.968 26.016,18.968C21.037,18.968 17,23.004 17,27.984C17,32.963 21.037,37 26.016,37C30.996,37 35.033,32.963 35.033,27.984V8.583C40.437,11.1 44.617,15.81 46.425,21.566C46.756,22.62 47.879,23.206 48.933,22.875C49.986,22.544 50.572,21.422 50.241,20.368C47.761,12.47 41.53,6.239 33.632,3.759Z"
android:fillColor="#E1E1E1"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M10.374,5.648C9.726,5.569 9.046,5.693 8.438,6.044C6.943,6.907 6.431,8.818 7.294,10.313C7.759,11.118 8.53,11.639 9.375,11.812V13.75C9.375,14.095 9.655,14.375 10,14.375C10.345,14.375 10.625,14.095 10.625,13.75V11.813C10.946,11.747 11.263,11.629 11.562,11.456C12.171,11.105 12.618,10.578 12.874,9.977C13.245,9.106 13.217,8.074 12.706,7.188C12.195,6.302 11.315,5.762 10.374,5.648ZM9.063,7.127C9.429,6.915 9.835,6.842 10.224,6.889C10.791,6.958 11.317,7.282 11.623,7.813C11.93,8.344 11.948,8.962 11.724,9.487C11.57,9.847 11.303,10.162 10.937,10.374C10.041,10.891 8.894,10.584 8.377,9.687C7.859,8.791 8.166,7.644 9.063,7.127Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M10,1.042C9.219,1.042 8.473,1.297 7.269,1.709L6.663,1.917C5.429,2.339 4.476,2.665 3.794,2.942C3.451,3.082 3.155,3.217 2.917,3.355C2.689,3.488 2.459,3.654 2.303,3.876C2.149,4.096 2.069,4.366 2.019,4.626C1.967,4.896 1.936,5.22 1.915,5.593C1.875,6.332 1.875,7.345 1.875,8.658V9.993C1.875,15.077 5.715,17.515 7.999,18.512L8.021,18.522C8.304,18.646 8.571,18.762 8.876,18.84C9.199,18.923 9.542,18.958 10,18.958C10.458,18.958 10.801,18.923 11.124,18.84C11.429,18.762 11.696,18.646 11.979,18.522L12.001,18.512C14.285,17.515 18.125,15.077 18.125,9.993V8.658C18.125,7.345 18.125,6.332 18.085,5.593C18.065,5.22 18.033,4.896 17.981,4.626C17.931,4.366 17.851,4.096 17.697,3.876C17.541,3.654 17.311,3.488 17.083,3.355C16.845,3.217 16.549,3.082 16.206,2.942C15.524,2.665 14.571,2.339 13.337,1.917L12.731,1.709C11.527,1.297 10.781,1.042 10,1.042ZM7.567,2.929C8.913,2.468 9.452,2.292 10,2.292C10.548,2.292 11.087,2.468 12.433,2.929L12.91,3.092C14.171,3.523 15.09,3.838 15.735,4.101C16.058,4.231 16.291,4.341 16.455,4.436C16.536,4.483 16.591,4.522 16.629,4.552C16.66,4.578 16.672,4.592 16.674,4.595C16.676,4.597 16.686,4.614 16.701,4.655C16.717,4.702 16.736,4.769 16.754,4.863C16.79,5.051 16.817,5.311 16.837,5.661C16.875,6.362 16.875,7.34 16.875,8.681V9.993C16.875,14.305 13.65,16.428 11.501,17.367C11.191,17.502 11.013,17.578 10.814,17.629C10.624,17.678 10.392,17.708 10,17.708C9.608,17.708 9.376,17.678 9.186,17.629C8.987,17.578 8.809,17.502 8.499,17.367C6.35,16.428 3.125,14.305 3.125,9.993V8.681C3.125,7.34 3.125,6.362 3.163,5.661C3.182,5.311 3.21,5.051 3.246,4.863C3.264,4.769 3.283,4.702 3.3,4.655C3.314,4.614 3.324,4.597 3.326,4.595C3.328,4.592 3.34,4.578 3.371,4.552C3.409,4.522 3.464,4.483 3.545,4.436C3.709,4.341 3.943,4.231 4.265,4.101C4.91,3.838 5.829,3.523 7.09,3.092L7.567,2.929Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M14,21C11.8,21 10,19.2 10,17C10,14.8 11.8,13 14,13C16.2,13 18,14.8 18,17C18,19.2 16.2,21 14,21ZM14,15C12.9,15 12,15.9 12,17C12,18.1 12.9,19 14,19C15.1,19 16,18.1 16,17C16,15.9 15.1,15 14,15Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M17,18C16.4,18 16,17.6 16,17V4C16,3.4 16.4,3 17,3H21C21.6,3 22,3.4 22,4C22,4.6 21.6,5 21,5H18V17C18,17.6 17.6,18 17,18Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M13,6H3C2.4,6 2,5.6 2,5C2,4.4 2.4,4 3,4H13C13.6,4 14,4.4 14,5C14,5.6 13.6,6 13,6Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M13,10H3C2.4,10 2,9.6 2,9C2,8.4 2.4,8 3,8H13C13.6,8 14,8.4 14,9C14,9.6 13.6,10 13,10Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M9,14H3C2.4,14 2,13.6 2,13C2,12.4 2.4,12 3,12H9C9.6,12 10,12.4 10,13C10,13.6 9.6,14 9,14Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M10,2.292C6.893,2.292 4.375,4.81 4.375,7.917C4.375,9.582 5.098,11.078 6.249,12.109L6.253,12.112C6.717,12.527 7.069,12.843 7.321,13.074C7.558,13.291 7.746,13.469 7.845,13.59L7.855,13.604C8.04,13.831 8.2,14.029 8.306,14.267C8.412,14.504 8.453,14.756 8.499,15.045L8.502,15.061C8.526,15.21 8.535,15.392 8.539,15.625H11.461C11.465,15.392 11.474,15.21 11.498,15.061L11.501,15.045C11.547,14.756 11.588,14.504 11.694,14.267C11.8,14.029 11.96,13.831 12.145,13.604L12.155,13.59C12.254,13.469 12.442,13.291 12.679,13.074C12.931,12.843 13.283,12.527 13.747,12.112L13.751,12.109C14.902,11.078 15.625,9.582 15.625,7.917C15.625,4.81 13.107,2.292 10,2.292ZM11.453,16.875H8.547C8.55,16.962 8.554,17.038 8.56,17.106C8.577,17.294 8.606,17.362 8.625,17.396C8.68,17.491 8.759,17.57 8.854,17.625C8.888,17.644 8.956,17.673 9.144,17.69C9.34,17.708 9.599,17.708 10,17.708C10.401,17.708 10.66,17.708 10.856,17.69C11.044,17.673 11.112,17.644 11.146,17.625C11.241,17.57 11.32,17.491 11.375,17.396C11.394,17.362 11.423,17.294 11.44,17.106C11.446,17.038 11.45,16.962 11.453,16.875ZM3.125,7.917C3.125,4.12 6.203,1.042 10,1.042C13.797,1.042 16.875,4.12 16.875,7.917C16.875,9.952 15.99,11.782 14.585,13.04C14.116,13.459 13.769,13.77 13.524,13.995C13.401,14.108 13.307,14.196 13.237,14.263C13.203,14.297 13.176,14.324 13.157,14.344C13.147,14.355 13.14,14.363 13.134,14.369C13.129,14.375 13.127,14.377 13.127,14.377C12.91,14.645 12.863,14.714 12.835,14.776C12.807,14.839 12.787,14.92 12.732,15.26C12.71,15.394 12.708,15.624 12.708,16.25V16.277C12.708,16.643 12.708,16.959 12.685,17.219C12.66,17.493 12.605,17.765 12.457,18.021C12.293,18.306 12.056,18.542 11.771,18.707C11.515,18.855 11.243,18.91 10.969,18.935C10.71,18.958 10.393,18.958 10.027,18.958H9.973C9.607,18.958 9.291,18.958 9.031,18.935C8.757,18.91 8.485,18.855 8.229,18.707C7.944,18.542 7.707,18.306 7.543,18.021C7.395,17.765 7.34,17.493 7.315,17.219C7.292,16.959 7.292,16.643 7.292,16.277L7.292,16.25C7.292,15.624 7.289,15.394 7.268,15.26C7.213,14.92 7.193,14.839 7.165,14.776C7.137,14.714 7.09,14.645 6.873,14.377C6.873,14.377 6.871,14.374 6.866,14.369C6.86,14.363 6.853,14.355 6.843,14.344C6.824,14.324 6.797,14.297 6.763,14.263C6.693,14.196 6.599,14.108 6.476,13.995C6.231,13.77 5.884,13.459 5.415,13.04C4.011,11.782 3.125,9.952 3.125,7.917Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M11.018,6.575C11.299,6.775 11.364,7.166 11.163,7.447L10.083,8.958H11.369C11.603,8.958 11.818,9.089 11.925,9.297C12.032,9.505 12.014,9.756 11.877,9.947L10.092,12.447C9.891,12.727 9.501,12.792 9.22,12.592C8.939,12.391 8.874,12.001 9.075,11.72L10.154,10.208H8.869C8.635,10.208 8.42,10.078 8.313,9.869C8.206,9.661 8.224,9.411 8.36,9.22L10.146,6.72C10.347,6.439 10.737,6.374 11.018,6.575Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="161dp"
android:height="24dp"
android:viewportWidth="161"
android:viewportHeight="24">
<path
android:pathData="M11.839,0.387L27.516,9.762C27.908,9.997 28.232,10.326 28.457,10.718C28.682,11.11 28.8,11.552 28.8,12.001C28.8,12.45 28.682,12.892 28.457,13.284C28.232,13.676 27.908,14.005 27.516,14.24L11.839,23.615C11.431,23.858 10.965,23.991 10.487,24C10.009,24.008 9.538,23.893 9.122,23.664C8.705,23.437 8.358,23.104 8.117,22.702C7.876,22.3 7.749,21.842 7.749,21.376V12.892C7.837,12.852 7.933,12.831 8.03,12.833C8.122,12.833 8.213,12.85 8.297,12.884C8.382,12.919 8.459,12.969 8.524,13.033C8.588,13.096 8.639,13.171 8.674,13.254C8.709,13.337 8.727,13.425 8.726,13.515V18.153C8.722,18.34 8.789,18.523 8.914,18.665C9.04,18.808 9.214,18.9 9.405,18.924C9.509,18.934 9.615,18.922 9.714,18.89C9.814,18.858 9.906,18.805 9.983,18.736C10.061,18.667 10.123,18.583 10.165,18.49C10.208,18.396 10.23,18.295 10.23,18.192V13.502C10.223,13.408 10.236,13.314 10.268,13.226C10.3,13.138 10.351,13.057 10.416,12.989C10.481,12.92 10.561,12.866 10.649,12.828C10.736,12.791 10.831,12.772 10.927,12.772C11.023,12.772 11.118,12.791 11.206,12.828C11.294,12.866 11.373,12.92 11.439,12.989C11.504,13.057 11.554,13.138 11.586,13.226C11.618,13.314 11.631,13.408 11.625,13.502V16.619C11.62,16.807 11.687,16.99 11.813,17.133C11.938,17.276 12.113,17.369 12.304,17.394C12.408,17.403 12.513,17.391 12.613,17.358C12.712,17.325 12.803,17.273 12.881,17.204C12.958,17.134 13.02,17.05 13.062,16.956C13.104,16.862 13.125,16.761 13.125,16.659V13.502C13.125,13.321 13.198,13.147 13.33,13.019C13.461,12.891 13.639,12.819 13.824,12.819C14.009,12.819 14.187,12.891 14.318,13.019C14.45,13.147 14.523,13.321 14.523,13.502V15.4C14.52,15.587 14.587,15.769 14.712,15.912C14.837,16.054 15.012,16.146 15.202,16.172C15.307,16.181 15.412,16.169 15.511,16.136C15.611,16.103 15.702,16.05 15.779,15.981C15.857,15.912 15.918,15.828 15.96,15.734C16.002,15.64 16.024,15.539 16.023,15.436V8.48C16.024,8.377 16.002,8.276 15.96,8.182C15.918,8.088 15.857,8.004 15.779,7.935C15.702,7.866 15.611,7.813 15.511,7.78C15.412,7.747 15.307,7.735 15.202,7.744C15.012,7.769 14.837,7.862 14.712,8.004C14.587,8.146 14.52,8.329 14.523,8.516V10.967C14.523,11.149 14.45,11.322 14.318,11.45C14.187,11.578 14.009,11.65 13.824,11.65C13.639,11.65 13.461,11.578 13.33,11.45C13.198,11.322 13.125,11.149 13.125,10.967V7.324C13.13,7.135 13.063,6.952 12.938,6.809C12.813,6.666 12.637,6.573 12.446,6.548C12.341,6.539 12.236,6.551 12.136,6.584C12.037,6.617 11.945,6.67 11.868,6.739C11.79,6.808 11.728,6.892 11.686,6.986C11.643,7.08 11.621,7.181 11.621,7.284V10.964C11.628,11.058 11.615,11.151 11.583,11.24C11.551,11.328 11.501,11.409 11.435,11.477C11.37,11.546 11.291,11.6 11.203,11.637C11.115,11.675 11.02,11.694 10.924,11.694C10.828,11.694 10.733,11.675 10.645,11.637C10.557,11.6 10.478,11.546 10.413,11.477C10.347,11.409 10.297,11.328 10.265,11.24C10.233,11.151 10.22,11.058 10.226,10.964V8.645C10.23,8.458 10.163,8.276 10.037,8.133C9.912,7.991 9.738,7.899 9.548,7.873C9.443,7.864 9.337,7.876 9.238,7.909C9.138,7.942 9.047,7.995 8.969,8.064C8.892,8.133 8.83,8.217 8.787,8.311C8.745,8.405 8.723,8.506 8.723,8.609V10.967C8.728,11.082 8.702,11.196 8.648,11.299C8.594,11.401 8.514,11.488 8.416,11.55C8.317,11.613 8.203,11.65 8.086,11.657C7.968,11.664 7.851,11.641 7.745,11.59V2.626C7.745,2.16 7.872,1.701 8.113,1.299C8.355,0.896 8.702,0.563 9.119,0.335C9.536,0.107 10.008,-0.009 10.486,0.001C10.964,0.01 11.431,0.143 11.839,0.387ZM7.328,5.912V10.964C7.326,11.095 7.363,11.224 7.434,11.335C7.505,11.446 7.607,11.534 7.728,11.59V12.879C7.603,12.93 7.496,13.017 7.422,13.128C7.347,13.239 7.309,13.369 7.311,13.502V15.635C7.311,15.738 7.289,15.839 7.246,15.933C7.204,16.027 7.142,16.111 7.065,16.18C6.987,16.249 6.895,16.302 6.796,16.335C6.696,16.367 6.591,16.38 6.486,16.37C6.296,16.345 6.121,16.253 5.996,16.111C5.871,15.968 5.804,15.786 5.807,15.599V13.502C5.814,13.408 5.801,13.314 5.769,13.226C5.737,13.138 5.687,13.057 5.621,12.989C5.556,12.92 5.477,12.866 5.389,12.828C5.301,12.791 5.206,12.772 5.11,12.772C5.014,12.772 4.919,12.791 4.831,12.828C4.743,12.866 4.664,12.92 4.599,12.989C4.533,13.057 4.483,13.138 4.451,13.226C4.419,13.314 4.406,13.408 4.412,13.502V17.338C4.413,17.44 4.391,17.542 4.349,17.636C4.307,17.73 4.245,17.815 4.167,17.884C4.089,17.953 3.998,18.006 3.898,18.038C3.798,18.071 3.692,18.083 3.588,18.073C3.397,18.048 3.223,17.955 3.098,17.813C2.973,17.671 2.905,17.489 2.909,17.301V13.502C2.909,13.321 2.835,13.147 2.704,13.019C2.573,12.891 2.395,12.819 2.21,12.819C2.024,12.819 1.846,12.891 1.715,13.019C1.584,13.147 1.51,13.321 1.51,13.502V14.87C1.511,14.973 1.489,15.075 1.447,15.17C1.404,15.264 1.341,15.349 1.263,15.419C1.184,15.488 1.092,15.54 0.991,15.573C0.891,15.605 0.784,15.616 0.679,15.605C0.489,15.58 0.314,15.488 0.189,15.345C0.064,15.203 -0.003,15.021 0,14.833V9.507C-0,9.402 0.022,9.298 0.066,9.202C0.11,9.106 0.175,9.02 0.256,8.951C0.336,8.881 0.431,8.829 0.534,8.798C0.637,8.767 0.745,8.758 0.852,8.771C1.043,8.796 1.217,8.888 1.343,9.03C1.468,9.173 1.535,9.355 1.531,9.543V10.964C1.531,11.145 1.605,11.319 1.736,11.447C1.867,11.575 2.045,11.647 2.23,11.647C2.415,11.647 2.593,11.575 2.724,11.447C2.856,11.319 2.929,11.145 2.929,10.964V8.036C2.929,7.934 2.951,7.833 2.993,7.739C3.036,7.646 3.097,7.562 3.175,7.493C3.252,7.424 3.343,7.372 3.442,7.339C3.541,7.307 3.646,7.295 3.751,7.304C3.941,7.328 4.116,7.42 4.241,7.563C4.367,7.705 4.433,7.888 4.429,8.076V10.964C4.423,11.058 4.436,11.151 4.468,11.24C4.5,11.328 4.55,11.409 4.616,11.477C4.681,11.546 4.76,11.6 4.848,11.637C4.936,11.675 5.031,11.694 5.127,11.694C5.223,11.694 5.318,11.675 5.406,11.637C5.494,11.6 5.573,11.546 5.638,11.477C5.704,11.409 5.754,11.328 5.786,11.24C5.818,11.151 5.831,11.058 5.824,10.964V5.873C5.825,5.77 5.847,5.669 5.89,5.575C5.932,5.482 5.994,5.398 6.072,5.329C6.149,5.26 6.241,5.207 6.34,5.174C6.439,5.141 6.544,5.129 6.649,5.137C6.84,5.162 7.015,5.255 7.14,5.398C7.265,5.541 7.332,5.724 7.328,5.912Z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startY="11.9215"
android:startX="30.0374"
android:endY="11.9224"
android:endX="1.67089E-4"
android:type="linear">
<item android:offset="0" android:color="#FF8644F7"/>
<item android:offset="1" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M45.22,5.121C45.204,5.199 45.165,5.27 45.103,5.332C45.056,5.379 44.993,5.403 44.915,5.403H39.062C38.999,5.403 38.952,5.442 38.921,5.52L38.57,8.455C38.57,8.533 38.601,8.572 38.663,8.572H42.199C42.371,8.572 42.457,8.666 42.457,8.854L42.105,11.624C42.09,11.703 42.051,11.773 41.988,11.836C41.942,11.883 41.879,11.906 41.801,11.906H38.265C38.203,11.906 38.156,11.945 38.125,12.024L37.75,15.052C37.75,15.13 37.789,15.17 37.867,15.17H43.721C43.799,15.17 43.861,15.201 43.908,15.264C43.955,15.31 43.971,15.373 43.955,15.451L43.627,18.222C43.612,18.3 43.573,18.37 43.51,18.433C43.448,18.48 43.378,18.503 43.3,18.503H33.84C33.762,18.503 33.7,18.48 33.653,18.433C33.606,18.37 33.59,18.3 33.606,18.222L35.549,2.35C35.565,2.272 35.596,2.21 35.643,2.163C35.705,2.1 35.776,2.069 35.854,2.069H45.313C45.485,2.069 45.571,2.163 45.571,2.35L45.22,5.121Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M53.137,6.647C53.153,6.569 53.184,6.506 53.231,6.459C53.293,6.397 53.363,6.365 53.442,6.365H56.673C56.751,6.365 56.813,6.397 56.86,6.459C56.907,6.506 56.923,6.569 56.907,6.647L54.963,22.518C54.948,22.597 54.909,22.659 54.846,22.706C54.799,22.769 54.737,22.8 54.659,22.8H51.428C51.35,22.8 51.287,22.769 51.241,22.706C51.194,22.659 51.178,22.597 51.194,22.518L51.779,17.846C51.779,17.799 51.763,17.776 51.732,17.776C51.701,17.76 51.67,17.768 51.639,17.799C51.045,18.394 50.241,18.691 49.227,18.691C48.165,18.691 47.369,18.308 46.839,17.541C46.323,16.758 46.066,15.67 46.066,14.277C46.066,13.917 46.105,13.362 46.183,12.61C46.323,11.562 46.495,10.709 46.698,10.051C47.088,8.83 47.619,7.883 48.29,7.21C48.977,6.522 49.789,6.177 50.725,6.177C51.724,6.177 52.466,6.483 52.95,7.093C52.981,7.124 53.012,7.14 53.043,7.14C53.075,7.124 53.09,7.093 53.09,7.046L53.137,6.647ZM52.107,14.184C52.247,13.73 52.357,13.15 52.435,12.446C52.513,11.695 52.552,11.249 52.552,11.108L52.528,10.756C52.497,10.364 52.403,10.059 52.247,9.84C52.091,9.621 51.865,9.511 51.568,9.511C51.272,9.511 51.014,9.621 50.796,9.84C50.577,10.059 50.405,10.364 50.28,10.756C50.156,11.21 50.054,11.773 49.976,12.446C49.96,12.571 49.937,12.775 49.906,13.057C49.875,13.338 49.859,13.581 49.859,13.784C49.859,13.957 49.867,14.09 49.882,14.184C49.914,14.543 50.007,14.833 50.163,15.052C50.335,15.256 50.561,15.357 50.842,15.357C51.155,15.357 51.42,15.256 51.639,15.052C51.857,14.833 52.013,14.543 52.107,14.184Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M65.079,6.647C65.079,6.569 65.11,6.506 65.173,6.459C65.235,6.397 65.305,6.365 65.384,6.365H68.591C68.763,6.365 68.849,6.459 68.849,6.647L67.421,18.222C67.405,18.3 67.366,18.37 67.304,18.433C67.257,18.48 67.194,18.503 67.116,18.503H63.885C63.807,18.503 63.744,18.48 63.698,18.433C63.651,18.37 63.635,18.3 63.651,18.222L63.721,17.658C63.737,17.611 63.729,17.588 63.698,17.588C63.667,17.572 63.635,17.588 63.604,17.635C62.995,18.339 62.145,18.691 61.052,18.691C60.131,18.691 59.382,18.425 58.804,17.893C58.242,17.345 57.961,16.547 57.961,15.498C57.961,15.357 57.977,15.115 58.008,14.77L59.015,6.647C59.015,6.569 59.046,6.506 59.108,6.459C59.171,6.397 59.241,6.365 59.319,6.365H62.527C62.699,6.365 62.785,6.459 62.785,6.647L61.895,13.902C61.879,13.98 61.871,14.09 61.871,14.23C61.871,14.575 61.957,14.849 62.129,15.052C62.301,15.24 62.543,15.334 62.855,15.334C63.167,15.334 63.44,15.232 63.674,15.029C63.908,14.825 64.064,14.551 64.143,14.207L65.079,6.647Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M77.168,6.647C77.184,6.569 77.215,6.506 77.262,6.459C77.324,6.397 77.395,6.365 77.473,6.365H80.704C80.782,6.365 80.844,6.397 80.891,6.459C80.938,6.506 80.954,6.569 80.938,6.647L79.533,18.222C79.518,18.3 79.479,18.37 79.416,18.433C79.369,18.48 79.307,18.503 79.229,18.503H75.998C75.92,18.503 75.857,18.48 75.81,18.433C75.763,18.37 75.748,18.3 75.763,18.222L75.857,17.447C75.857,17.337 75.81,17.33 75.717,17.424C75.077,18.269 74.234,18.691 73.188,18.691C72.142,18.691 71.338,18.355 70.776,17.682C70.214,16.993 69.925,16.046 69.91,14.841C69.894,14.778 69.886,14.653 69.886,14.465C69.886,14.058 69.941,13.377 70.05,12.423C70.191,11.202 70.362,10.356 70.565,9.887L70.612,9.746C70.909,8.635 71.416,7.766 72.134,7.14C72.852,6.498 73.734,6.177 74.78,6.177C75.81,6.177 76.536,6.577 76.958,7.375C76.973,7.422 76.997,7.437 77.028,7.422C77.059,7.406 77.082,7.375 77.098,7.328L77.168,6.647ZM76.068,14.301C76.24,13.816 76.372,13.197 76.466,12.446C76.528,11.992 76.56,11.546 76.56,11.108C76.56,10.857 76.552,10.67 76.536,10.544C76.505,10.231 76.403,9.981 76.232,9.793C76.06,9.605 75.826,9.511 75.529,9.511C75.248,9.511 74.991,9.605 74.757,9.793C74.538,9.981 74.382,10.231 74.288,10.544C74.117,11.03 73.984,11.663 73.89,12.446C73.828,13.135 73.797,13.597 73.797,13.831C73.797,14.05 73.804,14.207 73.82,14.301C73.851,14.63 73.953,14.888 74.124,15.076C74.296,15.264 74.522,15.357 74.803,15.357C75.116,15.357 75.381,15.264 75.6,15.076C75.818,14.872 75.974,14.614 76.068,14.301Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M81.807,18.503C81.729,18.503 81.666,18.48 81.619,18.433C81.573,18.37 81.557,18.3 81.573,18.222L83.516,2.35C83.532,2.272 83.563,2.21 83.61,2.163C83.672,2.1 83.742,2.069 83.82,2.069H87.051C87.13,2.069 87.192,2.1 87.239,2.163C87.286,2.21 87.301,2.272 87.286,2.35L85.342,18.222C85.327,18.3 85.288,18.37 85.225,18.433C85.178,18.48 85.116,18.503 85.038,18.503H81.807Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M90.858,5.285C90.327,5.285 89.898,5.121 89.57,4.792C89.258,4.463 89.102,4.041 89.102,3.524C89.102,2.851 89.32,2.296 89.757,1.857C90.195,1.419 90.733,1.2 91.373,1.2C91.888,1.2 92.302,1.357 92.614,1.67C92.942,1.983 93.106,2.397 93.106,2.914C93.106,3.587 92.887,4.15 92.45,4.604C92.029,5.058 91.498,5.285 90.858,5.285ZM87.627,18.503C87.549,18.503 87.486,18.48 87.439,18.433C87.393,18.37 87.377,18.3 87.393,18.222L88.821,6.647C88.821,6.569 88.852,6.506 88.914,6.459C88.977,6.397 89.047,6.365 89.125,6.365H92.333C92.505,6.365 92.591,6.459 92.591,6.647L91.162,18.222C91.147,18.3 91.108,18.37 91.045,18.433C90.998,18.48 90.936,18.503 90.858,18.503H87.627Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M93.093,18.503C93.015,18.503 92.952,18.48 92.905,18.433C92.859,18.37 92.843,18.3 92.859,18.222L93.233,15.17C93.233,15.044 93.28,14.935 93.374,14.841L97.869,10.028C97.916,9.981 97.932,9.95 97.916,9.934C97.901,9.903 97.869,9.887 97.823,9.887H94.287C94.115,9.887 94.029,9.793 94.029,9.605L94.404,6.647C94.42,6.569 94.451,6.506 94.498,6.459C94.56,6.397 94.63,6.365 94.708,6.365H102.646C102.724,6.365 102.786,6.397 102.833,6.459C102.88,6.506 102.896,6.569 102.88,6.647L102.505,9.699C102.49,9.84 102.427,9.95 102.318,10.028L97.659,14.841C97.596,14.935 97.62,14.982 97.729,14.982H101.733C101.811,14.982 101.873,15.013 101.92,15.076C101.967,15.123 101.983,15.185 101.967,15.264L101.616,18.222C101.6,18.3 101.561,18.37 101.499,18.433C101.452,18.48 101.389,18.503 101.311,18.503H93.093Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M114.194,10.779C114.116,11.734 114.022,12.556 113.913,13.244C113.897,13.432 113.796,13.526 113.608,13.526H107.661C107.583,13.526 107.544,13.565 107.544,13.644V13.855C107.544,14.058 107.552,14.207 107.567,14.301C107.599,14.63 107.708,14.888 107.895,15.076C108.098,15.264 108.371,15.357 108.715,15.357C109.339,15.357 109.807,15.091 110.12,14.559C110.198,14.403 110.315,14.34 110.471,14.371L113.304,14.958C113.507,14.99 113.561,15.099 113.468,15.287C112.968,16.398 112.281,17.243 111.407,17.823C110.549,18.402 109.542,18.691 108.387,18.691C106.826,18.691 105.663,18.316 104.898,17.564C104.133,16.813 103.751,15.717 103.751,14.277C103.751,13.714 103.798,13.096 103.891,12.423C103.922,12.078 103.969,11.703 104.032,11.296C104.11,10.889 104.196,10.536 104.289,10.239C104.601,9.003 105.241,8.017 106.209,7.281C107.177,6.545 108.332,6.177 109.675,6.177C111.126,6.177 112.258,6.6 113.07,7.445C113.881,8.29 114.256,9.402 114.194,10.779ZM109.3,9.511C108.988,9.511 108.715,9.613 108.48,9.817C108.246,10.004 108.075,10.27 107.965,10.615L107.825,11.272C107.809,11.35 107.84,11.39 107.919,11.39H110.237C110.315,11.39 110.354,11.35 110.354,11.272V10.615C110.338,10.286 110.237,10.02 110.049,9.817C109.878,9.613 109.628,9.511 109.3,9.511Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M122.585,6.201C123.022,6.201 123.381,6.295 123.662,6.483C123.771,6.577 123.803,6.694 123.756,6.835L122.842,10.122C122.78,10.294 122.663,10.356 122.491,10.31C122.242,10.247 122.015,10.216 121.812,10.216C121.578,10.216 121.367,10.247 121.18,10.31C120.79,10.388 120.446,10.583 120.15,10.896C119.869,11.194 119.705,11.562 119.658,12L118.885,18.222C118.87,18.3 118.831,18.37 118.768,18.433C118.722,18.48 118.659,18.503 118.581,18.503H115.35C115.272,18.503 115.209,18.48 115.162,18.433C115.116,18.37 115.1,18.3 115.116,18.222L116.544,6.647C116.544,6.569 116.575,6.506 116.638,6.459C116.7,6.397 116.77,6.365 116.848,6.365H120.056C120.228,6.365 120.314,6.459 120.314,6.647L120.22,7.422C120.204,7.484 120.204,7.523 120.22,7.539C120.251,7.539 120.282,7.516 120.314,7.469C120.922,6.623 121.68,6.201 122.585,6.201Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M136.912,2.069C138.224,2.069 139.262,2.46 140.027,3.243C140.791,4.025 141.174,5.082 141.174,6.412C141.174,6.6 141.158,6.882 141.127,7.257C140.94,8.776 140.347,9.997 139.348,10.92C138.349,11.844 137.123,12.305 135.671,12.305H133.541C133.478,12.305 133.431,12.344 133.4,12.423L132.698,18.222C132.682,18.3 132.643,18.37 132.581,18.433C132.534,18.48 132.471,18.503 132.393,18.503H129.162C129.084,18.503 129.022,18.48 128.975,18.433C128.928,18.37 128.912,18.3 128.928,18.222L130.871,2.35C130.887,2.272 130.918,2.21 130.965,2.163C131.027,2.1 131.098,2.069 131.176,2.069H136.912ZM135.414,9.23C135.976,9.23 136.444,9.026 136.819,8.619C137.193,8.212 137.381,7.664 137.381,6.976C137.381,6.49 137.24,6.107 136.959,5.825C136.694,5.543 136.335,5.403 135.882,5.403H134.384C134.321,5.403 134.274,5.442 134.243,5.52L133.822,9.112C133.79,9.19 133.822,9.23 133.915,9.23H135.414Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M148.937,6.201C149.374,6.201 149.733,6.295 150.014,6.483C150.123,6.577 150.154,6.694 150.107,6.835L149.194,10.122C149.132,10.294 149.015,10.356 148.843,10.31C148.593,10.247 148.367,10.216 148.164,10.216C147.93,10.216 147.719,10.247 147.532,10.31C147.141,10.388 146.798,10.583 146.501,10.896C146.221,11.194 146.057,11.562 146.01,12L145.237,18.222C145.221,18.3 145.182,18.37 145.12,18.433C145.073,18.48 145.011,18.503 144.933,18.503H141.701C141.623,18.503 141.561,18.48 141.514,18.433C141.467,18.37 141.452,18.3 141.467,18.222L142.896,6.647C142.896,6.569 142.927,6.506 142.989,6.459C143.052,6.397 143.122,6.365 143.2,6.365H146.408C146.58,6.365 146.665,6.459 146.665,6.647L146.572,7.422C146.556,7.484 146.556,7.523 146.572,7.539C146.603,7.539 146.634,7.516 146.665,7.469C147.274,6.623 148.031,6.201 148.937,6.201Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M154.787,18.691C153.382,18.691 152.281,18.323 151.485,17.588C150.689,16.852 150.291,15.85 150.291,14.583C150.26,13.972 150.307,13.252 150.432,12.423C150.51,11.577 150.65,10.834 150.853,10.192C151.165,8.956 151.805,7.977 152.773,7.257C153.741,6.537 154.919,6.177 156.309,6.177C157.698,6.177 158.783,6.537 159.563,7.257C160.344,7.977 160.75,8.948 160.781,10.169C160.828,10.748 160.789,11.491 160.664,12.399C160.601,13.025 160.476,13.737 160.289,14.536C159.977,15.835 159.329,16.852 158.346,17.588C157.378,18.323 156.192,18.691 154.787,18.691ZM155.185,15.357C155.528,15.357 155.825,15.24 156.074,15.005C156.324,14.755 156.512,14.426 156.636,14.019C156.746,13.471 156.832,12.939 156.894,12.423C156.941,12.047 156.98,11.499 157.011,10.779C156.995,10.388 156.894,10.083 156.707,9.863C156.519,9.629 156.254,9.511 155.911,9.511C155.567,9.511 155.271,9.629 155.021,9.863C154.771,10.083 154.592,10.388 154.482,10.779C154.389,11.123 154.295,11.671 154.201,12.423C154.139,12.986 154.092,13.518 154.061,14.019C154.092,14.426 154.201,14.755 154.389,15.005C154.576,15.24 154.841,15.357 155.185,15.357Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="1.2"
android:startX="160.8"
android:endY="33.5202"
android:endX="158.015"
android:type="linear">
<item android:offset="0.134002" android:color="#FFE83565"/>
<item android:offset="0.499751" android:color="#FF8644F7"/>
<item android:offset="0.878058" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="140dp"
android:height="104dp"
android:viewportWidth="140"
android:viewportHeight="104">
<path
android:pathData="M63.24,1.03L104.61,26.03C105.65,26.66 106.5,27.54 107.1,28.58C107.69,29.63 108,30.8 108,32C108,33.2 107.69,34.38 107.1,35.42C106.5,36.47 105.65,37.35 104.61,37.97L63.24,62.97C62.17,63.62 60.93,63.98 59.67,64C58.41,64.02 57.17,63.71 56.07,63.11C54.97,62.5 54.06,61.61 53.42,60.54C52.78,59.47 52.45,58.24 52.45,57V34.38C52.68,34.27 52.93,34.22 53.19,34.22C53.43,34.22 53.67,34.27 53.9,34.36C54.12,34.45 54.32,34.58 54.49,34.75C54.66,34.92 54.8,35.12 54.89,35.34C54.98,35.56 55.03,35.8 55.03,36.04V48.41C55.02,48.91 55.19,49.39 55.52,49.77C55.85,50.15 56.32,50.4 56.82,50.47C57.09,50.49 57.37,50.46 57.64,50.37C57.9,50.29 58.14,50.15 58.34,49.96C58.55,49.78 58.71,49.56 58.83,49.31C58.94,49.06 59,48.79 59,48.51V36C58.98,35.76 59.01,35.51 59.1,35.27C59.18,35.03 59.31,34.82 59.49,34.64C59.66,34.45 59.87,34.31 60.1,34.21C60.33,34.11 60.58,34.06 60.84,34.06C61.09,34.06 61.34,34.11 61.57,34.21C61.8,34.31 62.01,34.45 62.19,34.64C62.36,34.82 62.49,35.03 62.57,35.27C62.66,35.51 62.69,35.76 62.68,36V44.32C62.67,44.82 62.84,45.31 63.17,45.69C63.5,46.07 63.96,46.32 64.47,46.38C64.74,46.41 65.02,46.38 65.28,46.29C65.55,46.2 65.79,46.06 65.99,45.88C66.19,45.69 66.36,45.47 66.47,45.22C66.58,44.97 66.64,44.7 66.64,44.42V36C66.64,35.52 66.83,35.06 67.18,34.72C67.52,34.38 67.99,34.18 68.48,34.18C68.97,34.18 69.44,34.38 69.78,34.72C70.13,35.06 70.33,35.52 70.33,36V41.07C70.32,41.57 70.49,42.05 70.82,42.43C71.15,42.81 71.61,43.06 72.12,43.12C72.39,43.15 72.67,43.12 72.93,43.03C73.19,42.94 73.44,42.8 73.64,42.62C73.84,42.43 74.01,42.21 74.12,41.96C74.23,41.71 74.29,41.44 74.28,41.16V22.61C74.29,22.34 74.23,22.07 74.12,21.82C74.01,21.57 73.84,21.34 73.64,21.16C73.44,20.97 73.19,20.83 72.93,20.75C72.67,20.66 72.39,20.63 72.12,20.65C71.61,20.72 71.15,20.97 70.82,21.34C70.49,21.72 70.32,22.21 70.33,22.71V29.25C70.33,29.73 70.13,30.19 69.78,30.53C69.44,30.87 68.97,31.07 68.48,31.07C67.99,31.07 67.52,30.87 67.18,30.53C66.83,30.19 66.64,29.73 66.64,29.25V19.53C66.65,19.03 66.47,18.54 66.14,18.16C65.81,17.78 65.35,17.53 64.84,17.46C64.57,17.44 64.29,17.47 64.03,17.56C63.76,17.65 63.52,17.79 63.32,17.97C63.11,18.15 62.95,18.38 62.84,18.63C62.73,18.88 62.67,19.15 62.67,19.42V29.24C62.69,29.49 62.65,29.74 62.57,29.97C62.48,30.21 62.35,30.42 62.18,30.61C62,30.79 61.79,30.93 61.56,31.03C61.33,31.13 61.08,31.18 60.83,31.18C60.57,31.18 60.32,31.13 60.09,31.03C59.86,30.93 59.65,30.79 59.48,30.61C59.3,30.42 59.17,30.21 59.09,29.97C59,29.74 58.97,29.49 58.99,29.24V23.05C59,22.55 58.82,22.07 58.49,21.69C58.16,21.31 57.7,21.06 57.19,21C56.92,20.97 56.64,21 56.38,21.09C56.11,21.18 55.87,21.32 55.67,21.5C55.46,21.69 55.3,21.91 55.19,22.16C55.08,22.41 55.02,22.68 55.02,22.96V29.25C55.03,29.55 54.96,29.86 54.82,30.13C54.68,30.4 54.47,30.63 54.21,30.8C53.95,30.97 53.65,31.07 53.34,31.09C53.03,31.1 52.72,31.04 52.44,30.91V7C52.44,5.76 52.77,4.54 53.41,3.46C54.05,2.39 54.96,1.5 56.06,0.89C57.16,0.28 58.41,-0.02 59.67,0C60.93,0.03 62.17,0.38 63.24,1.03ZM51.34,15.77V29.24C51.33,29.59 51.43,29.93 51.62,30.23C51.8,30.52 52.07,30.76 52.39,30.91V34.34C52.06,34.48 51.78,34.71 51.58,35.01C51.39,35.3 51.29,35.65 51.29,36V41.69C51.29,41.97 51.23,42.24 51.12,42.49C51.01,42.74 50.85,42.96 50.64,43.15C50.44,43.33 50.2,43.47 49.93,43.56C49.67,43.65 49.39,43.68 49.12,43.65C48.61,43.59 48.15,43.34 47.82,42.96C47.49,42.58 47.32,42.1 47.32,41.6V36C47.34,35.76 47.31,35.51 47.22,35.27C47.14,35.03 47.01,34.82 46.83,34.64C46.66,34.45 46.45,34.31 46.22,34.21C45.99,34.11 45.74,34.06 45.48,34.06C45.23,34.06 44.98,34.11 44.75,34.21C44.52,34.31 44.31,34.45 44.13,34.64C43.96,34.82 43.83,35.03 43.75,35.27C43.66,35.51 43.63,35.76 43.64,36V46.23C43.65,46.51 43.59,46.78 43.48,47.03C43.37,47.28 43.2,47.51 43,47.69C42.79,47.88 42.55,48.02 42.29,48.1C42.02,48.19 41.74,48.22 41.47,48.19C40.96,48.13 40.51,47.88 40.17,47.5C39.84,47.12 39.67,46.64 39.68,46.14V36C39.68,35.52 39.48,35.06 39.14,34.72C38.79,34.38 38.32,34.18 37.83,34.18C37.34,34.18 36.87,34.38 36.53,34.72C36.18,35.06 35.99,35.52 35.99,36V39.65C35.99,39.93 35.93,40.2 35.82,40.45C35.71,40.71 35.54,40.93 35.33,41.12C35.13,41.3 34.88,41.44 34.62,41.53C34.35,41.61 34.07,41.64 33.79,41.61C33.29,41.55 32.83,41.3 32.5,40.92C32.17,40.54 31.99,40.06 32,39.56V25.35C32,25.07 32.06,24.79 32.18,24.54C32.29,24.28 32.46,24.05 32.67,23.87C32.89,23.68 33.14,23.54 33.41,23.46C33.68,23.38 33.97,23.35 34.25,23.39C34.75,23.46 35.21,23.7 35.54,24.08C35.87,24.46 36.05,24.95 36.04,25.45V29.24C36.04,29.72 36.23,30.18 36.58,30.52C36.93,30.87 37.4,31.06 37.88,31.06C38.37,31.06 38.84,30.87 39.19,30.52C39.54,30.18 39.73,29.72 39.73,29.24V21.43C39.73,21.16 39.79,20.89 39.9,20.64C40.01,20.39 40.17,20.17 40.38,19.98C40.58,19.8 40.82,19.66 41.08,19.57C41.35,19.48 41.62,19.45 41.9,19.48C42.4,19.54 42.86,19.79 43.19,20.17C43.52,20.55 43.7,21.03 43.69,21.53V29.24C43.67,29.49 43.71,29.74 43.79,29.97C43.87,30.21 44.01,30.42 44.18,30.61C44.35,30.79 44.56,30.93 44.79,31.03C45.03,31.13 45.28,31.18 45.53,31.18C45.78,31.18 46.03,31.13 46.26,31.03C46.5,30.93 46.71,30.79 46.88,30.61C47.05,30.42 47.18,30.21 47.27,29.97C47.35,29.74 47.39,29.49 47.37,29.24V15.66C47.37,15.39 47.43,15.12 47.54,14.87C47.65,14.62 47.82,14.39 48.02,14.21C48.23,14.03 48.47,13.89 48.73,13.8C48.99,13.71 49.27,13.68 49.55,13.7C50.05,13.77 50.51,14.01 50.84,14.4C51.17,14.78 51.35,15.27 51.34,15.77Z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startX="111.27"
android:startY="31.79"
android:endX="32"
android:endY="31.79"
android:type="linear">
<item android:offset="0" android:color="#FF8644F7"/>
<item android:offset="1" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M12.79,84.36C12.77,84.44 12.73,84.52 12.66,84.59C12.61,84.64 12.54,84.67 12.45,84.67H6.01C5.94,84.67 5.89,84.71 5.86,84.8L5.47,88.06C5.47,88.15 5.5,88.19 5.57,88.19H9.46C9.65,88.19 9.75,88.3 9.75,88.5L9.36,91.58C9.34,91.67 9.3,91.75 9.23,91.82C9.18,91.87 9.11,91.9 9.03,91.9H5.13C5.07,91.9 5.01,91.94 4.98,92.03L4.57,95.39C4.57,95.48 4.61,95.52 4.7,95.52H11.14C11.23,95.52 11.29,95.56 11.35,95.63C11.4,95.68 11.41,95.75 11.4,95.83L11.04,98.91C11.02,99 10.98,99.08 10.91,99.15C10.84,99.2 10.76,99.23 10.68,99.23H0.26C0.18,99.23 0.11,99.2 0.06,99.15C0.01,99.08 -0.01,99 0.01,98.91L2.15,81.28C2.16,81.19 2.2,81.12 2.25,81.07C2.32,81 2.39,80.97 2.48,80.97H12.89C13.08,80.97 13.18,81.07 13.18,81.28L12.79,84.36Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M21.5,86.05C21.52,85.97 21.55,85.9 21.61,85.84C21.67,85.77 21.75,85.74 21.84,85.74H25.39C25.48,85.74 25.55,85.77 25.6,85.84C25.65,85.9 25.67,85.97 25.65,86.05L23.51,103.69C23.5,103.77 23.45,103.84 23.38,103.9C23.33,103.96 23.26,104 23.18,104H19.62C19.54,104 19.47,103.96 19.42,103.9C19.36,103.84 19.35,103.77 19.36,103.69L20.01,98.5C20.01,98.44 19.99,98.42 19.96,98.42C19.92,98.4 19.89,98.41 19.85,98.44C19.2,99.1 18.32,99.43 17.2,99.43C16.03,99.43 15.15,99.01 14.57,98.16C14,97.29 13.72,96.08 13.72,94.53C13.72,94.13 13.76,93.51 13.85,92.68C14,91.51 14.19,90.57 14.42,89.83C14.85,88.48 15.43,87.43 16.17,86.68C16.92,85.91 17.82,85.53 18.85,85.53C19.95,85.53 20.76,85.87 21.3,86.55C21.33,86.58 21.37,86.6 21.4,86.6C21.43,86.58 21.45,86.55 21.45,86.5L21.5,86.05ZM20.37,94.43C20.52,93.92 20.64,93.28 20.73,92.5C20.82,91.66 20.86,91.17 20.86,91.01L20.83,90.62C20.8,90.18 20.7,89.84 20.52,89.6C20.35,89.36 20.1,89.23 19.78,89.23C19.45,89.23 19.17,89.36 18.93,89.6C18.69,89.84 18.5,90.18 18.36,90.62C18.22,91.12 18.11,91.75 18.02,92.5C18.01,92.63 17.98,92.86 17.95,93.17C17.91,93.49 17.9,93.76 17.9,93.98C17.9,94.17 17.9,94.32 17.92,94.43C17.96,94.83 18.06,95.15 18.23,95.39C18.42,95.62 18.67,95.73 18.98,95.73C19.32,95.73 19.61,95.62 19.85,95.39C20.09,95.15 20.27,94.83 20.37,94.43Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M34.65,86.05C34.65,85.97 34.68,85.9 34.75,85.84C34.82,85.77 34.9,85.74 34.98,85.74H38.51C38.7,85.74 38.8,85.84 38.8,86.05L37.22,98.91C37.21,99 37.16,99.08 37.1,99.15C37.04,99.2 36.97,99.23 36.89,99.23H33.33C33.25,99.23 33.18,99.2 33.13,99.15C33.07,99.08 33.06,99 33.07,98.91L33.15,98.29C33.17,98.23 33.16,98.21 33.13,98.21C33.09,98.19 33.06,98.21 33.02,98.26C32.35,99.04 31.42,99.43 30.21,99.43C29.2,99.43 28.38,99.14 27.74,98.55C27.12,97.94 26.81,97.05 26.81,95.89C26.81,95.73 26.83,95.46 26.86,95.08L27.97,86.05C27.97,85.97 28.01,85.9 28.08,85.84C28.14,85.77 28.22,85.74 28.31,85.74H31.84C32.03,85.74 32.12,85.84 32.12,86.05L31.14,94.11C31.12,94.2 31.12,94.32 31.12,94.48C31.12,94.86 31.21,95.17 31.4,95.39C31.59,95.6 31.85,95.7 32.2,95.7C32.54,95.7 32.84,95.59 33.1,95.37C33.36,95.14 33.53,94.83 33.62,94.45L34.65,86.05Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M47.95,86.05C47.97,85.97 48,85.9 48.06,85.84C48.12,85.77 48.2,85.74 48.29,85.74H51.84C51.93,85.74 52,85.77 52.05,85.84C52.1,85.9 52.12,85.97 52.1,86.05L50.56,98.91C50.54,99 50.5,99.08 50.43,99.15C50.38,99.2 50.31,99.23 50.22,99.23H46.66C46.58,99.23 46.51,99.2 46.46,99.15C46.41,99.08 46.39,99 46.41,98.91L46.51,98.05C46.51,97.93 46.46,97.92 46.35,98.03C45.65,98.97 44.72,99.43 43.57,99.43C42.42,99.43 41.54,99.06 40.92,98.31C40.3,97.55 39.98,96.5 39.96,95.16C39.95,95.09 39.94,94.95 39.94,94.74C39.94,94.29 40,93.53 40.12,92.47C40.27,91.11 40.46,90.17 40.69,89.65L40.74,89.5C41.06,88.26 41.62,87.3 42.41,86.6C43.2,85.89 44.17,85.53 45.32,85.53C46.46,85.53 47.26,85.97 47.72,86.86C47.74,86.91 47.76,86.93 47.8,86.91C47.83,86.9 47.86,86.86 47.88,86.81L47.95,86.05ZM46.74,94.56C46.93,94.02 47.08,93.33 47.18,92.5C47.25,91.99 47.28,91.5 47.28,91.01C47.28,90.73 47.27,90.52 47.26,90.38C47.22,90.03 47.11,89.76 46.92,89.55C46.73,89.34 46.47,89.23 46.15,89.23C45.84,89.23 45.56,89.34 45.3,89.55C45.06,89.76 44.89,90.03 44.78,90.38C44.59,90.92 44.45,91.63 44.34,92.5C44.28,93.26 44.24,93.77 44.24,94.03C44.24,94.28 44.25,94.45 44.27,94.56C44.3,94.92 44.41,95.21 44.6,95.42C44.79,95.63 45.04,95.73 45.35,95.73C45.69,95.73 45.99,95.63 46.23,95.42C46.47,95.19 46.64,94.9 46.74,94.56Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M53.06,99.23C52.97,99.23 52.9,99.2 52.85,99.15C52.8,99.08 52.78,99 52.8,98.91L54.94,81.28C54.96,81.19 54.99,81.12 55.04,81.07C55.11,81 55.19,80.97 55.27,80.97H58.83C58.92,80.97 58.98,81 59.04,81.07C59.09,81.12 59.11,81.19 59.09,81.28L56.95,98.91C56.93,99 56.89,99.08 56.82,99.15C56.77,99.2 56.7,99.23 56.61,99.23H53.06Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M63.02,84.54C62.44,84.54 61.96,84.36 61.6,83.99C61.26,83.63 61.09,83.16 61.09,82.58C61.09,81.83 61.33,81.22 61.81,80.73C62.29,80.24 62.88,80 63.59,80C64.15,80 64.61,80.17 64.95,80.52C65.31,80.87 65.49,81.33 65.49,81.9C65.49,82.65 65.25,83.28 64.77,83.78C64.31,84.29 63.72,84.54 63.02,84.54ZM59.46,99.23C59.38,99.23 59.31,99.2 59.26,99.15C59.21,99.08 59.19,99 59.21,98.91L60.78,86.05C60.78,85.97 60.81,85.9 60.88,85.84C60.95,85.77 61.03,85.74 61.11,85.74H64.64C64.83,85.74 64.93,85.84 64.93,86.05L63.35,98.91C63.34,99 63.29,99.08 63.23,99.15C63.17,99.2 63.11,99.23 63.02,99.23H59.46Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M65.48,99.23C65.39,99.23 65.32,99.2 65.27,99.15C65.22,99.08 65.2,99 65.22,98.91L65.63,95.52C65.63,95.38 65.69,95.26 65.79,95.16L70.74,89.81C70.79,89.76 70.81,89.72 70.79,89.7C70.77,89.67 70.74,89.65 70.69,89.65H66.79C66.6,89.65 66.51,89.55 66.51,89.34L66.92,86.05C66.94,85.97 66.97,85.9 67.03,85.84C67.09,85.77 67.17,85.74 67.26,85.74H75.99C76.08,85.74 76.15,85.77 76.2,85.84C76.25,85.9 76.27,85.97 76.25,86.05L75.84,89.44C75.82,89.6 75.75,89.72 75.63,89.81L70.5,95.16C70.44,95.26 70.46,95.31 70.58,95.31H74.99C75.07,95.31 75.14,95.35 75.2,95.42C75.25,95.47 75.26,95.54 75.25,95.63L74.86,98.91C74.84,99 74.8,99.08 74.73,99.15C74.68,99.2 74.61,99.23 74.53,99.23H65.48Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M88.7,90.64C88.62,91.7 88.51,92.62 88.39,93.38C88.38,93.59 88.27,93.7 88.06,93.7H81.51C81.43,93.7 81.38,93.74 81.38,93.83V94.06C81.38,94.29 81.39,94.45 81.41,94.56C81.44,94.92 81.57,95.21 81.77,95.42C81.99,95.63 82.3,95.73 82.67,95.73C83.36,95.73 83.88,95.43 84.22,94.84C84.31,94.67 84.43,94.6 84.61,94.63L87.72,95.29C87.95,95.32 88.01,95.44 87.9,95.65C87.36,96.89 86.6,97.83 85.64,98.47C84.69,99.11 83.58,99.43 82.31,99.43C80.59,99.43 79.31,99.02 78.47,98.18C77.63,97.35 77.21,96.13 77.21,94.53C77.21,93.9 77.26,93.22 77.36,92.47C77.4,92.09 77.45,91.67 77.52,91.22C77.61,90.77 77.7,90.37 77.8,90.04C78.15,88.67 78.85,87.57 79.92,86.76C80.98,85.94 82.25,85.53 83.73,85.53C85.33,85.53 86.57,86 87.47,86.94C88.36,87.88 88.77,89.11 88.7,90.64ZM83.32,89.23C82.97,89.23 82.67,89.35 82.42,89.57C82.16,89.78 81.97,90.08 81.85,90.46L81.69,91.19C81.68,91.28 81.71,91.32 81.8,91.32H84.35C84.43,91.32 84.48,91.28 84.48,91.19V90.46C84.46,90.1 84.35,89.8 84.14,89.57C83.95,89.35 83.68,89.23 83.32,89.23Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M97.94,85.56C98.42,85.56 98.82,85.66 99.12,85.87C99.25,85.97 99.28,86.1 99.23,86.26L98.22,89.91C98.15,90.1 98.03,90.17 97.84,90.12C97.56,90.05 97.31,90.02 97.09,90.02C96.83,90.02 96.6,90.05 96.39,90.12C95.96,90.21 95.59,90.43 95.26,90.77C94.95,91.1 94.77,91.51 94.72,92L93.87,98.91C93.85,99 93.81,99.08 93.74,99.15C93.69,99.2 93.62,99.23 93.53,99.23H89.98C89.89,99.23 89.82,99.2 89.77,99.15C89.72,99.08 89.7,99 89.72,98.91L91.29,86.05C91.29,85.97 91.32,85.9 91.39,85.84C91.46,85.77 91.54,85.74 91.63,85.74H95.16C95.35,85.74 95.44,85.84 95.44,86.05L95.34,86.91C95.32,86.98 95.32,87.03 95.34,87.04C95.37,87.04 95.41,87.02 95.44,86.97C96.11,86.03 96.94,85.56 97.94,85.56Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M113.71,80.97C115.15,80.97 116.29,81.4 117.14,82.27C117.98,83.14 118.4,84.31 118.4,85.79C118.4,86 118.38,86.31 118.35,86.73C118.14,88.42 117.49,89.77 116.39,90.8C115.29,91.83 113.94,92.34 112.34,92.34H110C109.93,92.34 109.88,92.38 109.84,92.47L109.07,98.91C109.05,99 109.01,99.08 108.94,99.15C108.89,99.2 108.82,99.23 108.74,99.23H105.18C105.09,99.23 105.02,99.2 104.97,99.15C104.92,99.08 104.9,99 104.92,98.91L107.06,81.28C107.08,81.19 107.11,81.12 107.16,81.07C107.23,81 107.31,80.97 107.39,80.97H113.71ZM112.06,88.92C112.68,88.92 113.19,88.7 113.61,88.24C114.02,87.79 114.22,87.18 114.22,86.42C114.22,85.88 114.07,85.45 113.76,85.14C113.47,84.83 113.07,84.67 112.57,84.67H110.93C110.86,84.67 110.81,84.71 110.77,84.8L110.31,88.79C110.27,88.88 110.31,88.92 110.41,88.92H112.06Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M126.94,85.56C127.42,85.56 127.82,85.66 128.13,85.87C128.25,85.97 128.28,86.1 128.23,86.26L127.23,89.91C127.16,90.1 127.03,90.17 126.84,90.12C126.57,90.05 126.32,90.02 126.09,90.02C125.83,90.02 125.6,90.05 125.4,90.12C124.97,90.21 124.59,90.43 124.26,90.77C123.95,91.1 123.77,91.51 123.72,92L122.87,98.91C122.85,99 122.81,99.08 122.74,99.15C122.69,99.2 122.62,99.23 122.54,99.23H118.98C118.89,99.23 118.82,99.2 118.77,99.15C118.72,99.08 118.71,99 118.72,98.91L120.29,86.05C120.29,85.97 120.33,85.9 120.4,85.84C120.47,85.77 120.54,85.74 120.63,85.74H124.16C124.35,85.74 124.44,85.84 124.44,86.05L124.34,86.91C124.32,86.98 124.32,87.03 124.34,87.04C124.37,87.04 124.41,87.02 124.44,86.97C125.11,86.03 125.95,85.56 126.94,85.56Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M133.38,99.43C131.84,99.43 130.62,99.03 129.75,98.21C128.87,97.39 128.43,96.28 128.43,94.87C128.4,94.19 128.45,93.39 128.59,92.47C128.67,91.53 128.83,90.7 129.05,89.99C129.4,88.62 130.1,87.53 131.16,86.73C132.23,85.93 133.53,85.53 135.06,85.53C136.59,85.53 137.78,85.93 138.64,86.73C139.5,87.53 139.95,88.61 139.98,89.97C140.03,90.61 139.99,91.43 139.85,92.44C139.78,93.14 139.64,93.93 139.44,94.82C139.09,96.26 138.38,97.39 137.3,98.21C136.23,99.03 134.93,99.43 133.38,99.43ZM133.82,95.73C134.2,95.73 134.52,95.6 134.8,95.34C135.07,95.06 135.28,94.7 135.42,94.24C135.54,93.63 135.63,93.04 135.7,92.47C135.75,92.05 135.79,91.44 135.83,90.64C135.81,90.21 135.7,89.87 135.49,89.63C135.29,89.37 135,89.23 134.62,89.23C134.24,89.23 133.91,89.37 133.64,89.63C133.36,89.87 133.17,90.21 133.05,90.64C132.94,91.03 132.84,91.63 132.74,92.47C132.67,93.1 132.62,93.69 132.58,94.24C132.62,94.7 132.74,95.06 132.94,95.34C133.15,95.6 133.44,95.73 133.82,95.73Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="140"
android:startY="80"
android:endX="136.88"
android:endY="115.91"
android:type="linear">
<item android:offset="0.13" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.88" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M15.635,2.124C15.962,1.292 17.138,1.292 17.465,2.124L17.893,3.214L18.978,3.643C19.807,3.971 19.807,5.147 18.978,5.475L17.893,5.905L17.465,6.994C17.138,7.826 15.962,7.826 15.635,6.994L15.207,5.905L14.122,5.475C13.293,5.147 13.293,3.971 14.122,3.643L15.207,3.214L15.635,2.124ZM16.55,2.53L16.965,3.585C17.064,3.839 17.264,4.04 17.518,4.141L18.575,4.559L17.518,4.978C17.264,5.078 17.064,5.279 16.965,5.533L16.55,6.588L16.135,5.533C16.035,5.279 15.835,5.078 15.581,4.978L14.524,4.559L15.581,4.141C15.835,4.04 16.035,3.839 16.135,3.585L16.55,2.53Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
<path
android:pathData="M3.314,3.314C4.733,1.895 7.034,1.895 8.453,3.314L20.686,15.547C22.105,16.966 22.105,19.267 20.686,20.686C19.267,22.105 16.966,22.105 15.547,20.686L3.314,8.453C1.895,7.034 1.895,4.733 3.314,3.314ZM7.392,4.375C6.559,3.542 5.208,3.542 4.375,4.375C3.542,5.208 3.542,6.559 4.375,7.392L5.961,8.978L8.978,5.961L7.392,4.375ZM16.608,19.625L7.022,10.039L10.039,7.022L19.625,16.608C20.458,17.441 20.458,18.792 19.625,19.625C18.792,20.458 17.441,20.458 16.608,19.625Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
<path
android:pathData="M21.332,8.947C21.005,8.114 19.829,8.114 19.502,8.947L19.347,9.34L18.956,9.495C18.127,9.823 18.127,10.999 18.956,11.327L19.347,11.482L19.502,11.875C19.829,12.708 21.005,12.708 21.332,11.875L21.486,11.482L21.878,11.327C22.707,10.999 22.707,9.823 21.878,9.495L21.486,9.34L21.332,8.947ZM20.417,9.352L20.276,9.712C20.176,9.965 19.976,10.167 19.722,10.267L19.358,10.411L19.722,10.555C19.976,10.656 20.176,10.857 20.276,11.11L20.417,11.47L20.558,11.11C20.658,10.857 20.858,10.656 21.112,10.555L21.476,10.411L21.112,10.267C20.858,10.167 20.658,9.965 20.558,9.712L20.417,9.352Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
<path
android:pathData="M4.668,15.124C4.995,14.292 6.171,14.292 6.498,15.124L6.653,15.518L7.044,15.672C7.873,16.001 7.873,17.177 7.044,17.505L6.653,17.66L6.498,18.053C6.171,18.886 4.995,18.886 4.668,18.053L4.513,17.66L4.122,17.505C3.293,17.177 3.293,16.001 4.122,15.672L4.513,15.518L4.668,15.124ZM5.442,15.889L5.583,15.53L5.724,15.889C5.824,16.143 6.024,16.344 6.278,16.445L6.642,16.589L6.278,16.733C6.024,16.833 5.824,17.035 5.724,17.288L5.583,17.648L5.442,17.288C5.342,17.035 5.142,16.833 4.888,16.733L4.524,16.589L4.888,16.445C5.142,16.344 5.342,16.143 5.442,15.889Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="46dp"
android:viewportWidth="40"
android:viewportHeight="46">
<path
android:pathData="M1.538,19.382C2.388,19.382 3.077,20.077 3.077,20.933V25.067C3.077,34.486 10.654,42.121 20,42.121C29.346,42.121 36.923,34.486 36.923,25.067V20.933C36.923,20.077 37.612,19.382 38.461,19.382C39.311,19.382 40,20.077 40,20.933V25.067C40,36.199 31.046,45.222 20,45.222C8.954,45.222 0,36.199 0,25.067V20.933C0,20.077 0.689,19.382 1.538,19.382Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M20,0.778C12.353,0.778 6.154,7.025 6.154,14.731V25.067C6.154,32.773 12.353,39.021 20,39.021C27.647,39.021 33.846,32.773 33.846,25.067V14.731C33.846,7.025 27.647,0.778 20,0.778ZM14.84,12.757C14.223,12.169 14.196,11.188 14.78,10.565L15.897,11.63C14.78,10.565 14.781,10.564 14.781,10.564L14.783,10.562L14.786,10.558L14.794,10.55L14.81,10.534C14.821,10.523 14.833,10.511 14.847,10.498C14.874,10.472 14.906,10.442 14.943,10.41C15.016,10.346 15.11,10.272 15.226,10.191C15.459,10.03 15.777,9.848 16.197,9.676C17.039,9.333 18.264,9.047 20,9.047C21.736,9.047 22.961,9.333 23.803,9.676C24.223,9.848 24.541,10.03 24.774,10.191C24.89,10.272 24.984,10.346 25.058,10.41C25.094,10.442 25.126,10.472 25.153,10.498C25.167,10.511 25.179,10.523 25.19,10.534L25.206,10.55L25.214,10.558L25.217,10.562L25.219,10.564C25.219,10.564 25.221,10.565 24.125,11.609L25.221,10.565C25.804,11.188 25.777,12.169 25.16,12.757C24.563,13.325 23.635,13.319 23.047,12.758L23.031,12.747C22.983,12.714 22.863,12.638 22.649,12.551C22.223,12.377 21.397,12.147 20,12.147C18.603,12.147 17.777,12.377 17.351,12.551C17.137,12.638 17.017,12.714 16.969,12.747L16.953,12.758C16.365,13.319 15.437,13.325 14.84,12.757ZM14.84,18.959C14.223,18.37 14.196,17.389 14.78,16.767L15.897,17.832C14.78,16.767 14.781,16.765 14.781,16.765L14.783,16.763L14.786,16.76L14.794,16.752L14.81,16.736C14.821,16.724 14.833,16.712 14.847,16.699C14.874,16.673 14.906,16.644 14.943,16.612C15.016,16.548 15.11,16.473 15.226,16.393C15.459,16.232 15.777,16.049 16.197,15.878C17.039,15.535 18.264,15.248 20,15.248C21.736,15.248 22.961,15.535 23.803,15.878C24.223,16.049 24.541,16.232 24.774,16.393C24.89,16.473 24.984,16.548 25.058,16.612C25.094,16.644 25.126,16.673 25.153,16.699C25.167,16.712 25.179,16.724 25.19,16.736L25.206,16.752L25.214,16.76L25.217,16.763L25.219,16.765C25.219,16.765 25.221,16.767 24.125,17.811L25.221,16.767C25.804,17.389 25.777,18.37 25.16,18.959C24.563,19.527 23.635,19.521 23.047,18.96L23.031,18.948C22.983,18.916 22.863,18.84 22.649,18.753C22.223,18.579 21.397,18.349 20,18.349C18.603,18.349 17.777,18.579 17.351,18.753C17.137,18.84 17.017,18.916 16.969,18.948L16.953,18.96C16.365,19.521 15.437,19.527 14.84,18.959Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12.75,12.508L21.25,9.108V14.7609C20.7449,14.4375 20.1443,14.25 19.5,14.25C17.7051,14.25 16.25,15.7051 16.25,17.5C16.25,19.2949 17.7051,20.75 19.5,20.75C21.2949,20.75 22.75,19.2949 22.75,17.5C22.75,17.5 22.75,17.5 22.75,17.5L22.75,7.9462C22.75,6.8034 22.75,5.845 22.6696,5.0813C22.6582,4.9734 22.6448,4.8661 22.63,4.766C22.5525,4.2443 22.4156,3.7576 22.1514,3.3512C22.0193,3.1479 21.8553,2.9648 21.6511,2.8074C21.6128,2.7779 21.573,2.7493 21.5319,2.7216L21.5236,2.7161C20.8164,2.2454 20.0213,2.2791 19.2023,2.4878C18.4102,2.6896 17.4282,3.1007 16.224,3.6047L14.13,4.4812C13.5655,4.7174 13.0873,4.9175 12.712,5.1248C12.3126,5.3453 11.9686,5.6055 11.7106,5.9931C11.4527,6.3808 11.3455,6.7985 11.2963,7.252C11.25,7.6783 11.25,8.1967 11.25,8.8086V16.7609C10.7448,16.4375 10.1443,16.25 9.5,16.25C7.7051,16.25 6.25,17.7051 6.25,19.5C6.25,21.2949 7.7051,22.75 9.5,22.75C11.2949,22.75 12.75,21.2949 12.75,19.5C12.75,19.5 12.75,19.5 12.75,19.5L12.75,12.508Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M7.75,2C7.75,1.5858 7.4142,1.25 7,1.25C6.5858,1.25 6.25,1.5858 6.25,2V7.7609C5.7449,7.4375 5.1443,7.25 4.5,7.25C2.7051,7.25 1.25,8.7051 1.25,10.5C1.25,12.2949 2.7051,13.75 4.5,13.75C6.2949,13.75 7.75,12.2949 7.75,10.5V5.0045C8.4485,5.5091 9.2795,5.75 10,5.75C10.4142,5.75 10.75,5.4142 10.75,5C10.75,4.5858 10.4142,4.25 10,4.25C9.5456,4.25 8.9663,4.0739 8.5116,3.6984C8.0784,3.3406 7.75,2.7978 7.75,2Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
<path
android:pathData="M11.1066,9.7649C12.2978,8.9957 12.2978,7.0043 11.1066,6.235L3.9139,1.5903C2.7561,0.8427 1.3333,1.8158 1.3333,3.3552V12.6447C1.3333,14.1842 2.7561,15.1573 3.9139,14.4097L11.1066,9.7649Z"
android:fillColor="#E1E1E1"/>
<path
android:pathData="M15.1667,3.3333C15.1667,3.0572 14.9428,2.8333 14.6667,2.8333C14.3905,2.8333 14.1667,3.0572 14.1667,3.3333V12.6666C14.1667,12.9428 14.3905,13.1666 14.6667,13.1666C14.9428,13.1666 15.1667,12.9428 15.1667,12.6666V3.3333Z"
android:fillColor="#E1E1E1"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="104dp"
android:height="104dp"
android:viewportWidth="104"
android:viewportHeight="104">
<path
android:pathData="M24,0L80,0A24,24 0,0 1,104 24L104,80A24,24 0,0 1,80 104L24,104A24,24 0,0 1,0 80L0,24A24,24 0,0 1,24 0z"
android:fillColor="#ffffff"
android:fillAlpha="0.15"/>
<path
android:pathData="M66.17,42C66.17,40.62 67.29,39.5 68.67,39.5C70.05,39.5 71.17,40.62 71.17,42C71.17,43.38 70.05,44.5 68.67,44.5C67.29,44.5 66.17,43.38 66.17,42Z"
android:fillColor="#E1E1E1"/>
<path
android:pathData="M34.5,52C34.5,46.02 39.35,41.17 45.33,41.17C51.32,41.17 56.17,46.02 56.17,52C56.17,57.98 51.32,62.83 45.33,62.83C39.35,62.83 34.5,57.98 34.5,52Z"
android:fillColor="#E1E1E1"/>
<path
android:pathData="M22.57,23.55C18.67,28.43 18.67,36.29 18.67,52C18.67,67.71 18.67,75.57 22.57,80.45C26.48,85.33 32.76,85.33 45.33,85.33H58.67C71.24,85.33 77.52,85.33 81.43,80.45C85.33,75.57 85.33,67.71 85.33,52C85.33,36.29 85.33,28.43 81.43,23.55C77.52,18.67 71.24,18.67 58.67,18.67H45.33C32.76,18.67 26.48,18.67 22.57,23.55ZM68.67,34.5C64.52,34.5 61.17,37.86 61.17,42C61.17,45.27 63.25,48.04 66.17,49.07V61.21C66.17,62.79 65.28,64.23 63.86,64.94L60.88,66.43C59.65,67.05 59.15,68.55 59.76,69.78C60.38,71.02 61.88,71.52 63.12,70.9L66.1,69.41C69.2,67.86 71.17,64.69 71.17,61.21V49.07C74.08,48.04 76.17,45.27 76.17,42C76.17,37.86 72.81,34.5 68.67,34.5ZM45.33,36.17C36.59,36.17 29.5,43.26 29.5,52C29.5,60.74 36.59,67.83 45.33,67.83C54.08,67.83 61.17,60.74 61.17,52C61.17,43.26 54.08,36.17 45.33,36.17Z"
android:fillColor="#E1E1E1"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillAlpha="0.25">
<aapt:attr name="android:fillColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.878" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M18,10.292C14.893,10.292 12.375,12.81 12.375,15.917C12.375,17.582 13.098,19.078 14.249,20.109L14.253,20.112C14.717,20.527 15.069,20.843 15.321,21.074C15.558,21.291 15.746,21.469 15.845,21.59L15.855,21.604C16.04,21.831 16.2,22.029 16.306,22.267C16.412,22.504 16.453,22.756 16.499,23.045L16.502,23.062C16.526,23.21 16.535,23.392 16.539,23.625H19.461C19.465,23.392 19.474,23.21 19.498,23.062L19.501,23.045C19.547,22.756 19.588,22.504 19.694,22.267C19.8,22.029 19.96,21.831 20.145,21.604L20.155,21.59C20.254,21.469 20.442,21.291 20.679,21.074C20.931,20.843 21.283,20.527 21.747,20.112L21.751,20.109C22.902,19.078 23.625,17.582 23.625,15.917C23.625,12.81 21.107,10.292 18,10.292ZM19.453,24.875H16.547C16.55,24.962 16.554,25.038 16.56,25.106C16.577,25.294 16.606,25.362 16.625,25.396C16.68,25.491 16.759,25.57 16.854,25.625C16.888,25.644 16.956,25.673 17.144,25.69C17.34,25.708 17.599,25.708 18,25.708C18.401,25.708 18.66,25.708 18.856,25.69C19.044,25.673 19.112,25.644 19.146,25.625C19.241,25.57 19.32,25.491 19.375,25.396C19.394,25.362 19.423,25.294 19.44,25.106C19.446,25.038 19.45,24.962 19.453,24.875ZM11.125,15.917C11.125,12.12 14.203,9.042 18,9.042C21.797,9.042 24.875,12.12 24.875,15.917C24.875,17.952 23.99,19.782 22.585,21.04C22.116,21.459 21.77,21.77 21.524,21.995C21.401,22.108 21.307,22.196 21.237,22.264C21.203,22.297 21.176,22.324 21.157,22.344C21.147,22.355 21.14,22.363 21.134,22.369C21.129,22.375 21.127,22.378 21.127,22.378C20.91,22.645 20.863,22.714 20.835,22.777C20.807,22.839 20.787,22.92 20.732,23.26C20.711,23.394 20.708,23.624 20.708,24.25V24.277C20.708,24.643 20.708,24.959 20.685,25.219C20.66,25.493 20.605,25.765 20.457,26.021C20.293,26.306 20.056,26.543 19.771,26.707C19.515,26.855 19.243,26.91 18.969,26.935C18.709,26.958 18.393,26.958 18.027,26.958H17.973C17.607,26.958 17.291,26.958 17.031,26.935C16.757,26.91 16.485,26.855 16.229,26.707C15.944,26.543 15.707,26.306 15.543,26.021C15.395,25.765 15.34,25.493 15.315,25.219C15.292,24.959 15.292,24.643 15.292,24.277L15.292,24.25C15.292,23.624 15.29,23.394 15.268,23.26C15.213,22.92 15.193,22.839 15.165,22.777C15.137,22.714 15.09,22.645 14.873,22.378C14.873,22.378 14.871,22.374 14.866,22.369C14.86,22.363 14.853,22.355 14.843,22.344C14.824,22.324 14.797,22.297 14.763,22.264C14.693,22.196 14.599,22.108 14.476,21.995C14.231,21.77 13.884,21.459 13.415,21.04C12.01,19.782 11.125,17.952 11.125,15.917Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M19.018,14.575C19.299,14.775 19.364,15.166 19.163,15.447L18.083,16.958H19.369C19.603,16.958 19.817,17.089 19.925,17.297C20.032,17.506 20.014,17.756 19.878,17.947L18.092,20.447C17.891,20.728 17.501,20.793 17.22,20.592C16.939,20.391 16.874,20.001 17.075,19.72L18.154,18.208H16.869C16.635,18.208 16.42,18.077 16.313,17.869C16.206,17.661 16.224,17.411 16.36,17.22L18.146,14.72C18.347,14.439 18.737,14.374 19.018,14.575Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000">
<aapt:attr name="android:strokeColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.878" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillAlpha="0.25">
<aapt:attr name="android:fillColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#9F9F9F"/>
<item android:offset="0.5" android:color="#9F9F9F"/>
<item android:offset="0.878" android:color="#9F9F9F"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M18,10.292C14.893,10.292 12.375,12.81 12.375,15.917C12.375,17.582 13.098,19.078 14.249,20.109L14.253,20.112C14.717,20.527 15.069,20.843 15.321,21.074C15.558,21.291 15.746,21.469 15.845,21.59L15.855,21.604C16.04,21.831 16.2,22.029 16.306,22.267C16.412,22.504 16.453,22.756 16.499,23.045L16.502,23.062C16.526,23.21 16.535,23.392 16.539,23.625H19.461C19.465,23.392 19.474,23.21 19.498,23.062L19.501,23.045C19.547,22.756 19.588,22.504 19.694,22.267C19.8,22.029 19.96,21.831 20.145,21.604L20.155,21.59C20.254,21.469 20.442,21.291 20.679,21.074C20.931,20.843 21.283,20.527 21.747,20.112L21.751,20.109C22.902,19.078 23.625,17.582 23.625,15.917C23.625,12.81 21.107,10.292 18,10.292ZM19.453,24.875H16.547C16.55,24.962 16.554,25.038 16.56,25.106C16.577,25.294 16.606,25.362 16.625,25.396C16.68,25.491 16.759,25.57 16.854,25.625C16.888,25.644 16.956,25.673 17.144,25.69C17.34,25.708 17.599,25.708 18,25.708C18.401,25.708 18.66,25.708 18.856,25.69C19.044,25.673 19.112,25.644 19.146,25.625C19.241,25.57 19.32,25.491 19.375,25.396C19.394,25.362 19.423,25.294 19.44,25.106C19.446,25.038 19.45,24.962 19.453,24.875ZM11.125,15.917C11.125,12.12 14.203,9.042 18,9.042C21.797,9.042 24.875,12.12 24.875,15.917C24.875,17.952 23.99,19.782 22.585,21.04C22.116,21.459 21.77,21.77 21.524,21.995C21.401,22.108 21.307,22.196 21.237,22.264C21.203,22.297 21.176,22.324 21.157,22.344C21.147,22.355 21.14,22.363 21.134,22.369C21.129,22.375 21.127,22.378 21.127,22.378C20.91,22.645 20.863,22.714 20.835,22.777C20.807,22.839 20.787,22.92 20.732,23.26C20.711,23.394 20.708,23.624 20.708,24.25V24.277C20.708,24.643 20.708,24.959 20.685,25.219C20.66,25.493 20.605,25.765 20.457,26.021C20.293,26.306 20.056,26.543 19.771,26.707C19.515,26.855 19.243,26.91 18.969,26.935C18.709,26.958 18.393,26.958 18.027,26.958H17.973C17.607,26.958 17.291,26.958 17.031,26.935C16.757,26.91 16.485,26.855 16.229,26.707C15.944,26.543 15.707,26.306 15.543,26.021C15.395,25.765 15.34,25.493 15.315,25.219C15.292,24.959 15.292,24.643 15.292,24.277L15.292,24.25C15.292,23.624 15.29,23.394 15.268,23.26C15.213,22.92 15.193,22.839 15.165,22.777C15.137,22.714 15.09,22.645 14.873,22.378C14.873,22.378 14.871,22.374 14.866,22.369C14.86,22.363 14.853,22.355 14.843,22.344C14.824,22.324 14.797,22.297 14.763,22.264C14.693,22.196 14.599,22.108 14.476,21.995C14.231,21.77 13.884,21.459 13.415,21.04C12.01,19.782 11.125,17.952 11.125,15.917Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M19.018,14.575C19.299,14.775 19.364,15.166 19.163,15.447L18.083,16.958H19.369C19.603,16.958 19.817,17.089 19.925,17.297C20.032,17.506 20.014,17.756 19.878,17.947L18.092,20.447C17.891,20.728 17.501,20.793 17.22,20.592C16.939,20.391 16.874,20.001 17.075,19.72L18.154,18.208H16.869C16.635,18.208 16.42,18.077 16.313,17.869C16.206,17.661 16.224,17.411 16.36,17.22L18.146,14.72C18.347,14.439 18.737,14.374 19.018,14.575Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000">
<aapt:attr name="android:strokeColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#9F9F9F"/>
<item android:offset="0.5" android:color="#9F9F9F"/>
<item android:offset="0.878" android:color="#9F9F9F"/>
</gradient>
</aapt:attr>
</path>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="80dp"
android:height="60dp"
android:viewportWidth="80"
android:viewportHeight="60">
<path
android:pathData="M8,0L72,0A8,8 0,0 1,80 8L80,52A8,8 0,0 1,72 60L8,60A8,8 0,0 1,0 52L0,8A8,8 0,0 1,8 0z"
android:fillColor="#434343"/>
<group>
<clip-path
android:pathData="M4,14h72v32h-72z"/>
<path
android:pathData="M26.187,37.08C26.079,37.08 25.975,37.03 25.899,36.941C25.822,36.852 25.779,36.731 25.779,36.605V26.741C25.779,26.615 25.822,26.494 25.899,26.406C25.975,26.317 26.079,26.267 26.187,26.267C26.295,26.267 26.398,26.317 26.475,26.406C26.551,26.495 26.594,26.615 26.594,26.741V36.605C26.594,36.731 26.551,36.852 26.475,36.94C26.398,37.03 26.295,37.08 26.187,37.08Z"
android:fillColor="#626262"/>
<path
android:pathData="M27.504,32.963C27.396,32.963 27.293,32.913 27.216,32.825C27.14,32.736 27.097,32.615 27.097,32.489V27.503C27.097,27.377 27.14,27.256 27.216,27.167C27.293,27.079 27.396,27.028 27.504,27.028C27.612,27.028 27.716,27.079 27.792,27.167C27.869,27.256 27.912,27.377 27.912,27.503V32.489C27.912,32.615 27.869,32.736 27.792,32.825C27.716,32.914 27.612,32.963 27.504,32.963Z"
android:fillColor="#626262"/>
<path
android:pathData="M22.294,32.02H22.184C22.138,32.02 22.092,32.01 22.049,31.989C22.007,31.969 21.968,31.938 21.935,31.9C21.902,31.862 21.876,31.817 21.858,31.767C21.841,31.717 21.832,31.664 21.832,31.61V26.687C21.832,26.561 21.875,26.441 21.951,26.352C22.028,26.263 22.132,26.213 22.24,26.213C22.347,26.213 22.451,26.263 22.527,26.352C22.604,26.441 22.647,26.561 22.647,26.687V31.61C22.647,31.719 22.61,31.823 22.543,31.9C22.477,31.977 22.388,32.02 22.294,32.02Z"
android:fillColor="#626262"/>
<path
android:pathData="M39.351,29.869C39.298,29.869 39.244,29.857 39.195,29.833C39.146,29.809 39.1,29.774 39.063,29.73C39.025,29.686 38.995,29.634 38.974,29.576C38.954,29.518 38.943,29.457 38.943,29.394V20.913C38.943,20.787 38.986,20.667 39.063,20.578C39.139,20.489 39.243,20.439 39.351,20.439C39.459,20.439 39.563,20.489 39.639,20.578C39.715,20.667 39.758,20.788 39.758,20.913V29.394C39.758,29.52 39.715,29.641 39.639,29.73C39.563,29.819 39.459,29.869 39.351,29.869Z"
android:fillColor="#626262"/>
<path
android:pathData="M39.351,19.827C39.243,19.827 39.139,19.777 39.063,19.688C38.986,19.599 38.943,19.479 38.943,19.353V17.984C38.943,17.858 38.986,17.737 39.063,17.648C39.139,17.559 39.243,17.509 39.351,17.509C39.459,17.509 39.563,17.559 39.639,17.648C39.715,17.737 39.758,17.858 39.758,17.984V19.353C39.758,19.479 39.715,19.599 39.639,19.688C39.563,19.777 39.459,19.827 39.351,19.827Z"
android:fillColor="#626262"/>
<path
android:pathData="M39.351,30.142H39.35C39.125,30.142 38.943,30.354 38.943,30.616V41.668C38.943,41.93 39.125,42.142 39.35,42.142H39.351C39.576,42.142 39.758,41.93 39.758,41.668V30.616C39.758,30.354 39.576,30.142 39.351,30.142Z"
android:fillColor="#626262"/>
<path
android:pathData="M40.667,36.845C40.559,36.845 40.456,36.795 40.379,36.706C40.303,36.617 40.26,36.496 40.26,36.37V23.621C40.26,23.496 40.303,23.375 40.379,23.286C40.456,23.197 40.559,23.147 40.667,23.147C40.775,23.147 40.879,23.197 40.955,23.286C41.032,23.375 41.075,23.496 41.075,23.621V36.37C41.075,36.496 41.032,36.617 40.955,36.706C40.879,36.795 40.775,36.845 40.667,36.845Z"
android:fillColor="#626262"/>
<path
android:pathData="M38.034,25.656C37.926,25.655 37.823,25.605 37.746,25.516C37.67,25.427 37.627,25.306 37.627,25.18V19.619C37.627,19.493 37.67,19.373 37.746,19.284C37.823,19.195 37.926,19.145 38.034,19.145C38.142,19.145 38.246,19.195 38.322,19.284C38.399,19.373 38.442,19.493 38.442,19.619V25.18C38.442,25.306 38.399,25.427 38.323,25.516C38.246,25.605 38.142,25.656 38.034,25.656Z"
android:fillColor="#626262"/>
<path
android:pathData="M38.034,44.041C37.926,44.041 37.823,43.99 37.746,43.901C37.67,43.812 37.627,43.692 37.627,43.566V26.532C37.627,26.407 37.67,26.286 37.746,26.197C37.823,26.108 37.926,26.058 38.034,26.057C38.142,26.057 38.246,26.107 38.323,26.197C38.399,26.286 38.442,26.406 38.442,26.532V43.566C38.442,43.628 38.431,43.69 38.411,43.748C38.39,43.805 38.361,43.857 38.323,43.902C38.285,43.946 38.24,43.981 38.19,44.005C38.141,44.028 38.088,44.041 38.034,44.041Z"
android:fillColor="#626262"/>
<path
android:pathData="M23.61,34.202H23.501C23.455,34.202 23.409,34.192 23.366,34.171C23.323,34.15 23.284,34.12 23.251,34.082C23.218,34.044 23.192,33.999 23.175,33.949C23.157,33.899 23.148,33.845 23.148,33.791V26.59C23.148,26.464 23.191,26.343 23.267,26.254C23.344,26.165 23.448,26.115 23.556,26.115C23.663,26.115 23.767,26.165 23.843,26.254C23.92,26.343 23.963,26.464 23.963,26.59V33.791C23.963,33.9 23.926,34.005 23.859,34.082C23.793,34.159 23.704,34.202 23.61,34.202Z"
android:fillColor="#626262"/>
<path
android:pathData="M23.61,25.726H23.501C23.455,25.726 23.409,25.715 23.366,25.695C23.323,25.674 23.284,25.644 23.251,25.606C23.218,25.567 23.192,25.522 23.175,25.472C23.157,25.422 23.148,25.369 23.148,25.315V23.985C23.148,23.859 23.191,23.739 23.267,23.649C23.344,23.56 23.447,23.51 23.556,23.51C23.609,23.51 23.662,23.523 23.712,23.546C23.761,23.57 23.806,23.605 23.844,23.649C23.881,23.694 23.911,23.746 23.932,23.804C23.952,23.861 23.963,23.923 23.963,23.985V25.319C23.962,25.427 23.924,25.531 23.858,25.607C23.792,25.683 23.703,25.726 23.61,25.726Z"
android:fillColor="#626262"/>
<path
android:pathData="M35.402,41.577C35.51,41.577 35.614,41.527 35.69,41.438C35.766,41.349 35.809,41.228 35.809,41.102V14.474C35.809,14.349 35.766,14.228 35.69,14.139C35.614,14.05 35.51,14 35.402,14C35.294,14 35.191,14.05 35.114,14.139C35.038,14.228 34.995,14.348 34.994,14.474V41.102C34.994,41.228 35.037,41.349 35.114,41.438C35.19,41.527 35.294,41.577 35.402,41.577Z"
android:fillColor="#626262"/>
<path
android:pathData="M35.402,46H35.402C35.627,46 35.809,45.788 35.809,45.526V42.54C35.809,42.278 35.627,42.065 35.402,42.065H35.402C35.177,42.065 34.994,42.278 34.994,42.54V45.526C34.994,45.788 35.177,46 35.402,46Z"
android:fillColor="#626262"/>
<path
android:pathData="M31.453,43.837C31.561,43.837 31.665,43.787 31.741,43.698C31.818,43.609 31.861,43.488 31.861,43.362V16.627C31.861,16.501 31.818,16.38 31.741,16.291C31.665,16.202 31.561,16.152 31.453,16.152C31.345,16.152 31.241,16.202 31.165,16.291C31.089,16.38 31.046,16.501 31.046,16.627V43.362C31.046,43.488 31.089,43.609 31.165,43.698C31.241,43.787 31.345,43.837 31.453,43.837Z"
android:fillColor="#626262"/>
<path
android:pathData="M32.77,33.627H32.77C32.995,33.627 33.177,33.415 33.177,33.153V20.152C33.177,19.889 32.995,19.677 32.77,19.677H32.77C32.545,19.677 32.362,19.889 32.362,20.152V33.153C32.362,33.415 32.545,33.627 32.77,33.627Z"
android:fillColor="#626262"/>
<path
android:pathData="M32.77,40.714H32.77C32.995,40.714 33.177,40.502 33.177,40.24V34.374C33.177,34.112 32.995,33.9 32.77,33.9H32.77C32.545,33.9 32.362,34.112 32.362,34.374V40.24C32.362,40.502 32.545,40.714 32.77,40.714Z"
android:fillColor="#626262"/>
<path
android:pathData="M34.086,43.533C34.194,43.533 34.298,43.483 34.374,43.394C34.45,43.305 34.493,43.184 34.493,43.058V24.27C34.493,24.144 34.45,24.023 34.374,23.934C34.297,23.845 34.194,23.795 34.086,23.795C33.978,23.795 33.874,23.845 33.798,23.934C33.721,24.023 33.679,24.144 33.679,24.27V43.058C33.679,43.184 33.721,43.305 33.798,43.394C33.874,43.483 33.978,43.533 34.086,43.533Z"
android:fillColor="#626262"/>
<path
android:pathData="M34.085,23.329H34.086C34.31,23.329 34.493,23.117 34.493,22.855V18.985C34.493,18.723 34.31,18.51 34.086,18.51H34.085C33.86,18.51 33.678,18.723 33.678,18.985V22.855C33.678,23.117 33.86,23.329 34.085,23.329Z"
android:fillColor="#626262"/>
<path
android:pathData="M34.086,18.044C34.194,18.044 34.298,17.994 34.374,17.905C34.45,17.816 34.493,17.695 34.493,17.569V16.281C34.493,16.155 34.45,16.034 34.374,15.945C34.297,15.856 34.194,15.806 34.086,15.806C33.978,15.806 33.874,15.856 33.798,15.945C33.721,16.034 33.679,16.155 33.679,16.281V17.569C33.679,17.695 33.721,17.816 33.798,17.905C33.874,17.994 33.978,18.044 34.086,18.044Z"
android:fillColor="#626262"/>
<path
android:pathData="M30.137,38.146C30.244,38.145 30.346,38.095 30.422,38.007C30.498,37.919 30.541,37.8 30.541,37.675V22.321C30.541,22.259 30.531,22.197 30.51,22.139C30.49,22.082 30.46,22.029 30.422,21.985C30.384,21.941 30.34,21.906 30.29,21.882C30.241,21.859 30.188,21.847 30.134,21.847C30.081,21.847 30.028,21.859 29.978,21.882C29.929,21.906 29.884,21.941 29.846,21.985C29.808,22.029 29.778,22.082 29.757,22.139C29.737,22.197 29.726,22.258 29.726,22.321V37.675C29.727,37.801 29.771,37.921 29.848,38.01C29.925,38.098 30.029,38.147 30.137,38.146Z"
android:fillColor="#626262"/>
<path
android:pathData="M36.718,39.659C36.772,39.659 36.825,39.647 36.874,39.623C36.924,39.6 36.968,39.565 37.006,39.521C37.044,39.477 37.074,39.424 37.095,39.367C37.115,39.309 37.125,39.247 37.125,39.185V20.807C37.125,20.681 37.083,20.561 37.006,20.472C36.93,20.383 36.826,20.333 36.718,20.333C36.61,20.333 36.507,20.383 36.43,20.472C36.354,20.56 36.311,20.681 36.311,20.807V39.185C36.311,39.247 36.321,39.309 36.341,39.367C36.362,39.424 36.392,39.477 36.43,39.521C36.468,39.565 36.513,39.6 36.562,39.623C36.612,39.647 36.665,39.659 36.718,39.659Z"
android:fillColor="#626262"/>
<path
android:pathData="M28.821,34.849C28.713,34.849 28.609,34.799 28.532,34.709C28.456,34.62 28.413,34.5 28.413,34.373V25.618C28.413,25.493 28.456,25.372 28.532,25.282C28.609,25.193 28.713,25.143 28.821,25.143C28.929,25.144 29.032,25.194 29.109,25.283C29.185,25.372 29.228,25.493 29.228,25.618V34.373C29.228,34.499 29.185,34.62 29.109,34.709C29.032,34.798 28.929,34.848 28.821,34.849Z"
android:fillColor="#626262"/>
<path
android:pathData="M20.923,30.463C20.815,30.463 20.711,30.413 20.635,30.324C20.559,30.235 20.516,30.114 20.516,29.988V28.245C20.516,28.119 20.559,27.999 20.635,27.91C20.711,27.821 20.815,27.77 20.923,27.77C21.031,27.77 21.135,27.82 21.211,27.909C21.288,27.999 21.331,28.119 21.331,28.245V29.988C21.331,30.114 21.288,30.235 21.211,30.324C21.135,30.413 21.031,30.463 20.923,30.463Z"
android:fillColor="#626262"/>
<path
android:pathData="M59.077,30.275C58.969,30.275 58.866,30.226 58.789,30.136C58.713,30.048 58.67,29.927 58.669,29.801V28.058C58.669,27.932 58.712,27.811 58.789,27.722C58.865,27.633 58.969,27.583 59.077,27.583C59.185,27.583 59.289,27.633 59.365,27.722C59.441,27.811 59.484,27.932 59.484,28.058V29.801C59.484,29.927 59.441,30.048 59.365,30.136C59.289,30.225 59.185,30.275 59.077,30.275Z"
android:fillColor="#626262"/>
<path
android:pathData="M24.927,31.451H24.817C24.723,31.451 24.634,31.408 24.568,31.331C24.501,31.254 24.464,31.149 24.464,31.04V21.57C24.464,21.507 24.475,21.445 24.496,21.388C24.516,21.33 24.546,21.277 24.584,21.233C24.622,21.189 24.667,21.154 24.717,21.131C24.767,21.107 24.82,21.095 24.874,21.095C24.982,21.095 25.085,21.145 25.162,21.234C25.238,21.323 25.281,21.444 25.281,21.57V31.04C25.281,31.095 25.272,31.148 25.254,31.198C25.236,31.248 25.21,31.294 25.177,31.332C25.144,31.37 25.105,31.4 25.062,31.42C25.019,31.441 24.973,31.451 24.927,31.451Z"
android:fillColor="#626262"/>
<path
android:pathData="M24.927,37.814H24.817C24.771,37.814 24.725,37.803 24.682,37.782C24.639,37.762 24.6,37.731 24.568,37.693C24.535,37.655 24.509,37.61 24.491,37.56C24.473,37.51 24.464,37.457 24.464,37.403V32.491C24.464,32.365 24.507,32.244 24.584,32.155C24.66,32.066 24.764,32.016 24.872,32.016C24.979,32.016 25.083,32.066 25.16,32.155C25.236,32.244 25.279,32.365 25.279,32.491V37.403C25.279,37.457 25.27,37.51 25.253,37.56C25.235,37.61 25.209,37.655 25.176,37.693C25.143,37.731 25.104,37.762 25.062,37.782C25.019,37.803 24.973,37.814 24.927,37.814Z"
android:fillColor="#626262"/>
<path
android:pathData="M52.514,42.628C52.406,42.628 52.302,42.578 52.226,42.489C52.149,42.401 52.106,42.28 52.106,42.154V18.296C52.106,18.17 52.149,18.049 52.225,17.96C52.302,17.871 52.406,17.821 52.514,17.821C52.622,17.821 52.725,17.871 52.802,17.961C52.878,18.049 52.921,18.17 52.921,18.296V42.154C52.921,42.28 52.878,42.4 52.802,42.489C52.725,42.578 52.622,42.628 52.514,42.628Z"
android:fillColor="#626262"/>
<path
android:pathData="M45.932,40.991C45.824,40.991 45.721,40.941 45.644,40.852C45.568,40.763 45.525,40.643 45.525,40.517V28.564C45.525,28.438 45.568,28.317 45.644,28.228C45.721,28.139 45.824,28.089 45.932,28.089C46.04,28.089 46.144,28.139 46.22,28.229C46.297,28.318 46.34,28.438 46.34,28.564V40.517C46.34,40.643 46.297,40.763 46.22,40.852C46.144,40.941 46.04,40.991 45.932,40.991Z"
android:fillColor="#626262"/>
<path
android:pathData="M53.83,33.642C53.722,33.642 53.618,33.592 53.542,33.503C53.465,33.414 53.423,33.293 53.423,33.167V21.956C53.423,21.83 53.466,21.71 53.542,21.621C53.618,21.532 53.722,21.482 53.83,21.482C53.883,21.482 53.936,21.494 53.986,21.518C54.035,21.542 54.08,21.576 54.118,21.62C54.156,21.664 54.186,21.717 54.207,21.774C54.227,21.832 54.238,21.894 54.238,21.956V33.166C54.238,33.228 54.227,33.29 54.207,33.348C54.187,33.406 54.157,33.458 54.119,33.502C54.081,33.547 54.036,33.582 53.986,33.606C53.937,33.63 53.883,33.642 53.83,33.642Z"
android:fillColor="#626262"/>
<path
android:pathData="M53.83,38.561C53.722,38.561 53.618,38.511 53.542,38.422C53.466,38.333 53.423,38.212 53.423,38.087V34.56C53.423,34.435 53.466,34.314 53.542,34.225C53.618,34.136 53.722,34.086 53.83,34.086C53.883,34.086 53.936,34.098 53.986,34.122C54.035,34.146 54.08,34.181 54.118,34.225C54.156,34.269 54.186,34.321 54.207,34.379C54.227,34.436 54.238,34.498 54.238,34.56V38.087C54.238,38.149 54.227,38.211 54.207,38.268C54.186,38.326 54.156,38.378 54.118,38.422C54.08,38.466 54.035,38.501 53.986,38.525C53.936,38.549 53.883,38.561 53.83,38.561Z"
android:fillColor="#626262"/>
<path
android:pathData="M51.197,27.583C51.089,27.583 50.986,27.533 50.909,27.444C50.833,27.355 50.79,27.234 50.79,27.108V25.128C50.79,25.002 50.833,24.882 50.909,24.792C50.986,24.703 51.089,24.653 51.197,24.653C51.251,24.653 51.304,24.665 51.353,24.689C51.403,24.713 51.448,24.748 51.485,24.792C51.523,24.836 51.553,24.889 51.574,24.946C51.594,25.004 51.605,25.066 51.605,25.128V27.108C51.605,27.234 51.562,27.355 51.485,27.444C51.409,27.533 51.305,27.583 51.197,27.583Z"
android:fillColor="#626262"/>
<path
android:pathData="M51.197,45.377C51.089,45.377 50.986,45.327 50.909,45.238C50.833,45.149 50.79,45.028 50.79,44.902V28.768C50.79,28.642 50.833,28.521 50.909,28.432C50.986,28.343 51.089,28.293 51.197,28.293C51.305,28.293 51.409,28.343 51.485,28.432C51.562,28.521 51.605,28.642 51.605,28.768V44.902C51.605,45.028 51.562,45.149 51.485,45.238C51.409,45.327 51.305,45.377 51.197,45.377Z"
android:fillColor="#626262"/>
<path
android:pathData="M49.881,41.18C49.773,41.18 49.669,41.131 49.593,41.042C49.516,40.953 49.473,40.832 49.473,40.706V28.375C49.473,28.313 49.484,28.251 49.504,28.193C49.525,28.135 49.555,28.083 49.593,28.039C49.631,27.995 49.675,27.96 49.725,27.936C49.775,27.912 49.827,27.9 49.881,27.9C49.935,27.9 49.988,27.912 50.037,27.936C50.086,27.96 50.131,27.995 50.169,28.039C50.207,28.083 50.237,28.136 50.257,28.193C50.278,28.251 50.288,28.313 50.288,28.375V40.706C50.288,40.832 50.245,40.953 50.169,41.042C50.093,41.131 49.989,41.18 49.881,41.18Z"
android:fillColor="#626262"/>
<path
android:pathData="M55.147,39.195C55.039,39.195 54.935,39.145 54.859,39.056C54.782,38.966 54.739,38.846 54.739,38.72V28.564C54.74,28.439 54.783,28.319 54.86,28.23C54.936,28.142 55.04,28.092 55.147,28.092C55.255,28.093 55.359,28.143 55.435,28.232C55.511,28.321 55.554,28.442 55.554,28.567V38.722C55.554,38.847 55.511,38.967 55.434,39.056C55.358,39.145 55.255,39.194 55.147,39.195Z"
android:fillColor="#626262"/>
<path
android:pathData="M47.248,35.074C47.14,35.074 47.037,35.024 46.96,34.935C46.884,34.846 46.841,34.725 46.841,34.599V27.448C46.841,27.322 46.884,27.201 46.96,27.112C47.037,27.023 47.14,26.973 47.248,26.973C47.356,26.973 47.46,27.023 47.537,27.112C47.613,27.201 47.656,27.322 47.656,27.448V34.599C47.656,34.725 47.613,34.846 47.537,34.935C47.46,35.024 47.356,35.074 47.248,35.074Z"
android:fillColor="#626262"/>
<path
android:pathData="M47.249,35.389H47.248C47.023,35.389 46.841,35.601 46.841,35.863V43.408C46.841,43.67 47.023,43.882 47.248,43.882H47.249C47.474,43.882 47.656,43.67 47.656,43.408V35.863C47.656,35.601 47.474,35.389 47.249,35.389Z"
android:fillColor="#626262"/>
<path
android:pathData="M43.3,34.086C43.192,34.086 43.088,34.036 43.011,33.947C42.935,33.858 42.892,33.737 42.892,33.611V26.381C42.892,26.319 42.902,26.257 42.923,26.199C42.943,26.142 42.973,26.09 43.011,26.045C43.049,26.001 43.094,25.966 43.144,25.943C43.193,25.919 43.246,25.907 43.3,25.907C43.353,25.907 43.406,25.919 43.456,25.943C43.505,25.966 43.55,26.001 43.588,26.045C43.626,26.09 43.656,26.142 43.676,26.199C43.696,26.257 43.707,26.319 43.707,26.381V33.611C43.707,33.673 43.696,33.735 43.676,33.793C43.656,33.85 43.626,33.903 43.588,33.947C43.55,33.991 43.505,34.026 43.456,34.05C43.406,34.074 43.353,34.086 43.3,34.086Z"
android:fillColor="#626262"/>
<path
android:pathData="M41.984,36.447C41.875,36.447 41.772,36.397 41.695,36.308C41.619,36.219 41.576,36.098 41.576,35.972V24.02C41.576,23.894 41.619,23.773 41.695,23.684C41.772,23.595 41.875,23.545 41.984,23.545C42.092,23.545 42.195,23.595 42.272,23.684C42.348,23.773 42.391,23.894 42.391,24.02V35.972C42.391,36.098 42.348,36.218 42.272,36.308C42.195,36.397 42.092,36.447 41.984,36.447Z"
android:fillColor="#626262"/>
<path
android:pathData="M44.616,39.411C44.508,39.411 44.404,39.361 44.328,39.272C44.251,39.183 44.209,39.063 44.209,38.937V30.144C44.209,30.018 44.251,29.897 44.328,29.809C44.404,29.719 44.508,29.669 44.616,29.669C44.724,29.669 44.828,29.719 44.904,29.808C44.98,29.897 45.023,30.018 45.023,30.144V38.937C45.023,39.063 44.98,39.183 44.904,39.272C44.827,39.361 44.724,39.411 44.616,39.411Z"
android:fillColor="#626262"/>
<path
android:pathData="M48.565,39.323C48.457,39.323 48.353,39.273 48.277,39.184C48.201,39.095 48.158,38.974 48.157,38.848V30.232C48.157,30.106 48.2,29.985 48.277,29.896C48.353,29.807 48.457,29.757 48.565,29.757C48.673,29.757 48.777,29.807 48.853,29.896C48.929,29.985 48.972,30.106 48.972,30.232V38.848C48.972,38.974 48.929,39.095 48.853,39.184C48.777,39.273 48.673,39.323 48.565,39.323Z"
android:fillColor="#626262"/>
<path
android:pathData="M57.778,31.797C57.67,31.796 57.567,31.746 57.491,31.657C57.414,31.568 57.371,31.447 57.371,31.322V26.537C57.371,26.411 57.414,26.29 57.491,26.201C57.567,26.112 57.671,26.062 57.778,26.062C57.887,26.062 57.99,26.112 58.067,26.201C58.143,26.29 58.186,26.411 58.186,26.537V31.322C58.186,31.384 58.176,31.446 58.155,31.503C58.135,31.561 58.105,31.613 58.067,31.657C58.029,31.701 57.984,31.736 57.935,31.76C57.885,31.784 57.832,31.797 57.778,31.797Z"
android:fillColor="#626262"/>
<path
android:pathData="M56.46,30.522C56.352,30.522 56.249,30.472 56.172,30.383C56.096,30.294 56.053,30.173 56.053,30.048V25.652C56.053,25.526 56.096,25.406 56.172,25.316C56.249,25.227 56.352,25.177 56.46,25.177C56.514,25.177 56.567,25.19 56.616,25.213C56.666,25.237 56.711,25.272 56.749,25.316C56.786,25.361 56.816,25.413 56.837,25.471C56.857,25.528 56.868,25.59 56.868,25.652V30.048C56.868,30.11 56.857,30.171 56.836,30.229C56.816,30.287 56.786,30.339 56.748,30.383C56.71,30.427 56.666,30.462 56.616,30.486C56.567,30.51 56.514,30.522 56.46,30.522Z"
android:fillColor="#626262"/>
<path
android:pathData="M56.46,33.507C56.407,33.507 56.354,33.495 56.304,33.471C56.255,33.447 56.21,33.412 56.172,33.368C56.134,33.324 56.104,33.272 56.084,33.214C56.063,33.157 56.053,33.095 56.053,33.033V31.313C56.053,31.188 56.096,31.067 56.172,30.978C56.249,30.889 56.352,30.839 56.46,30.839C56.568,30.839 56.672,30.889 56.748,30.978C56.825,31.067 56.868,31.188 56.868,31.313V33.037C56.867,33.162 56.824,33.282 56.747,33.37C56.671,33.458 56.568,33.507 56.46,33.507Z"
android:fillColor="#626262"/>
<path
android:pathData="M26.187,26.693C26.079,26.693 25.975,26.743 25.899,26.832C25.822,26.92 25.779,27.041 25.779,27.167V35.797C25.777,35.861 25.786,35.925 25.805,35.985C25.824,36.045 25.854,36.099 25.892,36.146C25.93,36.192 25.976,36.229 26.027,36.254C26.077,36.279 26.132,36.292 26.187,36.292C26.241,36.292 26.296,36.279 26.346,36.254C26.397,36.229 26.443,36.192 26.481,36.146C26.519,36.099 26.548,36.045 26.568,35.985C26.587,35.925 26.596,35.861 26.594,35.797V27.167C26.594,27.105 26.583,27.043 26.563,26.986C26.542,26.928 26.513,26.876 26.475,26.832C26.437,26.788 26.392,26.753 26.343,26.729C26.293,26.705 26.24,26.693 26.187,26.693Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="31.483"
android:endX="71.585"
android:endY="31.483"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M27.504,27.368C27.396,27.368 27.293,27.417 27.216,27.507C27.14,27.595 27.097,27.716 27.097,27.842V32.151C27.097,32.277 27.14,32.397 27.216,32.486C27.293,32.575 27.396,32.625 27.504,32.625C27.612,32.625 27.716,32.575 27.792,32.486C27.869,32.397 27.912,32.277 27.912,32.151V27.842C27.912,27.716 27.869,27.595 27.792,27.506C27.716,27.417 27.612,27.368 27.504,27.368Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.997"
android:endX="71.584"
android:endY="29.997"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M22.24,26.643C22.132,26.643 22.028,26.693 21.951,26.782C21.875,26.871 21.832,26.991 21.832,27.117V31.376C21.832,31.43 21.841,31.484 21.858,31.534C21.876,31.583 21.902,31.629 21.935,31.667C21.967,31.705 22.006,31.736 22.049,31.756C22.092,31.777 22.138,31.788 22.184,31.788H22.294C22.34,31.788 22.386,31.777 22.429,31.756C22.472,31.736 22.511,31.705 22.544,31.667C22.576,31.629 22.602,31.583 22.62,31.534C22.638,31.484 22.647,31.43 22.647,31.376V27.119C22.647,27.057 22.636,26.995 22.616,26.937C22.596,26.879 22.566,26.827 22.528,26.783C22.49,26.738 22.445,26.703 22.396,26.679C22.346,26.655 22.293,26.643 22.24,26.643Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.217"
android:endX="71.585"
android:endY="29.217"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M39.351,21.53C39.243,21.53 39.139,21.58 39.063,21.669C38.986,21.758 38.943,21.879 38.943,22.004V29.409C38.941,29.473 38.95,29.537 38.969,29.597C38.989,29.657 39.018,29.711 39.056,29.757C39.095,29.804 39.14,29.84 39.191,29.865C39.241,29.891 39.296,29.904 39.351,29.904C39.406,29.904 39.46,29.891 39.511,29.865C39.561,29.84 39.607,29.804 39.645,29.757C39.683,29.711 39.713,29.657 39.732,29.597C39.751,29.537 39.76,29.473 39.758,29.409V22.004C39.758,21.879 39.715,21.758 39.639,21.669C39.563,21.58 39.459,21.53 39.351,21.53Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="25.707"
android:endX="71.585"
android:endY="25.707"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M39.351,18.934C39.298,18.934 39.244,18.946 39.195,18.97C39.146,18.994 39.1,19.028 39.063,19.073C39.025,19.117 38.995,19.169 38.974,19.226C38.954,19.284 38.943,19.346 38.943,19.408V20.513C38.943,20.576 38.954,20.637 38.974,20.695C38.995,20.753 39.025,20.805 39.063,20.849C39.1,20.893 39.146,20.928 39.195,20.952C39.244,20.976 39.297,20.988 39.351,20.988C39.459,20.988 39.563,20.938 39.639,20.849C39.715,20.76 39.758,20.639 39.758,20.513V19.408C39.758,19.282 39.715,19.162 39.639,19.073C39.563,18.984 39.459,18.934 39.351,18.934Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="19.961"
android:endX="71.585"
android:endY="19.961"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M39.351,30.126C39.243,30.126 39.139,30.176 39.063,30.264C38.986,30.353 38.943,30.474 38.943,30.6V40.282C38.941,40.346 38.95,40.41 38.969,40.47C38.989,40.529 39.018,40.584 39.056,40.63C39.095,40.676 39.14,40.713 39.191,40.738C39.241,40.764 39.296,40.776 39.351,40.776C39.406,40.776 39.46,40.764 39.511,40.738C39.561,40.713 39.607,40.676 39.645,40.63C39.683,40.584 39.713,40.529 39.732,40.47C39.751,40.41 39.76,40.346 39.758,40.282V30.6C39.758,30.474 39.715,30.354 39.639,30.264C39.563,30.176 39.459,30.126 39.351,30.126Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="35.441"
android:endX="71.585"
android:endY="35.441"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M40.667,23.929C40.559,23.929 40.456,23.979 40.379,24.068C40.303,24.157 40.26,24.278 40.26,24.403V35.589C40.264,35.712 40.309,35.828 40.385,35.913C40.461,35.998 40.562,36.045 40.667,36.045C40.773,36.045 40.874,35.998 40.95,35.913C41.026,35.828 41.07,35.712 41.075,35.589V24.403C41.075,24.278 41.032,24.157 40.955,24.068C40.879,23.979 40.775,23.929 40.667,23.929Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.997"
android:endX="71.584"
android:endY="29.997"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M38.034,20.383C37.926,20.383 37.823,20.433 37.746,20.522C37.67,20.611 37.627,20.732 37.627,20.858V25.677C37.632,25.799 37.676,25.915 37.752,26C37.828,26.085 37.929,26.132 38.035,26.132C38.14,26.132 38.241,26.085 38.317,26C38.393,25.915 38.438,25.799 38.442,25.677V20.858C38.442,20.732 38.399,20.611 38.322,20.522C38.246,20.433 38.142,20.383 38.034,20.383Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="23.267"
android:endX="71.584"
android:endY="23.267"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M38.034,26.507C37.926,26.507 37.823,26.558 37.746,26.646C37.67,26.735 37.627,26.856 37.627,26.982V41.96C37.632,42.083 37.676,42.198 37.752,42.283C37.828,42.368 37.929,42.416 38.035,42.416C38.14,42.416 38.241,42.368 38.317,42.283C38.393,42.198 38.438,42.083 38.442,41.96V26.982C38.442,26.856 38.399,26.735 38.322,26.646C38.246,26.558 38.142,26.507 38.034,26.507Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="34.473"
android:endX="71.584"
android:endY="34.473"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M23.556,26.562C23.447,26.562 23.344,26.612 23.267,26.701C23.191,26.791 23.148,26.911 23.148,27.037V33.319C23.148,33.428 23.185,33.532 23.251,33.61C23.317,33.687 23.407,33.73 23.501,33.73H23.61C23.656,33.73 23.702,33.719 23.745,33.699C23.788,33.678 23.827,33.648 23.86,33.61C23.892,33.571 23.918,33.526 23.936,33.476C23.954,33.426 23.963,33.373 23.963,33.319V27.037C23.963,26.975 23.952,26.913 23.932,26.856C23.911,26.798 23.881,26.746 23.844,26.701C23.806,26.657 23.761,26.622 23.712,26.598C23.662,26.575 23.609,26.562 23.556,26.562Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="30.14"
android:endX="71.585"
android:endY="30.14"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M23.556,24.247C23.447,24.247 23.344,24.297 23.267,24.386C23.191,24.475 23.148,24.596 23.148,24.722V25.803C23.148,25.912 23.185,26.016 23.251,26.093C23.318,26.17 23.407,26.214 23.501,26.214H23.61C23.704,26.214 23.793,26.17 23.859,26.093C23.926,26.016 23.963,25.912 23.963,25.803V24.722C23.963,24.66 23.952,24.598 23.932,24.541C23.911,24.483 23.881,24.431 23.844,24.386C23.806,24.342 23.761,24.307 23.712,24.283C23.662,24.259 23.609,24.247 23.556,24.247Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="25.23"
android:endX="71.585"
android:endY="25.23"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M35.402,15.826C35.294,15.826 35.19,15.876 35.114,15.965C35.037,16.054 34.994,16.175 34.994,16.301V39.782C34.999,39.904 35.044,40.02 35.12,40.105C35.195,40.19 35.297,40.237 35.402,40.237C35.507,40.237 35.608,40.19 35.684,40.105C35.76,40.02 35.805,39.904 35.809,39.782V16.301C35.809,16.175 35.766,16.054 35.69,15.965C35.614,15.876 35.51,15.826 35.402,15.826Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="28.041"
android:endX="71.585"
android:endY="28.041"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M35.402,40.689C35.294,40.689 35.191,40.739 35.114,40.828C35.038,40.917 34.995,41.038 34.994,41.164V43.699C34.992,43.763 35.001,43.827 35.021,43.887C35.04,43.947 35.07,44.002 35.108,44.048C35.146,44.094 35.191,44.131 35.242,44.156C35.293,44.181 35.347,44.194 35.402,44.194C35.457,44.194 35.511,44.181 35.562,44.156C35.612,44.131 35.658,44.094 35.696,44.048C35.734,44.002 35.764,43.947 35.783,43.887C35.803,43.827 35.812,43.763 35.809,43.699V41.164C35.809,41.038 35.766,40.917 35.69,40.828C35.614,40.739 35.51,40.689 35.402,40.689Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="42.432"
android:endX="71.585"
android:endY="42.432"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M31.453,17.735C31.345,17.735 31.241,17.785 31.165,17.874C31.089,17.963 31.046,18.083 31.046,18.209V41.782C31.05,41.904 31.095,42.02 31.171,42.105C31.247,42.19 31.348,42.237 31.453,42.237C31.559,42.237 31.66,42.19 31.736,42.105C31.812,42.02 31.856,41.904 31.861,41.782V18.209C31.861,18.083 31.817,17.963 31.741,17.874C31.665,17.785 31.561,17.735 31.453,17.735Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.997"
android:endX="71.584"
android:endY="29.997"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M32.77,20.855C32.662,20.855 32.558,20.905 32.481,20.994C32.405,21.083 32.362,21.204 32.362,21.33V32.738C32.36,32.802 32.368,32.866 32.388,32.926C32.407,32.986 32.437,33.04 32.475,33.086C32.513,33.133 32.559,33.169 32.609,33.194C32.66,33.22 32.714,33.233 32.769,33.233C32.824,33.233 32.879,33.22 32.929,33.194C32.98,33.169 33.025,33.133 33.063,33.086C33.102,33.04 33.131,32.986 33.151,32.926C33.17,32.866 33.179,32.802 33.177,32.738V21.328C33.176,21.202 33.133,21.082 33.057,20.994C32.981,20.905 32.877,20.855 32.77,20.855Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="27.034"
android:endX="71.585"
android:endY="27.034"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M32.77,33.455C32.661,33.455 32.558,33.505 32.481,33.594C32.405,33.683 32.362,33.804 32.362,33.93V39.017C32.36,39.081 32.368,39.145 32.388,39.204C32.407,39.264 32.437,39.319 32.475,39.365C32.513,39.411 32.559,39.448 32.609,39.473C32.66,39.498 32.714,39.511 32.769,39.511C32.824,39.511 32.879,39.498 32.929,39.473C32.98,39.448 33.025,39.411 33.063,39.365C33.102,39.319 33.131,39.264 33.151,39.204C33.17,39.145 33.179,39.081 33.177,39.017V33.93C33.177,33.804 33.134,33.683 33.057,33.594C32.981,33.505 32.878,33.455 32.77,33.455Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="36.474"
android:endX="71.585"
android:endY="36.474"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M34.086,24.503C33.978,24.503 33.874,24.554 33.798,24.643C33.721,24.732 33.679,24.852 33.679,24.978V41.515C33.683,41.637 33.728,41.753 33.804,41.838C33.88,41.923 33.981,41.97 34.086,41.97C34.191,41.97 34.292,41.923 34.368,41.838C34.444,41.753 34.489,41.637 34.493,41.515V24.978C34.493,24.916 34.483,24.854 34.462,24.796C34.442,24.739 34.412,24.687 34.374,24.642C34.336,24.598 34.291,24.563 34.242,24.539C34.192,24.515 34.139,24.503 34.086,24.503Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="33.246"
android:endX="71.585"
android:endY="33.246"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M34.086,24.09C34.194,24.09 34.297,24.04 34.374,23.951C34.45,23.862 34.493,23.742 34.493,23.616V20.296C34.489,20.173 34.444,20.057 34.368,19.972C34.292,19.888 34.191,19.84 34.086,19.84C33.981,19.84 33.88,19.888 33.804,19.972C33.728,20.057 33.683,20.173 33.679,20.296V23.616C33.679,23.742 33.721,23.862 33.798,23.951C33.874,24.04 33.978,24.09 34.086,24.09Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="21.956"
android:endX="71.584"
android:endY="21.956"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M34.086,19.408C34.194,19.408 34.297,19.358 34.374,19.269C34.45,19.18 34.493,19.06 34.493,18.934V17.901C34.496,17.837 34.487,17.773 34.467,17.713C34.448,17.653 34.418,17.598 34.38,17.552C34.342,17.506 34.296,17.469 34.246,17.444C34.195,17.419 34.141,17.406 34.086,17.406C34.031,17.406 33.977,17.419 33.926,17.444C33.875,17.469 33.83,17.506 33.792,17.552C33.754,17.598 33.724,17.653 33.704,17.713C33.685,17.773 33.676,17.837 33.679,17.901V18.934C33.679,19.06 33.721,19.18 33.798,19.269C33.874,19.358 33.978,19.408 34.086,19.408Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="18.417"
android:endX="71.585"
android:endY="18.417"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M30.137,22.778C30.029,22.778 29.925,22.827 29.849,22.916C29.772,23.005 29.729,23.126 29.729,23.252V36.742C29.733,36.864 29.778,36.98 29.854,37.065C29.93,37.15 30.031,37.197 30.136,37.197C30.242,37.197 30.343,37.15 30.419,37.065C30.495,36.98 30.54,36.864 30.544,36.742V23.251C30.544,23.125 30.501,23.005 30.424,22.916C30.348,22.827 30.245,22.778 30.137,22.778Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.997"
android:endX="71.585"
android:endY="29.997"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M36.718,21.436C36.665,21.436 36.612,21.448 36.562,21.472C36.513,21.496 36.468,21.531 36.43,21.574C36.392,21.619 36.362,21.671 36.342,21.729C36.321,21.786 36.311,21.848 36.311,21.91V38.083C36.308,38.146 36.317,38.21 36.337,38.27C36.356,38.33 36.386,38.385 36.424,38.431C36.462,38.477 36.507,38.514 36.558,38.539C36.609,38.564 36.663,38.577 36.718,38.577C36.773,38.577 36.827,38.564 36.878,38.539C36.928,38.514 36.974,38.477 37.012,38.431C37.05,38.385 37.08,38.33 37.099,38.27C37.119,38.21 37.128,38.146 37.125,38.083V21.91C37.125,21.848 37.115,21.786 37.095,21.729C37.074,21.671 37.044,21.619 37.006,21.575C36.968,21.531 36.924,21.496 36.874,21.472C36.825,21.448 36.772,21.436 36.718,21.436Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.997"
android:endX="71.585"
android:endY="29.997"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M28.821,25.697C28.713,25.697 28.609,25.747 28.532,25.837C28.456,25.926 28.413,26.046 28.413,26.173V33.823C28.411,33.887 28.42,33.951 28.439,34.01C28.459,34.07 28.488,34.125 28.526,34.171C28.564,34.217 28.61,34.254 28.661,34.279C28.711,34.304 28.766,34.317 28.82,34.317C28.875,34.317 28.93,34.304 28.98,34.279C29.031,34.254 29.077,34.217 29.115,34.171C29.153,34.125 29.183,34.07 29.202,34.01C29.221,33.951 29.23,33.887 29.228,33.823V26.173C29.228,26.047 29.185,25.926 29.109,25.837C29.032,25.748 28.929,25.698 28.821,25.697Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.997"
android:endX="71.585"
android:endY="29.997"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M20.923,28.025C20.815,28.025 20.711,28.075 20.635,28.164C20.559,28.253 20.516,28.373 20.516,28.499V28.807H4.207C4.152,28.807 4.099,28.833 4.059,28.879C4.02,28.925 3.998,28.987 3.998,29.051C3.998,29.116 4.02,29.178 4.059,29.224C4.099,29.27 4.152,29.295 4.207,29.295H20.519V29.936C20.519,30.061 20.562,30.182 20.638,30.271C20.715,30.36 20.818,30.41 20.926,30.41C21.034,30.41 21.138,30.36 21.214,30.271C21.291,30.182 21.334,30.061 21.334,29.936V28.499C21.334,28.436 21.323,28.374 21.302,28.316C21.282,28.259 21.251,28.206 21.213,28.162C21.175,28.118 21.13,28.083 21.08,28.06C21.03,28.036 20.977,28.024 20.923,28.025Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.217"
android:endX="71.584"
android:endY="29.217"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M24.874,22.111C24.766,22.111 24.662,22.162 24.586,22.25C24.509,22.339 24.466,22.46 24.466,22.586V30.875C24.466,30.928 24.475,30.982 24.493,31.032C24.511,31.082 24.537,31.127 24.569,31.166C24.602,31.204 24.641,31.234 24.684,31.255C24.727,31.275 24.773,31.286 24.819,31.286H24.929C25.022,31.286 25.112,31.242 25.178,31.165C25.244,31.088 25.281,30.983 25.281,30.875V22.586C25.281,22.46 25.238,22.339 25.162,22.25C25.085,22.162 24.982,22.111 24.874,22.111Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="26.698"
android:endX="71.585"
android:endY="26.698"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M24.874,31.79C24.766,31.79 24.662,31.84 24.586,31.929C24.509,32.018 24.466,32.139 24.466,32.264V36.511C24.466,36.62 24.504,36.725 24.57,36.802C24.636,36.879 24.726,36.922 24.819,36.922H24.929C24.975,36.922 25.021,36.911 25.064,36.891C25.107,36.87 25.145,36.84 25.178,36.802C25.211,36.764 25.237,36.718 25.254,36.669C25.272,36.619 25.281,36.565 25.281,36.511V32.264C25.281,32.139 25.238,32.018 25.162,31.929C25.085,31.84 24.982,31.79 24.874,31.79Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="34.356"
android:endX="71.585"
android:endY="34.356"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M52.514,19.211C52.406,19.211 52.302,19.261 52.226,19.35C52.149,19.439 52.106,19.559 52.106,19.685V40.713C52.104,40.777 52.113,40.84 52.132,40.9C52.152,40.96 52.181,41.015 52.219,41.061C52.257,41.107 52.303,41.144 52.354,41.169C52.404,41.194 52.458,41.207 52.513,41.207C52.568,41.207 52.623,41.194 52.673,41.169C52.724,41.144 52.77,41.107 52.808,41.061C52.846,41.015 52.875,40.96 52.895,40.9C52.914,40.84 52.923,40.777 52.921,40.713V19.685C52.921,19.559 52.878,19.439 52.802,19.35C52.725,19.261 52.622,19.211 52.514,19.211Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="30.199"
android:endX="71.584"
android:endY="30.199"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M45.932,28.307C45.879,28.307 45.826,28.32 45.776,28.344C45.727,28.367 45.682,28.402 45.644,28.447C45.606,28.491 45.576,28.543 45.556,28.601C45.535,28.658 45.525,28.72 45.525,28.782V39.262C45.522,39.326 45.531,39.39 45.551,39.45C45.57,39.51 45.6,39.565 45.638,39.611C45.676,39.657 45.722,39.694 45.772,39.719C45.823,39.744 45.877,39.757 45.932,39.757C45.987,39.757 46.041,39.744 46.092,39.719C46.143,39.694 46.188,39.657 46.226,39.611C46.264,39.565 46.294,39.51 46.313,39.45C46.333,39.39 46.342,39.326 46.34,39.262V28.782C46.34,28.657 46.297,28.536 46.22,28.447C46.144,28.358 46.04,28.308 45.932,28.307Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="34.022"
android:endX="71.584"
android:endY="34.022"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M53.83,22.455C53.722,22.455 53.618,22.505 53.542,22.594C53.466,22.683 53.423,22.804 53.423,22.93V32.754C53.42,32.818 53.429,32.882 53.449,32.942C53.468,33.002 53.498,33.056 53.536,33.103C53.574,33.149 53.62,33.186 53.67,33.211C53.721,33.236 53.775,33.249 53.83,33.249C53.885,33.249 53.939,33.236 53.99,33.211C54.041,33.186 54.086,33.149 54.124,33.103C54.162,33.056 54.192,33.002 54.211,32.942C54.231,32.882 54.24,32.818 54.238,32.754V22.93C54.237,22.804 54.194,22.683 54.118,22.594C54.041,22.505 53.938,22.455 53.83,22.455Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="27.84"
android:endX="71.584"
android:endY="27.84"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M53.83,33.62C53.722,33.62 53.618,33.67 53.542,33.759C53.466,33.848 53.423,33.968 53.423,34.094V37.111C53.427,37.234 53.472,37.35 53.548,37.435C53.624,37.52 53.725,37.567 53.83,37.567C53.935,37.567 54.036,37.52 54.112,37.435C54.188,37.35 54.233,37.234 54.238,37.111V34.094C54.237,33.968 54.194,33.847 54.118,33.759C54.041,33.67 53.938,33.62 53.83,33.62Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="35.602"
android:endX="71.584"
android:endY="35.602"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M51.197,25.263C51.089,25.263 50.986,25.313 50.909,25.402C50.833,25.491 50.79,25.612 50.79,25.738V27.384C50.788,27.448 50.797,27.511 50.816,27.571C50.835,27.631 50.865,27.686 50.903,27.732C50.941,27.778 50.987,27.815 51.037,27.84C51.088,27.865 51.143,27.878 51.197,27.878C51.252,27.878 51.307,27.865 51.357,27.84C51.408,27.815 51.454,27.778 51.492,27.732C51.53,27.686 51.559,27.631 51.579,27.571C51.598,27.511 51.607,27.448 51.605,27.384V25.738C51.605,25.612 51.562,25.491 51.485,25.402C51.409,25.313 51.305,25.263 51.197,25.263Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="26.561"
android:endX="71.584"
android:endY="26.561"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M51.197,28.488C51.089,28.488 50.986,28.538 50.909,28.627C50.833,28.716 50.79,28.837 50.79,28.963V43.151C50.79,43.277 50.833,43.397 50.909,43.486C50.986,43.575 51.089,43.625 51.197,43.625C51.305,43.625 51.409,43.575 51.485,43.486C51.562,43.397 51.605,43.277 51.605,43.151V28.963C51.605,28.837 51.562,28.716 51.485,28.627C51.409,28.538 51.305,28.488 51.197,28.488Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="36.055"
android:endX="71.584"
android:endY="36.055"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M49.881,28.14C49.773,28.14 49.669,28.19 49.593,28.279C49.516,28.368 49.473,28.488 49.473,28.614V39.431C49.478,39.553 49.522,39.669 49.598,39.754C49.674,39.839 49.776,39.886 49.881,39.886C49.986,39.886 50.087,39.839 50.163,39.754C50.239,39.669 50.284,39.553 50.288,39.431V28.614C50.288,28.488 50.245,28.368 50.169,28.279C50.093,28.19 49.989,28.14 49.881,28.14Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="34.022"
android:endX="71.584"
android:endY="34.022"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M55.147,28.307C55.094,28.307 55.041,28.32 54.991,28.344C54.942,28.367 54.897,28.402 54.859,28.447C54.821,28.491 54.791,28.543 54.77,28.601C54.75,28.658 54.739,28.72 54.739,28.782V37.675C54.744,37.798 54.789,37.913 54.864,37.998C54.94,38.083 55.042,38.131 55.147,38.131C55.252,38.131 55.353,38.083 55.429,37.998C55.505,37.913 55.55,37.798 55.554,37.675V28.782C55.554,28.657 55.511,28.536 55.435,28.447C55.359,28.358 55.255,28.308 55.147,28.307Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="33.227"
android:endX="71.584"
android:endY="33.227"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M47.248,27.317C47.14,27.317 47.037,27.367 46.96,27.456C46.884,27.545 46.841,27.665 46.841,27.791V34.02C46.839,34.084 46.848,34.148 46.867,34.208C46.887,34.268 46.916,34.322 46.954,34.368C46.993,34.415 47.038,34.451 47.089,34.477C47.139,34.502 47.194,34.515 47.249,34.515C47.304,34.515 47.358,34.502 47.409,34.477C47.459,34.451 47.505,34.415 47.543,34.368C47.581,34.322 47.611,34.268 47.63,34.208C47.65,34.148 47.658,34.084 47.656,34.02V27.791C47.656,27.665 47.613,27.545 47.536,27.456C47.46,27.367 47.356,27.317 47.248,27.317Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="30.906"
android:endX="71.584"
android:endY="30.906"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M47.248,34.776C47.14,34.776 47.037,34.826 46.96,34.916C46.884,35.005 46.841,35.125 46.841,35.251V41.826C46.841,41.951 46.884,42.072 46.96,42.161C47.037,42.25 47.14,42.3 47.248,42.301C47.356,42.301 47.46,42.25 47.537,42.161C47.613,42.072 47.656,41.951 47.656,41.826V35.249C47.656,35.123 47.612,35.003 47.536,34.914C47.46,34.826 47.356,34.776 47.248,34.776Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="38.536"
android:endX="71.584"
android:endY="38.536"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M43.3,26.374C43.192,26.374 43.088,26.424 43.012,26.513C42.935,26.602 42.892,26.722 42.892,26.848V33.145C42.89,33.209 42.898,33.272 42.918,33.332C42.937,33.392 42.967,33.447 43.005,33.493C43.043,33.539 43.089,33.576 43.139,33.601C43.19,33.626 43.244,33.639 43.299,33.639C43.354,33.639 43.409,33.626 43.459,33.601C43.51,33.576 43.556,33.539 43.594,33.493C43.632,33.447 43.661,33.392 43.681,33.332C43.7,33.272 43.709,33.209 43.707,33.145V26.848C43.707,26.722 43.664,26.602 43.588,26.513C43.511,26.424 43.408,26.374 43.3,26.374Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.997"
android:endX="71.584"
android:endY="29.997"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M41.984,24.282C41.876,24.282 41.772,24.332 41.696,24.421C41.619,24.51 41.576,24.63 41.576,24.756V35.237C41.58,35.359 41.625,35.475 41.701,35.56C41.777,35.645 41.878,35.692 41.983,35.692C42.089,35.692 42.19,35.645 42.266,35.56C42.342,35.475 42.387,35.359 42.391,35.237V24.756C42.391,24.63 42.348,24.51 42.272,24.421C42.195,24.332 42.092,24.282 41.984,24.282Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.997"
android:endX="71.584"
android:endY="29.997"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M44.616,29.707C44.508,29.707 44.404,29.757 44.328,29.846C44.251,29.935 44.209,30.056 44.209,30.182V37.863C44.209,37.989 44.251,38.109 44.328,38.198C44.404,38.287 44.508,38.338 44.616,38.338C44.724,38.338 44.828,38.288 44.904,38.199C44.98,38.11 45.023,37.989 45.023,37.863V30.186C45.024,30.123 45.014,30.061 44.993,30.003C44.973,29.945 44.943,29.892 44.905,29.847C44.867,29.803 44.822,29.768 44.772,29.743C44.723,29.719 44.669,29.707 44.616,29.707Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="34.022"
android:endX="71.585"
android:endY="34.022"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M48.565,29.783C48.512,29.783 48.459,29.795 48.409,29.819C48.36,29.843 48.315,29.878 48.277,29.922C48.239,29.966 48.209,30.018 48.188,30.076C48.168,30.134 48.157,30.195 48.157,30.258V37.782C48.162,37.905 48.206,38.021 48.282,38.105C48.358,38.19 48.459,38.238 48.565,38.238C48.67,38.238 48.771,38.19 48.847,38.105C48.923,38.021 48.968,37.905 48.972,37.782V30.26C48.972,30.198 48.962,30.136 48.942,30.078C48.922,30.02 48.891,29.968 48.854,29.923C48.816,29.879 48.771,29.844 48.721,29.82C48.672,29.796 48.619,29.783 48.565,29.783Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="34.022"
android:endX="71.584"
android:endY="34.022"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M57.778,26.512C57.671,26.512 57.567,26.562 57.491,26.65C57.414,26.739 57.371,26.86 57.371,26.986V31.117C57.376,31.239 57.421,31.355 57.496,31.44C57.572,31.525 57.674,31.573 57.779,31.573C57.884,31.573 57.985,31.525 58.061,31.44C58.137,31.355 58.182,31.239 58.186,31.117V26.986C58.186,26.86 58.143,26.739 58.067,26.65C57.99,26.562 57.887,26.512 57.778,26.512Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.051"
android:endX="71.584"
android:endY="29.051"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M56.46,25.728C56.352,25.728 56.249,25.778 56.172,25.867C56.096,25.956 56.053,26.076 56.053,26.202V29.987C56.057,30.11 56.102,30.226 56.178,30.31C56.254,30.395 56.355,30.443 56.46,30.443C56.565,30.443 56.667,30.395 56.742,30.31C56.818,30.226 56.863,30.11 56.868,29.987V26.202C56.868,26.076 56.825,25.956 56.748,25.867C56.672,25.778 56.568,25.728 56.46,25.728Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="28.096"
android:endX="71.584"
android:endY="28.096"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M56.46,30.74C56.352,30.74 56.249,30.79 56.172,30.879C56.096,30.968 56.053,31.088 56.053,31.214V32.632C56.057,32.755 56.102,32.871 56.178,32.956C56.254,33.041 56.355,33.088 56.46,33.088C56.565,33.088 56.667,33.041 56.742,32.956C56.818,32.871 56.863,32.755 56.868,32.632V31.214C56.868,31.089 56.825,30.968 56.748,30.879C56.672,30.79 56.568,30.74 56.46,30.74Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="31.924"
android:endX="71.584"
android:endY="31.924"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M75.791,28.807H59.484V28.334C59.475,28.216 59.428,28.106 59.353,28.027C59.278,27.947 59.18,27.903 59.078,27.903C58.977,27.903 58.879,27.947 58.804,28.027C58.728,28.106 58.681,28.216 58.672,28.334V29.771C58.676,29.893 58.721,30.009 58.797,30.094C58.873,30.179 58.974,30.226 59.08,30.226C59.185,30.226 59.286,30.179 59.362,30.094C59.438,30.009 59.483,29.893 59.487,29.771V29.296H75.793C75.849,29.296 75.902,29.271 75.941,29.225C75.981,29.179 76.003,29.117 76.003,29.052C76.003,28.987 75.981,28.925 75.941,28.88C75.902,28.834 75.849,28.808 75.793,28.808L75.791,28.807Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="8.574"
android:startY="29.051"
android:endX="71.585"
android:endY="29.051"
android:type="linear">
<item android:offset="0" android:color="#FFB71A9D"/>
<item android:offset="0.37" android:color="#FF7157BA"/>
<item android:offset="0.51" android:color="#FF408CC0"/>
<item android:offset="0.68" android:color="#FF00D2C7"/>
<item android:offset="1" android:color="#FF005B8B"/>
</gradient>
</aapt:attr>
</path>
</group>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#ffffff"
android:fillAlpha="0.15"/>
<path
android:pathData="M18,9.667V13"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#9F9F9F"
android:strokeLineCap="round"/>
<path
android:pathData="M18.625,10.292C18.625,9.946 18.345,9.667 18,9.667C17.655,9.667 17.375,9.946 17.375,10.292V13.625C17.375,13.97 17.655,14.25 18,14.25C18.345,14.25 18.625,13.97 18.625,13.625V10.292Z"
android:fillColor="#9F9F9F"/>
<path
android:pathData="M15.327,12.289C15.644,12.155 15.793,11.788 15.659,11.47C15.525,11.152 15.158,11.003 14.84,11.138C11.924,12.37 9.875,15.257 9.875,18.625C9.875,23.112 13.513,26.75 18,26.75C22.487,26.75 26.125,23.112 26.125,18.625C26.125,15.257 24.076,12.37 21.16,11.138C20.842,11.003 20.475,11.152 20.341,11.47C20.207,11.788 20.355,12.155 20.673,12.289C23.143,13.333 24.875,15.777 24.875,18.625C24.875,22.422 21.797,25.5 18,25.5C14.203,25.5 11.125,22.422 11.125,18.625C11.125,15.777 12.856,13.333 15.327,12.289Z"
android:fillColor="#9F9F9F"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000"
android:strokeColor="#9F9F9F"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,2.75C6.893,2.75 2.75,6.901 2.75,12.026C2.75,16.788 6.329,20.711 10.933,21.241C11.395,21.294 11.89,21.1 12.286,20.704C12.647,20.341 12.647,19.753 12.286,19.39C11.974,19.078 11.661,18.661 11.49,18.187C11.315,17.702 11.271,17.093 11.627,16.528C11.95,16.014 12.434,15.739 12.942,15.605C13.431,15.477 13.973,15.469 14.494,15.501C14.978,15.53 15.499,15.598 16.004,15.663C16.047,15.669 16.09,15.674 16.132,15.68C16.689,15.752 17.233,15.819 17.758,15.844C18.832,15.895 19.66,15.76 20.225,15.298C20.767,14.855 21.25,13.957 21.25,12.026C21.25,6.901 17.107,2.75 12,2.75ZM1.25,12.026C1.25,6.076 6.061,1.25 12,1.25C17.939,1.25 22.75,6.076 22.75,12.026C22.75,14.171 22.213,15.61 21.175,16.459C20.161,17.288 18.85,17.398 17.686,17.342C17.093,17.314 16.493,17.239 15.94,17.167C15.901,17.163 15.863,17.157 15.824,17.153C15.305,17.085 14.833,17.024 14.403,16.998C13.937,16.97 13.583,16.988 13.324,17.056C13.084,17.119 12.968,17.213 12.897,17.326C12.858,17.388 12.831,17.484 12.901,17.677C12.975,17.883 13.137,18.119 13.348,18.331C14.293,19.279 14.293,20.815 13.348,21.763C12.698,22.415 11.768,22.847 10.761,22.731C5.406,22.115 1.25,17.556 1.25,12.026ZM9.585,6.25C9.171,6.25 8.835,6.586 8.835,7C8.835,7.414 9.171,7.75 9.585,7.75C9.999,7.75 10.335,7.414 10.335,7C10.335,6.586 9.999,6.25 9.585,6.25ZM7.335,7C7.335,5.757 8.342,4.75 9.585,4.75C10.828,4.75 11.835,5.757 11.835,7C11.835,8.242 10.828,9.25 9.585,9.25C8.342,9.25 7.335,8.242 7.335,7ZM14.5,6.25C14.086,6.25 13.75,6.586 13.75,7C13.75,7.414 14.086,7.75 14.5,7.75C14.914,7.75 15.25,7.414 15.25,7C15.25,6.586 14.914,6.25 14.5,6.25ZM12.25,7C12.25,5.757 13.257,4.75 14.5,4.75C15.743,4.75 16.75,5.757 16.75,7C16.75,8.243 15.743,9.25 14.5,9.25C13.257,9.25 12.25,8.243 12.25,7ZM6.5,10.75C6.086,10.75 5.75,11.086 5.75,11.5C5.75,11.914 6.086,12.25 6.5,12.25C6.914,12.25 7.25,11.914 7.25,11.5C7.25,11.086 6.914,10.75 6.5,10.75ZM4.25,11.5C4.25,10.257 5.257,9.25 6.5,9.25C7.743,9.25 8.75,10.257 8.75,11.5C8.75,12.743 7.743,13.75 6.5,13.75C5.257,13.75 4.25,12.743 4.25,11.5ZM17.5,10.75C17.086,10.75 16.75,11.086 16.75,11.5C16.75,11.914 17.086,12.25 17.5,12.25C17.914,12.25 18.25,11.914 18.25,11.5C18.25,11.086 17.914,10.75 17.5,10.75ZM15.25,11.5C15.25,10.257 16.257,9.25 17.5,9.25C18.743,9.25 19.75,10.257 19.75,11.5C19.75,12.743 18.743,13.75 17.5,13.75C16.257,13.75 15.25,12.743 15.25,11.5Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M2,6C2,4.114 2,3.172 2.586,2.586C3.172,2 4.114,2 6,2C7.886,2 8.828,2 9.414,2.586C10,3.172 10,4.114 10,6V18C10,19.886 10,20.828 9.414,21.414C8.828,22 7.886,22 6,22C4.114,22 3.172,22 2.586,21.414C2,20.828 2,19.886 2,18V6Z"
android:fillColor="#E83565"/>
<path
android:pathData="M14,6C14,4.114 14,3.172 14.586,2.586C15.172,2 16.114,2 18,2C19.886,2 20.828,2 21.414,2.586C22,3.172 22,4.114 22,6V18C22,19.886 22,20.828 21.414,21.414C20.828,22 19.886,22 18,22C16.114,22 15.172,22 14.586,21.414C14,20.828 14,19.886 14,18V6Z"
android:fillColor="#E83565"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M21.409,9.353C23.531,10.507 23.531,13.493 21.409,14.647L8.597,21.615C6.534,22.736 4,21.276 4,18.967L4,5.033C4,2.724 6.534,1.264 8.597,2.385L21.409,9.353Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:viewportWidth="40"
android:viewportHeight="40">
<path
android:pathData="M29.409,17.353C31.531,18.507 31.531,21.493 29.409,22.647L16.597,29.615C14.534,30.736 12,29.276 12,26.967L12,13.033C12,10.724 14.534,9.264 16.597,10.385L29.409,17.353Z"
android:fillColor="#E83565"/>
<path
android:pathData="M20,1L20,1A19,19 0,0 1,39 20L39,20A19,19 0,0 1,20 39L20,39A19,19 0,0 1,1 20L1,20A19,19 0,0 1,20 1z"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#E83565"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="56dp"
android:height="32dp"
android:viewportWidth="56"
android:viewportHeight="32">
<path
android:pathData="M8,0L48,0A8,8 0,0 1,56 8L56,24A8,8 0,0 1,48 32L8,32A8,8 0,0 1,0 24L0,8A8,8 0,0 1,8 0z"
android:fillColor="#19E73A"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="56dp"
android:height="32dp"
android:viewportWidth="56"
android:viewportHeight="32">
<path
android:pathData="M8,0L48,0A8,8 0,0 1,56 8L56,24A8,8 0,0 1,48 32L8,32A8,8 0,0 1,0 24L0,8A8,8 0,0 1,8 0z"
android:fillColor="#1188DD"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="56dp"
android:height="32dp"
android:viewportWidth="56"
android:viewportHeight="32">
<path
android:pathData="M8,0L48,0A8,8 0,0 1,56 8L56,24A8,8 0,0 1,48 32L8,32A8,8 0,0 1,0 24L0,8A8,8 0,0 1,8 0z"
android:fillColor="#EE2929"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="56dp"
android:height="32dp"
android:viewportWidth="56"
android:viewportHeight="32">
<path
android:pathData="M8,0L48,0A8,8 0,0 1,56 8L56,24A8,8 0,0 1,48 32L8,32A8,8 0,0 1,0 24L0,8A8,8 0,0 1,8 0z"
android:fillColor="#CE1EEB"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="56dp"
android:height="32dp"
android:viewportWidth="56"
android:viewportHeight="32">
<path
android:pathData="M8,0L48,0A8,8 0,0 1,56 8L56,24A8,8 0,0 1,48 32L8,32A8,8 0,0 1,0 24L0,8A8,8 0,0 1,8 0z"
android:fillColor="#EAB93D"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="19dp"
android:viewportWidth="18"
android:viewportHeight="19">
<path
android:pathData="M9.52,1.766C9.408,1.756 9.296,1.756 9,1.756C7.009,1.756 5.579,1.757 4.49,1.903C3.42,2.047 2.775,2.321 2.298,2.798C1.821,3.275 1.547,3.92 1.403,4.99C1.257,6.079 1.256,7.509 1.256,9.5C1.256,11.491 1.257,12.921 1.403,14.01C1.547,15.08 1.821,15.725 2.298,16.202C2.728,16.632 3.295,16.897 4.186,17.05L4.186,16.991C4.186,16.239 4.186,15.612 4.253,15.114C4.324,14.588 4.479,14.114 4.86,13.733C5.242,13.351 5.716,13.196 6.242,13.125C6.74,13.058 7.367,13.058 8.119,13.058H9.881C10.633,13.058 11.26,13.058 11.758,13.125C12.284,13.196 12.758,13.351 13.14,13.733C13.521,14.114 13.676,14.588 13.747,15.114C13.814,15.612 13.814,16.239 13.814,16.991L13.814,17.05C14.705,16.897 15.272,16.632 15.702,16.202C16.179,15.725 16.453,15.08 16.597,14.01C16.743,12.921 16.744,11.491 16.744,9.5C16.744,9.204 16.744,9.092 16.734,8.98C16.686,8.431 16.462,7.89 16.107,7.468C16.035,7.382 15.954,7.3 15.74,7.086L11.414,2.76C11.2,2.546 11.118,2.465 11.032,2.393C10.61,2.038 10.069,1.814 9.52,1.766ZM12.558,17.186V17.035C12.558,16.228 12.557,15.686 12.502,15.281C12.45,14.895 12.361,14.73 12.252,14.62C12.142,14.511 11.977,14.422 11.591,14.37C11.186,14.315 10.644,14.314 9.837,14.314H8.163C7.356,14.314 6.814,14.315 6.409,14.37C6.023,14.422 5.857,14.511 5.748,14.62C5.639,14.73 5.55,14.895 5.498,15.281C5.443,15.686 5.442,16.228 5.442,17.035V17.186C6.384,17.243 7.542,17.244 9,17.244C10.458,17.244 11.616,17.243 12.558,17.186ZM9.026,0.5C9.287,0.5 9.456,0.5 9.629,0.515C10.435,0.585 11.22,0.911 11.84,1.431C11.973,1.542 12.094,1.664 12.283,1.853L12.302,1.872L16.647,6.217C16.836,6.406 16.958,6.527 17.069,6.66C17.589,7.28 17.915,8.065 17.985,8.871C18,9.044 18,9.213 18,9.474V9.548C18,11.481 18,12.995 17.841,14.177C17.678,15.386 17.339,16.341 16.59,17.09C15.841,17.839 14.886,18.178 13.677,18.341C12.495,18.5 10.981,18.5 9.048,18.5H8.952C7.019,18.5 5.505,18.5 4.323,18.341C3.114,18.178 2.159,17.839 1.41,17.09C0.661,16.341 0.321,15.386 0.159,14.177C-0,12.995 -0,11.481 0,9.548V9.452C-0,7.519 -0,6.005 0.159,4.823C0.321,3.614 0.661,2.659 1.41,1.91C2.159,1.161 3.114,0.821 4.323,0.659C5.505,0.5 7.019,0.5 8.952,0.5L9.026,0.5ZM4.186,6.151C4.186,5.804 4.467,5.523 4.814,5.523H9.837C10.184,5.523 10.465,5.804 10.465,6.151C10.465,6.498 10.184,6.779 9.837,6.779H4.814C4.467,6.779 4.186,6.498 4.186,6.151Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="15dp"
android:height="16dp"
android:viewportWidth="15"
android:viewportHeight="16">
<path
android:pathData="M6.296,0.833H7.704C8.929,0.833 9.9,0.833 10.659,0.935C11.441,1.041 12.074,1.262 12.573,1.761C12.768,1.956 12.768,2.273 12.573,2.468C12.377,2.663 12.061,2.663 11.865,2.468C11.583,2.186 11.197,2.017 10.526,1.927C9.841,1.834 8.938,1.833 7.667,1.833H6.333C5.062,1.833 4.159,1.834 3.474,1.927C2.803,2.017 2.417,2.186 2.135,2.468C1.852,2.75 1.683,3.137 1.593,3.807C1.501,4.492 1.5,5.395 1.5,6.667V9.333C1.5,10.605 1.501,11.508 1.593,12.193C1.683,12.863 1.852,13.25 2.135,13.532C2.417,13.814 2.803,13.983 3.474,14.073C4.159,14.166 5.062,14.167 6.333,14.167H7.667C8.938,14.167 9.841,14.166 10.526,14.073C11.197,13.983 11.583,13.814 11.865,13.532C12.329,13.068 12.47,12.347 12.494,10.659C12.498,10.383 12.725,10.163 13.001,10.167C13.278,10.171 13.498,10.398 13.494,10.674C13.471,12.292 13.366,13.446 12.573,14.239C12.074,14.738 11.441,14.96 10.659,15.065C9.9,15.167 8.929,15.167 7.704,15.167H6.296C5.071,15.167 4.1,15.167 3.341,15.065C2.559,14.96 1.926,14.738 1.428,14.239C0.929,13.74 0.707,13.108 0.602,12.326C0.5,11.566 0.5,10.596 0.5,9.371V6.629C0.5,5.404 0.5,4.433 0.602,3.674C0.707,2.892 0.929,2.26 1.428,1.761C1.926,1.262 2.559,1.041 3.341,0.935C4.1,0.833 5.071,0.833 6.296,0.833ZM11.075,4.697C11.783,3.99 12.929,3.99 13.636,4.697C14.344,5.404 14.344,6.551 13.636,7.258L10.466,10.428C10.294,10.601 10.177,10.717 10.046,10.819C9.892,10.939 9.726,11.042 9.55,11.126C9.4,11.197 9.244,11.249 9.012,11.326L7.623,11.79C7.317,11.892 6.979,11.812 6.75,11.583C6.521,11.355 6.442,11.017 6.544,10.71L6.998,9.349C7.001,9.339 7.004,9.33 7.007,9.321C7.084,9.089 7.136,8.933 7.207,8.783C7.291,8.607 7.394,8.441 7.514,8.287C7.616,8.156 7.733,8.04 7.905,7.867C7.912,7.86 7.919,7.853 7.926,7.846L11.075,4.697ZM12.929,5.404C12.613,5.088 12.099,5.088 11.783,5.404L11.661,5.525C11.668,5.548 11.675,5.571 11.684,5.596C11.747,5.777 11.866,6.016 12.092,6.242C12.317,6.468 12.556,6.587 12.737,6.649C12.762,6.658 12.786,6.665 12.808,6.672L12.929,6.551C13.246,6.234 13.246,5.721 12.929,5.404ZM12.044,7.436C11.832,7.324 11.604,7.168 11.384,6.949C11.165,6.73 11.009,6.501 10.898,6.289L8.633,8.554C8.432,8.754 8.362,8.826 8.303,8.902C8.227,8.999 8.163,9.103 8.11,9.213C8.069,9.301 8.036,9.396 7.946,9.665L7.679,10.466L7.868,10.654L8.668,10.387C8.938,10.297 9.033,10.265 9.12,10.223C9.23,10.171 9.335,10.106 9.431,10.031C9.507,9.971 9.579,9.901 9.78,9.7L12.044,7.436ZM3.833,6C3.833,5.724 4.057,5.5 4.333,5.5H8.667C8.943,5.5 9.167,5.724 9.167,6C9.167,6.276 8.943,6.5 8.667,6.5H4.333C4.057,6.5 3.833,6.276 3.833,6ZM3.833,8.667C3.833,8.391 4.057,8.167 4.333,8.167H6C6.276,8.167 6.5,8.391 6.5,8.667C6.5,8.943 6.276,9.167 6,9.167H4.333C4.057,9.167 3.833,8.943 3.833,8.667ZM3.833,11.333C3.833,11.057 4.057,10.833 4.333,10.833H5.333C5.609,10.833 5.833,11.057 5.833,11.333C5.833,11.609 5.609,11.833 5.333,11.833H4.333C4.057,11.833 3.833,11.609 3.833,11.333Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillAlpha="0.25">
<aapt:attr name="android:fillColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.878" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M25.113,25.113C26.333,23.892 26.333,21.928 26.333,18C26.333,17.715 26.333,17.573 26.321,17.428C26.262,16.754 25.988,16.094 25.553,15.575C25.46,15.464 25.357,15.361 25.15,15.155L20.845,10.849C20.639,10.643 20.536,10.54 20.425,10.447C19.906,10.012 19.246,9.738 18.572,9.679C18.427,9.667 18.285,9.667 18,9.667C14.072,9.667 12.107,9.667 10.887,10.887C9.667,12.107 9.667,14.072 9.667,18C9.667,21.928 9.667,23.892 10.887,25.113C11.457,25.683 12.189,25.987 13.208,26.149L13.208,25.457C13.208,24.708 13.208,24.084 13.275,23.588C13.345,23.065 13.5,22.592 13.88,22.213C14.259,21.833 14.731,21.679 15.255,21.608C15.75,21.542 16.375,21.542 17.123,21.542H18.877C19.625,21.542 20.25,21.542 20.745,21.608C21.269,21.679 21.741,21.833 22.12,22.213C22.5,22.592 22.655,23.065 22.725,23.588C22.792,24.084 22.792,24.708 22.792,25.457L22.792,26.149C23.811,25.987 24.543,25.683 25.113,25.113ZM13.208,14.667C13.208,14.321 13.488,14.042 13.833,14.042H18.833C19.178,14.042 19.458,14.321 19.458,14.667C19.458,15.012 19.178,15.292 18.833,15.292H13.833C13.488,15.292 13.208,15.012 13.208,14.667Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M21.486,23.754C21.54,24.157 21.542,24.697 21.542,25.5V26.276C20.579,26.333 19.417,26.333 18,26.333C16.583,26.333 15.422,26.333 14.458,26.276V25.5C14.458,24.697 14.46,24.157 14.514,23.754C14.566,23.37 14.655,23.205 14.763,23.097C14.872,22.988 15.037,22.899 15.421,22.847C15.824,22.793 16.363,22.792 17.167,22.792H18.833C19.637,22.792 20.176,22.793 20.579,22.847C20.963,22.899 21.128,22.988 21.237,23.097C21.345,23.205 21.434,23.37 21.486,23.754Z"
android:fillColor="#ffffff"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000">
<aapt:attr name="android:strokeColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.878" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:pathData="M8,0L24,0A8,8 0,0 1,32 8L32,24A8,8 0,0 1,24 32L8,32A8,8 0,0 1,0 24L0,8A8,8 0,0 1,8 0z"
android:fillColor="#ffffff"
android:fillAlpha="0.25"/>
<path
android:pathData="M18.2788,6.1522C17.9085,6 17.439,6 16.5,6C15.561,6 15.0915,6 14.7212,6.1522C14.2274,6.3552 13.8351,6.7446 13.6306,7.2346C13.5372,7.4583 13.5007,7.7185 13.4864,8.098C13.4653,8.6557 13.1772,9.1719 12.6902,9.4509C12.2032,9.73 11.6086,9.7195 11.1115,9.4588C10.7732,9.2813 10.5279,9.1826 10.286,9.151C9.7561,9.0818 9.2202,9.2243 8.7962,9.5472C8.4781,9.7894 8.2434,10.1929 7.7739,10.9999C7.3044,11.807 7.0697,12.2105 7.0174,12.6049C6.9476,13.1308 7.0912,13.6627 7.4166,14.0835C7.5651,14.2756 7.7738,14.437 8.0977,14.639C8.5739,14.936 8.8803,15.4419 8.8803,16C8.8803,16.5581 8.5739,17.0639 8.0977,17.3608C7.7737,17.5629 7.565,17.7244 7.4165,17.9165C7.0911,18.3373 6.9475,18.8691 7.0173,19.395C7.0696,19.7894 7.3043,20.193 7.7738,21C8.2433,21.807 8.478,22.2106 8.7961,22.4527C9.2201,22.7756 9.756,22.9181 10.2859,22.8489C10.5278,22.8173 10.7731,22.7186 11.1113,22.5412C11.6085,22.2804 12.2031,22.27 12.6901,22.549C13.1771,22.8281 13.4653,23.3443 13.4864,23.9021C13.5007,24.2815 13.5372,24.5417 13.6306,24.7654C13.8351,25.2554 14.2274,25.6448 14.7212,25.8478C15.0915,26 15.561,26 16.5,26C17.439,26 17.9085,26 18.2788,25.8478C18.7726,25.6448 19.1649,25.2554 19.3694,24.7654C19.4628,24.5417 19.4994,24.2815 19.5137,23.902C19.5347,23.3443 19.8228,22.8281 20.3098,22.549C20.7968,22.2699 21.3914,22.2804 21.8886,22.5412C22.2269,22.7186 22.4721,22.8172 22.714,22.8488C23.2439,22.9181 23.7798,22.7756 24.2038,22.4527C24.5219,22.2105 24.7566,21.807 25.2261,20.9999C25.6956,20.1929 25.9303,19.7894 25.9827,19.395C26.0524,18.8691 25.9088,18.3372 25.5835,17.9164C25.4349,17.7243 25.2262,17.5628 24.9022,17.3608C24.4261,17.0639 24.1197,16.558 24.1197,15.9999C24.1197,15.4418 24.4261,14.9361 24.9022,14.6392C25.2263,14.4371 25.435,14.2757 25.5836,14.0835C25.9089,13.6627 26.0525,13.1309 25.9828,12.605C25.9304,12.2106 25.6957,11.807 25.2262,11C24.7567,10.193 24.522,9.7894 24.2039,9.5473C23.7799,9.2244 23.244,9.0819 22.7141,9.1511C22.4722,9.1827 22.2269,9.2814 21.8887,9.4588C21.3915,9.7196 20.7969,9.73 20.3099,9.451C19.8229,9.1719 19.5347,8.6557 19.5136,8.0979C19.4993,7.7185 19.4628,7.4583 19.3694,7.2346C19.1649,6.7446 18.7726,6.3552 18.2788,6.1522ZM16.5,19C18.1695,19 19.5228,17.6569 19.5228,16C19.5228,14.3431 18.1695,13 16.5,13C14.8305,13 13.4772,14.3431 13.4772,16C13.4772,17.6569 14.8305,19 16.5,19Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
<path
android:pathData="M5.3934,9.7649C4.2022,8.9957 4.2022,7.0043 5.3934,6.235L12.5861,1.5903C13.7439,0.8427 15.1667,1.8158 15.1667,3.3552V12.6447C15.1667,14.1842 13.7439,15.1573 12.5861,14.4097L5.3934,9.7649Z"
android:fillColor="#E1E1E1"/>
<path
android:pathData="M1.3333,3.3333C1.3333,3.0572 1.5572,2.8333 1.8333,2.8333C2.1095,2.8333 2.3333,3.0572 2.3333,3.3333V12.6666C2.3333,12.9428 2.1095,13.1666 1.8333,13.1666C1.5572,13.1666 1.3333,12.9428 1.3333,12.6666V3.3333Z"
android:fillColor="#E1E1E1"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M9.121,1.042H10.879C12.019,1.042 12.937,1.042 13.66,1.139C14.41,1.24 15.041,1.455 15.543,1.957C16.045,2.459 16.26,3.09 16.361,3.84C16.458,4.563 16.458,5.481 16.458,6.621V13.379C16.458,14.519 16.458,15.437 16.361,16.16C16.26,16.91 16.045,17.541 15.543,18.043C15.041,18.545 14.41,18.76 13.66,18.861C12.937,18.958 12.019,18.958 10.879,18.958H9.121C7.981,18.958 7.063,18.958 6.34,18.861C5.59,18.76 4.959,18.545 4.457,18.043C3.955,17.541 3.74,16.91 3.639,16.16C3.542,15.437 3.542,14.519 3.542,13.379V6.621C3.542,5.481 3.542,4.563 3.639,3.84C3.74,3.09 3.955,2.459 4.457,1.957C4.959,1.455 5.59,1.24 6.34,1.139C7.063,1.042 7.981,1.042 9.121,1.042ZM6.507,2.378C5.895,2.46 5.571,2.61 5.341,2.841C5.11,3.071 4.96,3.395 4.878,4.007C4.793,4.636 4.792,5.47 4.792,6.667V13.333C4.792,14.53 4.793,15.364 4.878,15.993C4.96,16.605 5.11,16.928 5.341,17.159C5.571,17.39 5.895,17.54 6.507,17.622C7.136,17.707 7.97,17.708 9.167,17.708H10.833C12.03,17.708 12.864,17.707 13.493,17.622C14.105,17.54 14.429,17.39 14.659,17.159C14.89,16.928 15.04,16.605 15.122,15.993C15.207,15.364 15.208,14.53 15.208,13.333V6.667C15.208,5.47 15.207,4.636 15.122,4.007C15.04,3.395 14.89,3.071 14.659,2.841C14.429,2.61 14.105,2.46 13.493,2.378C12.864,2.293 12.03,2.292 10.833,2.292H9.167C7.97,2.292 7.136,2.293 6.507,2.378ZM1.387,4.441C1.696,4.287 2.071,4.412 2.226,4.72L2.873,6.014C3.078,6.425 3.078,6.908 2.873,7.319L2.412,8.24C2.383,8.299 2.383,8.368 2.412,8.426L2.873,9.348C3.078,9.758 3.078,10.242 2.873,10.652L2.412,11.573C2.383,11.632 2.383,11.701 2.412,11.76L2.873,12.681C3.078,13.092 3.078,13.575 2.873,13.986L2.226,15.28C2.071,15.588 1.696,15.713 1.387,15.559C1.078,15.405 0.953,15.029 1.108,14.72L1.755,13.427C1.784,13.368 1.784,13.299 1.755,13.24L1.294,12.319C1.089,11.908 1.089,11.425 1.294,11.014L1.755,10.093C1.784,10.035 1.784,9.965 1.755,9.907L1.294,8.985C1.089,8.575 1.089,8.092 1.294,7.681L1.755,6.76C1.784,6.701 1.784,6.632 1.755,6.573L1.108,5.279C0.953,4.971 1.078,4.595 1.387,4.441ZM18.613,4.441C18.922,4.595 19.047,4.971 18.892,5.279L18.245,6.573C18.216,6.632 18.216,6.701 18.245,6.76L18.706,7.681C18.911,8.092 18.911,8.575 18.706,8.985L18.245,9.907C18.216,9.965 18.216,10.035 18.245,10.093L18.706,11.014C18.911,11.425 18.911,11.908 18.706,12.319L18.245,13.24C18.216,13.299 18.216,13.368 18.245,13.427L18.892,14.72C19.047,15.029 18.922,15.405 18.613,15.559C18.304,15.713 17.929,15.588 17.774,15.28L17.127,13.986C16.922,13.575 16.922,13.092 17.127,12.681L17.588,11.76C17.617,11.701 17.617,11.632 17.588,11.573L17.127,10.652C16.922,10.242 16.922,9.758 17.127,9.348L17.588,8.426C17.617,8.368 17.617,8.299 17.588,8.24L17.127,7.319C16.922,6.908 16.922,6.425 17.127,6.014L17.774,4.72C17.929,4.412 18.304,4.287 18.613,4.441ZM7.292,15.833C7.292,15.488 7.571,15.208 7.917,15.208H12.083C12.429,15.208 12.708,15.488 12.708,15.833C12.708,16.178 12.429,16.458 12.083,16.458H7.917C7.571,16.458 7.292,16.178 7.292,15.833Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0L28,0A8,8 0,0 1,36 8L36,28A8,8 0,0 1,28 36L8,36A8,8 0,0 1,0 28L0,8A8,8 0,0 1,8 0z"
android:fillColor="#222222"/>
<path
android:pathData="M8.78,17.25H10C10.414,17.25 10.75,17.586 10.75,18C10.75,18.414 10.414,18.75 10,18.75H8.78C8.94,20.741 9.73,22.554 10.95,23.989L11.97,22.97C12.263,22.677 12.737,22.677 13.03,22.97C13.323,23.263 13.323,23.737 13.03,24.03L12.011,25.05C13.625,26.422 15.716,27.25 18,27.25C20.284,27.25 22.375,26.422 23.989,25.05L22.97,24.03C22.677,23.737 22.677,23.263 22.97,22.97C23.263,22.677 23.737,22.677 24.03,22.97L25.05,23.989C26.27,22.554 27.06,20.741 27.22,18.75H26C25.586,18.75 25.25,18.414 25.25,18C25.25,17.586 25.586,17.25 26,17.25H27.22C27.06,15.259 26.27,13.446 25.05,12.011L24.03,13.03C23.737,13.323 23.263,13.323 22.97,13.03C22.677,12.737 22.677,12.263 22.97,11.97L23.989,10.95C22.554,9.73 20.741,8.94 18.75,8.78V10C18.75,10.414 18.414,10.75 18,10.75C17.586,10.75 17.25,10.414 17.25,10V8.78C15.259,8.94 13.446,9.73 12.011,10.95L13.03,11.97C13.323,12.263 13.323,12.737 13.03,13.03C12.737,13.323 12.263,13.323 11.97,13.03L10.95,12.011C9.73,13.446 8.94,15.259 8.78,17.25ZM7.25,18C7.25,12.063 12.063,7.25 18,7.25C23.937,7.25 28.75,12.063 28.75,18C28.75,23.937 23.937,28.75 18,28.75C12.063,28.75 7.25,23.937 7.25,18ZM17.519,14.76C17.28,15.007 17.023,15.402 16.604,16.058C16.347,16.46 16.126,16.853 15.972,17.206C15.812,17.573 15.75,17.837 15.75,18C15.75,19.243 16.757,20.25 18,20.25C19.243,20.25 20.25,19.243 20.25,18C20.25,17.837 20.188,17.573 20.028,17.206C19.874,16.853 19.653,16.46 19.396,16.058C18.977,15.402 18.72,15.007 18.481,14.76C18.286,14.557 18.164,14.517 18,14.517C17.836,14.517 17.714,14.557 17.519,14.76ZM16.44,13.718C16.852,13.291 17.343,13.017 18,13.017C18.657,13.017 19.148,13.291 19.56,13.718C19.916,14.087 20.253,14.613 20.624,15.193C20.636,15.212 20.648,15.231 20.66,15.25C20.941,15.69 21.206,16.155 21.403,16.606C21.595,17.045 21.75,17.533 21.75,18C21.75,20.071 20.071,21.75 18,21.75C15.929,21.75 14.25,20.071 14.25,18C14.25,17.533 14.405,17.045 14.597,16.606C14.794,16.155 15.059,15.69 15.34,15.25C15.352,15.231 15.364,15.212 15.377,15.193C15.747,14.613 16.084,14.087 16.44,13.718Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="103dp"
android:height="16dp"
android:viewportWidth="103"
android:viewportHeight="16">
<path
android:pathData="M6.45,10.83V12H1.92V10.83H6.45ZM2.34,3.47V12H0.87V3.47H2.34ZM5.86,7.03V8.18H1.92V7.03H5.86ZM6.42,3.47V4.64H1.92V3.47H6.42ZM11.32,14.44V6.92L11.48,5.66H12.74V14.44H11.32ZM7.2,8.89V8.77C7.2,8.29 7.25,7.85 7.36,7.46C7.47,7.06 7.63,6.72 7.85,6.43C8.06,6.15 8.32,5.93 8.63,5.78C8.94,5.62 9.3,5.54 9.7,5.54C10.09,5.54 10.43,5.62 10.72,5.77C11.01,5.91 11.26,6.13 11.46,6.4C11.66,6.68 11.82,7 11.94,7.38C12.06,7.76 12.15,8.18 12.21,8.65V9.04C12.16,9.49 12.07,9.91 11.95,10.28C11.83,10.66 11.67,10.98 11.46,11.26C11.26,11.53 11.01,11.74 10.72,11.89C10.43,12.04 10.08,12.12 9.69,12.12C9.29,12.12 8.94,12.04 8.63,11.88C8.32,11.72 8.06,11.49 7.85,11.2C7.64,10.91 7.47,10.57 7.36,10.18C7.25,9.78 7.2,9.36 7.2,8.89ZM8.61,8.77V8.89C8.61,9.18 8.63,9.46 8.69,9.71C8.74,9.96 8.83,10.18 8.94,10.38C9.06,10.57 9.21,10.72 9.39,10.83C9.57,10.94 9.78,10.99 10.04,10.99C10.37,10.99 10.64,10.92 10.85,10.78C11.07,10.63 11.23,10.44 11.35,10.2C11.46,9.95 11.54,9.68 11.59,9.38V8.32C11.56,8.09 11.52,7.88 11.44,7.68C11.37,7.47 11.28,7.3 11.15,7.15C11.03,7 10.88,6.88 10.69,6.8C10.52,6.71 10.3,6.67 10.05,6.67C9.8,6.67 9.58,6.72 9.39,6.83C9.21,6.94 9.06,7.09 8.94,7.29C8.83,7.48 8.75,7.7 8.69,7.96C8.64,8.21 8.61,8.48 8.61,8.77ZM18.13,10.51V5.66H19.54V12H18.21L18.13,10.51ZM18.33,9.19L18.8,9.18C18.8,9.6 18.75,9.99 18.66,10.35C18.57,10.71 18.42,11.02 18.23,11.29C18.03,11.55 17.78,11.75 17.48,11.9C17.17,12.04 16.81,12.12 16.38,12.12C16.07,12.12 15.79,12.07 15.53,11.98C15.27,11.89 15.05,11.75 14.86,11.57C14.68,11.38 14.54,11.13 14.43,10.83C14.33,10.53 14.28,10.17 14.28,9.76V5.66H15.69V9.77C15.69,10 15.72,10.19 15.78,10.35C15.83,10.5 15.91,10.62 16,10.72C16.09,10.81 16.2,10.88 16.33,10.92C16.45,10.96 16.58,10.97 16.73,10.97C17.13,10.97 17.44,10.9 17.67,10.74C17.91,10.58 18.08,10.37 18.17,10.1C18.27,9.83 18.33,9.52 18.33,9.19ZM24.63,10.73V7.71C24.63,7.48 24.58,7.28 24.5,7.12C24.42,6.96 24.3,6.83 24.13,6.74C23.96,6.65 23.76,6.6 23.51,6.6C23.28,6.6 23.08,6.64 22.91,6.72C22.74,6.8 22.61,6.9 22.52,7.04C22.42,7.17 22.38,7.32 22.38,7.49H20.97C20.97,7.24 21.03,7 21.15,6.76C21.27,6.53 21.45,6.32 21.68,6.13C21.91,5.95 22.18,5.81 22.5,5.7C22.82,5.6 23.18,5.54 23.58,5.54C24.06,5.54 24.48,5.62 24.85,5.78C25.22,5.94 25.51,6.19 25.72,6.51C25.94,6.83 26.04,7.23 26.04,7.72V10.54C26.04,10.82 26.06,11.08 26.1,11.31C26.14,11.54 26.21,11.74 26.28,11.91V12H24.84C24.77,11.85 24.72,11.65 24.68,11.42C24.64,11.18 24.63,10.95 24.63,10.73ZM24.83,8.14L24.84,9.02H23.83C23.57,9.02 23.34,9.04 23.14,9.09C22.94,9.14 22.77,9.21 22.64,9.3C22.51,9.4 22.41,9.51 22.34,9.64C22.27,9.78 22.24,9.93 22.24,10.1C22.24,10.26 22.28,10.42 22.36,10.56C22.44,10.7 22.55,10.8 22.7,10.88C22.85,10.96 23.03,11 23.25,11C23.54,11 23.79,10.94 24,10.82C24.22,10.7 24.39,10.55 24.52,10.38C24.64,10.21 24.71,10.04 24.72,9.88L25.18,10.51C25.13,10.67 25.05,10.84 24.94,11.03C24.82,11.21 24.67,11.39 24.49,11.55C24.31,11.72 24.09,11.85 23.84,11.96C23.59,12.06 23.3,12.12 22.97,12.12C22.56,12.12 22.19,12.04 21.87,11.87C21.54,11.7 21.29,11.48 21.1,11.2C20.92,10.91 20.83,10.59 20.83,10.23C20.83,9.89 20.89,9.6 21.02,9.34C21.14,9.08 21.33,8.86 21.58,8.68C21.83,8.51 22.13,8.38 22.49,8.29C22.85,8.19 23.26,8.14 23.72,8.14H24.83ZM29.09,3V12H27.67V3H29.09ZM32.21,5.66V12H30.79V5.66H32.21ZM30.7,4C30.7,3.78 30.77,3.6 30.91,3.46C31.05,3.32 31.25,3.25 31.51,3.25C31.76,3.25 31.95,3.32 32.1,3.46C32.24,3.6 32.32,3.78 32.32,4C32.32,4.21 32.24,4.38 32.1,4.52C31.95,4.66 31.76,4.73 31.51,4.73C31.25,4.73 31.05,4.66 30.91,4.52C30.77,4.38 30.7,4.21 30.7,4ZM38.72,10.88V12H34V10.88H38.72ZM38.59,6.54L34.48,12H33.57V11.09L37.65,5.66H38.59V6.54ZM38.05,5.66V6.79H33.64V5.66H38.05ZM42.61,12.12C42.14,12.12 41.72,12.04 41.34,11.89C40.97,11.73 40.65,11.52 40.38,11.24C40.12,10.96 39.92,10.63 39.78,10.26C39.64,9.88 39.57,9.48 39.57,9.05V8.81C39.57,8.32 39.64,7.87 39.78,7.46C39.93,7.06 40.13,6.72 40.39,6.43C40.64,6.14 40.95,5.92 41.3,5.77C41.65,5.62 42.03,5.54 42.44,5.54C42.9,5.54 43.29,5.62 43.63,5.77C43.97,5.92 44.25,6.14 44.48,6.42C44.7,6.69 44.87,7.02 44.98,7.39C45.09,7.77 45.15,8.19 45.15,8.65V9.25H40.25V8.24H43.76V8.13C43.75,7.87 43.7,7.63 43.6,7.41C43.51,7.19 43.38,7.01 43.19,6.87C43,6.74 42.75,6.67 42.44,6.67C42.2,6.67 41.99,6.72 41.81,6.82C41.63,6.92 41.48,7.06 41.36,7.25C41.24,7.44 41.14,7.66 41.08,7.93C41.02,8.19 40.98,8.48 40.98,8.81V9.05C40.98,9.32 41.02,9.58 41.1,9.82C41.17,10.05 41.29,10.26 41.44,10.44C41.58,10.61 41.76,10.75 41.97,10.85C42.19,10.95 42.43,11 42.7,11C43.04,11 43.34,10.93 43.6,10.79C43.87,10.66 44.1,10.46 44.29,10.21L45.04,10.93C44.9,11.13 44.72,11.32 44.51,11.51C44.29,11.69 44.02,11.83 43.7,11.95C43.39,12.06 43.03,12.12 42.61,12.12ZM47.73,6.87V12H46.32V5.66H47.67L47.73,6.87ZM49.67,5.62L49.66,6.93C49.57,6.92 49.48,6.9 49.38,6.9C49.28,6.89 49.18,6.88 49.08,6.88C48.84,6.88 48.63,6.92 48.44,6.99C48.26,7.06 48.11,7.15 47.98,7.28C47.86,7.41 47.77,7.56 47.7,7.74C47.63,7.92 47.6,8.12 47.58,8.34L47.26,8.37C47.26,7.97 47.3,7.6 47.38,7.26C47.46,6.92 47.57,6.62 47.73,6.36C47.89,6.11 48.09,5.9 48.33,5.76C48.57,5.62 48.85,5.54 49.17,5.54C49.25,5.54 49.34,5.55 49.44,5.57C49.54,5.58 49.62,5.6 49.67,5.62ZM57.04,8.82H54.82V7.65H57.04C57.43,7.65 57.74,7.59 57.98,7.46C58.22,7.34 58.39,7.17 58.5,6.95C58.62,6.73 58.67,6.47 58.67,6.19C58.67,5.92 58.62,5.67 58.5,5.43C58.39,5.19 58.22,5 57.98,4.86C57.74,4.71 57.43,4.64 57.04,4.64H55.27V12H53.8V3.47H57.04C57.7,3.47 58.26,3.59 58.72,3.82C59.19,4.05 59.54,4.37 59.79,4.78C60.03,5.19 60.15,5.65 60.15,6.18C60.15,6.73 60.03,7.2 59.79,7.59C59.54,7.99 59.19,8.29 58.72,8.5C58.26,8.71 57.7,8.82 57.04,8.82ZM62.8,6.87V12H61.39V5.66H62.74L62.8,6.87ZM64.74,5.62L64.73,6.93C64.65,6.92 64.55,6.9 64.45,6.9C64.35,6.89 64.26,6.88 64.16,6.88C63.92,6.88 63.7,6.92 63.52,6.99C63.34,7.06 63.18,7.15 63.06,7.28C62.94,7.41 62.84,7.56 62.78,7.74C62.71,7.92 62.67,8.12 62.66,8.34L62.34,8.37C62.34,7.97 62.37,7.6 62.45,7.26C62.53,6.92 62.65,6.62 62.8,6.36C62.96,6.11 63.16,5.9 63.4,5.76C63.64,5.62 63.92,5.54 64.24,5.54C64.33,5.54 64.42,5.55 64.52,5.57C64.62,5.58 64.69,5.6 64.74,5.62ZM65.27,8.9V8.77C65.27,8.31 65.33,7.88 65.47,7.49C65.6,7.1 65.79,6.76 66.04,6.47C66.29,6.18 66.6,5.95 66.97,5.79C67.33,5.63 67.75,5.54 68.21,5.54C68.67,5.54 69.09,5.63 69.45,5.79C69.82,5.95 70.13,6.18 70.38,6.47C70.64,6.76 70.83,7.1 70.96,7.49C71.1,7.88 71.16,8.31 71.16,8.77V8.9C71.16,9.36 71.1,9.78 70.96,10.17C70.83,10.56 70.64,10.9 70.38,11.2C70.13,11.49 69.82,11.71 69.46,11.88C69.09,12.04 68.68,12.12 68.22,12.12C67.76,12.12 67.34,12.04 66.97,11.88C66.61,11.71 66.3,11.49 66.05,11.2C65.79,10.9 65.6,10.56 65.47,10.17C65.33,9.78 65.27,9.36 65.27,8.9ZM66.68,8.77V8.9C66.68,9.19 66.71,9.46 66.77,9.71C66.83,9.96 66.92,10.19 67.04,10.38C67.17,10.57 67.33,10.72 67.52,10.83C67.72,10.94 67.95,10.99 68.22,10.99C68.48,10.99 68.71,10.94 68.9,10.83C69.1,10.72 69.26,10.57 69.38,10.38C69.51,10.19 69.6,9.96 69.66,9.71C69.72,9.46 69.75,9.19 69.75,8.9V8.77C69.75,8.48 69.72,8.22 69.66,7.97C69.6,7.71 69.5,7.49 69.37,7.29C69.25,7.1 69.09,6.95 68.89,6.84C68.7,6.72 68.47,6.67 68.21,6.67C67.94,6.67 67.71,6.72 67.52,6.84C67.33,6.95 67.17,7.1 67.04,7.29C66.92,7.49 66.83,7.71 66.77,7.97C66.71,8.22 66.68,8.48 66.68,8.77ZM79.23,3.44V12H77.81V5.12L75.72,5.82V4.66L79.06,3.44H79.23ZM82.39,11.3C82.39,11.08 82.47,10.89 82.61,10.75C82.76,10.59 82.96,10.52 83.22,10.52C83.48,10.52 83.68,10.59 83.82,10.75C83.97,10.89 84.04,11.08 84.04,11.3C84.04,11.52 83.97,11.7 83.82,11.85C83.68,12 83.48,12.07 83.22,12.07C82.96,12.07 82.76,12 82.61,11.85C82.47,11.7 82.39,11.52 82.39,11.3ZM89.51,3.44V12H88.09V5.12L86,5.82V4.66L89.34,3.44H89.51ZM92.67,11.3C92.67,11.08 92.75,10.89 92.89,10.75C93.04,10.59 93.24,10.52 93.5,10.52C93.76,10.52 93.96,10.59 94.1,10.75C94.25,10.89 94.32,11.08 94.32,11.3C94.32,11.52 94.25,11.7 94.1,11.85C93.96,12 93.76,12.07 93.5,12.07C93.24,12.07 93.04,12 92.89,11.85C92.75,11.7 92.67,11.52 92.67,11.3ZM99.79,3.44V12H98.37V5.12L96.28,5.82V4.66L99.62,3.44H99.79Z"
android:fillColor="#9F9F9F"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0L28,0A8,8 0,0 1,36 8L36,28A8,8 0,0 1,28 36L8,36A8,8 0,0 1,0 28L0,8A8,8 0,0 1,8 0z"
android:fillColor="#222222"/>
<path
android:pathData="M15.953,13H15.896H15.896C14.015,13 12.526,13 11.36,13.161C10.16,13.327 9.189,13.677 8.424,14.465C7.658,15.252 7.318,16.251 7.157,17.485C7,18.684 7,20.217 7,22.151V22.151V22.211C7,22.646 7.344,23 7.767,23C8.191,23 8.535,22.646 8.535,22.211C8.535,20.203 8.537,18.777 8.678,17.696C8.816,16.637 9.076,16.026 9.509,15.581C9.942,15.135 10.535,14.868 11.565,14.726C12.616,14.581 14.002,14.579 15.953,14.579C16.377,14.579 16.721,14.226 16.721,13.79C16.721,13.354 16.377,13 15.953,13ZM20.046,14.579C21.998,14.579 23.384,14.581 24.435,14.726C25.465,14.868 26.058,15.135 26.491,15.581C26.924,16.026 27.184,16.637 27.322,17.696C27.463,18.777 27.465,20.203 27.465,22.211C27.465,22.646 27.809,23 28.233,23C28.656,23 29,22.646 29,22.211V22.151V22.151C29,20.217 29,18.684 28.843,17.485C28.682,16.251 28.342,15.252 27.576,14.465C26.811,13.677 25.84,13.327 24.64,13.161C23.474,13 21.985,13 20.104,13H20.104H20.046C19.623,13 19.279,13.354 19.279,13.79C19.279,14.226 19.623,14.579 20.046,14.579Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M3,6.386C3,5.902 3.345,5.509 3.771,5.509L6.436,5.508C6.965,5.493 7.432,5.11 7.612,4.544C7.617,4.529 7.622,4.511 7.642,4.444L7.757,4.053C7.827,3.812 7.888,3.603 7.974,3.416C8.312,2.677 8.938,2.164 9.661,2.033C9.845,2 10.038,2 10.261,2H13.739C13.962,2 14.156,2 14.339,2.033C15.062,2.164 15.688,2.677 16.026,3.416C16.112,3.603 16.173,3.812 16.243,4.053L16.358,4.444C16.378,4.511 16.383,4.529 16.388,4.544C16.568,5.11 17.128,5.494 17.657,5.509H20.229C20.655,5.509 21,5.902 21,6.386C21,6.87 20.655,7.263 20.229,7.263H3.771C3.345,7.263 3,6.87 3,6.386Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M11.596,22H12.404C15.187,22 16.579,22 17.483,21.114C18.388,20.228 18.48,18.775 18.665,15.869L18.932,11.681C19.033,10.104 19.083,9.315 18.629,8.816C18.175,8.316 17.409,8.316 15.876,8.316H8.124C6.591,8.316 5.825,8.316 5.371,8.816C4.917,9.315 4.967,10.104 5.068,11.681L5.335,15.869C5.52,18.775 5.612,20.228 6.517,21.114C7.422,22 8.813,22 11.596,22ZM10.246,12.189C10.205,11.755 9.838,11.438 9.425,11.482C9.013,11.525 8.713,11.912 8.754,12.346L9.254,17.609C9.295,18.043 9.662,18.359 10.075,18.316C10.487,18.272 10.788,17.886 10.746,17.452L10.246,12.189ZM14.575,11.482C14.987,11.525 15.288,11.912 15.246,12.346L14.746,17.609C14.705,18.043 14.337,18.359 13.925,18.316C13.513,18.272 13.212,17.886 13.254,17.452L13.754,12.189C13.795,11.755 14.163,11.438 14.575,11.482Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M3,6.386C3,5.902 3.345,5.509 3.771,5.509L6.436,5.508C6.965,5.493 7.432,5.11 7.612,4.544C7.617,4.529 7.622,4.511 7.642,4.444L7.757,4.053C7.827,3.812 7.888,3.603 7.974,3.416C8.312,2.677 8.938,2.164 9.661,2.033C9.845,2 10.038,2 10.261,2H13.739C13.962,2 14.156,2 14.339,2.033C15.062,2.164 15.688,2.677 16.026,3.416C16.112,3.603 16.173,3.812 16.243,4.053L16.358,4.444C16.378,4.511 16.383,4.529 16.388,4.544C16.568,5.11 17.128,5.494 17.657,5.509H20.229C20.655,5.509 21,5.902 21,6.386C21,6.87 20.655,7.263 20.229,7.263H3.771C3.345,7.263 3,6.87 3,6.386Z"
android:fillColor="#E83565"/>
<path
android:pathData="M11.596,22H12.404C15.187,22 16.579,22 17.483,21.114C18.388,20.228 18.48,18.775 18.665,15.869L18.932,11.681C19.033,10.104 19.083,9.315 18.629,8.816C18.175,8.316 17.409,8.316 15.876,8.316H8.124C6.591,8.316 5.825,8.316 5.371,8.816C4.917,9.315 4.967,10.104 5.068,11.681L5.335,15.869C5.52,18.775 5.612,20.228 6.517,21.114C7.422,22 8.813,22 11.596,22ZM10.246,12.189C10.205,11.755 9.838,11.438 9.425,11.482C9.013,11.525 8.713,11.912 8.754,12.346L9.254,17.609C9.295,18.043 9.662,18.359 10.075,18.316C10.487,18.272 10.788,17.886 10.746,17.452L10.246,12.189ZM14.575,11.482C14.987,11.525 15.288,11.912 15.246,12.346L14.746,17.609C14.705,18.043 14.337,18.359 13.925,18.316C13.513,18.272 13.212,17.886 13.254,17.452L13.754,12.189C13.795,11.755 14.163,11.438 14.575,11.482Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M3,6.386C3,5.902 3.345,5.509 3.771,5.509L6.436,5.508C6.965,5.493 7.432,5.11 7.612,4.544C7.617,4.529 7.622,4.511 7.642,4.444L7.757,4.053C7.827,3.812 7.888,3.603 7.974,3.416C8.312,2.677 8.938,2.164 9.661,2.033C9.845,2 10.038,2 10.261,2H13.739C13.962,2 14.156,2 14.339,2.033C15.062,2.164 15.688,2.677 16.026,3.416C16.112,3.603 16.173,3.812 16.243,4.053L16.358,4.444C16.378,4.511 16.383,4.529 16.388,4.544C16.568,5.11 17.128,5.494 17.657,5.509H20.229C20.655,5.509 21,5.902 21,6.386C21,6.87 20.655,7.263 20.229,7.263H3.771C3.345,7.263 3,6.87 3,6.386Z"
android:fillColor="#E83565"/>
<path
android:pathData="M11.596,22H12.404C15.187,22 16.579,22 17.483,21.114C18.388,20.228 18.48,18.775 18.665,15.869L18.932,11.681C19.033,10.104 19.083,9.315 18.629,8.816C18.175,8.316 17.409,8.316 15.876,8.316H8.124C6.591,8.316 5.825,8.316 5.371,8.816C4.917,9.315 4.967,10.104 5.068,11.681L5.335,15.869C5.52,18.775 5.612,20.228 6.517,21.114C7.422,22 8.813,22 11.596,22ZM10.246,12.189C10.205,11.755 9.838,11.438 9.425,11.482C9.013,11.525 8.713,11.912 8.754,12.346L9.254,17.609C9.295,18.043 9.662,18.359 10.075,18.316C10.487,18.272 10.788,17.886 10.746,17.452L10.246,12.189ZM14.575,11.482C14.987,11.525 15.288,11.912 15.246,12.346L14.746,17.609C14.705,18.043 14.337,18.359 13.925,18.316C13.513,18.272 13.212,17.886 13.254,17.452L13.754,12.189C13.795,11.755 14.163,11.438 14.575,11.482Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M2,12C2,7.286 2,4.929 3.464,3.464C4.929,2 7.286,2 12,2C16.714,2 19.071,2 20.535,3.464C22,4.929 22,7.286 22,12C22,16.714 22,19.071 20.535,20.535C19.071,22 16.714,22 12,22C7.286,22 4.929,22 3.464,20.535C2,19.071 2,16.714 2,12Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M10,7.292C9.655,7.292 9.375,7.012 9.375,6.667V4.167C9.375,3.821 9.655,3.542 10,3.542C10.345,3.542 10.625,3.821 10.625,4.167V6.667C10.625,7.012 10.345,7.292 10,7.292Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M3.333,6.042C4.599,6.042 5.625,7.068 5.625,8.333C5.625,9.599 4.599,10.625 3.333,10.625C2.068,10.625 1.042,9.599 1.042,8.333C1.042,7.068 2.068,6.042 3.333,6.042ZM4.375,8.333C4.375,7.758 3.909,7.292 3.333,7.292C2.758,7.292 2.292,7.758 2.292,8.333C2.292,8.909 2.758,9.375 3.333,9.375C3.909,9.375 4.375,8.909 4.375,8.333Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M12.292,10C12.292,11.266 11.266,12.292 10,12.292C8.734,12.292 7.708,11.266 7.708,10C7.708,8.734 8.734,7.708 10,7.708C11.266,7.708 12.292,8.734 12.292,10ZM10,11.042C10.575,11.042 11.042,10.575 11.042,10C11.042,9.425 10.575,8.958 10,8.958C9.425,8.958 8.958,9.425 8.958,10C8.958,10.575 9.425,11.042 10,11.042Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M18.958,11.667C18.958,12.932 17.932,13.958 16.667,13.958C15.401,13.958 14.375,12.932 14.375,11.667C14.375,10.401 15.401,9.375 16.667,9.375C17.932,9.375 18.958,10.401 18.958,11.667ZM16.667,12.708C17.242,12.708 17.708,12.242 17.708,11.667C17.708,11.091 17.242,10.625 16.667,10.625C16.091,10.625 15.625,11.091 15.625,11.667C15.625,12.242 16.091,12.708 16.667,12.708Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M16.042,8.333C16.042,8.678 16.322,8.958 16.667,8.958C17.012,8.958 17.292,8.678 17.292,8.333V4.167C17.292,3.821 17.012,3.542 16.667,3.542C16.322,3.542 16.042,3.821 16.042,4.167V8.333Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M3.333,11.042C2.988,11.042 2.708,11.321 2.708,11.667L2.708,15.833C2.708,16.178 2.988,16.458 3.333,16.458C3.679,16.458 3.958,16.178 3.958,15.833L3.958,11.667C3.958,11.321 3.679,11.042 3.333,11.042Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M9.375,15.833C9.375,16.178 9.655,16.458 10,16.458C10.345,16.458 10.625,16.178 10.625,15.833V13.333C10.625,12.988 10.345,12.708 10,12.708C9.655,12.708 9.375,12.988 9.375,13.333V15.833Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M16.667,16.458C16.322,16.458 16.042,16.178 16.042,15.833V15C16.042,14.655 16.322,14.375 16.667,14.375C17.012,14.375 17.292,14.655 17.292,15V15.833C17.292,16.178 17.012,16.458 16.667,16.458Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M2.708,4.167C2.708,3.821 2.988,3.542 3.333,3.542C3.679,3.542 3.958,3.821 3.958,4.167V5C3.958,5.345 3.679,5.625 3.333,5.625C2.988,5.625 2.708,5.345 2.708,5V4.167Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M20,10C20,15.523 15.523,20 10,20C4.477,20 0,15.523 0,10C0,4.477 4.477,0 10,0C15.523,0 20,4.477 20,10ZM14.03,6.97C14.323,7.263 14.323,7.737 14.03,8.03L9.03,13.03C8.737,13.323 8.263,13.323 7.97,13.03L5.97,11.03C5.677,10.737 5.677,10.263 5.97,9.97C6.263,9.677 6.737,9.677 7.03,9.97L8.5,11.439L10.735,9.205L12.97,6.97C13.263,6.677 13.737,6.677 14.03,6.97Z"
android:fillColor="#E83565"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M18.535,18.535C20,17.071 20,14.714 20,10C20,9.659 20,9.488 19.985,9.314C19.914,8.505 19.586,7.713 19.064,7.09C18.952,6.957 18.828,6.833 18.581,6.586L13.414,1.419C13.167,1.172 13.043,1.048 12.91,0.936C12.287,0.414 11.495,0.086 10.686,0.015C10.512,0 10.342,0 10,0C5.286,0 2.929,0 1.464,1.464C0,2.929 0,5.286 0,10C0,14.714 0,17.071 1.464,18.535C2.148,19.22 3.027,19.584 4.25,19.778L4.25,18.948C4.25,18.049 4.25,17.3 4.33,16.705C4.414,16.078 4.6,15.511 5.055,15.056C5.511,14.6 6.078,14.414 6.706,14.33C7.3,14.25 8.05,14.25 8.948,14.25H11.052C11.95,14.25 12.7,14.25 13.295,14.33C13.922,14.414 14.489,14.6 14.944,15.056C15.4,15.511 15.586,16.078 15.67,16.705C15.75,17.3 15.75,18.049 15.75,18.948L15.75,19.778C16.973,19.584 17.851,19.22 18.535,18.535ZM4.25,6C4.25,5.586 4.586,5.25 5,5.25H11C11.414,5.25 11.75,5.586 11.75,6C11.75,6.414 11.414,6.75 11,6.75H5C4.586,6.75 4.25,6.414 4.25,6Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M14.184,16.905C14.248,17.388 14.25,18.036 14.25,19V19.931C13.094,20 11.7,20 10,20C8.3,20 6.906,20 5.75,19.931V19C5.75,18.036 5.752,17.388 5.817,16.905C5.879,16.444 5.986,16.246 6.116,16.116C6.246,15.986 6.444,15.879 6.905,15.816C7.388,15.752 8.036,15.75 9,15.75H11C11.964,15.75 12.612,15.752 13.095,15.816C13.556,15.879 13.754,15.986 13.884,16.116C14.014,16.246 14.121,16.444 14.184,16.905Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M16.03,10.03C16.323,9.737 16.323,9.263 16.03,8.97C15.737,8.677 15.263,8.677 14.97,8.97L10.5,13.439L9.03,11.97C8.737,11.677 8.263,11.677 7.97,11.97C7.677,12.263 7.677,12.737 7.97,13.03L9.97,15.03C10.263,15.323 10.737,15.323 11.03,15.03L16.03,10.03Z"
android:fillColor="#626262"/>
<path
android:pathData="M12,1.25C6.063,1.25 1.25,6.063 1.25,12C1.25,17.937 6.063,22.75 12,22.75C17.937,22.75 22.75,17.937 22.75,12C22.75,6.063 17.937,1.25 12,1.25ZM2.75,12C2.75,6.891 6.891,2.75 12,2.75C17.109,2.75 21.25,6.891 21.25,12C21.25,17.109 17.109,21.25 12,21.25C6.891,21.25 2.75,17.109 2.75,12Z"
android:fillColor="#626262"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="21dp"
android:height="20dp"
android:viewportWidth="21"
android:viewportHeight="20">
<path
android:pathData="M10.289,1.646C10.323,1.99 10.072,2.296 9.728,2.33C5.834,2.716 2.792,6.003 2.792,10C2.792,14.257 6.243,17.708 10.5,17.708C14.497,17.708 17.784,14.666 18.17,10.772C18.204,10.428 18.51,10.177 18.854,10.211C19.197,10.245 19.448,10.552 19.414,10.895C18.965,15.423 15.146,18.958 10.5,18.958C5.552,18.958 1.542,14.948 1.542,10C1.542,5.354 5.077,1.535 9.605,1.086C9.948,1.052 10.255,1.303 10.289,1.646ZM12.63,1.544C12.791,1.426 12.998,1.392 13.187,1.452C15.974,2.327 18.173,4.526 19.048,7.312C19.152,7.642 18.968,7.993 18.639,8.096C18.31,8.199 17.959,8.016 17.856,7.687C17.19,5.568 15.633,3.843 13.625,2.951V10C13.625,11.726 12.226,13.125 10.5,13.125C8.774,13.125 7.375,11.726 7.375,10C7.375,8.274 8.774,6.875 10.5,6.875C11.203,6.875 11.853,7.107 12.375,7.5V2.048C12.375,1.849 12.47,1.662 12.63,1.544ZM12.375,10C12.375,8.964 11.536,8.125 10.5,8.125C9.464,8.125 8.625,8.964 8.625,10C8.625,11.035 9.464,11.875 10.5,11.875C11.536,11.875 12.375,11.035 12.375,10Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0L28,0A8,8 0,0 1,36 8L36,28A8,8 0,0 1,28 36L8,36A8,8 0,0 1,0 28L0,8A8,8 0,0 1,8 0z"
android:fillColor="#222222"/>
<path
android:pathData="M20,7.25C20.414,7.25 20.75,7.586 20.75,8C20.75,9.907 20.752,11.262 20.89,12.289C21.025,13.295 21.279,13.875 21.702,14.298C22.125,14.721 22.705,14.975 23.711,15.11C24.739,15.248 26.093,15.25 28,15.25C28.414,15.25 28.75,15.586 28.75,16C28.75,16.414 28.414,16.75 28,16.75H27.944C26.106,16.75 24.65,16.75 23.511,16.597C22.339,16.439 21.39,16.107 20.641,15.359C19.893,14.61 19.561,13.661 19.403,12.489C19.25,11.35 19.25,9.894 19.25,8.056V8C19.25,7.586 19.586,7.25 20,7.25ZM16,7.25C16.414,7.25 16.75,7.586 16.75,8V8.056C16.75,9.894 16.75,11.35 16.597,12.489C16.439,13.661 16.107,14.61 15.359,15.359C14.61,16.107 13.661,16.439 12.489,16.597C11.35,16.75 9.894,16.75 8.056,16.75H8C7.586,16.75 7.25,16.414 7.25,16C7.25,15.586 7.586,15.25 8,15.25C9.907,15.25 11.262,15.248 12.289,15.11C13.295,14.975 13.875,14.721 14.298,14.298C14.721,13.875 14.975,13.295 15.11,12.289C15.248,11.262 15.25,9.907 15.25,8C15.25,7.586 15.586,7.25 16,7.25ZM7.25,20C7.25,19.586 7.586,19.25 8,19.25H8.056C9.894,19.25 11.35,19.25 12.489,19.403C13.661,19.561 14.61,19.893 15.359,20.641C16.107,21.39 16.439,22.339 16.597,23.511C16.75,24.65 16.75,26.106 16.75,27.944V28C16.75,28.414 16.414,28.75 16,28.75C15.586,28.75 15.25,28.414 15.25,28C15.25,26.093 15.248,24.739 15.11,23.711C14.975,22.705 14.721,22.125 14.298,21.702C13.875,21.279 13.295,21.025 12.289,20.89C11.262,20.752 9.907,20.75 8,20.75C7.586,20.75 7.25,20.414 7.25,20ZM27.944,19.25H28C28.414,19.25 28.75,19.586 28.75,20C28.75,20.414 28.414,20.75 28,20.75C26.093,20.75 24.739,20.752 23.711,20.89C22.705,21.025 22.125,21.279 21.702,21.702C21.279,22.125 21.025,22.705 20.89,23.711C20.752,24.739 20.75,26.093 20.75,28C20.75,28.414 20.414,28.75 20,28.75C19.586,28.75 19.25,28.414 19.25,28V27.944C19.25,26.106 19.25,24.65 19.403,23.511C19.561,22.339 19.893,21.39 20.641,20.641C21.39,19.893 22.339,19.561 23.511,19.403C24.65,19.25 26.106,19.25 27.944,19.25Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,12m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M2,12C2,7.286 2,4.929 3.464,3.464C4.929,2 7.286,2 12,2C16.714,2 19.071,2 20.535,3.464C22,4.929 22,7.286 22,12C22,16.714 22,19.071 20.535,20.535C19.071,22 16.714,22 12,22C7.286,22 4.929,22 3.464,20.535C2,19.071 2,16.714 2,12Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="@dimen/_8sdp"
android:height="@dimen/_8sdp"
android:viewportWidth="12"
android:viewportHeight="12">
<path
android:pathData="M6,6m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
android:fillColor="#9F9F9F"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/indicator_main_selected"
android:state_selected="true"/>
<item
android:drawable="@drawable/indicator_main_unselected"
android:state_selected="false"/>
</selector>
\ No newline at end of file
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_brand" />
<corners android:radius="20dp" />
<size android:width="@dimen/_20sdp" android:height="@dimen/_8sdp" />
</shape>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M13.029,1.77C13.302,1.077 14.281,1.077 14.554,1.77L14.911,2.678L15.814,3.036C16.506,3.309 16.506,4.289 15.814,4.563L14.911,4.921L14.554,5.828C14.281,6.522 13.302,6.522 13.029,5.828L12.672,4.921L11.768,4.563C11.077,4.289 11.077,3.309 11.768,3.036L12.672,2.678L13.029,1.77ZM13.792,2.108L14.137,2.988C14.22,3.199 14.387,3.367 14.599,3.451L15.479,3.799L14.599,4.148C14.387,4.232 14.22,4.4 14.137,4.611L13.792,5.49L13.446,4.611C13.363,4.4 13.196,4.232 12.984,4.148L12.104,3.799L12.984,3.451C13.196,3.367 13.363,3.199 13.446,2.988L13.792,2.108Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M2.762,2.762C3.944,1.579 5.861,1.579 7.044,2.762L17.238,12.956C18.421,14.139 18.421,16.056 17.238,17.238C16.056,18.421 14.139,18.421 12.956,17.238L2.762,7.044C1.579,5.861 1.579,3.944 2.762,2.762ZM6.16,3.646C5.466,2.951 4.34,2.951 3.646,3.646C2.951,4.34 2.951,5.466 3.646,6.16L4.968,7.482L7.482,4.968L6.16,3.646ZM13.84,16.354L5.852,8.366L8.366,5.852L16.354,13.84C17.049,14.534 17.049,15.66 16.354,16.354C15.66,17.049 14.534,17.049 13.84,16.354Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M17.777,7.456C17.504,6.762 16.524,6.762 16.251,7.456L16.123,7.783L15.797,7.912C15.106,8.186 15.106,9.166 15.797,9.439L16.123,9.568L16.251,9.896C16.524,10.59 17.504,10.59 17.777,9.896L17.905,9.568L18.232,9.439C18.923,9.166 18.923,8.186 18.232,7.912L17.905,7.783L17.777,7.456ZM17.014,7.793L16.896,8.093C16.813,8.304 16.646,8.472 16.435,8.556L16.132,8.676L16.435,8.796C16.646,8.88 16.813,9.047 16.896,9.259L17.014,9.558L17.132,9.259C17.215,9.047 17.382,8.88 17.593,8.796L17.896,8.676L17.593,8.556C17.382,8.472 17.215,8.304 17.132,8.093L17.014,7.793Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M3.89,12.604C4.162,11.91 5.142,11.91 5.415,12.604L5.544,12.931L5.87,13.06C6.561,13.334 6.561,14.314 5.87,14.587L5.544,14.717L5.415,15.044C5.142,15.738 4.162,15.738 3.89,15.044L3.761,14.717L3.435,14.587C2.744,14.314 2.744,13.334 3.435,13.06L3.761,12.931L3.89,12.604ZM4.535,13.241L4.652,12.942L4.77,13.241C4.853,13.453 5.02,13.62 5.232,13.704L5.535,13.824L5.232,13.944C5.02,14.028 4.853,14.196 4.77,14.407L4.652,14.706L4.535,14.407C4.452,14.196 4.285,14.028 4.073,13.944L3.77,13.824L4.073,13.704C4.285,13.62 4.452,13.453 4.535,13.241Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/progressshape" >
<clip>
<shape
android:shape="rectangle" >
<size android:height="5dp"/>
<corners
android:radius="12dp" />
<gradient
android:startColor="#E83565"
android:endColor="#08E0FF"
/>
</shape>
</clip>
</item>
</layer-list>
\ No newline at end of file
<!-- res/drawable/rounded_background.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="10dp" />
<stroke
android:width="2dp"
android:color="#000000" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/color_bg"/>
<corners android:topLeftRadius="20dp"
android:topRightRadius="20dp"/>
</shape>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M4.375,8.333C4.375,7.068 5.401,6.042 6.667,6.042C7.932,6.042 8.958,7.068 8.958,8.333C8.958,9.599 7.932,10.625 6.667,10.625C5.401,10.625 4.375,9.599 4.375,8.333ZM6.667,7.292C6.091,7.292 5.625,7.758 5.625,8.333C5.625,8.909 6.091,9.375 6.667,9.375C7.242,9.375 7.708,8.909 7.708,8.333C7.708,7.758 7.242,7.292 6.667,7.292Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M13.333,13.958C12.068,13.958 11.042,12.932 11.042,11.667C11.042,10.401 12.068,9.375 13.333,9.375C14.599,9.375 15.625,10.401 15.625,11.667C15.625,12.932 14.599,13.958 13.333,13.958ZM12.292,11.667C12.292,12.242 12.758,12.708 13.333,12.708C13.909,12.708 14.375,12.242 14.375,11.667C14.375,11.091 13.909,10.625 13.333,10.625C12.758,10.625 12.292,11.091 12.292,11.667Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M6.667,11.042C7.012,11.042 7.292,11.321 7.292,11.667V15.833C7.292,16.178 7.012,16.458 6.667,16.458C6.321,16.458 6.042,16.178 6.042,15.833V11.667C6.042,11.321 6.321,11.042 6.667,11.042Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M13.958,8.333C13.958,8.678 13.679,8.958 13.333,8.958C12.988,8.958 12.708,8.678 12.708,8.333V4.167C12.708,3.821 12.988,3.542 13.333,3.542C13.679,3.542 13.958,3.821 13.958,4.167V8.333Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M6.667,3.542C7.012,3.542 7.292,3.821 7.292,4.167V5C7.292,5.345 7.012,5.625 6.667,5.625C6.321,5.625 6.042,5.345 6.042,5V4.167C6.042,3.821 6.321,3.542 6.667,3.542Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M13.958,15.833C13.958,16.178 13.679,16.458 13.333,16.458C12.988,16.458 12.708,16.178 12.708,15.833V15C12.708,14.655 12.988,14.375 13.333,14.375C13.679,14.375 13.958,14.655 13.958,15V15.833Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M9.952,1.042H10.048C11.972,1.042 13.479,1.042 14.655,1.2C15.859,1.362 16.809,1.699 17.555,2.445C18.301,3.191 18.638,4.141 18.8,5.345C18.958,6.521 18.958,8.028 18.958,9.952V10.048C18.958,11.971 18.958,13.479 18.8,14.655C18.638,15.859 18.301,16.809 17.555,17.555C16.809,18.301 15.859,18.638 14.655,18.8C13.479,18.958 11.972,18.958 10.048,18.958H9.952C8.029,18.958 6.521,18.958 5.345,18.8C4.141,18.638 3.191,18.301 2.445,17.555C1.699,16.809 1.362,15.859 1.2,14.655C1.042,13.479 1.042,11.971 1.042,10.048V9.952C1.042,8.028 1.042,6.521 1.2,5.345C1.362,4.141 1.699,3.191 2.445,2.445C3.191,1.699 4.141,1.362 5.345,1.2C6.521,1.042 8.029,1.042 9.952,1.042ZM5.511,2.439C4.446,2.582 3.804,2.854 3.329,3.329C2.854,3.804 2.582,4.446 2.439,5.511C2.293,6.595 2.292,8.018 2.292,10C2.292,11.982 2.293,13.405 2.439,14.489C2.582,15.554 2.854,16.196 3.329,16.671C3.804,17.146 4.446,17.418 5.511,17.561C6.595,17.707 8.018,17.708 10,17.708C11.982,17.708 13.405,17.707 14.489,17.561C15.554,17.418 16.196,17.146 16.671,16.671C17.146,16.196 17.418,15.554 17.561,14.489C17.707,13.405 17.708,11.982 17.708,10C17.708,8.018 17.707,6.595 17.561,5.511C17.418,4.446 17.146,3.804 16.671,3.329C16.196,2.854 15.554,2.582 14.489,2.439C13.405,2.293 11.982,2.292 10,2.292C8.018,2.292 6.595,2.293 5.511,2.439Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/color_bg">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/color_bg">
<ScrollView
android:id="@+id/mLlViewEdge"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingHorizontal="@dimen/_20sdp"
android:paddingTop="@dimen/_20sdp"
android:paddingBottom="@dimen/_12sdp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/_12sdp"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/mLlView"
android:layout_width="match_parent"
android:layout_height="@dimen/_45sdp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:padding="@dimen/_12sdp"
android:src="@drawable/ic_back" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/_12sdp"
android:layout_toEndOf="@+id/mImgBack"
android:text="@string/edge_lighting"
android:textColor="@color/white"
android:textSize="@dimen/_16sdp"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mOff"
android:layout_width="@dimen/_30sdp"
android:layout_height="@dimen/_30sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:background="@drawable/ic_off" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginTop="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:background="@drawable/dra_custom_layout_play">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/_12sdp"
android:text="@string/allowed_apps"
android:textColor="#E1E1E1"
android:textSize="12sp" />
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/mCheck"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp" />
</RelativeLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_12sdp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:src="@drawable/ic_full_screen" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/border_setting"
android:textColor="@color/color_brand"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
<!-- <RelativeLayout-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="40dp"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginTop="@dimen/_20sdp">-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:id="@+id/mImgtop"-->
<!-- android:layout_width="40dp"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:src="@drawable/ic_top_radius" />-->
<!-- <LinearLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="36dp"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginRight="@dimen/_12sdp"-->
<!-- android:layout_toRightOf="@+id/mImgtop"-->
<!-- android:orientation="vertical">-->
<!-- <RelativeLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:orientation="horizontal">-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="Top radius"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="12sp" />-->
<!-- <TextView-->
<!-- android:id="@+id/mTxtTop"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentRight="true"-->
<!-- android:text="0"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="12sp" />-->
<!-- </RelativeLayout>-->
<!-- <SeekBar-->
<!-- android:id="@+id/mProgressBarTop"-->
<!-- style="?android:attr/progressBarStyleHorizontal"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="10dp"-->
<!-- android:layout_gravity="bottom"-->
<!-- android:layout_marginTop="@dimen/_6sdp"-->
<!-- android:gravity="bottom"-->
<!-- android:splitTrack="false"-->
<!-- android:progressDrawable="@drawable/custom_seek_color"-->
<!-- android:thumb="@drawable/custom_equalizer_thumb" />-->
<!-- </LinearLayout>-->
<!-- </RelativeLayout>-->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_20sdp"
android:layout_marginEnd="@dimen/_12sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgtop"
android:layout_width="@dimen/_30sdp"
android:layout_height="@dimen/_30sdp"
android:layout_centerVertical="true"
android:src="@drawable/ic_top_radius"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/mImgtop"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/top_radius"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/mTxtTop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:text="0"
android:textColor="@color/white"
android:textSize="12sp" />
</RelativeLayout>
<SeekBar
android:id="@+id/mProgressBarTop"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="bottom"
android:maxHeight="@dimen/_5sdp"
android:minHeight="@dimen/_5sdp"
android:progressDrawable="@drawable/custom_seek_color"
android:splitTrack="false"
android:thumb="@drawable/custom_equalizer_thumb"
tools:progress="40" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- <RelativeLayout-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="40dp"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginTop="@dimen/_20sdp">-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:id="@+id/mImgbottom"-->
<!-- android:layout_width="40dp"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:src="@drawable/ic_bottom" />-->
<!-- <LinearLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="36dp"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginRight="@dimen/_12sdp"-->
<!-- android:layout_toRightOf="@+id/mImgbottom"-->
<!-- android:orientation="vertical">-->
<!-- <RelativeLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:orientation="horizontal">-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="Bottom radius"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="12sp" />-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentRight="true"-->
<!-- android:text="140"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="12sp" />-->
<!-- </RelativeLayout>-->
<!-- <ProgressBar-->
<!-- style="?android:attr/progressBarStyleHorizontal"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="10dp"-->
<!-- android:layout_gravity="bottom"-->
<!-- android:layout_marginTop="@dimen/_6sdp"-->
<!-- android:gravity="bottom"-->
<!-- android:progress="40"-->
<!-- android:progressDrawable="@drawable/custom_color_gradient"-->
<!-- android:thumb="@drawable/custom_equalizer_thumb" />-->
<!-- </LinearLayout>-->
<!-- </RelativeLayout>-->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_20sdp"
android:layout_marginEnd="@dimen/_12sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgbottom"
android:layout_width="@dimen/_30sdp"
android:layout_height="@dimen/_30sdp"
android:layout_centerVertical="true"
android:src="@drawable/ic_bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/mImgbottom"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bottom_radius"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/mTxtBottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:text="0"
android:textColor="@color/white"
android:textSize="12sp" />
</RelativeLayout>
<SeekBar
android:id="@+id/mProgressBarBottom"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="bottom"
android:maxHeight="@dimen/_5sdp"
android:minHeight="@dimen/_5sdp"
android:progressDrawable="@drawable/custom_seek_color"
android:splitTrack="false"
android:thumb="@drawable/custom_equalizer_thumb"
tools:progress="40" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- <RelativeLayout-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="40dp"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginTop="@dimen/_20sdp">-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:id="@+id/mImgWidth"-->
<!-- android:layout_width="40dp"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:src="@drawable/ic_width" />-->
<!-- <LinearLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="36dp"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginRight="@dimen/_12sdp"-->
<!-- android:layout_toRightOf="@+id/mImgWidth"-->
<!-- android:orientation="vertical">-->
<!-- <RelativeLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:orientation="horizontal">-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="Width"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="12sp" />-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentRight="true"-->
<!-- android:text="140"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="12sp" />-->
<!-- </RelativeLayout>-->
<!-- <ProgressBar-->
<!-- style="?android:attr/progressBarStyleHorizontal"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="10dp"-->
<!-- android:layout_gravity="bottom"-->
<!-- android:layout_marginTop="@dimen/_6sdp"-->
<!-- android:gravity="bottom"-->
<!-- android:progress="40"-->
<!-- android:progressDrawable="@drawable/custom_color_gradient"-->
<!-- android:thumb="@drawable/custom_equalizer_thumb" />-->
<!-- </LinearLayout>-->
<!-- </RelativeLayout>-->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_20sdp"
android:layout_marginEnd="@dimen/_12sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgWidth"
android:layout_width="@dimen/_30sdp"
android:layout_height="@dimen/_30sdp"
android:layout_centerVertical="true"
android:src="@drawable/ic_width"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/mImgWidth"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/width"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/mTxtWidth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="0"
android:textColor="@color/white"
android:textSize="12sp" />
</RelativeLayout>
<SeekBar
android:id="@+id/mWidth"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="bottom"
android:maxHeight="@dimen/_5sdp"
android:minHeight="@dimen/_5sdp"
android:progressDrawable="@drawable/custom_seek_color"
android:splitTrack="false"
android:thumb="@drawable/custom_equalizer_thumb"
tools:progress="40" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- <RelativeLayout-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="40dp"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginTop="@dimen/_20sdp">-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:id="@+id/mImgSpeed"-->
<!-- android:layout_width="40dp"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:src="@drawable/ic_speed" />-->
<!-- <LinearLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="36dp"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginRight="@dimen/_12sdp"-->
<!-- android:layout_toRightOf="@+id/mImgSpeed"-->
<!-- android:orientation="vertical">-->
<!-- <RelativeLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:orientation="horizontal">-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="Speed"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="12sp" />-->
<!-- <TextView-->
<!-- android:id="@+id/mTxtSpeed"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentRight="true"-->
<!-- android:text="0"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="12sp" />-->
<!-- </RelativeLayout>-->
<!-- <SeekBar-->
<!-- android:id="@+id/mSpeed"-->
<!-- style="?android:attr/progressBarStyleHorizontal"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="10dp"-->
<!-- android:layout_gravity="bottom"-->
<!-- android:layout_marginTop="@dimen/_6sdp"-->
<!-- android:gravity="bottom"-->
<!-- android:progressDrawable="@drawable/custom_color_gradient"-->
<!-- android:thumb="@drawable/custom_equalizer_thumb" />-->
<!-- </LinearLayout>-->
<!-- </RelativeLayout>-->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_20sdp"
android:layout_marginEnd="@dimen/_12sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgSpeed"
android:layout_width="@dimen/_30sdp"
android:layout_height="@dimen/_30sdp"
android:layout_centerVertical="true"
android:src="@drawable/ic_speed"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/mImgSpeed"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_12sdp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/speed"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/mTxtSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="0"
android:textColor="@color/white"
android:textSize="12sp" />
</RelativeLayout>
<SeekBar
android:id="@+id/mSpeed"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="bottom"
android:maxHeight="@dimen/_5sdp"
android:minHeight="@dimen/_5sdp"
android:progressDrawable="@drawable/custom_seek_color"
android:splitTrack="false"
android:thumb="@drawable/custom_equalizer_thumb"
tools:progress="1" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_20sdp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:src="@drawable/ic_magic_stick" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="@string/border_style"
android:textColor="@color/color_brand"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRcyclerStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginTop="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_20sdp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_4sdp"
android:src="@drawable/ic_paint" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="@string/lighting_color"
android:textColor="@color/color_brand"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecyclerColor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginTop="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp" />
</LinearLayout>
</ScrollView>
<include
android:id="@+id/includeBorderWidth"
layout="@layout/item_boder_width" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/_2sdp"
android:background="@color/clr_9F9F9F" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/mLlView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="@dimen/_12sdp"
android:src="@drawable/ic_back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/list_effects"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/mImgBack"
app:layout_constraintStart_toEndOf="@+id/mImgBack"
app:layout_constraintTop_toTopOf="@+id/mImgBack" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayoutEffects"
android:layout_width="match_parent"
android:layout_height="@dimen/_30sdp"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="@dimen/_16sdp"
android:layout_marginTop="@dimen/_20sdp"
android:background="@drawable/dra_custom_tablayout_bg"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mImgBack"
app:tabGravity="fill"
app:tabIndicator="@drawable/dra_custom_tablayout"
app:tabIndicatorColor="#E83565"
app:tabIndicatorFullWidth="true"
app:tabIndicatorGravity="stretch"
app:tabIndicatorHeight="@dimen/_25sdp"
app:tabInlineLabel="true"
app:tabMode="fixed"
app:tabTextColor="@color/white" />
<androidx.cardview.widget.CardView
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/_40sdp"
android:layout_marginHorizontal="@dimen/_16sdp"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_12sdp"
android:layout_marginEnd="@dimen/_12sdp"
app:cardBackgroundColor="#434343"
app:cardCornerRadius="30dp"
app:cardElevation="0dp"
app:layout_constraintTop_toBottomOf="@+id/mImgBack">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:orientation="horizontal"
android:padding="5dp">
<androidx.cardview.widget.CardView
android:id="@+id/cardTab1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:cardBackgroundColor="@color/transparent_00"
app:cardCornerRadius="25dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/tab1Background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/icTab1"
android:layout_width="@dimen/_20sdp"
android:layout_height="@dimen/_20sdp"
android:layout_gravity="center"
android:src="@drawable/ic_effects" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_5sdp"
android:text="@string/tab_effects"
android:textColor="@color/white"
android:textSize="@dimen/_12sdp"
android:textStyle="bold" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<View
android:layout_width="@dimen/_5sdp"
android:layout_height="0dp" />
<androidx.cardview.widget.CardView
android:id="@+id/cardTab2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:cardBackgroundColor="@color/transparent_00"
app:cardCornerRadius="25dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/tab2Background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="@dimen/_5sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/icTab2"
android:layout_width="@dimen/_20sdp"
android:layout_height="@dimen/_20sdp"
android:layout_gravity="center"
android:src="@drawable/ic_vector_save" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_5sdp"
android:text="@string/tab_my_effects"
android:textColor="@color/white"
android:textSize="@dimen/_12sdp"
android:textStyle="bold" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPagerEffects"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/mLlView" />
</RelativeLayout>
<!-- <LinearLayout-->
<!-- android:id="@+id/mLlBanner"-->
<!-- android:orientation="vertical"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content">-->
<!-- <View-->
<!-- android:id="@+id/lineBannerView"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="@dimen/_2sdp"-->
<!-- android:background="@color/clr_9F9F9F" />-->
<!-- <com.ads.control.ads.bannerAds.AperoBannerAdView-->
<!-- android:id="@+id/bannerView"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content" />-->
<!-- </LinearLayout>-->
<View
android:id="@+id/lineBannerView"
android:layout_width="match_parent"
android:layout_height="@dimen/_2sdp"
android:background="@color/clr_9F9F9F" />
<FrameLayout
android:id="@+id/mLlBanner"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</FrameLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
tools:context="com.bassbooster.soundeffects.equalizer.view.activity.setting.language.LanguageActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linerTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/CLBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_16sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_back"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTitleLanguage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/language"
android:textColor="@color/white"
android:textSize="@dimen/_16sdp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/CLBack"
app:layout_constraintStart_toEndOf="@+id/CLBack"
app:layout_constraintTop_toTopOf="@+id/CLBack" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTitleLanguageFirst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/language"
android:textColor="@color/white"
android:textSize="@dimen/_16sdp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/icCheckFirst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_16sdp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_check_first"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tvLine"
android:layout_width="0dp"
android:layout_height="1dp"
android:background="@color/line"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linerTitle" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvLanguage"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/_15sdp"
android:layout_marginBottom="@dimen/_15sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linerTitle" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</RelativeLayout>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical"
tools:context="com.bassbooster.soundeffects.equalizer.view.MainActivity">
<RelativeLayout
android:id="@+id/mRlTabTop"
android:layout_width="wrap_content"
android:layout_height="@dimen/_40sdp"
android:layout_marginTop="@dimen/_4sdp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:padding="@dimen/_12sdp"
android:src="@drawable/ic_logo" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgSetting"
android:layout_width="@dimen/_32sdp"
android:layout_height="@dimen/_32sdp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/_12sdp"
android:src="@drawable/ic_setting"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="RtlHardcoded" />
</RelativeLayout>
<!-- <com.google.android.material.tabs.TabLayout-->
<!-- android:id="@+id/tabLayout"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="@dimen/_30sdp"-->
<!-- android:layout_below="@+id/mRlTabTop"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:layout_marginTop="@dimen/_12sdp"-->
<!-- android:layout_marginRight="@dimen/_12sdp"-->
<!-- android:background="@drawable/dra_custom_tablayout_bg"-->
<!-- app:tabGravity="fill"-->
<!-- app:tabIndicator="@drawable/dra_custom_tablayout"-->
<!-- app:tabIndicatorColor="#E83565"-->
<!-- app:tabIndicatorFullWidth="true"-->
<!-- app:tabIndicatorGravity="stretch"-->
<!-- app:tabIndicatorHeight="@dimen/_25sdp"-->
<!-- app:tabInlineLabel="true"-->
<!-- app:tabMode="fixed"-->
<!-- app:tabTextColor="@color/white" />-->
<androidx.cardview.widget.CardView
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/_40sdp"
android:layout_below="@id/mRlTabTop"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginEnd="@dimen/_12sdp"
app:cardBackgroundColor="#434343"
app:cardCornerRadius="30dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:orientation="horizontal"
android:padding="5dp">
<androidx.cardview.widget.CardView
android:id="@+id/cardTab1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:cardBackgroundColor="@color/transparent_00"
app:cardCornerRadius="25dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/tab1Background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/icTab1"
android:layout_width="@dimen/_20sdp"
android:layout_height="@dimen/_20sdp"
android:layout_gravity="center"
android:src="@drawable/ic_equalizes" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_5sdp"
android:text="@string/tab_equalizer"
android:textColor="@color/white"
android:textSize="@dimen/_12sdp"
android:textStyle="bold" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<View
android:layout_width="@dimen/_5sdp"
android:layout_height="0dp" />
<androidx.cardview.widget.CardView
android:id="@+id/cardTab2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:cardBackgroundColor="@color/transparent_00"
app:cardCornerRadius="25dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/tab2Background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="@dimen/_5sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/icTab2"
android:layout_width="@dimen/_20sdp"
android:layout_height="@dimen/_20sdp"
android:layout_gravity="center"
android:src="@drawable/ic_music" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/_5sdp"
android:text="@string/tab_music"
android:textColor="@color/white"
android:textSize="@dimen/_12sdp"
android:textStyle="bold" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/mRlViewPlay"
android:layout_below="@+id/tabLayout"
android:layout_marginTop="@dimen/_12sdp" />
<RelativeLayout
android:id="@+id/mRlViewPlay"
android:layout_width="match_parent"
android:layout_height="@dimen/_50sdp"
android:layout_alignParentBottom="true"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_12sdp"
android:layout_marginEnd="@dimen/_12sdp"
android:layout_marginBottom="@dimen/_12sdp">
<RelativeLayout
android:id="@+id/mViewSelect"
android:layout_width="match_parent"
android:layout_height="@dimen/_50sdp"
android:background="@drawable/dra_custom_layout_play"
android:visibility="gone">
<ImageView
android:id="@+id/mImgSelectMusic"
android:layout_width="50dp"
android:layout_height="match_parent"
android:padding="10dp"
android:src="@drawable/ic_layer_music" />
<View
android:layout_marginStart="50dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:background="#ffffff"
android:layout_width="1dp"
android:layout_height="match_parent"/>
<LinearLayout
android:id="@+id/mViewSigger"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="62dp"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_toStartOf="@+id/control"
android:orientation="vertical"
tools:ignore="RtlHardcoded">
<TextView
android:id="@+id/tvNameApp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="@string/until_you" />
<TextView
android:id="@+id/tvSigger"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#9F9F9F"
android:textSize="12sp"
tools:text="" />
</LinearLayout>
<TextView
android:id="@+id/tvChooseMedia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="62dp"
android:layout_toStartOf="@+id/control"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/choose_your_music_player"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="gone" />
<LinearLayout
android:id="@+id/control"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
tools:ignore="RtlHardcoded">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mPrevious"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_12sdp"
android:src="@drawable/ic_skip" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_play_music" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_12sdp"
android:src="@drawable/ic_next" />
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/mViewNotSelect"
android:layout_width="match_parent"
android:layout_height="@dimen/_50sdp"
android:layout_marginLeft="@dimen/_50sdp"
android:layout_marginRight="@dimen/_50sdp"
android:background="@drawable/bg_boder_select"
android:visibility="gone">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="horizontal">
<ImageView
android:layout_marginLeft="@dimen/_12sdp"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_vinyl" />
<TextView
android:ellipsize="end"
android:lines="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:text="@string/select_music_player"
android:textColor="#FFFFFF"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
<include
android:id="@+id/includeDialog"
layout="@layout/dialog_bottom_save"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
tools:context="com.bassbooster.soundeffects.equalizer.view.activity.setting.permissions.PermissionsActivity">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/linerTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_12sdp"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgBackPermissions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:background="@drawable/ic_back" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:text="@string/permissions_manager"
android:textColor="@color/white"
android:textSize="@dimen/_16sdp" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.constraintlayout.widget.ConstraintLayout
android:visibility="gone"
android:id="@+id/clBorderMicro"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_16sdp"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/custom_image_nation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linerTitle"
app:layout_goneMarginTop="@dimen/_19sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgAvatarMicro"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_44sdp"
android:layout_marginVertical="@dimen/_15sdp"
android:layout_marginStart="@dimen/_12sdp"
android:src="@drawable/ic_micro"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTitleMicro"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:layout_marginTop="@dimen/_8sdp"
android:text="@string/microphone_permission"
android:textColor="@color/white"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/imgSCMicro"
app:layout_constraintStart_toEndOf="@+id/imgAvatarMicro"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvBodyMicro"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/_16sdp"
android:layout_marginTop="@dimen/_5sdp"
android:lineHeight="@dimen/_15sdp"
android:maxLines="2"
android:text="@string/microphone_permission_body"
android:textColor="@color/white"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@+id/imgAvatarMicro"
app:layout_constraintEnd_toStartOf="@+id/imgSCMicro"
app:layout_constraintStart_toEndOf="@+id/imgAvatarMicro"
app:layout_constraintTop_toBottomOf="@+id/tvTitleMicro" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/imgSCMicro"
android:layout_width="@dimen/_48sdp"
android:layout_height="@dimen/_24sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/_12sdp"
android:thumb="@drawable/custom_thumb"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:track="@drawable/custom_track" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clBorderFloating"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_16sdp"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/custom_image_nation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clBorderMicro"
app:layout_goneMarginTop="@dimen/_19sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgAvatarFloating"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_44sdp"
android:layout_marginVertical="@dimen/_15sdp"
android:layout_marginStart="@dimen/_12sdp"
android:src="@drawable/ic_floating"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTitleFloating"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:layout_marginTop="@dimen/_8sdp"
android:text="@string/floating_window_permission"
android:textColor="@color/white"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/imgSCFloating"
app:layout_constraintStart_toEndOf="@+id/imgAvatarFloating"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvBodyFloating"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/_16sdp"
android:layout_marginTop="@dimen/_5sdp"
android:lineHeight="@dimen/_15sdp"
android:maxLines="2"
android:text="@string/microphone_permission_body"
android:textColor="@color/white"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@+id/imgAvatarFloating"
app:layout_constraintEnd_toStartOf="@+id/imgSCFloating"
app:layout_constraintStart_toEndOf="@+id/imgAvatarFloating"
app:layout_constraintTop_toBottomOf="@+id/tvTitleFloating" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/imgSCFloating"
android:layout_width="@dimen/_48sdp"
android:layout_height="@dimen/_24sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/_12sdp"
android:thumb="@drawable/custom_thumb"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:track="@drawable/custom_track" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/color_bg"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/imgBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_15sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/setting"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/imgBack"
app:layout_constraintStart_toEndOf="@+id/imgBack"
app:layout_constraintTop_toTopOf="@+id/imgBack" />
</androidx.constraintlayout.widget.ConstraintLayout>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
android:orientation="vertical"
tools:context="com.bassbooster.soundeffects.equalizer.view.activity.setting.SettingActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/imgBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/_15sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/setting"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/imgBack"
app:layout_constraintStart_toEndOf="@+id/imgBack"
app:layout_constraintTop_toTopOf="@+id/imgBack" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icSmartPhone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:src="@drawable/ic_smartphone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_13sdp"
android:text="@string/vibrate"
android:textColor="@color/white"
app:layout_constraintStart_toEndOf="@+id/icSmartPhone"
app:layout_constraintTop_toTopOf="@+id/icSmartPhone" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/SCVibrationRights"
android:layout_width="@dimen/_48sdp"
android:layout_height="@dimen/_24sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:thumb="@drawable/custom_thumb"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/icSmartPhone"
app:track="@drawable/custom_track" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_24sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icTuningSquare"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:src="@drawable/tuning_square"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_13sdp"
android:text="@string/visualizer"
android:textColor="@color/white"
app:layout_constraintStart_toEndOf="@+id/icTuningSquare"
app:layout_constraintTop_toTopOf="@+id/icTuningSquare" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/SCVisualizer"
android:layout_width="@dimen/_48sdp"
android:layout_height="@dimen/_24sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:thumb="@drawable/custom_thumb"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/icTuningSquare"
app:track="@drawable/custom_track"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_marginTop="@dimen/_24sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:src="@drawable/ic_play"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_13sdp"
android:text="@string/play_control_bar"
android:textColor="@color/white"
app:layout_constraintStart_toEndOf="@+id/icPlay"
app:layout_constraintTop_toTopOf="@+id/icPlay" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swPlayControl"
android:layout_width="@dimen/_48sdp"
android:layout_height="@dimen/_24sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:thumb="@drawable/custom_thumb"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/icPlay"
app:track="@drawable/custom_track" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_24sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icMagicStick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:src="@drawable/magic_stick"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_13sdp"
android:text="@string/control_all_effects"
android:textColor="@color/white"
app:layout_constraintStart_toEndOf="@+id/icMagicStick"
app:layout_constraintTop_toTopOf="@+id/icMagicStick" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/SCControllerEffect"
android:layout_width="@dimen/_48sdp"
android:layout_height="@dimen/_24sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:thumb="@drawable/custom_thumb"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/icMagicStick"
app:track="@drawable/custom_track" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_24sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icLightbulb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:src="@drawable/ic_lightbulb_bolt"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/mEdge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_13sdp"
android:text="@string/edge_lighting"
android:textColor="@color/white"
app:layout_constraintStart_toEndOf="@+id/icLightbulb"
app:layout_constraintTop_toTopOf="@+id/icLightbulb" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_30sdp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clPermissions"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/_120sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icKeyhole"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:src="@drawable/ic_keyhole"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_13sdp"
android:text="@string/permissions_manager"
android:textColor="@color/white"
app:layout_constraintStart_toEndOf="@+id/icKeyhole"
app:layout_constraintTop_toTopOf="@+id/icKeyhole" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_30sdp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clLanguage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/_120sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icEarth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:src="@drawable/ic_earth"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_13sdp"
android:text="@string/language"
android:textColor="@color/white"
app:layout_constraintStart_toEndOf="@+id/icEarth"
app:layout_constraintTop_toTopOf="@+id/icEarth" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/mPrivacy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_30sdp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icDocumentAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:src="@drawable/ic_document_add"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_13sdp"
android:text="@string/privacy_policy"
android:textColor="@color/white"
app:layout_constraintStart_toEndOf="@+id/icDocumentAdd"
app:layout_constraintTop_toTopOf="@+id/icDocumentAdd" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<View
android:background="@color/clr_9F9F9F"
android:layout_width="match_parent"
android:layout_height="@dimen/_2sdp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginBottom="@dimen/_50sdp"
app:layout_constraintStart_toStartOf="parent"
android:src="@drawable/ic_logo_splash"
/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_marginBottom="@dimen/_72sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_height="wrap_content"
android:src="@drawable/ic_wawe_loading_splash"
tools:context="com.bassbooster.soundeffects.equalizer.view.activity.SplashActivity"
/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:background="@drawable/ic_splash_vs"
android:layout_marginBottom="@dimen/_24sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_height="wrap_content"
/>
<com.github.ybq.android.spinkit.SpinKitView
android:id="@+id/spin_kit"
style="@style/SpinKitView.Large.ThreeBounce"
android:layout_width="wrap_content"
android:layout_height="34dp"
android:layout_marginBottom="@dimen/_32sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_gravity="center"
app:SpinKit_Color="@color/white" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/black"
tools:context="com.bassbooster.soundeffects.equalizer.view.ActivityTutorialSplash">
<RelativeLayout
android:layout_marginBottom="@dimen/_8sdp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
<androidx.viewpager.widget.ViewPager
android:id="@+id/onboardingViewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:orientation="vertical"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/btnNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/_8sdp"
android:text="@string/next"
android:textColor="#E83565"
android:textSize="@dimen/_16sdp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<LinearLayout
android:id="@+id/dotsSlide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="@+id/btnNext"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/btnNext" />
</RelativeLayout>
<View
android:id="@+id/mRlNext"
android:layout_marginBottom="280dp"
android:layout_width="match_parent"
android:layout_height="1dp"
/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/mLlView"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/_12sdp"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgType"
android:layout_width="match_parent"
android:layout_height="@dimen/_80sdp" />
<TextView
android:layout_marginTop="@dimen/_8sdp"
android:id="@+id/mTxtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Normal"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/mllImage"
android:layout_marginLeft="@dimen/_8sdp"
android:layout_marginTop="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:background="@drawable/boder_radius_style"
android:layout_height="34dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgStyle"
android:layout_centerInParent="true"
android:layout_width="20dp"
android:layout_height="20dp"/>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mRlView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rlLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_20sdp"
android:layout_marginEnd="@dimen/_20sdp"
android:background="@drawable/border_item_my_effects">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgType"
android:layout_width="match_parent"
android:layout_height="@dimen/_80sdp"
android:padding="@dimen/_16sdp"
android:src="@drawable/ic_item_my_effect" />
</RelativeLayout>
<TextView
android:id="@+id/mTxtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/rlLayout"
android:layout_alignStart="@+id/rlLayout"
android:layout_alignEnd="@+id/rlLayout"
android:layout_marginTop="@dimen/_8sdp"
android:gravity="center"
android:text="Normal"
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ic_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="top"
android:padding="@dimen/_12sdp"
android:src="@drawable/btn_delete" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mRlView"
android:layout_width="@dimen/_80sdp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/_2sdp"
android:background="@drawable/dra_custom_layout_play"
app:cardBackgroundColor="@color/transparent_00"
app:cardCornerRadius="@dimen/_15sdp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/isSelectView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/tab_selected"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="@dimen/_1sdp"
app:cardBackgroundColor="@color/transparent_00"
app:cardCornerRadius="@dimen/_14sdp"
app:cardElevation="0dp"
app:layout_constraintDimensionRatio="4:3"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgVisual"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
app:layout_constraintTop_toTopOf="parent"
tools:src="@tools:sample/avatars" />
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="140dp"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center_vertical"
android:background="@color/color_bg_notification"
android:padding="12dp"
android:layout_weight="10"
android:orientation="vertical">
<LinearLayout
android:layout_marginBottom="@dimen/_4sdp"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="8">
<ImageView
android:id="@+id/imgLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_app_notification"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_weight="5"
android:layout_marginEnd="12dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_4sdp"
android:id="@+id/icLeft"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="12dp"
android:layout_weight="2">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_effects" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="10dp"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Rock" />
</LinearLayout>
<ImageView
android:padding="@dimen/_4sdp"
android:id="@+id/icRight"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
<ImageView
android:id="@+id/icLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_notification_light"
android:layout_weight="1" />
<ImageView
android:id="@+id/mOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_off"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_marginTop="@dimen/_12sdp"
android:layout_width="match_parent"
android:weightSum="2"
android:orientation="horizontal"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="46dp"
android:layout_weight="1"
android:layout_marginEnd="12dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icDowbass"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="2">
<TextView
android:id="@+id/mTxtNameBass"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Bass:" />
<TextView
android:gravity="center"
android:id="@+id/mTxtBass"
android:layout_marginStart="@dimen/_4sdp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="100" />
</LinearLayout>
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icUpBass"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="46dp"
android:layout_weight="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icDowStereo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="2">
<TextView
android:id="@+id/mTxtNameStereo"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Stereo:" />
<TextView
android:layout_marginStart="@dimen/_4sdp"
android:gravity="center"
android:id="@+id/mTxtStereo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="100" />
</LinearLayout>
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icUpStereo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mLlView"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:gravity="center_horizontal"
android:background="#424048">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/select_music_player"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
android:layout_marginTop="20dp"
android:layout_marginBottom="10dp"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvList"
android:layout_height="240dp"
android:layout_width="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:layout_marginBottom="10dp"
tools:itemCount="5"
tools:listitem="@layout/item_app">
</androidx.recyclerview.widget.RecyclerView>
<RelativeLayout
android:layout_marginTop="8dp"
android:id="@+id/rlSelect"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_marginBottom="20dp"
android:background="@drawable/button_border">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="@string/select_music"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?><!-- res/layout/custom_dialog.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mRlDialog"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent"
android:visibility="gone">
<LinearLayout
android:id="@+id/mViewType"
android:layout_width="match_parent"
android:layout_height="@dimen/_160sdp"
android:layout_centerInParent="true"
android:layout_marginHorizontal="@dimen/_16sdp"
android:background="@drawable/dialog_save_background"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:ellipsize="end"
android:maxLines="1"
android:paddingRight="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/_12sdp"
android:text="@string/title_save"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/icDeleteDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_8sdp"
android:background="@drawable/ic_delete_dialog"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/mEdtEffects"
android:layout_width="match_parent"
android:layout_height="@dimen/_35sdp"
android:layout_margin="@dimen/_24sdp"
android:background="@drawable/dra_custom_tablayout_bg"
android:ellipsize="end"
android:hint="@string/enter_name"
android:maxLines="1"
android:paddingLeft="@dimen/_22sdp"
android:paddingEnd="37dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="14sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_marginLeft="4dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/_11sdp"
android:background="@drawable/ic_save_effect"
app:layout_constraintBottom_toBottomOf="@+id/mEdtEffects"
app:layout_constraintEnd_toEndOf="@+id/mEdtEffects"
app:layout_constraintTop_toTopOf="@+id/mEdtEffects" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/mLlSave"
android:layout_width="140sp"
android:layout_height="40sp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/dra_custom_button_save"
android:gravity="center">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_button_save" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/_12sdp"
android:text="@string/save_effect"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center_vertical"
android:background="@color/color_bg_notification"
android:padding="12dp"
android:layout_weight="10"
android:orientation="vertical">
<LinearLayout
android:layout_marginBottom="@dimen/_4sdp"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="8">
<ImageView
android:id="@+id/imgLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_app_notification"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_weight="5"
android:layout_marginEnd="12dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_4sdp"
android:id="@+id/icLeft"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="12dp"
android:layout_weight="2">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_effects" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="10dp"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Rock" />
</LinearLayout>
<ImageView
android:padding="@dimen/_4sdp"
android:id="@+id/icRight"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
<ImageView
android:id="@+id/icLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_notification_light"
android:layout_weight="1" />
<ImageView
android:id="@+id/mOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_off"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_marginTop="@dimen/_12sdp"
android:layout_width="match_parent"
android:weightSum="2"
android:orientation="horizontal"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="46dp"
android:layout_weight="1"
android:layout_marginEnd="12dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icDowbass"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="2">
<TextView
android:id="@+id/mTxtNameBass"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Bass:" />
<TextView
android:gravity="center"
android:id="@+id/mTxtBass"
android:layout_marginStart="@dimen/_4sdp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="100" />
</LinearLayout>
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icUpBass"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="46dp"
android:layout_weight="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icDowStereo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="2">
<TextView
android:id="@+id/mTxtNameStereo"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Stereo:" />
<TextView
android:layout_marginStart="@dimen/_4sdp"
android:gravity="center"
android:id="@+id/mTxtStereo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="100" />
</LinearLayout>
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icUpStereo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:ignore="Overdraw">
<com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview.ImageBorderView2
android:id="@+id/mImageBorder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
/>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRcyclerEffects"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/_12sdp"
android:gravity="center" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@color/color_bg"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/eqFrame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- <RelativeLayout-->
<!-- android:id="@+id/mRlViewPlay"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="@dimen/_50sdp"-->
<!-- android:layout_alignParentBottom="true"-->
<!-- android:layout_marginStart="@dimen/_12sdp"-->
<!-- android:layout_marginTop="@dimen/_12sdp"-->
<!-- android:layout_marginEnd="@dimen/_12sdp"-->
<!-- android:layout_marginBottom="@dimen/_12sdp"-->
<!-- android:background="@drawable/dra_custom_layout_play">-->
<!-- <LinearLayout-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:layout_marginLeft="@dimen/_12sdp"-->
<!-- android:orientation="vertical">-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="Until You"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="@dimen/_14sdp"-->
<!-- android:textStyle="bold" />-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="shyan ward"-->
<!-- android:textColor="#9F9F9F"-->
<!-- android:textSize="@dimen/_12sdp" />-->
<!-- </LinearLayout>-->
<!-- <LinearLayout-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentRight="true"-->
<!-- android:layout_centerVertical="true">-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:padding="@dimen/_12sdp"-->
<!-- android:src="@drawable/ic_skip" />-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_gravity="center_vertical"-->
<!-- android:src="@drawable/ic_play" />-->
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:padding="@dimen/_12sdp"-->
<!-- android:src="@drawable/ic_next" />-->
<!-- </LinearLayout>-->
<!-- </RelativeLayout>-->
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRcyclerEffects"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/_12sdp"
android:layout_marginTop="@dimen/_5sdp"
android:gravity="center" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgIsEmpty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/_190sdp"
android:src="@drawable/ic_no_data"
android:visibility="gone" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvIsEmpty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imgIsEmpty"
android:layout_centerInParent="true"
android:layout_marginTop="@dimen/_16sdp"
android:text="@string/you_haven"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="gone" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:layout_above="@+id/native_onboarding"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:paddingBottom="@dimen/_50sdp"
android:src="@drawable/tutorial_one"
android:id="@+id/imgSplash"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<TextView
android:paddingBottom="@dimen/_20sdp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="@string/list_effects"
android:id="@+id/tvTitleSplash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="22sp" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:layout_above="@+id/native_onboarding"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:paddingBottom="@dimen/_50sdp"
android:src="@drawable/tutorial_true"
android:id="@+id/imgSplash"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<TextView
android:paddingBottom="@dimen/_20sdp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="@string/extra_volume_booster"
android:id="@+id/tvTitleSplash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="22sp" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:layout_above="@+id/native_onboarding"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:paddingBottom="@dimen/_50sdp"
android:src="@drawable/tutorial_tree"
android:id="@+id/imgSplash"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<TextView
android:paddingBottom="@dimen/_20sdp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="@string/powerful_booster"
android:id="@+id/tvTitleSplash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="22sp" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/color_bg">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/mRLType"
android:layout_width="match_parent"
android:layout_height="@dimen/_35sdp">
<LinearLayout
android:layout_centerVertical="true"
android:gravity="center_vertical"
android:orientation="vertical"
android:id="@+id/mLlOnOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mOff"
android:visibility="gone"
android:layout_width="@dimen/_30sdp"
android:layout_height="@dimen/_30sdp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/_12sdp"
android:src="@drawable/ic_off" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mOn"
android:layout_width="@dimen/_30sdp"
android:layout_height="@dimen/_30sdp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/_12sdp"
android:src="@drawable/ic_on" />
</LinearLayout>
<RelativeLayout
android:id="@+id/RLSpinner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:layout_toRightOf="@+id/mLlOnOff"
android:background="@drawable/custom_type_music">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgType"
android:layout_width="@dimen/_22sdp"
android:layout_height="@dimen/_22sdp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/_12sdp"
android:src="@drawable/ic_fire" />
<TextView
android:id="@+id/mNameType"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_marginLeft="26dp"
android:layout_marginRight="@dimen/_12sdp"
android:layout_toLeftOf="@+id/presetSpinner"
android:layout_toRightOf="@+id/mImgType"
android:gravity="center_vertical"
android:text="@string/normal"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/presetSpinner"
android:layout_width="@dimen/_18sdp"
android:layout_height="@dimen/_18sdp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/_12sdp"
android:src="@drawable/ic_alt_arrow_down" />
</RelativeLayout>
</RelativeLayout>
<TextView
android:id="@+id/mTxtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/mRLType"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginTop="@dimen/_4sdp"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/until_you"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/mTxtSinger"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/mTxtName"
android:layout_marginLeft="@dimen/_12sdp"
android:text="@string/until_you"
android:textColor="@color/color_text_singer"
android:textSize="12sp" />
<RelativeLayout
android:id="@+id/mLlViewVisual"
android:layout_width="match_parent"
android:layout_height="@dimen/_170sdp"
android:layout_below="@+id/mTxtSinger"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:background="@drawable/dra_custom_visualizer">
<com.chibde.visualizer.SquareBarVisualizer
android:id="@+id/mVisualizerPlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/_4sdp"
android:layout_marginTop="@dimen/_4sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_4sdp" />
<com.chibde.visualizer.CircleBarVisualizer
android:id="@+id/mCircleBarVisualizer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/_4sdp"
android:layout_marginTop="@dimen/_4sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:visibility="gone"
/>
<com.chibde.visualizer.LineBarVisualizer
android:id="@+id/mLineBarVisualizer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/_4sdp"
android:layout_marginTop="@dimen/_4sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:visibility="gone"
/>
<com.chibde.visualizer.BarVisualizer
android:id="@+id/mBarVisualizer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/_4sdp"
android:layout_marginTop="@dimen/_4sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:visibility="gone"
/>
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecyclerChart"
android:layout_width="match_parent"
android:layout_height="@dimen/_65sdp"
android:layout_below="@+id/mLlViewVisual"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp" />
<LinearLayout
android:layout_marginTop="@dimen/_8sdp"
android:layout_width="match_parent"
android:layout_height="@dimen/_40sdp"
android:layout_below="@+id/mRecyclerChart"
android:gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivSkip"
android:layout_width="40dp"
android:layout_height="@dimen/_50sdp"
android:layout_gravity="center_vertical"
android:padding="@dimen/_4sdp"
android:src="@drawable/ic_skip" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivPlay"
android:layout_width="56dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:src="@drawable/ic_play_music" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivPause"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/_12sdp"
android:layout_marginRight="@dimen/_12sdp"
android:src="@drawable/ic_pause"
android:visibility="gone" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivNext"
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:padding="@dimen/_4sdp"
android:src="@drawable/ic_next" />
</LinearLayout>
</RelativeLayout>
</ScrollView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:background="@drawable/dra_custom_layout_play"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="70dp">
<ImageView
android:id="@+id/imageViewAvatar"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginStart="10dp"
tools:src="@drawable/ic_music" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/textViewName"
style="@style/TextAppearance.AppCompat.Large"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="20dp"
android:layout_toEndOf="@id/imageViewAvatar"
android:textColor="@color/white"
tools:text="Nam" />
<ImageView
android:id="@+id/ivCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:visibility="invisible"
android:src="@drawable/ic_check"/>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/mLlBoderWidth"
android:visibility="visible"
android:orientation="vertical"
android:layout_height="match_parent">
<com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview.ColoredBorderView
android:id="@+id/mColoredBorderView"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
/>
<com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview.ImageBorderView2
android:id="@+id/mImageBorder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
/>
</RelativeLayout>
\ No newline at end of file
<!-- res/layout/item_color.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
android:background="@drawable/rounded_background"
android:orientation="vertical">
<!-- Màu sắc -->
<View
android:id="@+id/color_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/red" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="56dp"
android:id="@+id/mLlColor"
android:padding="0.8dp"
android:layout_marginRight="@dimen/_8sdp"
android:background="@drawable/custome_border_rectangle"
android:orientation="vertical"
android:layout_height="32dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_centerInParent="true"
android:id="@+id/mImgColor"
android:background="@drawable/ic_rectangle_red"
android:layout_width="56dp"
android:layout_height="32dp"/>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clBorder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_16sdp"
android:layout_marginTop="@dimen/_10sdp"
android:padding="@dimen/_5sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.cardview.widget.CardView
android:id="@+id/imgAvatarLanguage"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_40sdp"
android:layout_marginStart="@dimen/_10sdp"
app:cardCornerRadius="@dimen/_32sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgNation"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_40sdp"
android:src="@color/color_circlePaint"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.cardview.widget.CardView>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTitleLanguage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_16sdp"
android:textColor="@color/white"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/imgAvatarLanguage"
app:layout_constraintEnd_toStartOf="@+id/imgVector"
app:layout_constraintStart_toEndOf="@+id/imgAvatarLanguage"
app:layout_constraintTop_toTopOf="@+id/imgAvatarLanguage" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgVector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/_12sdp"
android:src="@drawable/ic_vector_language"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgVectorDefault"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/_12sdp"
android:src="@drawable/ic_vertor_default"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="60dp">
<ImageView
android:id="@+id/imageViewAvatar"
android:layout_width="60dp"
android:layout_height="0dp"
android:padding="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/textViewUserName"
style="@style/TextAppearance.AppCompat.Large"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageViewAvatar"
app:layout_constraintTop_toTopOf="parent"
tools:text="Nam" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/textViewUserEmail"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/textViewUserName"
app:layout_constraintTop_toBottomOf="@+id/textViewUserName"
tools:text="Nam" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clBorder"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_16sdp"
android:layout_marginTop="@dimen/_16sdp"
android:background="@drawable/custom_image_nation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgAvatarPermissions"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_44sdp"
android:layout_marginVertical="@dimen/_15sdp"
android:layout_marginStart="@dimen/_12sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTitlePermissions"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:layout_marginTop="@dimen/_8sdp"
android:textColor="@color/white"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/imgSCPermissions"
app:layout_constraintStart_toEndOf="@+id/imgAvatarPermissions"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvBodyPermissions"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/_16sdp"
android:layout_marginTop="@dimen/_5sdp"
android:lineHeight="@dimen/_15sdp"
android:maxLines="2"
android:textColor="@color/white"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@+id/imgAvatarPermissions"
app:layout_constraintEnd_toStartOf="@+id/imgSCPermissions"
app:layout_constraintStart_toEndOf="@+id/imgAvatarPermissions"
app:layout_constraintTop_toBottomOf="@+id/tvTitlePermissions" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/imgSCPermissions"
android:layout_width="@dimen/_48sdp"
android:layout_height="@dimen/_24sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/_12sdp"
android:thumb="@drawable/custom_thumb"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:track="@drawable/custom_track" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:paddingBottom="@dimen/_50sdp"
android:id="@+id/imgSplash"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<TextView
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:text=""
android:id="@+id/tvTitleSplash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="22sp" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/_20sdp"
android:layout_marginLeft="@dimen/_20sdp"
android:layout_marginRight="@dimen/_20sdp"
android:background="@drawable/custom_dialog">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="@string/title_opp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvDescription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:paddingLeft="@dimen/_12sdp"
android:paddingRight="@dimen/_12sdp"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvTitle"
tools:text="@string/mess_error" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnOK"
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_marginTop="@dimen/_8sdp"
android:background="@drawable/button_border"
android:text="@string/Ok"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="20dp"
android:paddingBottom="20dp"
xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/custom_dialog">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="@string/title_opp"
/>
<androidx.appcompat.widget.AppCompatTextView
android:paddingLeft="@dimen/_12sdp"
android:paddingRight="@dimen/_12sdp"
android:id="@+id/tvDescription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="16sp"
android:layout_marginTop="20dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvTitle"
tools:text=""
/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvDescription">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_marginTop="20dp"
android:background="@drawable/custom_track"
android:text="@string/cancel"
android:textColor="@color/white" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnOK"
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_marginTop="20dp"
android:layout_marginStart="20dp"
android:layout_toEndOf="@+id/btnCancel"
android:background="@drawable/button_border"
android:text="@string/Ok"
android:textColor="@color/white"/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/_12sdp"
android:text="@string/genre_saving"
android:textColor="@color/white"
android:textSize="16sp" />
<RelativeLayout
android:id="@+id/RlProges"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_below="@+id/title"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/_16sdp"
android:layout_marginBottom="@dimen/_16sdp">
<ProgressBar
android:id="@+id/Prog"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:indeterminateOnly="false"
android:progressDrawable="@drawable/circle" />
<TextView
android:textSize="14sp"
android:id="@+id/countProg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="100"
android:textColor="@color/white" />
</RelativeLayout>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnOK"
android:layout_width="130dp"
android:layout_height="36dp"
android:layout_below="@+id/RlProges"
android:layout_centerHorizontal="true"
android:layout_marginStart="20dp"
android:textAllCaps="false"
android:layout_marginEnd="20dp"
android:layout_marginBottom="@dimen/_20sdp"
android:background="@drawable/button_border_enabled"
android:enabled="false"
android:text="@string/done"
android:textColor="@color/white" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center_vertical"
android:background="@drawable/dra_custom_layout_play"
android:padding="12dp"
android:layout_weight="10"
android:orientation="vertical">
<LinearLayout
android:layout_marginTop="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_4sdp"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="8">
<ImageView
android:id="@+id/imgLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_app_notification"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_weight="5"
android:layout_marginEnd="12dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_4sdp"
android:id="@+id/icLeft"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="12dp"
android:layout_weight="2">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_effects" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="10dp"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Rock" />
</LinearLayout>
<ImageView
android:padding="@dimen/_4sdp"
android:id="@+id/icRight"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/icLightOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_notification_light_off"
android:layout_weight="1" />
<ImageView
android:id="@+id/icLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_notification_light"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:visibility="visible"
android:id="@+id/mOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_off"
android:layout_weight="1" />
<ImageView
android:id="@+id/mOn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_on"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:visibility="gone"
android:layout_marginTop="@dimen/_12sdp"
android:layout_width="match_parent"
android:weightSum="2"
android:orientation="horizontal"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="46dp"
android:layout_weight="1"
android:layout_marginEnd="12dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icDowbass"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="2">
<TextView
android:id="@+id/mTxtNameBass"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Bass:" />
<TextView
android:gravity="center"
android:id="@+id/mTxtBass"
android:layout_marginStart="@dimen/_4sdp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="100" />
</LinearLayout>
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icUpBass"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="46dp"
android:layout_weight="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:weightSum="4"
android:background="@drawable/custom_type_music"
tools:ignore="RtlSymmetry">
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icDowStereo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<LinearLayout
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="2">
<TextView
android:id="@+id/mTxtNameStereo"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Stereo:" />
<TextView
android:layout_marginStart="@dimen/_4sdp"
android:gravity="center"
android:id="@+id/mTxtStereo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="100" />
</LinearLayout>
<ImageView
android:padding="@dimen/_2sdp"
android:id="@+id/icUpStereo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:rotation="180"
android:src="@drawable/ic_arrow" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<resources>
<string name="app_name">Equalizer Booster</string>
<string name="tab_equalizer">Equalizador</string>
<string name="tab_music">Música</string>
<string name="setting">Configurações</string>
<string name="vibrate">Vibrar</string>
<string name="visualizer">Visualizador</string>
<string name="play_control_bar">Barra de controle de reprodução</string>
<string name="bands_equalizer">Equalizador de 5 Bandas</string>
<string name="control_all_effects">O equalizador controla todos os gêneros</string>
<string name="edge_lighting">Iluminação de borda</string>
<string name="permissions_manager">Gerenciador de permissões</string>
<string name="language">Idioma</string>
<string name="privacy_policy">Política de Privacidade</string>
<string name="choose_your_music_player">Escolha seu reprodutor de música</string>
<string name="select_music_player">Selecione o reprodutor de música</string>
<string name="select">Selecionar</string>
<string name="title_save">Nome do Efeito Musical</string>
<string name="save">Salvar</string>
<string name="tab_effects">Gêneros</string>
<string name="tab_my_effects">Meus Gêneros</string>
<string name="dance">Dança</string>
<string name="normal">Normal</string>
<string name="classical">Clássico</string>
<string name="microphone_permission">Permissão de Microfone</string>
<string name="microphone_permission_body">A permissão de microfone é necessária para exibir o espectro musical por meio da visualização.</string>
<string name="floating_window_permission">Permissão de Janela Flutuante</string>
<string name="permission_denied">Permissão negada</string>
<string name="you_have_denied">Você negou a permissão, por favor, abra e ative-a manualmente</string>
<string name="cancel">Cancelar</string>
<string name="you_want_to_revoke_permission">Você deseja revogar a permissão, por favor, abra e ative-a manualmente</string>
<string name="turn_off_microphone_access">Desativar acesso ao microfone</string>
<string name="turn_off_floating_window">Desativar permissões de janela flutuante</string>
<string name="save_effect">Salvar efeito</string>
<string name="allowed_apps">Permitido em outras apps</string>
<string name="border_setting">Configuração de Borda</string>
<string name="border_style">Estilo de Borda</string>
<string name="lighting_color">Cor da Iluminação</string>
<string name="hello_blank_fragment">Olá, fragmento em branco</string>
<string name="appwidget_text">EXEMPLO</string>
<string name="add_widget">Adicionar widget</string>
<string name="app_widget_description">Esta é uma descrição do widget do aplicativo</string>
<string name="ngon_ngu">Idioma</string>
<string name="list_effects">Lista de Gêneros</string>
<string name="Ok">OK</string>
<string name="mess_error">Houve algum problema com o sistema que impediu o funcionamento correto do aplicativo.</string>
<string name="title_opp">Ops! Algo deu errado</string>
<string name="until_you">Até você</string>
<string name="you_haven">Você ainda não salvou um efeito</string>
<string name="next">Próximo</string>
<string name="top_radius">Raio superior</string>
<string name="bottom_radius">Raio inferior</string>
<string name="width">Largura</string>
<string name="speed">Velocidade</string>
<string name="notification">Notificação</string>
<string name="notification_content">Permita o acesso às notificações para um controle mais amplo com mais aplicativos!</string>
<string name="notification_content_visua">O aplicativo precisa de permissão para desenhar o visualizador. Por favor, vá para as configurações para habilitar esta permissão!</string>
<string name="not_control">Atualmente, não é possível controlar o aplicativo, mas o equalizador pode ser controlado!</string>
<string name="not_install_app">Você ainda não instalou nenhum aplicativo de mídia!</string>
<string name="not_name_effects">Por favor, insira um nome para os Gêneros!</string>
<string name="save_success">Salvo com sucesso!</string>
<string name="get_start">Começar</string>
<string name="professional_equalizer">Equalizador profissional</string>
<string name="extra_volume_booster">Amplificador de volume extra</string>
<string name="powerful_booster">Amplificador potente e equalizador</string>
<string name="enter_name">Inserir nome</string>
<string name="cotent_choose">Para usar esse recurso do aplicativo, precisamos de permissão para acessar a lista de aplicativos de mídia instalados em seu dispositivo. Essa permissão nos ajuda a localizar e controlar aplicativos de maneira conveniente. Por favor, conceda essa permissão para aprimorar sua experiência com nosso aplicativo.</string>
<string name="genre_saving">Salvando</string>
<string name="done">Feito</string>
<string name="select_music">Selecionar Música</string>
</resources>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">Equalizer Booster</string>
<string name="tab_equalizer">Equalizer</string>
<string name="tab_music">Music</string>
<string name="setting">Setting</string>
<string name="vibrate">Vibrate</string>
<string name="visualizer">Visualizer</string>
<string name="play_control_bar">Play control bar</string>
<string name="bands_equalizer">5 Bands Equalizer</string>
<string name="control_all_effects">Eq controls all Genres</string>
<string name="edge_lighting">Edge lighting</string>
<string name="permissions_manager">Permissions manager</string>
<string name="language">Language</string>
<string name="privacy_policy">Privacy policy</string>
<string name="choose_your_music_player">Choose your music player</string>
<string name="select_music_player">Select Music Player</string>
<string name="select">Select</string>
<string name="title_save">Music Effect Name</string>
<string name="save">Save</string>
<string name="tab_effects">Genres</string>
<string name="tab_my_effects">My Genres</string>
<string name="dance">Dance</string>
<string name="normal">Normal</string>
<string name="classical">Classical</string>
<string name="microphone_permission">Microphone permission</string>
<string name="microphone_permission_body">Microphone permission is required to display music spectrum by visual.</string>
<string name="floating_window_permission">Floating window permission</string>
<string name="permission_denied">Permission denied</string>
<string name="you_have_denied">You have denied permission, please open and activate it yourself</string>
<string name="cancel">Cancel</string>
<string name="you_want_to_revoke_permission">You want to revoke permission, please open and activate it yourself</string>
<string name="turn_off_microphone_access">Turn off microphone access</string>
<string name="turn_off_floating_window">Turn off floating window permissions</string>
<string name="save_effect">Save effect</string>
<string name="allowed_apps">Allowed on other apps</string>
<string name="border_setting">Border Setting</string>
<string name="border_style">Border Style</string>
<string name="lighting_color">Lighting Color</string>
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="appwidget_text">EXAMPLE</string>
<string name="add_widget">Add widget</string>
<string name="app_widget_description">This is an app widget description</string>
<string name="ngon_ngu">Language</string>
<string name="list_effects">List Genres</string>
<string name="Ok">Ok</string>
<string name="mess_error">There was some problem with the system that prevented the application from working properly.</string>
<string name="title_opp">Opp! Something wrong</string>
<string name="until_you">Until You</string>
<string name="you_haven" tools:ignore="StringEscaping">You haven\u0027t saved a effect yet</string>
<string name="next">Next</string>
<string name="top_radius">Top radius</string>
<string name="bottom_radius">Bottom radius</string>
<string name="width">Width</string>
<string name="speed">Speed</string>
<string name="notification">Notification</string>
<string name="notification_content">Allow access to notifications for broader control with more apps!</string>
<string name="notification_content_visua">The app needs permission to draw the visualizer. Please go to settings to enable this permission!</string>
<string name="not_control">Currently, it\u0027s not possible to control the app, but the equalizer is controllable!</string>
<string name="not_install_app">You haven\u0027t installed any media apps yet!</string>
<string name="not_name_effects">Please enter a name for the Genres!</string>
<string name="save_success">Saved successfully!</string>
<string name="get_start">Get Start</string>
<string name="professional_equalizer">Professional Equalizer</string>
<string name="extra_volume_booster">Extra volume booster</string>
<string name="powerful_booster">Powerful booster &amp; EQ</string>
<string name="enter_name">Enter Name</string>
<string name="cotent_choose">To use this feature of the application, we need permission to access the list of installed media apps on your device. This permission helps us conveniently locate and control apps. Please grant this permission to enhance your experience with our app.</string>
<string name="genre_saving">Saving</string>
<string name="done">Done</string>
<string name="select_music">Select Music</string>
</resources>
<resources>
<string name="app_name">Equalizer Booster</string>
<string name="tab_equalizer">Ecualizador</string>
<string name="tab_music">Música</string>
<string name="setting">Ajustes</string>
<string name="vibrate">Vibración</string>
<string name="visualizer">Visualizador</string>
<string name="play_control_bar">Barra de control de reproducción</string>
<string name="bands_equalizer">Ecualizador de 5 bandas</string>
<string name="control_all_effects">El ecualizador controla todos los géneros</string>
<string name="edge_lighting">Iluminación de bordes</string>
<string name="permissions_manager">Administrador de permisos</string>
<string name="language">Idioma</string>
<string name="privacy_policy">Política de privacidad</string>
<string name="choose_your_music_player">Elige tu reproductor de música</string>
<string name="select_music_player">Selecciona el reproductor de música</string>
<string name="select">Seleccionar</string>
<string name="title_save">Nombre del efecto musical</string>
<string name="save">Guardar</string>
<string name="tab_effects">Géneros</string>
<string name="tab_my_effects">Mis Géneros</string>
<string name="dance">Danza</string>
<string name="normal">Normal</string>
<string name="classical">Clásica</string>
<string name="microphone_permission">Permiso de micrófono</string>
<string name="microphone_permission_body">Se requiere permiso de micrófono para mostrar el espectro musical mediante la visualización.</string>
<string name="floating_window_permission">Permiso de ventana flotante</string>
<string name="permission_denied">Permiso denegado</string>
<string name="you_have_denied">Has denegado el permiso, por favor, ábrelo y actívalo tú mismo</string>
<string name="cancel">Cancelar</string>
<string name="you_want_to_revoke_permission">¿Deseas revocar el permiso? Por favor, ábrelo y actívalo tú mismo</string>
<string name="turn_off_microphone_access">Desactivar acceso al micrófono</string>
<string name="turn_off_floating_window">Desactivar permisos de ventana flotante</string>
<string name="save_effect">Guardar efecto</string>
<string name="allowed_apps">Permitido en otras aplicaciones</string>
<string name="border_setting">Configuración de borde</string>
<string name="border_style">Estilo de borde</string>
<string name="lighting_color">Color de iluminación</string>
<string name="hello_blank_fragment">Hola fragmento en blanco</string>
<string name="appwidget_text">EJEMPLO</string>
<string name="add_widget">Añadir widget</string>
<string name="app_widget_description">Esta es una descripción del widget de la aplicación</string>
<string name="ngon_ngu">Idioma</string>
<string name="list_effects">Lista de Géneros</string>
<string name="Ok">Aceptar</string>
<string name="mess_error">Hubo un problema con el sistema que impidió que la aplicación funcionara correctamente.</string>
<string name="title_opp">¡Ups! Algo salió mal</string>
<string name="until_you">Hasta que</string>
<string name="you_haven">Todavía no has guardado un efecto</string>
<string name="next">Siguiente</string>
<string name="top_radius">Radio superior</string>
<string name="bottom_radius">Radio inferior</string>
<string name="width">Ancho</string>
<string name="speed">Velocidad</string>
<string name="notification">Notificación</string>
<string name="notification_content">Permite el acceso a las notificaciones para un control más amplio con más aplicaciones.</string>
<string name="notification_content_visua">La aplicación necesita permisos para dibujar el visualizador. Por favor, vaya a la configuración para habilitar este permiso.</string>
<string name="not_control">Actualmente, no es posible controlar la aplicación, ¡pero el ecualizador sí se puede controlar!</string>
<string name="not_install_app">Todavía no ha instalado ninguna aplicación multimedia.</string>
<string name="not_name_effects">Por favor, ingrese un nombre para los Géneros.</string>
<string name="save_success">Guardado exitoso.</string>
<string name="get_start">Empezar</string>
<string name="professional_equalizer">Ecualizador profesional</string>
<string name="extra_volume_booster">Amplificador de volumen adicional</string>
<string name="powerful_booster">Amplificador potente y ecualizador</string>
<string name="enter_name">Ingresar nombre</string>
<string name="cotent_choose">Para usar esta función de la aplicación, necesitamos permiso para acceder a la lista de aplicaciones multimedia instaladas en su dispositivo. Esta autorización nos ayuda a ubicar y controlar aplicaciones de manera conveniente. Por favor, conceda esta autorización para mejorar su experiencia con nuestra aplicación.</string>
<string name="genre_saving">Guardando</string>
<string name="done">Hecho</string>
<string name="select_music">Seleccionar música</string>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">Equalizer Booster</string>
<string name="tab_equalizer">Égaliseur</string>
<string name="tab_music">Musique</string>
<string name="setting">Paramètres</string>
<string name="vibrate">Vibration</string>
<string name="visualizer">Visualiseur</string>
<string name="play_control_bar">Barre de contrôle de lecture</string>
<string name="bands_equalizer">Égaliseur à 5 bandes</string>
<string name="control_all_effects">Égaliseur contrôle tous les genres</string>
<string name="edge_lighting">Éclairage des bords</string>
<string name="permissions_manager">Gestionnaire des autorisations</string>
<string name="language">Langue</string>
<string name="privacy_policy">Politique de confidentialité</string>
<string name="choose_your_music_player">Choisissez votre lecteur de musique</string>
<string name="select_music_player">Sélectionnez le lecteur de musique</string>
<string name="select">Sélectionner</string>
<string name="title_save">Nom de l\u0027effet musical</string>
<string name="save">Enregistrer</string>
<string name="tab_effects">Genres</string>
<string name="tab_my_effects">Mes Genres</string>
<string name="dance">Danse</string>
<string name="normal">Normal</string>
<string name="classical">Classique</string>
<string name="microphone_permission">Autorisation du microphone</string>
<string name="microphone_permission_body">L\u0027autorisation du microphone est requise pour afficher le spectre musical via la visualisation.</string>
<string name="floating_window_permission">Autorisation de la fenêtre flottante</string>
<string name="permission_denied">Autorisation refusée</string>
<string name="you_have_denied">Vous avez refusé l\u0027autorisation, veuillez l\u0027ouvrir et l\u0027activer vous-même</string>
<string name="cancel">Annuler</string>
<string name="you_want_to_revoke_permission">Vous souhaitez révoquer l\u0027autorisation, veuillez l\u0027ouvrir et l\u0027activer vous-même</string>
<string name="turn_off_microphone_access">Désactiver l\u0027accès au microphone</string>
<string name="turn_off_floating_window">Désactiver les autorisations de la fenêtre flottante</string>
<string name="save_effect">Enregistrer l\u0027effet</string>
<string name="allowed_apps">Autorisé sur d\u0027autres applications</string>
<string name="border_setting">Paramètres de la bordure</string>
<string name="border_style">Style de la bordure</string>
<string name="lighting_color">Couleur de l\u0027éclairage</string>
<string name="hello_blank_fragment">Bonjour fragment vide</string>
<string name="appwidget_text">EXEMPLE</string>
<string name="add_widget">Ajouter un widget</string>
<string name="app_widget_description">Il s\u0027agit d\u0027une description du widget de l\u0027application</string>
<string name="ngon_ngu">Langue</string>
<string name="list_effects">Liste des Genres</string>
<string name="Ok">OK</string>
<string name="mess_error">Il y a eu un problème avec le système qui a empêché l\u0027application de fonctionner correctement.</string>
<string name="title_opp">Oups! Quelque chose ne va pas</string>
<string name="until_you">Jusqu\u0027à ce que vous</string>
<string name="you_haven">Vous n\u0027avez pas encore enregistré d\u0027effet</string>
<string name="next">Suivant</string>
<string name="top_radius">Rayon supérieur</string>
<string name="bottom_radius">Rayon inférieur</string>
<string name="width">Largeur</string>
<string name="speed">Vitesse</string>
<string name="notification">Notification</string>
<string name="notification_content">Autorisez l\u0027accès aux notifications pour un contrôle étendu avec plus d\u0027applications!</string>
<string name="notification_content_visua">L\u0027application a besoin d\u0027autorisations pour dessiner le visualiseur. Veuillez accéder aux paramètres pour activer cette autorisation!</string>
<string name="not_control">Actuellement, il n\u0027est pas possible de contrôler l\u0027application, mais l\u0027égaliseur est contrôlable!</string>
<string name="not_install_app">Vous n\u0027avez pas encore installé d\u0027application multimédia!</string>
<string name="not_name_effects">Veuillez entrer un nom d\u0027Genres !</string>
<string name="save_success">Enregistrement réussi!</string>
<string name="get_start">Commencer</string>
<string name="professional_equalizer">Égaliseur professionnel</string>
<string name="extra_volume_booster">Amplificateur de volume supplémentaire</string>
<string name="powerful_booster">Amplificateur puissant et égaliseur</string>
<string name="enter_name">Entrer un nom</string>
<string name="cotent_choose">Pour utiliser cette fonctionnalité de l\u0027application, nous avons besoin de l\u0027autorisation d\u0027accéder à la liste des applications multimédias installées sur votre appareil. Cette autorisation nous aide à localiser et à contrôler les applications de manière pratique. Veuillez accorder cette autorisation pour améliorer votre expérience avec notre application.</string>
<string name="genre_saving">Enregistrement</string>
<string name="done">Terminé</string>
<string name="select_music">Sélectionner la musique</string>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">Equalizer Booster</string>
<string name="tab_equalizer">समानायक</string>
<string name="tab_music">संगीत</string>
<string name="setting">सेटिंग</string>
<string name="vibrate">कंपान</string>
<string name="visualizer">विज़ुअलाइज़र</string>
<string name="play_control_bar">प्ले नियंत्रण पट्टी</string>
<string name="bands_equalizer">5 बैंड समानायक</string>
<string name="control_all_effects">इक्वायलाइज़र सभी जातियों पर नियंत्रण करता है</string>
<string name="edge_lighting">एज लाइटिंग</string>
<string name="permissions_manager">अनुमतियों का प्रबंधक</string>
<string name="language">भाषा</string>
<string name="privacy_policy">गोपनीयता नीति</string>
<string name="choose_your_music_player">अपना संगीत प्लेयर चुनें</string>
<string name="select_music_player">संगीत प्लेयर का चयन करें</string>
<string name="select">चयन करें</string>
<string name="title_save">संगीत प्रभाव नाम</string>
<string name="save">सहेजें</string>
<string name="tab_effects">जातियाँ</string>
<string name="tab_my_effects">मेरी जातियाँ</string>
<string name="dance">नृत्य</string>
<string name="normal">सामान्य</string>
<string name="classical">शास्त्रीय</string>
<string name="microphone_permission">माइक्रोफ़ोन अनुमति</string>
<string name="microphone_permission_body">विज़ुअल के माध्यम से संगीत स्पेक्ट्रम प्रदर्शित करने के लिए माइक्रोफ़ोन अनुमति की आवश्यकता है।</string>
<string name="floating_window_permission">लटकने वाली विंडो अनुमति</string>
<string name="permission_denied">अनुमति अस्वीकृत</string>
<string name="you_have_denied">आपने अनुमति को अस्वीकार किया है, कृपया खुद से खोलें और सक्रिय करें</string>
<string name="cancel">रद्द करें</string>
<string name="you_want_to_revoke_permission">क्या आप अनुमति वापस लेना चाहते हैं, कृपया खुद से खोलें और सक्रिय करें</string>
<string name="turn_off_microphone_access">माइक्रोफ़ोन एक्सेस बंद करें</string>
<string name="turn_off_floating_window">लटकने वाली विंडो अनुमतियां बंद करें</string>
<string name="save_effect">प्रभाव सहेजें</string>
<string name="allowed_apps">अन्य ऐप्स पर अनुमति है</string>
<string name="border_setting">सीमा सेटिंग</string>
<string name="border_style">सीमा स्टाइल</string>
<string name="lighting_color">प्रकाश रंग</string>
<string name="hello_blank_fragment">नमस्ते खाली फ़्रेगमेंट</string>
<string name="appwidget_text">उदाहरण</string>
<string name="add_widget">विजेट जोड़ें</string>
<string name="app_widget_description">यह एक एप्लिकेशन विजेट विवरण है</string>
<string name="ngon_ngu">भाषा</string>
<string name="list_effects">जातियों की सूची</string>
<string name="Ok">ठीक है</string>
<string name="mess_error">सिस्टम में कुछ समस्या आई थी, जिससे एप्लिकेशन का सही तरीके से काम नहीं कर पाया।</string>
<string name="title_opp">ओप्प! कुछ गड़बड़ है</string>
<string name="until_you">जब तक आप</string>
<string name="you_haven">आपने अब तक कोई प्रभाव नहीं सहेजा है</string>
<string name="next">आगे</string>
<string name="top_radius">ऊपर की त्रिज्या</string>
<string name="bottom_radius">नीचे की त्रिज्या</string>
<string name="width">चौड़ाई</string>
<string name="speed">गति</string>
<string name="notification">सूचना</string>
<string name="notification_content">सूचना प्रबंधन की अनुमति देने से ज्यादा ऐप्स के साथ कंट्रोल करने की अनुमति देता है!</string>
<string name="notification_content_visua">ऐप्लिकेशन को विज़ुअलाइज़र बनाने के लिए अनुमति की आवश्यकता है। कृपया अनुमति सक्षम करने के लिए सेटिंग्स में जाएं!</string>
<string name="not_control">वर्तमान में ऐप्लिकेशन को कंट्रोल नहीं किया जा सकता है, लेकिन इक्वालाइज़र को कंट्रोल किया जा सकता है!</string>
<string name="not_install_app">आपने मीडिया ऐप्लिकेशन को अभी तक स्थापित नहीं किया है!</string>
<string name="not_name_effects">कृपया जातियों के लिए एक नाम दर्ज करें!</string>
<string name="save_success">सफलतापूर्वक सहेजा गया!</string>
<string name="get_start">शुरू करें</string>
<string name="professional_equalizer">पेशेवर इक्वालाइज़र</string>
<string name="extra_volume_booster">अतिरिक्त वॉल्यूम बूस्टर</string>
<string name="powerful_booster">महाशक्ति बूस्टर और इक्वालाइज़र</string>
<string name="enter_name">नाम दर्ज करें</string>
<string name="cotent_choose">ऐप्लिकेशन के इस सुविधा का उपयोग करने के लिए, हमें आपकी डिवाइस पर स्थापित मीडिया एप्लिकेशन की सूची तक पहुँचने की अनुमति की आवश्यकता है। यह अनुमति हमें एप्लिकेशन को सरलता से खोजने और नियंत्रित करने में मदद करती है। कृपया हमें इस अनुमति प्रदान करें ताकि हमारे ऐप्लिकेशन के साथ आपके अनुभव को बेहतर बना सकें।</string>
<string name="genre_saving">बचत</string>
<string name="done">किया</string>
<string name="select_music">संगीत चुनें</string>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Having themes.xml for night-v31 because of the priority order of the resource qualifiers.
-->
<style name="Theme.Equalizes.AppWidgetContainerParent" parent="@android:style/Theme.DeviceDefault.DayNight">
<item name="appWidgetRadius">@android:dimen/system_app_widget_background_radius</item>
<item name="appWidgetInnerRadius">@android:dimen/system_app_widget_inner_radius</item>
</style>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Equalizes" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<!-- Customize your theme here. -->
</style>
</resources>
\ No newline at end of file
<resources>
<style name="Widget.Equalizes.AppWidget.Container" parent="android:Widget">
<item name="android:id">@android:id/background</item>
<item name="android:padding">?attr/appWidgetPadding</item>
<item name="android:background">@drawable/app_widget_background</item>
</style>
<style name="Widget.Equalizes.AppWidget.InnerView" parent="android:Widget">
<item name="android:padding">?attr/appWidgetPadding</item>
<item name="android:background">@drawable/app_widget_inner_view_background</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
</resources>
\ No newline at end of file
<resources>
<style name="Widget.Equalizes.AppWidget.Container" parent="android:Widget">
<item name="android:id">@android:id/background</item>
<item name="android:padding">?attr/appWidgetPadding</item>
<item name="android:background">@drawable/app_widget_background</item>
<item name="android:clipToOutline">true</item>
</style>
<style name="Widget.Equalizes.AppWidget.InnerView" parent="android:Widget">
<item name="android:padding">?attr/appWidgetPadding</item>
<item name="android:background">@drawable/app_widget_inner_view_background</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:clipToOutline">true</item>
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Having themes.xml for v31 variant because @android:dimen/system_app_widget_background_radius
and @android:dimen/system_app_widget_internal_padding requires API level 31
-->
<style name="Theme.Equalizes.AppWidgetContainerParent" parent="@android:style/Theme.DeviceDefault.DayNight">
<item name="appWidgetRadius">@android:dimen/system_app_widget_background_radius</item>
<item name="appWidgetInnerRadius">@android:dimen/system_app_widget_inner_radius</item>
</style>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">Equalizer Booster</string>
<string name="tab_equalizer">Эквалайзер</string>
<string name="tab_music">Музыка</string>
<string name="setting">Настройки</string>
<string name="vibrate">Вибрация</string>
<string name="visualizer">Визуализатор</string>
<string name="play_control_bar">Панель управления воспроизведением</string>
<string name="bands_equalizer">Эквалайзер с 5 полосами</string>
<string name="control_all_effects">Эквалайзер управляет всеми жанрами</string>
<string name="edge_lighting">Подсветка края</string>
<string name="permissions_manager">Менеджер разрешений</string>
<string name="language">Язык</string>
<string name="privacy_policy">Политика конфиденциальности</string>
<string name="choose_your_music_player">Выберите ваш музыкальный проигрыватель</string>
<string name="select_music_player">Выберите музыкальный проигрыватель</string>
<string name="select">Выбрать</string>
<string name="title_save">Название музыкального эффекта</string>
<string name="save">Сохранить</string>
<string name="tab_effects">Жанры</string>
<string name="tab_my_effects">Мои жанры</string>
<string name="dance">Танец</string>
<string name="normal">Обычный</string>
<string name="classical">Классика</string>
<string name="microphone_permission">Разрешение на микрофон</string>
<string name="microphone_permission_body">Требуется разрешение на микрофон для отображения спектра музыки при визуализации.</string>
<string name="floating_window_permission">Разрешение на плавающее окно</string>
<string name="permission_denied">Разрешение отклонено</string>
<string name="you_have_denied">Вы отклонили разрешение, пожалуйста, откройте и активируйте его вручную</string>
<string name="cancel">Отмена</string>
<string name="you_want_to_revoke_permission">Вы хотите отозвать разрешение, пожалуйста, откройте и активируйте его вручную</string>
<string name="turn_off_microphone_access">Отключить доступ к микрофону</string>
<string name="turn_off_floating_window">Отключить разрешения для плавающего окна</string>
<string name="save_effect">Сохранить эффект</string>
<string name="allowed_apps">Разрешено в других приложениях</string>
<string name="border_setting">Настройка границы</string>
<string name="border_style">Стиль границы</string>
<string name="lighting_color">Цвет подсветки</string>
<string name="hello_blank_fragment">Привет, пустой фрагмент</string>
<string name="appwidget_text">ПРИМЕР</string>
<string name="add_widget">Добавить виджет</string>
<string name="app_widget_description">Это описание виджета приложения</string>
<string name="ngon_ngu">Язык</string>
<string name="list_effects">Список жанров</string>
<string name="Ok">ОК</string>
<string name="mess_error">Произошла проблема с системой, которая помешала нормальной работе приложения.</string>
<string name="title_opp">Упс! Что-то пошло не так</string>
<string name="until_you">Пока не</string>
<string name="you_haven">Вы еще не сохранили ни одного эффекта</string>
<string name="next">Далее</string>
<string name="top_radius">Верхний радиус</string>
<string name="bottom_radius">Нижний радиус</string>
<string name="width">Ширина</string>
<string name="speed">Скорость</string>
<string name="notification">Уведомление</string>
<string name="notification_content">Разрешите доступ к уведомлениям для более широкого контроля с большим количеством приложений!</string>
<string name="notification_content_visua">Приложение нуждается в разрешении на рисование визуализатора. Пожалуйста, перейдите в настройки, чтобы включить это разрешение!</string>
<string name="not_control">В настоящее время невозможно контролировать приложение, но эквалайзер можно управлять!</string>
<string name="not_install_app">Вы еще не установили ни одно мультимедийное приложение!</string>
<string name="not_name_effects">Пожалуйста, введите имя для жанров!</string>
<string name="save_success">Успешно сохранено!</string>
<string name="get_start">Начать</string>
<string name="professional_equalizer">Профессиональный эквалайзер</string>
<string name="extra_volume_booster">Дополнительный усилитель громкости</string>
<string name="powerful_booster">Мощный усилитель и эквалайзер</string>
<string name="enter_name">Введите имя</string>
<string name="cotent_choose">Для использования этой функции приложения нам необходимо разрешение на доступ к списку установленных мультимедийных приложений на вашем устройстве. Это разрешение помогает нам удобно находить и контролировать приложения. Пожалуйста, предоставьте это разрешение, чтобы улучшить ваш опыт использования нашего приложения.</string>
<string name="genre_saving">Сохранение</string>
<string name="done">Готово</string>
<string name="select_music">Выбрать музыку</string>
</resources>
<resources>
<declare-styleable name="AppWidgetAttrs">
<attr name="appWidgetPadding" format="dimension" />
<attr name="appWidgetInnerRadius" format="dimension" />
<attr name="appWidgetRadius" format="dimension" />
</declare-styleable>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="color_bg">#313036</color>
<color name="transparent">#4D000000</color>
<color name="transparent_00">#00000000</color>
<color name="color_text_singer">#9F9F9F</color>
<color name="color_brand">#E83565</color>
<color name="tab_selected">#E83565</color>
<color name="color_neutral">#434343</color>
<color name="end">#E83565</color>
<color name="start">#8644F6</color>
<color name="center">#08E0FF</color>
<color name="line">#626262</color>
<color name="color_bg_notification">#CC222222</color>
<color name="light_blue_50">#FFE1F5FE</color>
<color name="light_blue_200">#FF81D4FA</color>
<color name="light_blue_600">#FF039BE5</color>
<color name="light_blue_900">#FF01579B</color>
<color name="gray">#515151</color>
<color name="clr_DC4D6F">#DC4D6F</color>
<color name="clr_FFFFFF">#FFFFFF</color>
<color name="clr_12B7EB">#12B7EB</color>
<color name="clr_050827">#050827</color>
<color name="clr_9F9F9F">#9F9F9F</color>
<color name="clr_E83565">#E83565</color>
<color name="clr_FB2A75">#FB2A75</color>
<color name="clr_1D2433">#1D2433</color>
<color name="clr_991D2433">#991D2433</color>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="app_icon_size">48dp</dimen>
<dimen name="margin_small">5</dimen>
<dimen name="toolbar_icon_size">5</dimen>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Refer to App Widget Documentation for margin information
http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
-->
<dimen name="widget_margin">0dp</dimen>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#000000</color>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="facebook_app_id" translatable="false">291522590265564</string>
<string name="facebook_client_token" translatable="false">6230f1fadc71b368c9126bcf499a4f8d</string>
<string name="app_name">Equalizer Booster</string>
<string name="tab_equalizer">Equalizer</string>
<string name="tab_music">Music</string>
<string name="setting">Setting</string>
<string name="vibrate">Vibrate</string>
<string name="visualizer">Visualizer</string>
<string name="play_control_bar">Play control bar</string>
<string name="bands_equalizer">5 Bands Equalizer</string>
<string name="control_all_effects">Eq controls all Genres</string>
<string name="edge_lighting">Edge lighting</string>
<string name="permissions_manager">Permissions manager</string>
<string name="language">Language</string>
<string name="privacy_policy">Privacy policy</string>
<string name="choose_your_music_player">Choose your music player</string>
<string name="select_music_player">Select Music Player</string>
<string name="select">Select</string>
<string name="title_save">Music Effect Name</string>
<string name="save">Save</string>
<string name="tab_effects">Genres</string>
<string name="tab_my_effects">My Genres</string>
<string name="dance">Dance</string>
<string name="normal">Normal</string>
<string name="classical">Classical</string>
<string name="microphone_permission">Microphone permission</string>
<string name="microphone_permission_body">Microphone permission is required to display music spectrum by visual.</string>
<string name="floating_window_permission">Floating window permission</string>
<string name="permission_denied">Permission denied</string>
<string name="you_have_denied">You have denied permission, please open and activate it yourself</string>
<string name="cancel">Cancel</string>
<string name="you_want_to_revoke_permission">You want to revoke permission, please open and activate it yourself</string>
<string name="turn_off_microphone_access">Turn off microphone access</string>
<string name="turn_off_floating_window">Turn off floating window permissions</string>
<string name="save_effect">Save effect</string>
<string name="allowed_apps">Allowed on other apps</string>
<string name="border_setting">Border Setting</string>
<string name="border_style">Border Style</string>
<string name="lighting_color">Lighting Color</string>
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="appwidget_text">EXAMPLE</string>
<string name="add_widget">Add widget</string>
<string name="app_widget_description">This is an app widget description</string>
<string name="ngon_ngu">Language</string>
<string name="list_effects">List Genres</string>
<string name="Ok">Ok</string>
<string name="mess_error">There was some problem with the system that prevented the application from working properly.</string>
<string name="title_opp">Opp! Something wrong</string>
<string name="until_you">Until You</string>
<string name="you_haven" tools:ignore="StringEscaping">You haven\u0027t saved a effect yet</string>
<string name="next">Next</string>
<string name="top_radius">Top radius</string>
<string name="bottom_radius">Bottom radius</string>
<string name="width">Width</string>
<string name="speed">Speed</string>
<string name="notification">Notification</string>
<string name="notification_content">Allow access to notifications for broader control with more apps!</string>
<string name="notification_content_visua">The app needs permission to draw the visualizer. Please go to settings to enable this permission!</string>
<string name="not_control">Currently, it\u0027s not possible to control the app, but the equalizer is controllable!</string>
<string name="not_install_app">You haven\u0027t installed any media apps yet!</string>
<string name="not_name_effects">Please enter a name for the Genres!</string>
<string name="save_success">Saved successfully!</string>
<string name="get_start">Get Start</string>
<string name="professional_equalizer">Professional Equalizer</string>
<string name="extra_volume_booster">Extra volume booster</string>
<string name="powerful_booster">Powerful booster &amp; EQ</string>
<string name="enter_name">Enter Name</string>
<string name="cotent_choose">To use this feature of the application, we need permission to access the list of installed media apps on your device. This permission helps us conveniently locate and control apps. Please grant this permission to enhance your experience with our app.</string>
<string name="genre_saving">Saving</string>
<string name="done">Done</string>
<string name="select_music">Select Music</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">-->
<!-- <item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item>-->
<!-- </style>-->
<!-- <style name="AppBottomSheetDialogTheme"-->
<!-- parent="Theme.Design.Light.BottomSheetDialog">-->
<!-- <item name="bottomSheetStyle">@style/AppModalStyle</item>-->
<!-- </style>-->
<!-- <style name="AppModalStyle"-->
<!-- parent="Widget.Design.BottomSheet.Modal">-->
<!-- <item name="android:background">@drawable/rounded_dialog</item>-->
<!-- </style>-->
</resources>
\ No newline at end of file
<resources>
<style name="Widget.Equalizes.AppWidget.Container" parent="android:Widget">
<item name="android:id">@android:id/background</item>
<item name="android:background">?android:attr/colorBackground</item>
</style>
<style name="Widget.Equalizes.AppWidget.InnerView" parent="android:Widget">
<item name="android:background">?android:attr/colorBackground</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Equalizes" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<!-- Customize your theme here. -->
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item>
</style>
<style name="AppBottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/AppModalStyle</item>
</style>
<style name="AppModalStyle" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@drawable/rounded_dialog</item>
</style>
<style name="Theme.Equalizes.AppWidgetContainerParent" parent="@android:style/Theme.DeviceDefault">
<!-- Radius of the outer bound of widgets to make the rounded corners -->
<item name="appWidgetRadius">16dp</item>
<!--
Radius of the inner view's bound of widgets to make the rounded corners.
It needs to be 8dp or less than the value of appWidgetRadius
-->
<item name="appWidgetInnerRadius">8dp</item>
</style>
<style name="Theme.Equalizes.AppWidgetContainer" parent="Theme.Equalizes.AppWidgetContainerParent">
<!-- Apply padding to avoid the content of the widget colliding with the rounded corners -->
<item name="appWidgetPadding">16dp</item>
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/app_widget_description"
android:initialKeyguardLayout="@layout/app_widget"
android:initialLayout="@layout/app_widget"
android:minWidth="40dp"
android:minHeight="40dp"
android:previewImage="@drawable/example_appwidget_preview"
android:previewLayout="@layout/app_widget"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="1"
android:targetCellHeight="1"
android:updatePeriodMillis="86400000"
android:widgetCategory="home_screen" />
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/app_widget_description"
android:initialKeyguardLayout="@layout/app_widget"
android:initialLayout="@layout/app_widget"
android:minWidth="40dp"
android:minHeight="40dp"
android:previewImage="@drawable/example_appwidget_preview"
android:previewLayout="@layout/app_widget"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="1"
android:targetCellHeight="1"
android:updatePeriodMillis="86400000"
android:widgetCategory="home_screen" />
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/app_widget_description"
android:initialKeyguardLayout="@layout/equalizer_widget"
android:initialLayout="@layout/equalizer_widget"
android:minWidth="40dp"
android:minHeight="40dp"
android:previewImage="@drawable/example_appwidget_preview"
android:previewLayout="@layout/equalizer_widget"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="1"
android:targetCellHeight="1"
android:updatePeriodMillis="86400000"
android:widgetCategory="home_screen" />
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<defaults>
<entry>
<key>App_open_resume</key>
<value>true</value>
</entry>
<entry>
<key>Inter_splash</key>
<value>true</value>
</entry>
<entry>
<key>Native_language</key>
<value>true</value>
</entry>
<entry>
<key>Native_tutorial</key>
<value>true</value>
</entry>
<entry>
<key>Native_home</key>
<value>true</value>
</entry>
<entry>
<key>Inter_home</key>
<value>true</value>
</entry>
<entry>
<key>Inter_save</key>
<value>true</value>
</entry>
<entry>
<key>Native_music</key>
<value>true</value>
</entry>
<entry>
<key>Banner</key>
<value>true</value>
</entry>
<entry>
<key>Native_saving</key>
<value>true</value>
</entry>
<entry>
<key>allow_reload_native_language</key>
<value>true</value>
</entry>
<entry>
<key>allow_reload_native_tutorial</key>
<value>true</value>
</entry>
<entry>
<key>allow_reload_native_home</key>
<value>true</value>
</entry>
<entry>
<key>allow_reload_native_music</key>
<value>true</value>
</entry>
<entry>
<key>allow_reload_banner</key>
<value>true</value>
</entry>
</defaults>
\ No newline at end of file
package com.bassbooster.soundeffects
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
\ No newline at end of file
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
apply plugin: 'signing'
def artifactId = 'audiovisualizer'
def ossrhUsername = findProperty('OSSRH_USERNAME')
def ossrhPassword = findProperty('OSSRH_PASSWORD')
def signingKey = findProperty('SIGNING_KEY')
def signingKeyPwd = findProperty('SIGNING_KEY_PWD')
group = "io.github.gautamchibde"
version = findProperty('LIBRARY_VERSION') ? findProperty('LIBRARY_VERSION') : "1.0.13-snapshot" //Hardcoding snapshot version if none exist in environment variable
android {
compileSdk 34
namespace="com.chibde"
defaultConfig {
minSdkVersion 21
targetSdkVersion 34
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'androidx.appcompat:appcompat:1.6.1'
testImplementation 'junit:junit:4.13.2'
}
println("Version to use")
println(version)
//task javadoc(type: Javadoc) {
//
// doFirst {
// configurations.implementation
// .filter { it.name.endsWith('.aar') }
// .each { aar ->
// copy {
// from zipTree(aar)
// include "**/classes.jar"
// into "$buildDir/tmp/aarsToJars/${aar.name.replace('.aar', '')}/"
// }
// }
// }
//
// configurations.implementation.setCanBeResolved(true)
// source = android.sourceSets.main.java.srcDirs
// classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
// classpath += configurations.implementation
// classpath += fileTree(dir: "$buildDir/tmp/aarsToJars/")
// destinationDir = file("${project.buildDir}/outputs/javadoc/")
// failOnError false
// exclude '**/BuildConfig.java'
// exclude '**/R.java'
//}
//
//task javadocJar(type: Jar, dependsOn: javadoc) {
// archiveClassifier.set('javadoc')
// from javadoc
//}
//
//task androidSourcesJar(type: Jar) {
// archiveClassifier.set('sources')
// from android.sourceSets.main.java.srcDirs
//}
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
// from components.release
// You can then customize attributes of the publication as shown below.
// groupId = group
// artifactId = artifactId
// version = version
//
// artifact androidSourcesJar
// artifact javadocJar
pom {
name = artifactId
description = ' Audio visualisation for android MediaPlayer'
url = 'https://github.com/GautamChibde/android-audio-visualizer'
licenses {
license {
name = 'Apache License 2.0'
url = 'https://github.com/GautamChibde/android-audio-visualizer/blob/master/LICENSE'
}
}
developers {
developer {
id = 'gautamchibde'
name = 'Gautam Chibde'
email = 'gautamchibde@gmail.com'
}
}
scm {
connection = 'scm:git@github.com:GautamChibde/android-audio-visualizer.git'
developerConnection = 'scm:git:ssh://github.com:GautamChibde/android-audio-visualizer.git'
url = 'https://github.com/GautamChibde/android-audio-visualizer/tree/master'
}
}
}
}
repositories {
maven {
name = "sonatype"
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
credentials {
username ossrhUsername
password ossrhPassword
}
}
}
}
}
signing {
useInMemoryPgpKeys(signingKey, signingKeyPwd)
sign publishing.publications
}
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /home/gautam/Sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
package com.chibde;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static junit.framework.Assert.assertEquals;
/**
* Instrumentation test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.chibde.audiovisulaizer.test", appContext.getPackageName());
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.chibde">
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application
android:label="@string/app_name">
</application>
</manifest>
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.MediaPlayer;
import android.media.audiofx.Visualizer;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
/**
* Base class that contains common implementation for all
* visualizers.
* Created by gautam chibde on 28/10/17.
*/
abstract public class BaseVisualizer extends View {
protected byte[] bytes;
protected Paint paint;
protected Visualizer visualizer;
protected int color = Color.BLUE;
public BaseVisualizer(Context context) {
super(context);
init(null);
init();
}
public BaseVisualizer(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(attrs);
init();
}
public BaseVisualizer(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs);
init();
}
private void init(AttributeSet attributeSet) {
paint = new Paint();
}
/**
* Set color to visualizer with color resource id.
*
* @param color color resource id.
*/
public void setColor(int color) {
this.color = color;
this.paint.setColor(this.color);
}
/**
* @deprecated will be removed in next version use {@link BaseVisualizer#setPlayer(int)} instead
* @param mediaPlayer MediaPlayer
*/
@Deprecated
public void setPlayer(MediaPlayer mediaPlayer) {
setPlayer(mediaPlayer.getAudioSessionId());
}
public void setPlayer(int audioSessionId) {
visualizer = new Visualizer(audioSessionId);
visualizer.setEnabled(false);
visualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
visualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() {
@Override
public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes,
int samplingRate) {
BaseVisualizer.this.bytes = bytes;
invalidate();
}
@Override
public void onFftDataCapture(Visualizer visualizer, byte[] bytes,
int samplingRate) {
}
}, Visualizer.getMaxCaptureRate() / 2, true, false);
visualizer.setEnabled(true);
}
public void release() {
//will be null if setPlayer hasn't yet been called
if (visualizer == null)
return;
visualizer.release();
bytes = null;
invalidate();
}
public Visualizer getVisualizer() {
return visualizer;
}
protected abstract void init();
}
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde.visualizer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import androidx.annotation.Nullable;
import android.graphics.Shader;
import android.util.AttributeSet;
import com.chibde.BaseVisualizer;
/**
* Custom view that creates a Bar visualizer effect for
* the android {@link android.media.MediaPlayer}
*
* Created by gautam chibde on 28/10/17.
*/
public class BarVisualizer extends BaseVisualizer {
private float density = 50;
private int gap;
public BarVisualizer(Context context) {
super(context);
}
public BarVisualizer(Context context,
@Nullable AttributeSet attrs) {
super(context, attrs);
}
public BarVisualizer(Context context,
@Nullable AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void init() {
this.density = 50;
this.gap = 4;
paint.setStyle(Paint.Style.FILL);
}
public LinearGradient createLinearGradientPaint() {
int[] colors = {
0xFF005B8B, 0xFF007698, 0xFF0097A9, 0xFF00B1B6, 0xFF00C3C0,
0xFF00CEC5, 0xFF00D2C7, 0xFF319CC1, 0xFF5F6ABC, 0xFF7157BA,
0xFF9636AB, 0xFFAE22A1, 0xFFB71A9D
};
float[] positions = calculatePositions(colors.length);
//float[] positions = {0.0f, 1.0f}; // Định vị trí màu trong gradient (0.0f - 1.0f)
LinearGradient gradient = new LinearGradient(0, 0, getWidth(), getHeight(), colors, positions, Shader.TileMode.CLAMP);
return gradient;
}
public float[] calculatePositions(int numColors) {
float[] positions = new float[numColors];
float step = 1.0f / (numColors - 1);
for (int i = 0; i < numColors; i++) {
positions[i] = i * step;
}
return positions;
}
/**
* Sets the density to the Bar visualizer i.e the number of bars
* to be displayed. Density can vary from 10 to 256.
* by default the value is set to 50.
*
* @param density density of the bar visualizer
*/
public void setDensity(float density) {
this.density = density;
if (density > 256) {
this.density = 256;
} else if (density < 10) {
this.density = 10;
}
}
@Override
protected void onDraw(Canvas canvas) {
if (bytes != null) {
float barWidth = getWidth() / density;
float div = bytes.length / density;
paint.setStrokeWidth(barWidth - gap);
paint.setShader(createLinearGradientPaint());
for (int i = 0; i < density; i++) {
int bytePosition = (int) Math.ceil(i * div);
int top = getHeight() +
((byte) (Math.abs(bytes[bytePosition]) + 128)) * getHeight() / 128;
float barX = (i * barWidth) + (barWidth / 2);
canvas.drawLine(barX, getHeight(), barX, top, paint);
}
super.onDraw(canvas);
}
}
}
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde.visualizer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Shader;
import androidx.annotation.Nullable;
import android.util.AttributeSet;
import com.chibde.BaseVisualizer;
/**
* TODO
*
* Created by gautam chibde on 29/10/17.
*/
class BlazingColorVisualizer extends BaseVisualizer {
private Shader shader;
public BlazingColorVisualizer(Context context) {
super(context);
}
public BlazingColorVisualizer(Context context,
@Nullable AttributeSet attrs) {
super(context, attrs);
}
public BlazingColorVisualizer(Context context,
@Nullable AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void init() {
shader = new LinearGradient(0,
0,
0,
getHeight(),
Color.BLUE,
Color.GREEN,
Shader.TileMode.MIRROR /*or REPEAT*/);
}
@Override
protected void onDraw(Canvas canvas) {
if (bytes != null) {
paint.setShader(shader);
for (int i = 0, k = 0; i < (bytes.length - 1) && k < bytes.length; i++, k++) {
int top = getHeight() +
((byte) (Math.abs(bytes[k]) + 128)) * getHeight() / 128;
canvas.drawLine(i, getHeight(), i, top, paint);
}
super.onDraw(canvas);
}
}
}
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde.visualizer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import androidx.annotation.Nullable;
import android.graphics.RadialGradient;
import android.graphics.Shader;
import android.util.AttributeSet;
import com.chibde.BaseVisualizer;
/**
* Custom view that creates a Circle and Bar visualizer effect for
* the android {@link android.media.MediaPlayer}
*
* Created by gautam chibde on 20/11/17.
*/
public class CircleBarVisualizer extends BaseVisualizer {
private float[] points;
private Paint circlePaint;
private int radius;
public CircleBarVisualizer(Context context) {
super(context);
}
public CircleBarVisualizer(Context context,
@Nullable AttributeSet attrs) {
super(context, attrs);
}
public CircleBarVisualizer(Context context,
@Nullable AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void init() {
paint.setStyle(Paint.Style.STROKE);
circlePaint = new Paint();
radius = -1;
}
public RadialGradient createRadialGradientPaint() {
int[] colors = {
0xFF005B8B, 0xFF007698, 0xFF0097A9, 0xFF00B1B6, 0xFF00C3C0,
0xFF00CEC5, 0xFF00D2C7, 0xFF319CC1, 0xFF5F6ABC, 0xFF7157BA,
0xFF9636AB, 0xFFAE22A1, 0xFFB71A9D
};
float centerX = getWidth() / 2;
float centerY = getHeight() / 2;
float radius = Math.min(centerX, centerY);
RadialGradient gradient = new RadialGradient(centerX, centerY, radius, colors, null, Shader.TileMode.CLAMP);
return gradient;
}
@Override
protected void onDraw(Canvas canvas) {
if (radius == -1) {
radius = getHeight() < getWidth() ? getHeight() : getWidth();
radius = (int) (radius * 0.65 / 2);
double circumference = 2 * Math.PI * radius;
paint.setStrokeWidth((float) (circumference / 120));
circlePaint.setStyle(Paint.Style.STROKE);
circlePaint.setStrokeWidth(4);
}
paint.setShader(createRadialGradientPaint());
canvas.drawCircle(getWidth() / 2f, getHeight() / 2f, radius, circlePaint);
if (bytes != null) {
if (points == null || points.length < bytes.length * 4) {
points = new float[bytes.length * 4];
}
double angle = 0;
for (int i = 0; i < 120; i++, angle += 3) {
int x = (int) Math.ceil(i * 8.5);
int t = ((byte) (-Math.abs(bytes[x]) + 128)) * (getHeight() / 4) / 128;
points[i * 4] = (float) (getWidth() / 2
+ radius
* Math.cos(Math.toRadians(angle)));
points[i * 4 + 1] = (float) (getHeight() / 2
+ radius
* Math.sin(Math.toRadians(angle)));
points[i * 4 + 2] = (float) (getWidth() / 2
+ (radius + t)
* Math.cos(Math.toRadians(angle)));
points[i * 4 + 3] = (float) (getHeight() / 2
+ (radius + t)
* Math.sin(Math.toRadians(angle)));
}
canvas.drawLines(points, paint);
}
super.onDraw(canvas);
}
}
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde.visualizer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import androidx.annotation.Nullable;
import com.chibde.BaseVisualizer;
import java.util.HashMap;
import java.util.Map;
/**
* Custom view that creates a Circle and Bar visualizer effect for the android
* {@link android.media.MediaPlayer}
* <p>
* Created by gautam chibde on 20/11/17. Smooth effect added by Ali heidari
*/
public class CircleBarVisualizerSmooth extends BaseVisualizer {
private final static float _StepsCount = 2;
private final static int _BarCount = 120;
private final static float _AngleStep = 360f / _BarCount;
private float[] points;
private float[] endPoints;
private float[] diffs;
// Stores radius and step-counter which every invoking of "onDraw" requires them
private Map<String, Integer> configs = null;
public CircleBarVisualizerSmooth(Context context,
@Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void init() {
paint.setStyle(Paint.Style.STROKE);
}
/*
* Returns the value of given configuration-key with handling
* @see java.lang#NullPointerException
*/
private int getConfig(String key) {
Object obj = configs.get(key);
if (obj != null)
return (int) obj;
else
return 0;
}
/*
*set new value of given configuration-key
*/
private void setConfig(String key, int value) {
configs.put(key, value);
}
/*
*Get smaller dimension of visualizer
*/
private int getSmallerDimen() {
if (getHeight() < getWidth()) return getHeight();
else return getWidth();
}
/*
* Fill the initial configurations
*/
private void fillConfigs() {
if (configs != null)
return;
configs = new HashMap<>();
// Calculates the radius of center circle.
// Formula disclaimer : 0.65 = 3.14 * 0.02
int radius = (int) (getSmallerDimen() * 0.65 / 2) * 6 / 10;
// Width of each bar
double circumference = 1.5 * Math.PI * radius;
paint.setStrokeWidth((float) (circumference / _BarCount));
// Store initial configs
configs.put("needsInit", 1);//0 = false, 1 = true
configs.put("radius", radius);
configs.put("stepCounter", 0);
}
/*
* Initializes the points
*/
private void initPoints() {
// Set points sizes if it is first time we got here or for any reasons arrays
// are broken.
if (getConfig("needsInit") == 1 || points == null || points.length < bytes.length * 2) {
// It needs to multiply by 4 because for every byte should be
// StartX,StartY,EndX,EndY
points = new float[bytes.length * 4];
// It needs to multiply by 4 because for every byte should be EndX,EndY,OldEndX,OldEndY
endPoints = new float[bytes.length * 4];
// It needs to multiply by 2 because there are X and Y differences
diffs = new float[bytes.length * 2];
}
}
/*
* Fill the points for end of each bar.
* Only needs to calculate the end of bar-line, because starting is not changing
*/
private void fillPoints(int round, int i) {
int indexM2 = i * 2;
int indexM4 = i * 4;
// Increase/Decrease the length of bar so oldEnd can match with ends
if (round <= _StepsCount) {
// Find endX to be drawn
points[indexM4 + 2] = endPoints[indexM4 + 2] + diffs[indexM2] * round;
// Find endX to be drawn
points[indexM4 + 3] = endPoints[indexM4 + 3] + diffs[indexM2 + 1] * round;
}
}
/*
* Fills the end points and differences
*/
private void fillEndPointsAndDiffs(int i, float newX, float newY) {
// Set the old ends before assign new value the ends
endPoints[i * 4 + 2] = endPoints[i * 4];
endPoints[i * 4 + 3] = endPoints[i * 4 + 1];
// Find endX
endPoints[i * 4] = newX;
// Find endY
endPoints[i * 4 + 1] = newY;
// If it is not first time, so we have oldEnds for calculation of differences
if (getConfig("needsInit") == 0) {
// Find differences of Xs
diffs[i * 2] = (endPoints[i * 4] - endPoints[i * 4 + 2]) / _StepsCount;
// Find differences of Ys
diffs[i * 2 + 1] = (endPoints[i * 4 + 1] - endPoints[i * 4 + 3]) / _StepsCount;
} else {
// Set the old ends
endPoints[i * 4 + 2] = endPoints[i * 4];
endPoints[i * 4 + 3] = endPoints[i * 4 + 1];
}
}
/*
* Calculates the points of each round. Round represents amount of decrease/increase the length of bar
*/
private void calcRound(int i, double angle) {
// Calculates ceiling regarded to bytes length. The ceiling is a coefficient for
// byte indexer.
// Because we have 120 bars, so the buffer should be filtered and only 120 bytes
// from the buffer will have chosen to be shown.
// Get length of bar
int t = getBarLength(i, (bytes.length - bytes.length % 4f) / _BarCount);
// Find the round by
int round = (int) (getConfig("stepCounter") % _StepsCount);
if (round == 0) {
float radius_p_t = getConfig("radius") + t;
//Fill the endPoints and differences
this.fillEndPointsAndDiffs(i, (float) (getWidth() / 2 + radius_p_t * Math.cos(angle)), (float) (getHeight() / 2 + radius_p_t * Math.sin(angle)));
}
// Fill points
this.fillPoints(round, i);
}
/*
* Calculates the legth of bar
*/
private int getBarLength(int i, float ceiling) {
// Find the index of byte inside buffer
int x = (int) Math.ceil(i * ceiling);
// Change the sign of byte
byte a = (byte) (-Math.abs(bytes[x]) + 128);
// Gets the length of the line
return a * (getHeight() / 4) / 128;
}
/*
* Calculate first points
*/
private void fillStartingPoints(int i, double angle) {
int indexM4 = i * 4;
// First time calculates the startX and startY for every byte
if (getConfig("needsInit") == 1) {
// Find startX
points[indexM4] = (float) (this.getWidth() / 2 + getConfig("radius") * Math.cos(angle));
// Find startY
points[indexM4 + 1] = (float) (this.getHeight() / 2 + getConfig("radius") * Math.sin(angle));
}
// Calculates points for current round
calcRound(i, angle);
}
/*
* Draw waveform It calculates the StartX,StartY just once because it never
* changes. Then calculates EndX, EndY, OldEndX and OldEndY every 3 frames. So
* OldEndX and OldEndY can increase/decrease toward EndX and EndY respectively.
* To perform such an action(Animation) you need differences of X and Y. It
* achieves using EndX - OldEndX and EndY - OldEndY Then find the steps using
* Differences / 3 Finally when OldEnd(s) matched to End(s) Need to set End with
* OldEnd value And the action will be repeated until visualizer is running.
*/
@Override
protected void onDraw(Canvas canvas) {
// Check if bytes initiated before
if (bytes == null)
return;
// Init configs
fillConfigs();
// Fill the points
initPoints();
// We start with angle 0 and go against clock's direction
double angle = 0;
// Calculates every points and iterate along increasing angle
for (int i = 0; i < _BarCount; i++, angle += _AngleStep) {
// Convert to radians
double radianAngle = Math.toRadians(angle);
this.fillStartingPoints(i, radianAngle);
}
if (getConfig("needsInit") == 0)
canvas.drawLines(points, paint);
super.onDraw(canvas);
// Resets configurations variable for next calling of onDraw
this.resetConfigs();
}
/*
* Reset configs
*/
private void resetConfigs() {
// The stepCounter increases
setConfig("stepCounter", getConfig("stepCounter") + 1);
// Initialized, no longer need initializing
if (getConfig("needsInit") == 1)
setConfig("needsInit", 0);
}
}
\ No newline at end of file
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde.visualizer;
import android.content.Context;
import android.graphics.Canvas;
import androidx.annotation.Nullable;
import android.util.AttributeSet;
import com.chibde.BaseVisualizer;
/**
* Custom view that creates a circle visualizer effect for
* the android {@link android.media.MediaPlayer}
*
* Created by gautam on 13/11/17.
*/
public class CircleVisualizer extends BaseVisualizer {
private float[] points;
private float radiusMultiplier = 1;
private float strokeWidth = 0.005f;
public CircleVisualizer(Context context) {
super(context);
}
public CircleVisualizer(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CircleVisualizer(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void init() {
}
/**
* set Stroke width for your visualizer takes input between 1-10
*
* @param strokeWidth stroke width between 1-10
*/
public void setStrokeWidth(int strokeWidth) {
if (strokeWidth > 10) {
this.strokeWidth = 10 * 0.005f;
} else if (strokeWidth < 1) {
this.strokeWidth = 0.005f;
}
this.strokeWidth = strokeWidth * 0.005f;
}
/**
* This method sets the multiplier to the circle, by default the
* multiplier is set to 1. you can provide value more than 1 to
* increase size of the circle visualizer.
*
* @param radiusMultiplier multiplies to the radius of the circle.
*/
public void setRadiusMultiplier(float radiusMultiplier) {
this.radiusMultiplier = radiusMultiplier;
}
@Override
protected void onDraw(Canvas canvas) {
if (bytes != null) {
paint.setStrokeWidth(getHeight() * strokeWidth);
if (points == null || points.length < bytes.length * 4) {
points = new float[bytes.length * 4];
}
double angle = 0;
for (int i = 0; i < 360; i++, angle++) {
points[i * 4] = (float) (getWidth() / 2
+ Math.abs(bytes[i * 2])
* radiusMultiplier
* Math.cos(Math.toRadians(angle)));
points[i * 4 + 1] = (float) (getHeight() / 2
+ Math.abs(bytes[i * 2])
* radiusMultiplier
* Math.sin(Math.toRadians(angle)));
points[i * 4 + 2] = (float) (getWidth() / 2
+ Math.abs(bytes[i * 2 + 1])
* radiusMultiplier
* Math.cos(Math.toRadians(angle + 1)));
points[i * 4 + 3] = (float) (getHeight() / 2
+ Math.abs(bytes[i * 2 + 1])
* radiusMultiplier
* Math.sin(Math.toRadians(angle + 1)));
}
canvas.drawLines(points, paint);
}
super.onDraw(canvas);
}
}
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde.visualizer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import androidx.annotation.Nullable;
import android.graphics.Shader;
import android.util.AttributeSet;
import com.chibde.BaseVisualizer;
/**
* Custom view that creates a Line and Bar visualizer effect for
* the android {@link android.media.MediaPlayer}
* <p>
* Created by gautam chibde on 22/11/17.
*/
public class LineBarVisualizer extends BaseVisualizer {
private Paint middleLine;
private float density;
private int gap;
public LineBarVisualizer(Context context) {
super(context);
}
public LineBarVisualizer(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public LineBarVisualizer(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public LinearGradient createLinearGradientPaint() {
int[] colors = {
0xFF005B8B, 0xFF007698, 0xFF0097A9, 0xFF00B1B6, 0xFF00C3C0,
0xFF00CEC5, 0xFF00D2C7, 0xFF319CC1, 0xFF5F6ABC, 0xFF7157BA,
0xFF9636AB, 0xFFAE22A1, 0xFFB71A9D
};
float[] positions = calculatePositions(colors.length);
//float[] positions = {0.0f, 1.0f}; // Định vị trí màu trong gradient (0.0f - 1.0f)
LinearGradient gradient = new LinearGradient(0, 0, getWidth(), getHeight(), colors, positions, Shader.TileMode.CLAMP);
return gradient;
}
public float[] calculatePositions(int numColors) {
float[] positions = new float[numColors];
float step = 1.0f / (numColors - 1);
for (int i = 0; i < numColors; i++) {
positions[i] = i * step;
}
return positions;
}
@Override
protected void init() {
density = 50;
gap = 4;
middleLine = new Paint();
middleLine.setColor(Color.BLUE);
}
/**
* Sets the density to the Bar visualizer i.e the number of bars
* to be displayed. Density can vary from 10 to 256.
* by default the value is set to 50.
*
* @param density density of the bar visualizer
*/
public void setDensity(float density) {
if (this.density > 180) {
this.middleLine.setStrokeWidth(1);
this.gap = 1;
} else {
this.gap = 4;
}
this.density = density;
if (density > 256) {
this.density = 256;
this.gap = 0;
} else if (density <= 10) {
this.density = 10;
}
}
@Override
protected void onDraw(Canvas canvas) {
if (middleLine.getColor() != Color.BLUE) {
middleLine.setColor(color);
}
if (bytes != null) {
float barWidth = getWidth() / density;
float div = bytes.length / density;
canvas.drawLine(0, getHeight() / 2, getWidth(), getHeight() / 2, middleLine);
paint.setStrokeWidth(barWidth - gap);
paint.setShader(createLinearGradientPaint());
for (int i = 0; i < density; i++) {
int bytePosition = (int) Math.ceil(i * div);
int top = getHeight() / 2
+ (128 - Math.abs(bytes[bytePosition]))
* (getHeight() / 2) / 128;
int bottom = getHeight() / 2
- (128 - Math.abs(bytes[bytePosition]))
* (getHeight() / 2) / 128;
float barX = (i * barWidth) + (barWidth / 2);
canvas.drawLine(barX, bottom, barX, getHeight() / 2, paint);
canvas.drawLine(barX, top, barX, getHeight() / 2, paint);
}
super.onDraw(canvas);
}
}
}
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde.visualizer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import androidx.annotation.Nullable;
import android.util.AttributeSet;
import com.chibde.BaseVisualizer;
/**
* Custom view that creates a Bar visualizer effect for
* the android {@link android.media.MediaPlayer}
*
* Created by gautam chibde on 28/10/17.
*/
public class LineVisualizer extends BaseVisualizer {
private float[] points;
private Rect rect = new Rect();
private float strokeWidth = 0.005f;
public LineVisualizer(Context context) {
super(context);
}
public LineVisualizer(Context context,
@Nullable AttributeSet attrs) {
super(context, attrs);
}
public LineVisualizer(Context context,
@Nullable AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void init() {
}
/**
* set Stroke width for your visualizer takes input between 1-10
*
* @param strokeWidth stroke width between 1-10
*/
public void setStrokeWidth(int strokeWidth) {
if (strokeWidth > 10) {
this.strokeWidth = 10 * 0.005f;
} else if (strokeWidth < 1) {
this.strokeWidth = 0.005f;
}
this.strokeWidth = strokeWidth * 0.005f;
}
@Override
protected void onDraw(Canvas canvas) {
if (bytes != null) {
if (points == null || points.length < bytes.length * 4) {
points = new float[bytes.length * 4];
}
paint.setStrokeWidth(getHeight() * strokeWidth);
rect.set(0, 0, getWidth(), getHeight());
for (int i = 0; i < bytes.length - 1; i++) {
points[i * 4] = rect.width() * i / (bytes.length - 1);
points[i * 4 + 1] = rect.height() / 2
+ ((byte) (bytes[i] + 128)) * (rect.height() / 3) / 128;
points[i * 4 + 2] = rect.width() * (i + 1) / (bytes.length - 1);
points[i * 4 + 3] = rect.height() / 2
+ ((byte) (bytes[i + 1] + 128)) * (rect.height() / 3) / 128;
}
canvas.drawLines(points, paint);
}
super.onDraw(canvas);
}
}
/*
* Copyright (C) 2017 Gautam Chibde
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chibde.visualizer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.RadialGradient;
import android.graphics.Shader;
import android.util.AttributeSet;
import androidx.annotation.Nullable;
import com.chibde.BaseVisualizer;
/**
* Custom view that creates a Bar visualizer effect for
* the android {@link android.media.MediaPlayer}
* <p>
* Created by gautam chibde on 28/10/17.
*/
public class SquareBarVisualizer extends BaseVisualizer {
private float density = 16;
private int gap;
public SquareBarVisualizer(Context context) {
super(context);
}
public SquareBarVisualizer(Context context,
@Nullable AttributeSet attrs) {
super(context, attrs);
}
public SquareBarVisualizer(Context context,
@Nullable AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void init() {
this.density = 16;
this.gap = 2;
paint.setStyle(Paint.Style.FILL);
}
/**
* Sets the density to the Bar visualizer i.e the number of bars
* to be displayed. Density can vary from 10 to 256.
* by default the value is set to 50.
*
* @param density density of the bar visualizer
*/
public void setDensity(float density) {
this.density = density;
if (density > 256) {
this.density = 256;
} else if (density < 16) {
this.density = 16;
}
}
public LinearGradient createLinearGradientPaint() {
int[] colors = {
0xFF005B8B, 0xFF007698, 0xFF0097A9, 0xFF00B1B6, 0xFF00C3C0,
0xFF00CEC5, 0xFF00D2C7, 0xFF319CC1, 0xFF5F6ABC, 0xFF7157BA,
0xFF9636AB, 0xFFAE22A1, 0xFFB71A9D
};
float[] positions = calculatePositions(colors.length);
//float[] positions = {0.0f, 1.0f}; // Định vị trí màu trong gradient (0.0f - 1.0f)
LinearGradient gradient = new LinearGradient(0, 0, getWidth(), getHeight(), colors, positions, Shader.TileMode.CLAMP);
return gradient;
}
public float[] calculatePositions(int numColors) {
float[] positions = new float[numColors];
float step = 1.0f / (numColors - 1);
for (int i = 0; i < numColors; i++) {
positions[i] = i * step;
}
return positions;
}
/**
* Set Spacing between the Square in visualizer in pixel.
*
* @param gap Spacing between the square
*/
public void setGap(int gap) {
this.gap = gap;
}
@Override
protected void onDraw(Canvas canvas) {
if (bytes != null) {
float barWidth = getWidth() / density;
float div = bytes.length / density;
paint.setStrokeWidth(barWidth - gap);
paint.setShader(createLinearGradientPaint());
for (int i = 0; i < density; i++) {
int count = 0;
int bytePosition = (int) Math.ceil(i * div);
int top = getHeight() + ((byte) (Math.abs(bytes[bytePosition]) + 128)) * getHeight() / 128;
int col = Math.abs((getHeight() - top));
for (int j = 0; j < col + 1; j += barWidth) {
float barX = (i * barWidth) + (barWidth / 2);
float y1 = getHeight() - ((barWidth + (gap / 2f)) * count);
float y2 = getHeight() - ((barWidth - gap / 2f) + ((barWidth + gap / 2f) * count));
canvas.drawLine(barX, y1, barX, y2, paint);
count++;
}
}
super.onDraw(canvas);
}
}
}
<resources>
<string name="app_name">AudioVisulaizer</string>
</resources>
package com.chibde;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void additionIsCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
\ No newline at end of file
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://jitpack.io' } // this is the line to be added
maven {
url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea"
}
maven {
url 'https://artifact.bytedance.com/repository/pangle'
}
}
dependencies {
classpath "com.android.tools.build:gradle:8.6.1"
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
// classpath 'com.google.gms:google-services:4.3.15'
// classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.6'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
\ No newline at end of file
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
*.iml
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
# Log/OS Files
*.log
# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json
# Android Studio 3 in .gitignore file.
.idea/caches
.idea/modules.xml
# IntelliJ
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
google-services.json
# Android Profiling
*.hprof
apply plugin: 'com.android.library'
group="com.github.mosamabinomar"
version="2.0"
android {
compileSdk 34
namespace="com.bullhead.equalizer"
defaultConfig {
minSdkVersion 21
targetSdkVersion 34
versionCode 1
versionName "1.0.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
// build a jar with source files
//task sourcesJar(type: Jar) {
// from android.sourceSets.main.java.srcDirs
// classifier = 'sources'
//}
//task javadoc(type: Javadoc) {
// failOnError false
// source = android.sourceSets.main.java.sourceFiles
// classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
//}
// build a jar with javadoc
//task javadocJar(type: Jar, dependsOn: javadoc) {
// classifier = 'javadoc'
// from javadoc.destinationDir
//}
//artifacts {
// archives sourcesJar
// archives javadocJar
//}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.diogobernardino:williamchart:2.2'
implementation 'com.h6ah4i.android.widget.verticalseekbar:verticalseekbar:0.7.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61"
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.firebase:firebase-analytics:21.3.0'
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keep public class com.google.android.gms.** { public protected *; }
\ No newline at end of file
<manifest package="com.bullhead.equalizer"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest>
package com.bullhead.equalizer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Harjot on 23-May-16.
*/
public class AnalogController extends View {
float midx, midy;
Paint textPaint, circlePaint, circlePaint2, linePaint;
String angle;
float currdeg, deg = 3, downdeg;
int progressColor, lineColor;
onProgressChangedListener mListener;
String label;
private boolean shouldHandleTouch = true;
// Phương thức để cập nhật biến shouldHandleTouch
public void setShouldHandleTouch(boolean shouldHandle) {
this.shouldHandleTouch = shouldHandle;
}
public interface onProgressChangedListener {
void onProgressChanged(int progress);
}
public void setOnProgressChangedListener(onProgressChangedListener listener) {
mListener = listener;
}
public AnalogController(Context context) {
super(context);
init();
}
public AnalogController(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public AnalogController(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
void init() {
textPaint = new Paint();
textPaint.setColor(Color.WHITE);
textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextSize(33);
textPaint.setFakeBoldText(true);
textPaint.setTextAlign(Paint.Align.CENTER);
circlePaint = new Paint();
circlePaint.setColor(Color.parseColor("#222222"));
circlePaint.setStyle(Paint.Style.FILL);
circlePaint2 = new Paint();
circlePaint2.setColor(Color.parseColor("#E83565"));
circlePaint2.setStyle(Paint.Style.FILL);
linePaint = new Paint();
linePaint.setColor(Color.parseColor("#08E0FF"));
linePaint.setStrokeWidth(18);
angle = "0.0";
label = "Label";
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
midx = canvas.getWidth() / 2;
midy = canvas.getHeight() / 2;
int ang = 0;
float x = 0, y = 0;
int radius = (int) (Math.min(midx, midy) * ((float) 14.5 / 16));
float deg2 = Math.max(3, deg);
float deg3 = Math.min(deg, 21);
for (int i = (int) (deg2); i < 22; i++) {
float tmp = (float) i / 24;
x = midx + (float) (radius * Math.sin(2 * Math.PI * (1.0 - tmp)));
y = midy + (float) (radius * Math.cos(2 * Math.PI * (1.0 - tmp)));
circlePaint.setColor(Color.parseColor("#626262"));
canvas.drawCircle(x, y, ((float) radius / 15), circlePaint);
}
for (int i = 3; i <= deg3; i++) {
float tmp = (float) i / 24;
x = midx + (float) (radius * Math.sin(2 * Math.PI * (1.0 - tmp)));
y = midy + (float) (radius * Math.cos(2 * Math.PI * (1.0 - tmp)));
circlePaint2.setColor(Color.parseColor("#E83565"));
canvas.drawCircle(x, y, ((float) radius / 15), circlePaint2);
}
float tmp2 = deg / 24;
float x1 = midx + (float) (radius * ((float) 2 / 5) * Math.sin(2 * Math.PI * (1.0 - tmp2)));
float y1 = midy + (float) (radius * ((float) 2 / 5) * Math.cos(2 * Math.PI * (1.0 - tmp2)));
float x2 = midx + (float) (radius * ((float) 3 / 5) * Math.sin(2 * Math.PI * (1.0 - tmp2)));
float y2 = midy + (float) (radius * ((float) 3 / 5) * Math.cos(2 * Math.PI * (1.0 - tmp2)));
canvas.drawCircle(midx, midy, radius * ((float) 11.5 / 15), circlePaint);
circlePaint.setColor(Color.parseColor("#08E0FF"));
// paint.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
canvas.drawCircle(midx, midy, radius * ((float) 11.5 / 15), circlePaint);
circlePaint.setColor(Color.parseColor("#434343"));
canvas.drawCircle(midx, midy, radius * ((float) 11 / 15), circlePaint);
canvas.drawText(label, midx, midy + (float) (radius * 1.1), textPaint);
canvas.drawLine(x1, y1, x2, y2, linePaint);
}
@Override
public boolean onTouchEvent(MotionEvent e) {
if (!shouldHandleTouch){
return false;
}
mListener.onProgressChanged((int) (deg - 2));
if (e.getAction() == MotionEvent.ACTION_DOWN) {
float dx = e.getX() - midx;
float dy = e.getY() - midy;
downdeg = (float) ((Math.atan2(dy, dx) * 180) / Math.PI);
downdeg -= 90;
if (downdeg < 0) {
downdeg += 360;
}
downdeg = (float) Math.floor(downdeg / 15);
return true;
}
if (e.getAction() == MotionEvent.ACTION_MOVE) {
float dx = e.getX() - midx;
float dy = e.getY() - midy;
currdeg = (float) ((Math.atan2(dy, dx) * 180) / Math.PI);
currdeg -= 90;
if (currdeg < 0) {
currdeg += 360;
}
currdeg = (float) Math.floor(currdeg / 15);
if (currdeg == 0 && downdeg == 23) {
deg++;
if (deg > 21) {
deg = 21;
}
downdeg = currdeg;
} else if (currdeg == 23 && downdeg == 0) {
deg--;
if (deg < 3) {
deg = 3;
}
downdeg = currdeg;
} else {
deg += (currdeg - downdeg);
if (deg > 21) {
deg = 21;
}
if (deg < 3) {
deg = 3;
}
downdeg = currdeg;
}
angle = String.valueOf(deg);
invalidate();
return true;
}
return e.getAction() == MotionEvent.ACTION_UP || super.onTouchEvent(e);
}
public int getProgress() {
return (int) (deg - 2);
}
public void setProgress(int param) {
deg = param + 2;
}
public String getLabel() {
return label;
}
public void setLabel(String txt) {
label = txt;
}
public int getLineColor() {
return lineColor;
}
public void setLineColor(int lineColor) {
this.lineColor = lineColor;
}
public int getProgressColor() {
return progressColor;
}
public void setProgressColor(int progressColor) {
this.progressColor = progressColor;
}
}
package com.bullhead.equalizer;
import java.util.ArrayList;
interface AppToEqualizerInterface {
void onUpdateType(int position,String name);
void setTypeEffects(int seekbar);
void setOffEqualizer(boolean isCheck);
void setNameTypeEffects(String name);
void onUpdateMyType(int position, String name,int seekbar0,int seekbar1,int seekbar2,int seekbar3,int seekbar4);
}
package com.bullhead.equalizer;
import android.util.Log;
public class ButtonController {
public void onUpdateType(int position, String name)
{
EqualizerFragment fragment = new EqualizerFragment();
fragment.onUpdateType(position,name);
}
public void onUpdateMyType(int position, String name,int seekbar0,int seekbar1,int seekbar2,int seekbar3,int seekbar4)
{
EqualizerFragment fragment = new EqualizerFragment();
fragment.onUpdateMyType(position,name,seekbar0,seekbar1,seekbar2,seekbar3,seekbar4);
}
public void onSetTypeEffects(int seekbar)
{
EqualizerFragment fragment = new EqualizerFragment();
fragment.setTypeEffects(seekbar);
}
public void setOnOffEqualizer(boolean isCheck)
{
EqualizerFragment fragment = new EqualizerFragment();
fragment.setOffEqualizer(isCheck);
}
public void onUpdateNameTypeEffects(String name)
{
EqualizerFragment fragment = new EqualizerFragment();
fragment.setNameTypeEffects(name);
}
}
package com.bullhead.equalizer;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.media.audiofx.BassBoost;
import android.media.audiofx.Equalizer;
import android.media.audiofx.PresetReverb;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.SwitchCompat;
import androidx.fragment.app.DialogFragment;
import com.db.chart.model.LineSet;
import com.db.chart.view.AxisController;
import com.db.chart.view.ChartView;
import com.db.chart.view.LineChartView;
import java.util.ArrayList;
public class DialogEqualizerFragment extends DialogFragment {
public static final String ARG_AUDIO_SESSIOIN_ID = "audio_session_id";
private static final String TAG = DialogEqualizerFragment.class.getSimpleName();
private static int accentAlpha = Color.BLUE;
private static int darkBackground = Color.GRAY;
private static int textColor = Color.WHITE;
private static int themeColor = Color.parseColor("#B24242");
private static int backgroundColor = Color.WHITE;
private static int themeRes = 0;
private static String titleString = "";
private static int titleRes = 0;
private Equalizer mEqualizer;
private BassBoost bassBoost;
private PresetReverb presetReverb;
private LineSet dataset;
private LineChartView chart;
private float[] points;
private int y = 0;
private SeekBar[] seekBarFinal = new SeekBar[5];
private Spinner presetSpinner;
private Context ctx;
private int audioSesionId;
private TextView titleTextView;
private AnalogController bassController;
private AnalogController reverbController;
public DialogEqualizerFragment() {
// Required empty public constructor
}
private static DialogEqualizerFragment newInstance(int audioSessionId) {
Bundle args = new Bundle();
args.putInt(ARG_AUDIO_SESSIOIN_ID, audioSessionId);
DialogEqualizerFragment fragment = new DialogEqualizerFragment();
fragment.setArguments(args);
return fragment;
}
public static Builder newBuilder() {
return new Builder();
}
@Override
public int getTheme() {
if (themeRes != 0) return themeRes;
else return super.getTheme();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Settings.isEditing = true;
if (getArguments() != null && getArguments().containsKey(ARG_AUDIO_SESSIOIN_ID)) {
audioSesionId = getArguments().getInt(ARG_AUDIO_SESSIOIN_ID);
}
if (Settings.equalizerModel == null) {
Settings.equalizerModel = new EqualizerModel();
Settings.equalizerModel.setReverbPreset(PresetReverb.PRESET_NONE);
Settings.equalizerModel.setBassStrength((short) (1000 / 19));
}
mEqualizer = new Equalizer(0, audioSesionId);
bassBoost = new BassBoost(0, audioSesionId);
bassBoost.setEnabled(true);
BassBoost.Settings bassBoostSettingTemp = bassBoost.getProperties();
BassBoost.Settings bassBoostSetting = new BassBoost.Settings(bassBoostSettingTemp.toString());
bassBoostSetting.strength = Settings.equalizerModel.getBassStrength();
bassBoost.setProperties(bassBoostSetting);
presetReverb = new PresetReverb(0, audioSesionId);
presetReverb.setPreset(Settings.equalizerModel.getReverbPreset());
presetReverb.setEnabled(true);
mEqualizer.setEnabled(true);
if (Settings.presetPos == 0) {
for (short bandIdx = 0; bandIdx < mEqualizer.getNumberOfBands(); bandIdx++) {
mEqualizer.setBandLevel(bandIdx, (short) Settings.seekbarpos[bandIdx]);
}
} else {
mEqualizer.usePreset((short) Settings.presetPos);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
ctx = context;
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog_fragment_equalizer, container, false);
}
@SuppressLint("SetTextI18n")
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ImageView backBtn = view.findViewById(R.id.equalizer_back_btn);
backBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
backBtn.setColorFilter(textColor);
view.findViewById(R.id.equalizerLayout).setBackgroundColor(backgroundColor);
titleTextView = view.findViewById(R.id.equalizer_fragment_title);
titleTextView.setTextColor(textColor);
if (titleRes != 0) {
try {
titleTextView.setText(getString(titleRes));
} catch (Exception e) {
Log.e(TAG, "onViewCreated: unable to set title because " + e.getLocalizedMessage());
}
} else if (!TextUtils.isEmpty(titleString)) {
titleTextView.setText(titleString);
}
SwitchCompat equalizerSwitch = view.findViewById(R.id.equalizer_switch);
equalizerSwitch.setChecked(true);
equalizerSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mEqualizer.setEnabled(isChecked);
bassBoost.setEnabled(isChecked);
presetReverb.setEnabled(isChecked);
}
});
presetSpinner = view.findViewById(R.id.equalizer_preset_spinner);
presetSpinner.getBackground().setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP);
chart = view.findViewById(R.id.lineChart);
Paint paint = new Paint();
dataset = new LineSet();
bassController = view.findViewById(R.id.controllerBass);
reverbController = view.findViewById(R.id.controller3D);
bassController.setLabel("BASS");
reverbController.setLabel("3D");
bassController.circlePaint2.setColor(themeColor);
bassController.linePaint.setColor(themeColor);
bassController.invalidate();
reverbController.circlePaint2.setColor(themeColor);
reverbController.linePaint.setColor(themeColor);
reverbController.invalidate();
if (!Settings.isEqualizerReloaded) {
int x = 0;
if (bassBoost != null) {
try {
x = ((bassBoost.getRoundedStrength() * 19) / 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
if (presetReverb != null) {
try {
y = (presetReverb.getPreset() * 19) / 6;
} catch (Exception e) {
e.printStackTrace();
}
}
if (x == 0) {
bassController.setProgress(1);
} else {
bassController.setProgress(x);
}
if (y == 0) {
reverbController.setProgress(1);
} else {
reverbController.setProgress(y);
}
} else {
int x = ((Settings.bassStrength * 19) / 1000);
y = (Settings.reverbPreset * 19) / 6;
if (x == 0) {
bassController.setProgress(1);
} else {
bassController.setProgress(x);
}
if (y == 0) {
reverbController.setProgress(1);
} else {
reverbController.setProgress(y);
}
}
bassController.setOnProgressChangedListener(new AnalogController.onProgressChangedListener() {
@Override
public void onProgressChanged(int progress) {
Settings.bassStrength = (short) (((float) 1000 / 19) * (progress));
try {
bassBoost.setStrength(Settings.bassStrength);
Settings.equalizerModel.setBassStrength(Settings.bassStrength);
} catch (Exception e) {
e.printStackTrace();
}
}
});
reverbController.setOnProgressChangedListener(new AnalogController.onProgressChangedListener() {
@Override
public void onProgressChanged(int progress) {
Settings.reverbPreset = (short) ((progress * 6) / 19);
Settings.equalizerModel.setReverbPreset(Settings.reverbPreset);
try {
presetReverb.setPreset(Settings.reverbPreset);
} catch (Exception e) {
e.printStackTrace();
}
y = progress;
}
});
TextView equalizerHeading = new TextView(ctx);
equalizerHeading.setText(R.string.eq);
equalizerHeading.setTextSize(20);
equalizerHeading.setGravity(Gravity.CENTER_HORIZONTAL);
short numberOfFrequencyBands = 5;
points = new float[numberOfFrequencyBands];
final short lowerEqualizerBandLevel = mEqualizer.getBandLevelRange()[0];
final short upperEqualizerBandLevel = mEqualizer.getBandLevelRange()[1];
for (short i = 0; i < numberOfFrequencyBands; i++) {
final short equalizerBandIndex = i;
final TextView frequencyHeaderTextView = new TextView(ctx);
frequencyHeaderTextView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
frequencyHeaderTextView.setGravity(Gravity.CENTER_HORIZONTAL);
frequencyHeaderTextView.setTextColor(textColor);
frequencyHeaderTextView.setText((mEqualizer.getCenterFreq(equalizerBandIndex) / 1000) + "Hz");
LinearLayout seekBarRowLayout = new LinearLayout(ctx);
seekBarRowLayout.setOrientation(LinearLayout.VERTICAL);
TextView lowerEqualizerBandLevelTextView = new TextView(ctx);
lowerEqualizerBandLevelTextView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
lowerEqualizerBandLevelTextView.setTextColor(textColor);
lowerEqualizerBandLevelTextView.setText((lowerEqualizerBandLevel / 100) + "dB");
TextView upperEqualizerBandLevelTextView = new TextView(ctx);
lowerEqualizerBandLevelTextView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
upperEqualizerBandLevelTextView.setTextColor(textColor);
upperEqualizerBandLevelTextView.setText((upperEqualizerBandLevel / 100) + "dB");
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
layoutParams.weight = 1;
SeekBar seekBar = new SeekBar(ctx);
TextView textView = new TextView(ctx);
switch (i) {
case 0:
seekBar = view.findViewById(R.id.seekBar1);
textView = view.findViewById(R.id.textView1);
break;
case 1:
seekBar = view.findViewById(R.id.seekBar2);
textView = view.findViewById(R.id.textView2);
break;
case 2:
seekBar = view.findViewById(R.id.seekBar3);
textView = view.findViewById(R.id.textView3);
break;
case 3:
seekBar = view.findViewById(R.id.seekBar4);
textView = view.findViewById(R.id.textView4);
break;
case 4:
seekBar = view.findViewById(R.id.seekBar5);
textView = view.findViewById(R.id.textView5);
break;
}
seekBarFinal[i] = seekBar;
seekBar.getProgressDrawable().setColorFilter(new PorterDuffColorFilter(Color.DKGRAY, PorterDuff.Mode.SRC_IN));
seekBar.getThumb().setColorFilter(new PorterDuffColorFilter(themeColor, PorterDuff.Mode.SRC_IN));
seekBar.setId(i);
// seekBar.setLayoutParams(layoutParams);
seekBar.setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel);
textView.setText(frequencyHeaderTextView.getText());
textView.setTextColor(textColor);
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
if (Settings.isEqualizerReloaded) {
points[i] = Settings.seekbarpos[i] - lowerEqualizerBandLevel;
dataset.addPoint(frequencyHeaderTextView.getText().toString(), points[i]);
seekBar.setProgress(Settings.seekbarpos[i] - lowerEqualizerBandLevel);
} else {
points[i] = mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel;
dataset.addPoint(frequencyHeaderTextView.getText().toString(), points[i]);
seekBar.setProgress(mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel);
Settings.seekbarpos[i] = mEqualizer.getBandLevel(equalizerBandIndex);
Settings.isEqualizerReloaded = true;
}
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mEqualizer.setBandLevel(equalizerBandIndex, (short) (progress + lowerEqualizerBandLevel));
points[seekBar.getId()] = mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel;
Settings.seekbarpos[seekBar.getId()] = (progress + lowerEqualizerBandLevel);
Settings.equalizerModel.getSeekbarpos()[seekBar.getId()] = (progress + lowerEqualizerBandLevel);
dataset.updateValues(points);
chart.notifyDataUpdate();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
presetSpinner.setSelection(0);
Settings.presetPos = 0;
Settings.equalizerModel.setPresetPos(0);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
equalizeSound();
paint.setColor(textColor);
paint.setStrokeWidth((float) (1.10 * Settings.ratio));
dataset.setColor(themeColor);
dataset.setSmooth(true);
dataset.setThickness(5);
chart.setXAxis(false);
chart.setYAxis(false);
chart.setYLabels(AxisController.LabelPosition.NONE);
chart.setXLabels(AxisController.LabelPosition.NONE);
chart.setGrid(ChartView.GridType.NONE, 7, 10, paint);
chart.setAxisBorderValues(-300, 3300);
chart.addData(dataset);
chart.show();
Button mEndButton = new Button(ctx);
mEndButton.setBackgroundColor(themeColor);
mEndButton.setTextColor(textColor);
}
public TextView getTitleTextView() {
return titleTextView;
}
public AnalogController getBassController() {
return bassController;
}
public AnalogController getReverbController() {
return reverbController;
}
public void equalizeSound() {
ArrayList<String> equalizerPresetNames = new ArrayList<>();
ArrayAdapter<String> equalizerPresetSpinnerAdapter = new ArrayAdapter<>(ctx,
R.layout.spinner_item,
equalizerPresetNames);
equalizerPresetSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
equalizerPresetNames.add("Custom");
for (short i = 0; i < mEqualizer.getNumberOfPresets(); i++) {
equalizerPresetNames.add(mEqualizer.getPresetName(i));
}
presetSpinner.setAdapter(equalizerPresetSpinnerAdapter);
if (Settings.isEqualizerReloaded && Settings.presetPos != 0) {
presetSpinner.setSelection(Settings.presetPos);
}
presetSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
try {
if (position != 0) {
mEqualizer.usePreset((short) (position - 1));
Settings.presetPos = position;
short numberOfFreqBands = 5;
final short lowerEqualizerBandLevel = mEqualizer.getBandLevelRange()[0];
for (short i = 0; i < numberOfFreqBands; i++) {
seekBarFinal[i].setProgress(mEqualizer.getBandLevel(i) - lowerEqualizerBandLevel);
points[i] = mEqualizer.getBandLevel(i) - lowerEqualizerBandLevel;
Settings.seekbarpos[i] = mEqualizer.getBandLevel(i);
Settings.equalizerModel.getSeekbarpos()[i] = mEqualizer.getBandLevel(i);
}
dataset.updateValues(points);
chart.notifyDataUpdate();
}
} catch (UnsupportedOperationException e) {
Toast.makeText(ctx, "Error while updating Equalizer", Toast.LENGTH_SHORT).show();
}
Settings.equalizerModel.setPresetPos(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
@Override
public void onDestroy() {
super.onDestroy();
if (mEqualizer != null) {
mEqualizer.release();
}
if (bassBoost != null) {
bassBoost.release();
}
if (presetReverb != null) {
presetReverb.release();
}
Settings.isEditing = false;
}
public static class Builder {
private int id = -1;
public Builder setThemeRes(int res) {
themeRes = res;
return this;
}
public Builder setAudioSessionId(int id) {
this.id = id;
return this;
}
public Builder setAccentColor(int color) {
themeColor = color;
return this;
}
public Builder themeColor(int color) {
backgroundColor = color;
return this;
}
public Builder textColor(int color) {
textColor = color;
return this;
}
public Builder darkColor(int color) {
darkBackground = color;
return this;
}
public Builder accentAlpha(int color) {
accentAlpha = color;
return this;
}
public Builder title(@StringRes int title) {
titleRes = title;
return this;
}
public Builder title(@NonNull String title) {
titleString = title;
return this;
}
public DialogEqualizerFragment build() {
return DialogEqualizerFragment.newInstance(id);
}
}
}
package com.bullhead.equalizer;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.media.audiofx.BassBoost;
import android.media.audiofx.Equalizer;
import android.media.audiofx.PresetReverb;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.fragment.app.Fragment;
import com.db.chart.model.LineSet;
import com.google.firebase.analytics.FirebaseAnalytics;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* A simple {@link Fragment} subclass.
*/
public class EqualizerFragment extends Fragment implements AppToEqualizerInterface {
public static final String ARG_AUDIO_SESSIOIN_ID = "audio_session_id";
static int themeColor = Color.parseColor("#08E0FF");
public static Equalizer mEqualizer;
SwitchCompat equalizerSwitch;
public static BassBoost bassBoost;
// LineChartView chart;
public static PresetReverb presetReverb;
short lowerEqualizerBandLevel = 0;
short upperEqualizerBandLevel = 0 ;
int y = 0;
int seekBarValue = 0;
int spinner = 0;
ImageView spinnerDropDownIcon;
LinearLayout mLinearLayout;
public static SeekBar[] seekBarFinal = new SeekBar[5];
public static AnalogController bassController, reverbController;
Spinner presetSpinner;
Context ctx;
public EqualizerFragment() {
// Required empty public constructor
}
public static LineSet dataset;
Paint paint;
public static float[] points;
short numberOfFrequencyBands;
private int audioSesionId;
static boolean showBackButton = true;
private Vibrator vibrator;
private GestureDetector gestureDetector;
Button mSave;
private static ImageView mOff;
private static ImageView mOn;
RelativeLayout mRlType;
public static ArrayList<String> mListType;
public static TextView mTxtName;
public static String nameTypeEffects = "Normal";
public TextView mTxt1;
public TextView mTxt2;
public TextView mTxt3;
public TextView mTxt4;
public TextView mTxt5;
private FirebaseAnalytics mFirebaseAnalytics = null;
LinearLayout equalizerContainer;
SharePreferenceUtilEqualizer sharePreferenceUtilEqualizer;
public static EqualizerFragment newInstance(int audioSessionId) {
Bundle args = new Bundle();
args.putInt(ARG_AUDIO_SESSIOIN_ID, audioSessionId);
EqualizerFragment fragment = new EqualizerFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onResume() {
super.onResume();
// sharePreferenceUtilEqualizer = new SharePreferenceUtilEqualizer(requireActivity());
// if (!sharePreferenceUtilEqualizer.getBoolean("ControllerEffect", false)) {
// mRlType.setEnabled(false);
// mTxtName.setTextColor(Color.parseColor("#FF8E8E8E"));
// } else {
// mRlType.setEnabled(true);
// mTxtName.setTextColor(Color.parseColor("#FFFFFF"));
// }
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Khởi tạo Firebase Analytics
mFirebaseAnalytics = FirebaseAnalytics.getInstance(requireContext());
Settings.isEditing = true;
if (getArguments() != null && getArguments().containsKey(ARG_AUDIO_SESSIOIN_ID)) {
audioSesionId = getArguments().getInt(ARG_AUDIO_SESSIOIN_ID);
}
if (Settings.equalizerModel == null) {
Settings.equalizerModel = new EqualizerModel();
Settings.equalizerModel.setReverbPreset(PresetReverb.PRESET_NONE);
Settings.equalizerModel.setBassStrength((short) (1000 / 19));
}
try {
mEqualizer = new Equalizer(0, audioSesionId);
bassBoost = new BassBoost(0, audioSesionId);
bassBoost.setEnabled(Settings.isEqualizerEnabled);
/*BassBoost.Settings bassBoostSettingTemp = bassBoost.getProperties();
BassBoost.Settings bassBoostSetting = new BassBoost.Settings(bassBoostSettingTemp.toString());
bassBoostSetting.strength = Settings.equalizerModel.getBassStrength();
bassBoost.setProperties(bassBoostSetting);*/
bassBoost.setStrength(Settings.equalizerModel.getBassStrength());
presetReverb = new PresetReverb(0, audioSesionId);
presetReverb.setPreset(Settings.equalizerModel.getReverbPreset());
try {
if (presetReverb != null){
presetReverb.setEnabled(Settings.isEqualizerEnabled);
}
}catch (Exception ex){
Log.d("nnn", "onClick: "+ex.toString());
}
mEqualizer.setEnabled(Settings.isEqualizerEnabled);
if (Settings.presetPos == 0) {
for (short bandIdx = 0; bandIdx < mEqualizer.getNumberOfBands(); bandIdx++) {
mEqualizer.setBandLevel(bandIdx, (short) Settings.seekbarpos[bandIdx]);
}
} else {
mEqualizer.usePreset((short) Settings.presetPos);
}
}catch (UnsupportedOperationException uoe){
Toast.makeText(ctx, "Error while initializing Equalizer", Toast.LENGTH_SHORT).show();
}
catch (RuntimeException ex){
Toast.makeText(ctx, "Error while initializing Equalizer", Toast.LENGTH_SHORT).show();
}
vibrator = (Vibrator) requireActivity().getSystemService(Context.VIBRATOR_SERVICE);
setUpViewModel();
}
// private void loadAdInterstitial() {
// if (!FirebaseRemoteConfig.getInstance().getBoolean(Constants.inter_category)) {
// return;
// }
// mInterstitialAd = AperoAd.getInstance().getInterstitialAds(requireContext(), BuildConfig.inter_category);
// }
private void setUpViewModel() {
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
ctx = context;
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_equalizer, container, false);
}
@SuppressLint("SetTextI18n")
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mSave = view.findViewById(R.id.mSave);
mOff = view.findViewById(R.id.mOff);
mOn = view.findViewById(R.id.mOn);
mRlType = view.findViewById(R.id.mRlType);
mTxtName = view.findViewById(R.id.mTxtName);
equalizerContainer = view.findViewById(R.id.equalizerContainer);
mTxt1 = view.findViewById(R.id.mTxt1);
mTxt2 = view.findViewById(R.id.mTxt2);
mTxt3 = view.findViewById(R.id.mTxt3);
mTxt4 = view.findViewById(R.id.mTxt4);
mTxt5 = view.findViewById(R.id.mTxt5);
mOff.setOnClickListener(new View.OnClickListener() {
@SuppressLint("UseCompatLoadingForDrawables")
@Override
public void onClick(View view) {
tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_turn_on_click","Bật adjust","turn_on");
mOff.setVisibility(View.GONE);
mOn.setVisibility(View.VISIBLE);
mEqualizer.setEnabled(true);
for (SeekBar seekBar : seekBarFinal) {
seekBar.setEnabled(true);
}
bassController.setShouldHandleTouch(true);
reverbController.setShouldHandleTouch(true);
bassBoost.setEnabled(true);
try {
if (presetReverb != null){
presetReverb.setEnabled(true);
}
}catch (Exception ex){
Log.d("nnn", "onClick: "+ex.toString());
}
}
});
mOn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_turn_off_click","Tắt adjust","turn_off");
Toast.makeText(requireContext(),"Adjusting the bands is disabled.",Toast.LENGTH_LONG).show();
mOff.setVisibility(View.VISIBLE);
mOn.setVisibility(View.GONE);
mEqualizer.setEnabled(false);
for (SeekBar seekBar : seekBarFinal) {
seekBar.setEnabled(false);
}
bassController.setShouldHandleTouch(false);
reverbController.setShouldHandleTouch(false);
bassBoost.setEnabled(false);
try {
if (presetReverb != null){
presetReverb.setEnabled(false);
}
}catch (Exception ex){
Log.d("nnn", "onClick: "+ex.toString());
}
}
});
equalizerContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (bassBoost != null){
if (!bassBoost.getEnabled()){
Toast.makeText(requireContext(),"Adjusting the bands is disabled.",Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(requireContext(),"Bass boost not initialized",Toast.LENGTH_LONG).show();
}
}
});
mSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_equalizer_save_click","User click vào Save","equalizer_save");
// Gọi phương thức trong module app để mở activity
((EqualizerToAppListener) Objects.requireNonNull(getActivity())).onOpenActivitySave();
}
});
mRlType.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sharePreferenceUtilEqualizer = new SharePreferenceUtilEqualizer(requireActivity());
if (!sharePreferenceUtilEqualizer.getBoolean("ControllerEffect", false)) {
Toast.makeText(requireContext(),"Adjusting the bands is disabled.",Toast.LENGTH_LONG).show();
} else {
((EqualizerToAppListener) Objects.requireNonNull(getActivity())).onOpenActivityEffects(mListType);
}
}
});
spinnerDropDownIcon = view.findViewById(R.id.spinner_dropdown_icon);
spinnerDropDownIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
presetSpinner.performClick();
}
});
presetSpinner = view.findViewById(R.id.equalizer_preset_spinner);
// chart = view.findViewById(R.id.lineChart);
paint = new Paint();
dataset = new LineSet();
bassController = view.findViewById(R.id.controllerBass);
reverbController = view.findViewById(R.id.controller3D);
bassController.setLabel(getResources().getString(R.string.bass));
reverbController.setLabel(getResources().getString(R.string.stereo));
bassController.circlePaint2.setColor(getResources().getColor(R.color.color_circlePaint));
bassController.linePaint.setColor(getResources().getColor(R.color.color_linePaint));
bassController.invalidate();
reverbController.circlePaint2.setColor(getResources().getColor(R.color.color_circlePaint));
bassController.linePaint.setColor(getResources().getColor(R.color.color_linePaint));
reverbController.invalidate();
if (!Settings.isEqualizerReloaded) {
int x = 0;
if (bassBoost != null) {
try {
x = ((bassBoost.getRoundedStrength() * 19) / 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
if (presetReverb != null) {
try {
y = (presetReverb.getPreset() * 19) / 6;
} catch (Exception e) {
e.printStackTrace();
}
}
if (x == 0) {
bassController.setProgress(1);
} else {
bassController.setProgress(x);
}
if (y == 0) {
reverbController.setProgress(1);
} else {
reverbController.setProgress(y);
}
} else {
int x = ((Settings.bassStrength * 19) / 1000);
y = (Settings.reverbPreset * 19) / 6;
if (x == 0) {
bassController.setProgress(1);
} else {
bassController.setProgress(x);
}
if (y == 0) {
reverbController.setProgress(1);
} else {
reverbController.setProgress(y);
}
}
bassController.setOnProgressChangedListener(new AnalogController.onProgressChangedListener() {
@SuppressLint("MissingPermission")
@Override
public void onProgressChanged(int progress) {
tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_equalizer_bass_boost_click","User điều chỉnh Bass","boost_click");
Settings.bassStrength = (short) (((float) 1000 / 19) * (progress));
try {
bassBoost.setStrength(Settings.bassStrength);
Settings.equalizerModel.setBassStrength(Settings.bassStrength);
vibrator.vibrate(100);
} catch (Exception e) {
e.printStackTrace();
}
}
});
reverbController.setOnProgressChangedListener(new AnalogController.onProgressChangedListener() {
@SuppressLint("MissingPermission")
@Override
public void onProgressChanged(int progress) {
tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_equalizer_bass_stereo_click","User điều chỉnh Stereo","stereo_click");
Settings.reverbPreset = (short) ((progress * 6) / 19);
try {
presetReverb.setPreset(Settings.reverbPreset);
Settings.equalizerModel.setReverbPreset(Settings.reverbPreset);
vibrator.vibrate(30);
} catch (Exception e) {
e.printStackTrace();
}
y = progress;
}
});
mLinearLayout = view.findViewById(R.id.equalizerContainer);
TextView equalizerHeading = new TextView(getContext());
equalizerHeading.setText(R.string.eq);
equalizerHeading.setTextSize(20);
equalizerHeading.setGravity(Gravity.CENTER_HORIZONTAL);
numberOfFrequencyBands = 5;
points = new float[numberOfFrequencyBands];
try {
lowerEqualizerBandLevel = mEqualizer.getBandLevelRange()[0];
upperEqualizerBandLevel = mEqualizer.getBandLevelRange()[1];
}catch (Exception e){
//Toast.makeText(ctx, e.getMessage(), Toast.LENGTH_LONG).show();
}
for (short i = 0; i < numberOfFrequencyBands; i++) {
final short equalizerBandIndex = i;
final TextView frequencyHeaderTextView = new TextView(getContext());
frequencyHeaderTextView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
frequencyHeaderTextView.setGravity(Gravity.CENTER_HORIZONTAL);
frequencyHeaderTextView.setTextColor(Color.parseColor("#FFFFFF"));
try{
frequencyHeaderTextView.setText((mEqualizer.getCenterFreq(equalizerBandIndex) / 1000) + "Hz");
}catch (Exception e){
}
LinearLayout seekBarRowLayout = new LinearLayout(getContext());
seekBarRowLayout.setOrientation(LinearLayout.VERTICAL);
TextView lowerEqualizerBandLevelTextView = new TextView(getContext());
lowerEqualizerBandLevelTextView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
lowerEqualizerBandLevelTextView.setTextColor(Color.parseColor("#FFFFFF"));
lowerEqualizerBandLevelTextView.setText((lowerEqualizerBandLevel / 100) + "dB");
TextView upperEqualizerBandLevelTextView = new TextView(getContext());
lowerEqualizerBandLevelTextView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
upperEqualizerBandLevelTextView.setTextColor(Color.parseColor("#FFFFFF"));
upperEqualizerBandLevelTextView.setText((upperEqualizerBandLevel / 100) + "dB");
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
layoutParams.weight = 1;
SeekBar seekBar = new SeekBar(getContext());
TextView textView = new TextView(getContext());
switch (i) {
case 0:
seekBar = view.findViewById(R.id.seekBar1);
textView = view.findViewById(R.id.textView1);
break;
case 1:
seekBar = view.findViewById(R.id.seekBar2);
textView = view.findViewById(R.id.textView2);
break;
case 2:
seekBar = view.findViewById(R.id.seekBar3);
textView = view.findViewById(R.id.textView3);
break;
case 3:
seekBar = view.findViewById(R.id.seekBar4);
textView = view.findViewById(R.id.textView4);
break;
case 4:
seekBar = view.findViewById(R.id.seekBar5);
textView = view.findViewById(R.id.textView5);
break;
}
seekBarFinal[i] = seekBar;
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChangedValue = 0;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.d("qqq", "onProgressChanged: " + "ok");
progressChangedValue = progress;
}
public void onStartTrackingTouch(SeekBar seekBar) {
Log.d("qqq", "onStartTrackingTouch: " + "ok");
}
public void onStopTrackingTouch(SeekBar seekBar) {
Log.d("qqq", "onStopTrackingTouch: " + "ok");
}
});
// seekBar.getProgressDrawable().setColorFilter(Color.parseColor(""), PorterDuff.Mode.LIGHTEN);
// seekBar.getThumb().setColorFilter(new PorterDuffColorFilter(Color.parseColor("#E83565"), PorterDuff.Mode.SRC_IN));
seekBar.setId(i);
// seekBar.setLayoutParams(layoutParams);
seekBar.setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel);
textView.setText(frequencyHeaderTextView.getText());
textView.setTextColor(Color.WHITE);
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
if (Settings.isEqualizerReloaded) {
points[i] = Settings.seekbarpos[i] - lowerEqualizerBandLevel;
dataset.addPoint(frequencyHeaderTextView.getText().toString(), points[i]);
seekBar.setProgress(Settings.seekbarpos[i] - lowerEqualizerBandLevel);
} else {
points[i] = mEqualizer != null?(mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel):0;
dataset.addPoint(frequencyHeaderTextView.getText().toString(), points[i]);
seekBar.setProgress(mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel);
Settings.seekbarpos[i] = mEqualizer.getBandLevel(equalizerBandIndex);
Settings.isEqualizerReloaded = true;
}
switch (equalizerBandIndex){
case 0: {
mTxt1.setText((seekBar.getProgress()/30)+"");
break;
}
case 1: {
mTxt2.setText((seekBar.getProgress()/30)+"");
break;
}
case 2: {
mTxt3.setText((seekBar.getProgress()/30)+"");
break;
}
case 3: {
mTxt4.setText((seekBar.getProgress()/30)+"");
break;
}
case 4: {
mTxt5.setText((seekBar.getProgress()/30)+"");
break;
}
}
seekBar.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if(bassBoost != null) {
if (!bassBoost.getEnabled()){
Toast.makeText(requireContext(),"Adjusting the bands is disabled.",Toast.LENGTH_LONG).show();
return true;
}
}else {
Toast.makeText(requireContext(),"Bass boost not initialized.",Toast.LENGTH_LONG).show();
}
}
return false;
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
try {
mEqualizer.setBandLevel(equalizerBandIndex, (short) (progress + lowerEqualizerBandLevel));
points[seekBar.getId()] = mEqualizer.getBandLevel(equalizerBandIndex) - lowerEqualizerBandLevel;
Settings.seekbarpos[seekBar.getId()] = (progress + lowerEqualizerBandLevel);
Settings.equalizerModel.getSeekbarpos()[seekBar.getId()] = (progress + lowerEqualizerBandLevel);
dataset.updateValues(points);
seekBarValue = progress + lowerEqualizerBandLevel;
}catch (Exception ex){
Log.d("nnn", "onProgressChanged: "+ex.toString());
}
SharedPreferences sharedPreferences = Objects.requireNonNull(getContext()).getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("seekBarValue", seekBarValue);
editor.apply();
mTxtName.setText("Custome");
nameTypeEffects = "Custome";
tracKingFirebaseAnalytics(mFirebaseAnalytics,"home_equalizer_frequency_click","User điều chỉnh tần số","frequency_click");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
presetSpinner.setSelection(0);
Settings.presetPos = 0;
Settings.equalizerModel.setPresetPos(0);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
equalizeSound();
paint.setColor(Color.parseColor("#555555"));
paint.setStrokeWidth((float) (1.10 * Settings.ratio));
dataset.setColor(themeColor);
dataset.setSmooth(true);
dataset.setThickness(5);
// chart.setXAxis(false);
// chart.setYAxis(false);
// chart.setYLabels(AxisController.LabelPosition.NONE);
// chart.setXLabels(AxisController.LabelPosition.NONE);
// chart.setGrid(ChartView.GridType.NONE, 7, 10, paint);
// chart.setAxisBorderValues(-300, 3300);
// chart.addData(dataset);
// chart.show();
Button mEndButton = new Button(getContext());
mEndButton.setBackgroundColor(themeColor);
mEndButton.setTextColor(Color.WHITE);
}
public void equalizeSound() {
ArrayList<String> equalizerPresetNames = new ArrayList<>();
ArrayAdapter<String> equalizerPresetSpinnerAdapter = new ArrayAdapter<>(ctx,
R.layout.spinner_item,
equalizerPresetNames);
equalizerPresetSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
if (mEqualizer != null){
for (short i = 0; i < mEqualizer.getNumberOfPresets(); i++) {
equalizerPresetNames.add(mEqualizer.getPresetName(i));
}
mListType = equalizerPresetNames;
}
presetSpinner.setAdapter(equalizerPresetSpinnerAdapter);
//presetSpinner.setDropDownWidth((Settings.screen_width * 3) / 4);
if (Settings.isEqualizerReloaded && Settings.presetPos != 0) {
// correctPosition = false;
presetSpinner.setSelection(Settings.presetPos);
}
presetSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
updateEqualizer(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public void updateEqualizer(int position) {
if (position > 0) {
try {
mEqualizer.usePreset((short) (position - 1));
} catch (UnsupportedOperationException uoe){
Log.e("111111", uoe.getMessage());
//Toast.makeText(ctx, "Error while updating Equalizer", Toast.LENGTH_SHORT).show();
}
Settings.presetPos = position;
short numberOfFreqBands = 5;
final short lowerEqualizerBandLevel = (mEqualizer != null)? mEqualizer.getBandLevelRange()[0] : 0;
for (short i = 0; i < numberOfFreqBands; i++) {
seekBarFinal[i].setProgress((mEqualizer != null)? mEqualizer.getBandLevel(i) - lowerEqualizerBandLevel : 0);
points[i] = mEqualizer.getBandLevel(i) - lowerEqualizerBandLevel;
Settings.seekbarpos[i] = (mEqualizer != null)? mEqualizer.getBandLevel(i) : 0;
Settings.equalizerModel.getSeekbarpos()[i] = (mEqualizer != null)? mEqualizer.getBandLevel(i) : 0;
}
dataset.updateValues(points);
// chart.notifyDataUpdate();
}
Settings.equalizerModel.setPresetPos(position);
}
public void setEqualizer(int seekBar) {
seekBarFinal[0].setProgress(seekBar);
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
@Override
public void onDestroy() {
super.onDestroy();
if (mEqualizer != null) {
mEqualizer.release();
}
if (bassBoost != null) {
bassBoost.release();
}
if (presetReverb != null) {
presetReverb.release();
}
Settings.isEditing = false;
}
public static Builder newBuilder() {
return new Builder();
}
@Override
public void onUpdateMyType(int position, String name,int seekbar0, int seekbar1, int seekbar2, int seekbar3, int seekbar4) {
try {
seekBarFinal[0].setProgress(seekbar0-mEqualizer.getBandLevelRange()[0]);
seekBarFinal[1].setProgress(seekbar1-mEqualizer.getBandLevelRange()[0]);
seekBarFinal[2].setProgress(seekbar2-mEqualizer.getBandLevelRange()[0]);
seekBarFinal[3].setProgress(seekbar3-mEqualizer.getBandLevelRange()[0]);
seekBarFinal[4].setProgress(seekbar4-mEqualizer.getBandLevelRange()[0]);
nameTypeEffects = name;
mTxtName.setText(name);
}catch (Exception ex){
Log.d("nnn", "onUpdateMyType: "+ex.toString());
}
}
@Override
public void onUpdateType(int position, String name) {
Log.d("qqq", "onUpdateType: " + position);
updateEqualizer(position);
nameTypeEffects = name;
mTxtName.setText(name);
}
@Override
public void setTypeEffects(int seekbar) {
setEqualizer(seekbar);
}
@Override
public void setOffEqualizer(boolean isCheck) {
if (bassBoost != null){
if (bassBoost.getEnabled()) {
mOff.setVisibility(View.VISIBLE);
mOn.setVisibility(View.GONE);
mEqualizer.setEnabled(false);
for (SeekBar seekBar : seekBarFinal) {
seekBar.setEnabled(false);
}
bassController.setShouldHandleTouch(false);
reverbController.setShouldHandleTouch(false);
bassBoost.setEnabled(false);
try {
if (presetReverb != null){
presetReverb.setEnabled(false);
}
}catch (Exception ex){
Log.d("nnn", "onClick: "+ex.toString());
}
} else {
mOff.setVisibility(View.GONE);
mOn.setVisibility(View.VISIBLE);
mEqualizer.setEnabled(true);
for (SeekBar seekBar : seekBarFinal) {
seekBar.setEnabled(true);
}
bassController.setShouldHandleTouch(true);
reverbController.setShouldHandleTouch(true);
bassBoost.setEnabled(true);
try {
if (presetReverb != null){
presetReverb.setEnabled(true);
}
}catch (Exception ex){
Log.d("nnn", "onClick: "+ex.toString());
}
}
}
}
@Override
public void setNameTypeEffects(String name) {
mTxtName.setText(name);
EqualizerFragment.nameTypeEffects = name;
}
public static class Builder {
private int id = -1;
public Builder setAudioSessionId(int id) {
this.id = id;
return this;
}
public Builder setAccentColor(int color) {
themeColor = color;
return this;
}
public Builder setShowBackButton(boolean show) {
showBackButton = show;
return this;
}
public EqualizerFragment build() {
return EqualizerFragment.newInstance(id);
}
}
public static Drawable setTint(Drawable d, int color) {
Drawable wrappedDrawable = DrawableCompat.wrap(d);
DrawableCompat.setTint(wrappedDrawable, color);
return wrappedDrawable;
}
public Boolean checkOnOffSave() {
List<Integer> progressList = new ArrayList<>();
for (SeekBar seek : seekBarFinal) {
int progress = seek.getProgress();
progressList.add(progress);
}
final short lowerEqualizerBandLevel = mEqualizer.getBandLevelRange()[0];
List<Integer> valueList = new ArrayList<>();
for (int j = 0; j < 5; j++) {
valueList.add(mEqualizer.getBandLevel((short) j) - lowerEqualizerBandLevel);
}
if (!progressList.equals(valueList)) {
return true;
} else {
return false;
}
}
public void tracKingFirebaseAnalytics(FirebaseAnalytics mFirebaseAnalytics,String event_name,String content,String name){
Bundle params = new Bundle();
params.putString(event_name, content);
mFirebaseAnalytics.logEvent(name, params);
}
}
package com.bullhead.equalizer;
import java.io.Serializable;
/**
* Created by Harjot on 09-Dec-16.
*/
public class EqualizerModel implements Serializable {
private boolean isEqualizerEnabled;
private int[] seekbarpos = new int[5];
private int presetPos;
private short reverbPreset;
private short bassStrength;
public EqualizerModel() {
isEqualizerEnabled = true;
reverbPreset = -1;
bassStrength = -1;
}
public boolean isEqualizerEnabled() {
return isEqualizerEnabled;
}
public void setEqualizerEnabled(boolean equalizerEnabled) {
isEqualizerEnabled = equalizerEnabled;
}
public int[] getSeekbarpos() {
return seekbarpos;
}
public void setSeekbarpos(int[] seekbarpos) {
this.seekbarpos = seekbarpos;
}
public int getPresetPos() {
return presetPos;
}
public void setPresetPos(int presetPos) {
this.presetPos = presetPos;
}
public short getReverbPreset() {
return reverbPreset;
}
public void setReverbPreset(short reverbPreset) {
this.reverbPreset = reverbPreset;
}
public short getBassStrength() {
return bassStrength;
}
public void setBassStrength(short bassStrength) {
this.bassStrength = bassStrength;
}
}
package com.bullhead.equalizer;
import java.util.ArrayList;
public interface EqualizerToAppListener {
void onOpenActivitySave();
void onOpenActivityEffects(ArrayList<String> list);
}
package com.bullhead.equalizer;
public class Settings {
public static boolean isEqualizerEnabled = true;
public static boolean isEqualizerReloaded = true;
public static int[] seekbarpos = new int[5];
public static int presetPos;
public static short reverbPreset = 0;
public static short bassStrength = -1;
public static EqualizerModel equalizerModel;
public static double ratio = 1.0;
public static boolean isEditing = false;
}
package com.bullhead.equalizer;
import android.content.Context;
import android.content.SharedPreferences;
public class SharePreferenceUtilEqualizer {
public static final String PREFERENCE_NAME = "PREFERENCE_DATA";
private final SharedPreferences sharedpreferences;
private SharedPreferences.Editor editor;
public SharePreferenceUtilEqualizer(Context context) {
sharedpreferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
editor = sharedpreferences.edit();
}
public void saveBoolean(String key, boolean value) {
editor.putBoolean(key, value);
editor.apply();
}
public boolean getBoolean(String key, boolean defaultvalue) {
defaultvalue = true;
return sharedpreferences.getBoolean(key, defaultvalue);
}
}
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@android:id/background"
android:drawable="@drawable/background_fill">
</item>
<item android:id="@android:id/progress">
<clip android:drawable="@drawable/progress_fill" />
</item>
</layer-list>
\ No newline at end of file
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<corners android:radius="4dp" />
<solid android:color="#C6C0C0" /> <!-- Màu nền khi bình thường -->
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape android:shape="rectangle">
<corners android:radius="4dp" />
<solid android:color="#C6C0C0" /> <!-- Màu khi tối màu và hoạt động -->
</shape>
</clip>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="oval">
<solid android:color="@android:color/transparent"/>
<size android:width="50dp" android:height="50dp"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/white"/>
<stroke android:color="@android:color/transparent" android:width="28dp"/>
<size android:width="14dp" android:height="14dp"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="#E83565"/>
<stroke android:color="@android:color/transparent" android:width="35dp"/>
<size android:width="10dp" android:height="10dp"/>
</shape>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="#454545" />
</shape>
</item>
<item>
<shape>
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<corners android:radius="20dp" />
<solid android:color="#626262" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape
android:shape="rectangle" >
<size android:height="5dp"/>
<corners
android:radius="12dp" />
<gradient
android:startColor="#E83565"
android:endColor="#08E0FF"
/>
</shape>
</clip>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- <solid android:color="@color/red" />-->
<!--<solid android:color="#FFA036" />-->
<size
android:width="16dp"
android:height="16dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#434343" />
<corners android:radius="24dp" />
</shape>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
<path
android:pathData="M2.954,5.675C3.133,5.465 3.449,5.441 3.659,5.62L8,9.341L12.341,5.62C12.551,5.441 12.867,5.465 13.046,5.675C13.226,5.884 13.202,6.2 12.992,6.38L8.325,10.38C8.138,10.54 7.862,10.54 7.675,10.38L3.008,6.38C2.798,6.2 2.774,5.884 2.954,5.675Z"
android:fillColor="#E1E1E1"
android:fillType="evenOdd"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z" />
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="26dp"
android:viewportWidth="26"
android:viewportHeight="26">
<path
android:pathData="M13,11m-5,0a5,5 0,1 1,10 0a5,5 0,1 1,-10 0"
android:fillColor="#E83565"/>
<path
android:pathData="M13,11m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M10.694,18.168C13.299,17.646 16.667,15.772 16.667,10.926C16.667,6.516 13.439,3.58 11.118,2.231C10.603,1.931 10,2.325 10,2.921V4.444C10,5.646 9.495,7.839 8.091,8.751C7.374,9.217 6.6,8.52 6.513,7.67L6.442,6.972C6.359,6.16 5.532,5.667 4.883,6.162C3.718,7.051 2.5,8.608 2.5,10.926C2.5,16.852 6.907,18.333 9.111,18.333C9.239,18.333 9.374,18.33 9.514,18.322C8.426,18.229 6.667,17.553 6.667,15.37C6.667,13.662 7.913,12.507 8.859,11.946C9.114,11.794 9.412,11.991 9.412,12.287V12.778C9.412,13.153 9.557,13.741 9.903,14.143C10.295,14.598 10.869,14.121 10.915,13.523C10.93,13.334 11.12,13.214 11.283,13.309C11.818,13.622 12.5,14.289 12.5,15.37C12.5,17.077 11.559,17.862 10.694,18.168Z"
android:fillColor="#ffffff"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#ffffff"
android:fillAlpha="0.15"/>
<path
android:pathData="M18,9.667V13"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#9F9F9F"
android:strokeLineCap="round"/>
<path
android:pathData="M18.625,10.292C18.625,9.946 18.345,9.667 18,9.667C17.655,9.667 17.375,9.946 17.375,10.292V13.625C17.375,13.97 17.655,14.25 18,14.25C18.345,14.25 18.625,13.97 18.625,13.625V10.292Z"
android:fillColor="#9F9F9F"/>
<path
android:pathData="M15.327,12.289C15.644,12.155 15.793,11.788 15.659,11.47C15.525,11.152 15.158,11.003 14.84,11.138C11.924,12.37 9.875,15.257 9.875,18.625C9.875,23.112 13.513,26.75 18,26.75C22.487,26.75 26.125,23.112 26.125,18.625C26.125,15.257 24.076,12.37 21.16,11.138C20.842,11.003 20.475,11.152 20.341,11.47C20.207,11.788 20.355,12.155 20.673,12.289C23.143,13.333 24.875,15.777 24.875,18.625C24.875,22.422 21.797,25.5 18,25.5C14.203,25.5 11.125,22.422 11.125,18.625C11.125,15.777 12.856,13.333 15.327,12.289Z"
android:fillColor="#9F9F9F"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000"
android:strokeColor="#9F9F9F"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#ffffff"
android:fillAlpha="0.15"/>
<path
android:pathData="M18,9.667V13"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#08E0FF"
android:strokeLineCap="round"/>
<path
android:pathData="M18.625,10.292C18.625,9.946 18.345,9.667 18,9.667C17.655,9.667 17.375,9.946 17.375,10.292V13.625C17.375,13.97 17.655,14.25 18,14.25C18.345,14.25 18.625,13.97 18.625,13.625V10.292Z"
android:fillColor="#08E0FF"/>
<path
android:pathData="M15.327,12.289C15.644,12.155 15.793,11.788 15.659,11.47C15.525,11.152 15.158,11.003 14.84,11.138C11.924,12.37 9.875,15.257 9.875,18.625C9.875,23.112 13.513,26.75 18,26.75C22.487,26.75 26.125,23.112 26.125,18.625C26.125,15.257 24.076,12.37 21.16,11.138C20.842,11.003 20.475,11.152 20.341,11.47C20.207,11.788 20.355,12.155 20.673,12.289C23.143,13.333 24.875,15.777 24.875,18.625C24.875,22.422 21.797,25.5 18,25.5C14.203,25.5 11.125,22.422 11.125,18.625C11.125,15.777 12.856,13.333 15.327,12.289Z"
android:fillColor="#08E0FF"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000"
android:strokeColor="#9F9F9F"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillAlpha="0.25">
<aapt:attr name="android:fillColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#FFCAC8C8"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.878" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M25.113,25.113C26.333,23.892 26.333,21.928 26.333,18C26.333,17.715 26.333,17.573 26.321,17.428C26.262,16.754 25.988,16.094 25.553,15.575C25.46,15.464 25.357,15.361 25.15,15.155L20.845,10.849C20.639,10.643 20.536,10.54 20.425,10.447C19.906,10.012 19.246,9.738 18.572,9.679C18.427,9.667 18.285,9.667 18,9.667C14.072,9.667 12.107,9.667 10.887,10.887C9.667,12.107 9.667,14.072 9.667,18C9.667,21.928 9.667,23.892 10.887,25.113C11.457,25.683 12.189,25.987 13.208,26.149L13.208,25.457C13.208,24.708 13.208,24.084 13.275,23.588C13.345,23.065 13.5,22.592 13.88,22.213C14.259,21.833 14.731,21.679 15.255,21.608C15.75,21.542 16.375,21.542 17.123,21.542H18.877C19.625,21.542 20.25,21.542 20.745,21.608C21.269,21.679 21.741,21.833 22.12,22.213C22.5,22.592 22.655,23.065 22.725,23.588C22.792,24.084 22.792,24.708 22.792,25.457L22.792,26.149C23.811,25.987 24.543,25.683 25.113,25.113ZM13.208,14.667C13.208,14.321 13.488,14.042 13.833,14.042H18.833C19.178,14.042 19.458,14.321 19.458,14.667C19.458,15.012 19.178,15.292 18.833,15.292H13.833C13.488,15.292 13.208,15.012 13.208,14.667Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M21.486,23.754C21.54,24.157 21.542,24.697 21.542,25.5V26.276C20.579,26.333 19.417,26.333 18,26.333C16.583,26.333 15.422,26.333 14.458,26.276V25.5C14.458,24.697 14.46,24.157 14.514,23.754C14.566,23.37 14.655,23.205 14.763,23.097C14.872,22.988 15.037,22.899 15.421,22.847C15.824,22.793 16.363,22.792 17.167,22.792H18.833C19.637,22.792 20.176,22.793 20.579,22.847C20.963,22.899 21.128,22.988 21.237,23.097C21.345,23.205 21.434,23.37 21.486,23.754Z"
android:fillColor="#ffffff"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000">
<aapt:attr name="android:strokeColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#FFCAC8C8"/>
<item android:offset="0.5" android:color="#FFCAC8C8"/>
<item android:offset="0.878" android:color="#FFCAC8C8"/>
</gradient>
</aapt:attr>
</path>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillAlpha="0.25">
<aapt:attr name="android:fillColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.878" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M25.113,25.113C26.333,23.892 26.333,21.928 26.333,18C26.333,17.715 26.333,17.573 26.321,17.428C26.262,16.754 25.988,16.094 25.553,15.575C25.46,15.464 25.357,15.361 25.15,15.155L20.845,10.849C20.639,10.643 20.536,10.54 20.425,10.447C19.906,10.012 19.246,9.738 18.572,9.679C18.427,9.667 18.285,9.667 18,9.667C14.072,9.667 12.107,9.667 10.887,10.887C9.667,12.107 9.667,14.072 9.667,18C9.667,21.928 9.667,23.892 10.887,25.113C11.457,25.683 12.189,25.987 13.208,26.149L13.208,25.457C13.208,24.708 13.208,24.084 13.275,23.588C13.345,23.065 13.5,22.592 13.88,22.213C14.259,21.833 14.731,21.679 15.255,21.608C15.75,21.542 16.375,21.542 17.123,21.542H18.877C19.625,21.542 20.25,21.542 20.745,21.608C21.269,21.679 21.741,21.833 22.12,22.213C22.5,22.592 22.655,23.065 22.725,23.588C22.792,24.084 22.792,24.708 22.792,25.457L22.792,26.149C23.811,25.987 24.543,25.683 25.113,25.113ZM13.208,14.667C13.208,14.321 13.488,14.042 13.833,14.042H18.833C19.178,14.042 19.458,14.321 19.458,14.667C19.458,15.012 19.178,15.292 18.833,15.292H13.833C13.488,15.292 13.208,15.012 13.208,14.667Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M21.486,23.754C21.54,24.157 21.542,24.697 21.542,25.5V26.276C20.579,26.333 19.417,26.333 18,26.333C16.583,26.333 15.422,26.333 14.458,26.276V25.5C14.458,24.697 14.46,24.157 14.514,23.754C14.566,23.37 14.655,23.205 14.763,23.097C14.872,22.988 15.037,22.899 15.421,22.847C15.824,22.793 16.363,22.792 17.167,22.792H18.833C19.637,22.792 20.176,22.793 20.579,22.847C20.963,22.899 21.128,22.988 21.237,23.097C21.345,23.205 21.434,23.37 21.486,23.754Z"
android:fillColor="#ffffff"/>
<path
android:strokeWidth="1"
android:pathData="M8,0.5L28,0.5A7.5,7.5 0,0 1,35.5 8L35.5,28A7.5,7.5 0,0 1,28 35.5L8,35.5A7.5,7.5 0,0 1,0.5 28L0.5,8A7.5,7.5 0,0 1,8 0.5z"
android:fillColor="#00000000">
<aapt:attr name="android:strokeColor">
<gradient
android:startX="36"
android:startY="0"
android:endX="14.102"
android:endY="43.156"
android:type="linear">
<item android:offset="0.134" android:color="#FFE83565"/>
<item android:offset="0.5" android:color="#FF8644F7"/>
<item android:offset="0.878" android:color="#FF08E0FF"/>
</gradient>
</aapt:attr>
</path>
</vector>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/equalizerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true">
<RelativeLayout
android:id="@+id/equalizer_action_container"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:layout_marginTop="10dp">
<ImageView
android:id="@+id/equalizer_back_btn"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:clickable="true"
android:focusable="true"
android:padding="12dp"
android:src="@drawable/ic_close_black_24dp" />
<TextView
android:id="@+id/equalizer_fragment_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/eq"
android:textAllCaps="true"
android:textSize="25sp" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/equalizer_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/equalizer_action_container"
android:orientation="vertical">
<com.db.chart.view.LineChartView
android:id="@+id/lineChart"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingBottom="5dp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginLeft="9dp"
android:layout_marginRight="9dp"
android:layout_weight="1"
android:layoutDirection="ltr"
>
<View
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_marginStart="20dp" />
<Spinner
android:id="@+id/equalizer_preset_spinner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="5dp" />
</RelativeLayout>
<LinearLayout
android:id="@+id/equalizerContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="6"
android:orientation="horizontal"
android:padding="3dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical">
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar1"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:padding="10dp"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical">
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar2"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:padding="10dp"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical">
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar3"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:padding="10dp"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical">
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar4"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:padding="10dp"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView4"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical">
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar5"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:padding="10dp"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="10dp"
android:layout_weight="3"
android:orientation="horizontal">
<com.bullhead.equalizer.AnalogController
android:id="@+id/controllerBass"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<com.bullhead.equalizer.AnalogController
android:id="@+id/controller3D"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
android:clickable="true"
android:focusable="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layoutDirection="ltr"
>
<RelativeLayout
android:layout_centerVertical="true"
android:id="@+id/mRLType"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/mLlOnOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mOn"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:src="@drawable/ic_on" />
<androidx.appcompat.widget.AppCompatImageView
android:visibility="gone"
android:id="@+id/mOff"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:src="@drawable/ic_off" />
</LinearLayout>
<RelativeLayout
android:id="@+id/mRlType"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_toLeftOf="@+id/mSave"
android:layout_toRightOf="@+id/mLlOnOff"
android:background="@drawable/custom_type_music">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mImgType"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:src="@drawable/ic_fire" />
<TextView
android:id="@+id/mTxtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:layout_toRightOf="@+id/mImgType"
android:hint="Normal"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="12dp"
android:src="@drawable/ic_alt_arrow_down" />
</RelativeLayout>
<Button
android:id="@+id/mSave"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="12dp"
android:background="@drawable/ic_save_type" />
</RelativeLayout>
<View
android:visibility="gone"
android:id="@+id/showcase_view_equalizer"
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_marginStart="20dp" />
<Spinner
android:visibility="gone"
android:id="@+id/equalizer_preset_spinner"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginStart="5dp"
android:background="@android:color/transparent" />
<ImageView
android:visibility="gone"
android:id="@+id/spinner_dropdown_icon"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:src="@drawable/dropdown_icon"
/>
</RelativeLayout>
<LinearLayout
android:layout_marginTop="8dp"
android:id="@+id/equalizerContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="6"
android:orientation="horizontal"
android:padding="3dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.3"
android:orientation="vertical">
<TextView
android:visibility="gone"
android:textColor="@color/white"
android:id="@+id/mTxt1"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr">
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar1"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:padding="20dp"
android:progress="0"
android:splitTrack="false"
android:progressDrawable="@drawable/custom_seek_color"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270"
android:maxHeight="6dp"
android:minHeight="6dp" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.3"
android:orientation="vertical">
<TextView
android:visibility="gone"
android:textColor="@color/white"
android:id="@+id/mTxt2"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar2"
android:layout_marginTop="10dp"
android:layout_width="0dp"
android:layout_height="0dp"
android:padding="20dp"
android:splitTrack="false"
android:progressDrawable="@drawable/custom_seek_color"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270"
android:maxHeight="6dp"
android:minHeight="6dp" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.3"
android:orientation="vertical">
<TextView
android:visibility="gone"
android:textColor="@color/white"
android:id="@+id/mTxt3"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar3"
android:layout_width="0dp"
android:layout_height="0dp"
android:padding="20dp"
android:splitTrack="false"
android:progressDrawable="@drawable/custom_seek_color"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270"
android:layout_marginTop="10dp"
android:maxHeight="6dp"
android:minHeight="6dp" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.3"
android:orientation="vertical">
<TextView
android:visibility="gone"
android:textColor="@color/white"
android:id="@+id/mTxt4"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar4"
android:layout_marginTop="10dp"
android:layout_width="0dp"
android:layout_height="0dp"
android:padding="20dp"
android:splitTrack="false"
android:progressDrawable="@drawable/custom_seek_color"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270"
android:maxHeight="6dp"
android:minHeight="6dp" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView4"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.3"
android:orientation="vertical">
<TextView
android:visibility="gone"
android:textColor="@color/white"
android:id="@+id/mTxt5"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:layoutDirection="ltr"
>
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar
android:id="@+id/seekBar5"
android:layout_width="0dp"
android:layout_height="0dp"
android:padding="20dp"
android:layout_marginTop="10dp"
android:splitTrack="false"
android:progressDrawable="@drawable/custom_seek_color"
android:thumb="@drawable/custom_equalizer_thumb"
app:seekBarRotation="CW270"
android:maxHeight="6dp"
android:minHeight="6dp" />
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper>
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="10dp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:background="@android:color/transparent"
android:orientation="horizontal">
<com.bullhead.equalizer.AnalogController
android:id="@+id/controllerBass"
android:layout_margin="12dp"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:ignore="NestedWeights" />
<com.bullhead.equalizer.AnalogController
android:layout_margin="12dp"
android:id="@+id/controller3D"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
android:paddingRight="?android:attr/listPreferredItemPaddingRight"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textColor="#FFF" />
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorWindowBackground">#000</color>
<color name="red">#222222</color>
<color name="color_circlePaint">#E83565</color>
<color name="color_linePaint">#08E0FF</color>
<color name="color_bg">#313036</color>
<color name="color_visualizer">#005B8B</color>
<color name="white">#FFFFFF</color>
<color name="gray">#E5E5E5</color>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">equalizer</string>
<string name="eq">Equalizer</string>
<string name="bass">Bass Boost</string>
<string name="stereo">Stereo</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomSwitch" parent="Theme.AppCompat.Light">
<item name="colorControlActivated">#C95E5E</item>
<item name="colorSwitchThumbNormal">#565656</item>
<item name="android:colorForeground">#383838</item>
</style>
</resources>
\ No newline at end of file
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
\ No newline at end of file
#Tue Mar 11 13:49:37 ICT 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Tue Mar 11 13:47:42 ICT 2025
sdk.dir=E\:\\Android SDK
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon
maven { url 'https://jitpack.io' } // this is the line to be added
maven {
url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea"
}
maven {
url 'https://artifact.bytedance.com/repository/pangle'
}
}
}
rootProject.name = "Equalizes"
include ':app'
include ':equalizer'
include ':audiovisualizer2'
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment