mirror of
https://github.com/Evolution-X-Devices/device_xiaomi_stone
synced 2026-01-29 09:28:53 +00:00
stone: parts: import dirac from marble
This commit is contained in:
@@ -43,6 +43,7 @@
|
||||
<library name="shoebox" path="libshoebox.so"/>
|
||||
<library name="v4a_re" path="libv4a_re.so"/>
|
||||
<library name="spatializer" path="libspatialaudio.so"/>
|
||||
<library name="misoundfx" path="libmisoundfx.so"/>
|
||||
</libraries>
|
||||
<effects>
|
||||
<effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
|
||||
@@ -93,6 +94,7 @@
|
||||
<effect name="shoebox" library="shoebox" uuid="1eab784c-1a36-4b2a-b7fc-e34c44cab89e"/>
|
||||
<effect name="v4a_standard_re" library="v4a_re" uuid="90380da3-8536-4744-a6a3-5731970e640f"/>
|
||||
<effect name="spatializer" library="spatializer" uuid="cc4677de-ff72-11eb-9a03-0242ac130003"/>
|
||||
<effect name="misoundfx" library="misoundfx" uuid="5b8e36a5-144a-4c38-b1d7-0002a5d5c51b"/>
|
||||
</effects>
|
||||
<postprocess>
|
||||
<stream type="music">
|
||||
|
||||
@@ -49,6 +49,31 @@
|
||||
android:authorities="${applicationId}.androidx-startup"
|
||||
tools:replace="android:authorities"/>
|
||||
|
||||
<activity
|
||||
android:name=".dirac.DiracActivity"
|
||||
android:label="@string/dirac_title"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="com.android.settings.action.IA_SETTINGS" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="com.android.settings.category"
|
||||
android:value="com.android.settings.category.ia.sound" />
|
||||
<meta-data
|
||||
android:name="com.android.settings.summary"
|
||||
android:resource="@string/dirac_summary" />
|
||||
</activity>
|
||||
|
||||
<service
|
||||
android:name=".dirac.DiracTileService"
|
||||
android:icon="@drawable/ic_qs_dirac"
|
||||
android:label="@string/dirac_title"
|
||||
android:exported="true"
|
||||
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
|
||||
<intent-filter>
|
||||
<action android:name="android.service.quicksettings.action.QS_TILE"/>
|
||||
</intent-filter>
|
||||
</service>
|
||||
<activity
|
||||
android:name=".thermal.ThermalActivity"
|
||||
android:label="@string/thermal_title">
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
-keep class org.lineageos.settings.dirac.* {
|
||||
*;
|
||||
}
|
||||
|
||||
13
parts/res/drawable/ic_dirac_headphone.xml
Normal file
13
parts/res/drawable/ic_dirac_headphone.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?android:attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="#000"
|
||||
android:pathData="M12 1.43c-2.39 0-4.68 0.94-6.36 2.63C3.94 5.75 3 8.04 3 10.43v7c0 1.1 0.9 2 2 2h4v-8H5v-1c0-3.87 3.13-7 7-7s7 3.13 7 7v1h-4v8h4c1.1 0 2-0.9 2-2v-7c0-2.4-0.95-4.68-2.64-6.37C16.68 2.37 14.4 1.43 12 1.43zm-5 12v4H5v-4h2zm12 4h-2v-4h2v4z"/>
|
||||
<path
|
||||
android:fillColor="#000"
|
||||
android:pathData="M15 22.57v-2h2v2h-2zm-4 0v-2h2v2h-2zm-4 0v-2h2v2H7z"/>
|
||||
</vector>
|
||||
9
parts/res/drawable/ic_dirac_logo.xml
Normal file
9
parts/res/drawable/ic_dirac_logo.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="409.6dp"
|
||||
android:height="133.7dp"
|
||||
android:viewportWidth="409.6"
|
||||
android:viewportHeight="133.7">
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M57.4,0.6C55.9,10.2 57.3,20.1 61.5,28.8 54.6,16.4 44.2,6.4 31.5,0L0,0v133.7,0c25.9,0 49.7,-14.2 62,-37 -5.5,11.5 -8.3,24.1 -8.1,36.8 36.8,-2.9 64.3,-35 61.4,-71.8C112.8,30.1 88.7,4.7 57.4,0.6ZM63.3,94C72.9,74.2 72.8,51.1 63,31.5c8.4,14.7 24,23.7 41,23.7 3.1,0 6.3,-0.3 9.4,-0.9C91.8,60 73.7,74.4 63.3,94ZM244.8,78.7h12.8l11.6,21.8h13.5L269.8,75.9c10.9,-6 14.9,-19.7 8.8,-30.6C274.7,38.1 267.1,33.7 259,33.7h-26.9v66.8h12.6L244.7,78.7ZM268.5,56.1c0.2,5.5 -4.2,10.1 -9.7,10.3 0,0 0,0 0,0L244.7,66.4L244.7,45.8h14c5.5,0.1 10,4.6 9.9,10.1 0,0 0,0 0,0zM309.1,33.6 L286.2,100.4h13.4l5,-15.5h24.7l5,15.5h13.2L324.7,33.6ZM308.4,73.3 L317,46.8 325.5,73.3zM399.8,78.7 L409.6,86.7C398.7,102.1 377.4,105.9 362,95 346.6,84.1 342.8,62.8 353.7,47.4 364.6,32 385.9,28.2 401.3,39.1c3.2,2.3 6,5.1 8.3,8.3l-9.8,8c-6.1,-9.9 -19.1,-13 -29.1,-6.8 -6.4,4 -10.2,11 -10,18.5 -0.3,11.7 9,21.3 20.6,21.6 0.1,0 0.2,0 0.4,0 7.4,-0.1 14.2,-3.8 18.1,-10zM198,67.1c0,-18.4 -14.9,-33.4 -33.3,-33.4 0,0 0,0 0,0h-24.3v66.8h24.3C183.1,100.4 198,85.5 198,67.1ZM153.1,88.4L153.1,45.8h11.5c11.4,0.1 20.6,9.5 20.5,20.9 0,0.1 0,0.2 0,0.3 0.3,11.5 -8.8,21 -20.2,21.2 -0.1,0 -0.2,0 -0.3,0zM207.2,33.6h12.7v66.8h-12.7z"/>
|
||||
</vector>
|
||||
13
parts/res/drawable/ic_dirac_preset.xml
Normal file
13
parts/res/drawable/ic_dirac_preset.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?android:attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="#000"
|
||||
android:pathData="M16.9 21.02V2.98h-2v18.04h2zm4 0v-9.7h-2v9.7h2zm-8 0v-16h-2v16h2zm-6 0h2V9h-2v12.03z"/>
|
||||
<path
|
||||
android:fillColor="#000"
|
||||
android:pathData="M5.1 21.02h-2v-3.11h2v3.11z"/>
|
||||
</vector>
|
||||
10
parts/res/drawable/ic_hifi.xml
Normal file
10
parts/res/drawable/ic_hifi.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<!-- drawable/hifi.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="?android:attr/colorControlNormal"
|
||||
android:pathData="M17,2 L7,2 C5.9,2,5,2.9,5,4 L5,20 C5,21.1,5.9,21.99,7,21.99 L17,22 C18.1,22,19,21.1,19,20 L19,4 C19,2.9,18.1,2,17,2 Z M7,20 L7,4 L17,4 L17,20 L7,20 Z M12,9 C13.1,9,14,8.1,14,7 S13.1,5,12,5 C10.89,5,10,5.9,10,7 S10.89,9,12,9 Z M12,11 C9.79,11,8,12.79,8,15 S9.79,19,12,19 S16,17.21,16,15 S14.21,11,12,11 Z M12,17 C10.9,17,10,16.1,10,15 S10.9,13,12,13 S14,13.9,14,15 S13.1,17,12,17 Z" />
|
||||
</vector>
|
||||
9
parts/res/drawable/ic_qs_dirac.xml
Normal file
9
parts/res/drawable/ic_qs_dirac.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<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="#fff"
|
||||
android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM7.76,16.24l-1.41,1.41C4.78,16.1 4,14.05 4,12c0,-2.05 0.78,-4.1 2.34,-5.66l1.41,1.41C6.59,8.93 6,10.46 6,12s0.59,3.07 1.76,4.24zM12,16c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4 4,1.79 4,4 -1.79,4 -4,4zM17.66,17.66l-1.41,-1.41C17.41,15.07 18,13.54 18,12s-0.59,-3.07 -1.76,-4.24l1.41,-1.41C19.22,7.9 20,9.95 20,12c0,2.05 -0.78,4.1 -2.34,5.66zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
|
||||
</vector>
|
||||
9
parts/res/drawable/ic_scenes.xml
Normal file
9
parts/res/drawable/ic_scenes.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<!-- drawable/music_clef_bass.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?android:attr/colorControlNormal">
|
||||
<path android:fillColor="#000" android:pathData="M18.5 5A1.5 1.5 0 1 1 17 6.5A1.5 1.5 0 0 1 18.5 5M18.5 11A1.5 1.5 0 1 1 17 12.5A1.5 1.5 0 0 1 18.5 11M10 4A5 5 0 0 0 5 9V10A2 2 0 1 0 7.18 8A3 3 0 0 1 10 6A4 4 0 0 1 14 10C14 13.59 11.77 16.19 7 18.2L7.76 20.04C13.31 17.72 16 14.43 16 10A6 6 0 0 0 10 4Z" />
|
||||
</vector>
|
||||
13
parts/res/layout/dirac_logo.xml
Normal file
13
parts/res/layout/dirac_logo.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="96dp"
|
||||
android:layout_marginEnd="96dp"
|
||||
android:src="@drawable/ic_dirac_logo"
|
||||
android:tint="?android:attr/colorAccent" />
|
||||
</FrameLayout>
|
||||
105
parts/res/values-zh-rCN/strings.xml
Normal file
105
parts/res/values-zh-rCN/strings.xml
Normal file
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2020 The LineageOS Project
|
||||
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.
|
||||
-->
|
||||
<resources>
|
||||
<!-- Ambient settings -->
|
||||
<string name="ambient_display_title">主动显示</string>
|
||||
<string name="ambient_display_enable_title">使用主动显示</string>
|
||||
|
||||
<!-- Dirac settings -->
|
||||
<string name="dirac_enable">启用米音</string>
|
||||
<string name="dirac_title">米音</string>
|
||||
<string name="dirac_summary">使用米音和 Hi-Fi 来优化音质</string>
|
||||
<string name="dirac_headset_title">耳机类型</string>
|
||||
<string name="dirac_preset_title">声音预设</string>
|
||||
<string name="dirac_hifi_enable_title">启用 Hi-Fi</string>
|
||||
<string name="dirac_hifi_summary">减少噪音和失真,提高音频质量</string>
|
||||
|
||||
<!-- Dirac settings: Headset types -->
|
||||
<string name="dirac_headset_default">默认</string>
|
||||
<string name="dirac_headset_earbuds">灵动耳塞式</string>
|
||||
<string name="dirac_headset_in_ear_2013">灵悦入耳式</string>
|
||||
<string name="dirac_headset_piston_1">小米活塞1</string>
|
||||
<string name="dirac_headset_general">通用耳塞式</string>
|
||||
<string name="dirac_headset_general_inear">通用入耳式</string>
|
||||
<string name="dirac_headset_piston_basic">小米活塞简装版</string>
|
||||
<string name="dirac_headset_piston_2">小米活塞2</string>
|
||||
<string name="dirac_headset_piston_standard">小米活塞标准版</string>
|
||||
<string name="dirac_headset_headphone">小米头戴式</string>
|
||||
<string name="dirac_headset_piston_youth">小米活塞青春版</string>
|
||||
<string name="dirac_headset_piston_color">小米活塞炫彩版</string>
|
||||
<string name="dirac_headset_in_ear">小米圈铁</string>
|
||||
<string name="dirac_headset_capsule">小米胶囊</string>
|
||||
<string name="dirac_headset_in_ear_pro">小米圈铁Pro</string>
|
||||
<string name="dirac_headset_comfort">小米头戴轻松版</string>
|
||||
<string name="dirac_headset_reduction_noise">小米降噪 typeC</string>
|
||||
<string name="dirac_headset_cancelling">小米降噪 3.5mm</string>
|
||||
<string name="dirac_headset_half_in_ear">小米半入耳式</string>
|
||||
<string name="dirac_headset_in_ear2">小米圈铁2</string>
|
||||
<string name="dirac_headset_earphone_basic">小米耳机基本款</string>
|
||||
<string name="dirac_headset_earphone">小米耳机</string>
|
||||
<string name="dirac_headset_ear_four">小米四驱耳机</string>
|
||||
<string name="dirac_headset_piston_typec">小米入耳式耳机 (Type-C)</string>
|
||||
<string name="dirac_headset_bluetooth_collar">小米蓝牙项圈耳机</string>
|
||||
<string name="dirac_headset_bluetooth_linefree">小米蓝牙耳机</string>
|
||||
<string name="dirac_headset_redmi_earphones">红米耳机</string>
|
||||
<string name="dirac_headset_dual_driver_in_ear">小米双单元耳机 (印度版)</string>
|
||||
|
||||
<!-- Dirac settings: Equalizer presets -->
|
||||
<string name="dirac_preset_default">默认</string>
|
||||
<string name="dirac_preset_rock">摇滚</string>
|
||||
<string name="dirac_preset_jazz">爵士</string>
|
||||
<string name="dirac_preset_pop">流行</string>
|
||||
<string name="dirac_preset_classical">古典</string>
|
||||
<string name="dirac_preset_hiphop">嘻哈</string>
|
||||
<string name="dirac_preset_blues">蓝调</string>
|
||||
<string name="dirac_preset_electronic">电子</string>
|
||||
<string name="dirac_preset_country">乡村</string>
|
||||
<string name="dirac_preset_dance">舞曲</string>
|
||||
<string name="dirac_preset_metal">金属</string>
|
||||
<string name="dirac_preset_bass_booster">低音强化</string>
|
||||
<string name="dirac_preset_live">现场</string>
|
||||
<string name="dirac_preset_balanced">均衡</string>
|
||||
<string name="dirac_preset_bass_reduction">低音弱化</string>
|
||||
<string name="dirac_preset_treble_reduction">高音弱化</string>
|
||||
<string name="dirac_preset_soft_bass">柔和低音</string>
|
||||
<string name="dirac_preset_soft_treble">柔和高音</string>
|
||||
|
||||
<!-- Dirac settings: Sound Scenes -->
|
||||
<string name="music_headset_scenario_select">场景选择</string>
|
||||
<string name="music_headset_scenario_intelligent">动态</string>
|
||||
<string name="music_headset_scenario_music">音乐</string>
|
||||
<string name="music_headset_scenario_video">视频</string>
|
||||
<string name="music_headset_scenario_vocal">人声</string>
|
||||
|
||||
<!-- Thermal Profiles -->
|
||||
<string name="thermal_title">温控配置</string>
|
||||
<string name="thermal_summary">调整每个应用使用的温控文件以获得最体验</string>
|
||||
<string name="thermal_default">默认</string>
|
||||
<string name="thermal_benchmark">性能</string>
|
||||
<string name="thermal_browser">浏览器</string>
|
||||
<string name="thermal_camera">相机</string>
|
||||
<string name="thermal_dialer">电话</string>
|
||||
<string name="thermal_gaming">游戏</string>
|
||||
<string name="thermal_streaming">流媒体</string>
|
||||
|
||||
<!-- Clear Speaker -->
|
||||
<string name="clear_speaker_title">扬声器清理</string>
|
||||
<string name="clear_speaker_summary">开启后,自动播放30s音频清理扬声器出音孔灰尘</string>
|
||||
<string name="clear_speaker_description">功能说明:\n\n 1.当出现轻微堵孔时,建议执行该功能一到两次;\n\n 2.当出现严重堵孔时,建议执行该功能两到五次,同时完成手握手机向下甩的动作</string>
|
||||
|
||||
<!-- Refresh rate -->
|
||||
<string name="refresh_title">刷新率设置</string>
|
||||
<string name="refresh_summary">设置特定应用的最大刷新率</string>
|
||||
<string name="refresh_default">默认</string>
|
||||
</resources>
|
||||
128
parts/res/values/arrays.xml
Normal file
128
parts/res/values/arrays.xml
Normal file
@@ -0,0 +1,128 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2021 The LineageOS Project
|
||||
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.
|
||||
-->
|
||||
<resources>
|
||||
<!-- Values for Dirac headset pref -->
|
||||
<string-array name="dirac_headset_pref_entries" translatable="false">
|
||||
<item>@string/dirac_headset_earbuds</item>
|
||||
<item>@string/dirac_headset_in_ear_2013</item>
|
||||
<item>@string/dirac_headset_piston_1</item>
|
||||
<item>@string/dirac_headset_piston_basic</item>
|
||||
<item>@string/dirac_headset_piston_2</item>
|
||||
<item>@string/dirac_headset_piston_standard</item>
|
||||
<item>@string/dirac_headset_general_inear</item>
|
||||
<item>@string/dirac_headset_piston_youth</item>
|
||||
<item>@string/dirac_headset_piston_color</item>
|
||||
<item>@string/dirac_headset_in_ear</item>
|
||||
<item>@string/dirac_headset_capsule</item>
|
||||
<item>@string/dirac_headset_in_ear_pro</item>
|
||||
<item>@string/dirac_headset_comfort</item>
|
||||
<item>@string/dirac_headset_reduction_noise</item>
|
||||
<item>@string/dirac_headset_cancelling</item>
|
||||
<item>@string/dirac_headset_half_in_ear</item>
|
||||
<item>@string/dirac_headset_in_ear2</item>
|
||||
<item>@string/dirac_headset_earphone_basic</item>
|
||||
<item>@string/dirac_headset_earphone</item>
|
||||
<item>@string/dirac_headset_ear_four</item>
|
||||
<item>@string/dirac_headset_piston_typec</item>
|
||||
<item>@string/dirac_headset_bluetooth_collar</item>
|
||||
<item>@string/dirac_headset_bluetooth_linefree</item>
|
||||
<item>@string/dirac_headset_redmi_earphones</item>
|
||||
<item>@string/dirac_headset_dual_driver_in_ear</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="dirac_headset_pref_values" translatable="false">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
<item>4</item>
|
||||
<item>5</item>
|
||||
<item>8</item>
|
||||
<item>9</item>
|
||||
<item>10</item>
|
||||
<item>11</item>
|
||||
<item>12</item>
|
||||
<item>13</item>
|
||||
<item>14</item>
|
||||
<item>15</item>
|
||||
<item>16</item>
|
||||
<item>17</item>
|
||||
<item>18</item>
|
||||
<item>19</item>
|
||||
<item>20</item>
|
||||
<item>21</item>
|
||||
<item>24</item>
|
||||
<item>25</item>
|
||||
<item>26</item>
|
||||
<item>27</item>
|
||||
<item>28</item>
|
||||
<item>29</item>
|
||||
</string-array>
|
||||
|
||||
<!-- Values for Dirac preset pref -->
|
||||
<string-array name="dirac_preset_pref_entries" translatable="false">
|
||||
<item>@string/dirac_preset_default</item>
|
||||
<item>@string/dirac_preset_rock</item>
|
||||
<item>@string/dirac_preset_jazz</item>
|
||||
<item>@string/dirac_preset_pop</item>
|
||||
<item>@string/dirac_preset_classical</item>
|
||||
<item>@string/dirac_preset_hiphop</item>
|
||||
<item>@string/dirac_preset_blues</item>
|
||||
<item>@string/dirac_preset_electronic</item>
|
||||
<item>@string/dirac_preset_country</item>
|
||||
<item>@string/dirac_preset_dance</item>
|
||||
<item>@string/dirac_preset_metal</item>
|
||||
<item>@string/dirac_preset_bass_booster</item>
|
||||
<item>@string/dirac_preset_balanced</item>
|
||||
<item>@string/dirac_preset_live</item>
|
||||
<item>@string/dirac_preset_bass_reduction</item>
|
||||
<item>@string/dirac_preset_treble_reduction</item>
|
||||
<item>@string/dirac_preset_soft_bass</item>
|
||||
<item>@string/dirac_preset_soft_treble</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="dirac_preset_pref_values" translatable="false">
|
||||
<item>"0,0,0,0,0,0,0"</item>
|
||||
<item>"4,2,-2,0,-2,-2,4"</item>
|
||||
<item>"0,0,0,-2,-3,0,0"</item>
|
||||
<item>"0,-3,-5,0,0,-3,0"</item>
|
||||
<item>"0,0,0,0,3,6,6"</item>
|
||||
<item>"3,3,-3,0,-3,0,2"</item>
|
||||
<item>"2,4,-6,4,0,1,2"</item>
|
||||
<item>"3,3,-1,0,-3,0,0"</item>
|
||||
<item>"0,0,-2,-2,2,2,0"</item>
|
||||
<item>"0,4,2,0,-2,-2,4"</item>
|
||||
<item>"2,0,0,-2,-4,0,0"</item>
|
||||
<item>"10,8,-3,0,-3,5,5"</item>
|
||||
<item>"3,1,0,0,0,1,3"</item>
|
||||
<item>"-4,-2,2,2,2,1,1"</item>
|
||||
<item>"-5,-3,0,0,0,0,0"</item>
|
||||
<item>"0,0,0,0,0,-5,-3"</item>
|
||||
<item>"3,3,1,-3,-3,0,0"</item>
|
||||
<item>"0,0,-1,-4,-4,5,4"</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="scenario_selector_titles" translatable="false">
|
||||
<item>@string/music_headset_scenario_intelligent</item>
|
||||
<item>@string/music_headset_scenario_music</item>
|
||||
<item>@string/music_headset_scenario_video</item>
|
||||
<item>@string/music_headset_scenario_vocal</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="scenario_selector_values" translatable="false">
|
||||
<item>4</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
<item>3</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -20,7 +20,74 @@
|
||||
<string name="htsr_title">Touch Responsiveness</string>
|
||||
<string name="htsr_enable_title">Increase Touch Responsiveness</string>
|
||||
<string name="htsr_enable_summary">Increases touch polling rate to decrease latency</string>
|
||||
|
||||
|
||||
<!-- Dirac settings -->
|
||||
<string name="dirac_enable">Enable dirac</string>
|
||||
<string name="dirac_title">Dirac™ Sound</string>
|
||||
<string name="dirac_summary">Optimize audio quality</string>
|
||||
<string name="dirac_headset_title">Choose headphones type</string>
|
||||
<string name="dirac_preset_title">Choose a preset</string>
|
||||
<string name="dirac_hifi_enable_title">Enable Hi-fi</string>
|
||||
<string name="dirac_hifi_title">Hi-Fi</string>
|
||||
<string name="dirac_hifi_summary">Decrease noise and Distortion and increase audio quality</string>
|
||||
|
||||
<!-- Dirac settings: Headset types -->
|
||||
<string name="dirac_headset_default">Default</string>
|
||||
<string name="dirac_headset_earbuds">Mi Earbuds</string>
|
||||
<string name="dirac_headset_in_ear_2013">Mi In-Ear (2013)</string>
|
||||
<string name="dirac_headset_piston_1">Mi Piston-1</string>
|
||||
<string name="dirac_headset_general">General</string>
|
||||
<string name="dirac_headset_general_inear">General In-Ear</string>
|
||||
<string name="dirac_headset_piston_basic">Basic Edition</string>
|
||||
<string name="dirac_headset_piston_2">Mi Piston-2</string>
|
||||
<string name="dirac_headset_piston_standard">Standard Edition</string>
|
||||
<string name="dirac_headset_headphone">Mi Headphones</string>
|
||||
<string name="dirac_headset_piston_youth">Youth Edition</string>
|
||||
<string name="dirac_headset_piston_color">Color Edition</string>
|
||||
<string name="dirac_headset_in_ear">Mi In-Ear</string>
|
||||
<string name="dirac_headset_capsule">Mi Capsule</string>
|
||||
<string name="dirac_headset_in_ear_pro">Mi In-Ear Pro</string>
|
||||
<string name="dirac_headset_comfort">Mi Comfort</string>
|
||||
<string name="dirac_headset_reduction_noise">Mi Noise Cancelling Type-C</string>
|
||||
<string name="dirac_headset_cancelling">Mi Noise Cancelling 3.5mm</string>
|
||||
<string name="dirac_headset_half_in_ear">Mi Half In-Ear</string>
|
||||
<string name="dirac_headset_in_ear2">Mi In-Ear 2</string>
|
||||
<string name="dirac_headset_earphone_basic">Mi Earphones Basic</string>
|
||||
<string name="dirac_headset_earphone">Mi Earphones</string>
|
||||
<string name="dirac_headset_ear_four">Mi Quadruple Driver Earphones</string>
|
||||
<string name="dirac_headset_piston_typec">Mi In-Ear Headphones (Type-C)</string>
|
||||
<string name="dirac_headset_bluetooth_collar">Mi Bluetooth Neckband</string>
|
||||
<string name="dirac_headset_bluetooth_linefree">Mi Bluetooth Earphones</string>
|
||||
<string name="dirac_headset_redmi_earphones">Redmi Earphones</string>
|
||||
<string name="dirac_headset_dual_driver_in_ear">Mi Dual Driver In-ear Earphones</string>
|
||||
|
||||
<!-- Dirac settings: Equalizer presets -->
|
||||
<string name="dirac_preset_default">Default</string>
|
||||
<string name="dirac_preset_rock">Rock</string>
|
||||
<string name="dirac_preset_jazz">Jazz</string>
|
||||
<string name="dirac_preset_pop">Pop</string>
|
||||
<string name="dirac_preset_classical">Classical</string>
|
||||
<string name="dirac_preset_hiphop">Hip Hop</string>
|
||||
<string name="dirac_preset_blues">Blues</string>
|
||||
<string name="dirac_preset_electronic">Electronic</string>
|
||||
<string name="dirac_preset_country">Country</string>
|
||||
<string name="dirac_preset_dance">Dance</string>
|
||||
<string name="dirac_preset_metal">Metal</string>
|
||||
<string name="dirac_preset_bass_booster">Bass Booster</string>
|
||||
<string name="dirac_preset_live">Live</string>
|
||||
<string name="dirac_preset_balanced">Balanced</string>
|
||||
<string name="dirac_preset_bass_reduction">Bass Reduction</string>
|
||||
<string name="dirac_preset_treble_reduction">Treble Reduction</string>
|
||||
<string name="dirac_preset_soft_bass">Soft Bass</string>
|
||||
<string name="dirac_preset_soft_treble">Soft Treble</string>
|
||||
|
||||
<!-- Dirac settings: Sound Scenes -->
|
||||
<string name="music_headset_scenario_select">Choose scene</string>
|
||||
<string name="music_headset_scenario_intelligent">Smart</string>
|
||||
<string name="music_headset_scenario_music">Music</string>
|
||||
<string name="music_headset_scenario_video">Video</string>
|
||||
<string name="music_headset_scenario_vocal">Voice</string>
|
||||
|
||||
<!-- Thermal Profiles -->
|
||||
<string name="thermal_title">Thermal Profiles</string>
|
||||
<string name="thermal_summary">Adjust per-app thermal profiles for optimum performance</string>
|
||||
|
||||
69
parts/res/xml/dirac_settings.xml
Normal file
69
parts/res/xml/dirac_settings.xml
Normal file
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2018 The LineageOS Project
|
||||
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.
|
||||
-->
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/dirac_title">
|
||||
|
||||
<com.android.settingslib.widget.LayoutPreference
|
||||
android:key="dirac_logo"
|
||||
android:layout="@layout/dirac_logo"
|
||||
android:selectable="false" />
|
||||
|
||||
<com.android.settingslib.widget.MainSwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="dirac_enable"
|
||||
android:title="@string/dirac_enable" />
|
||||
|
||||
<ListPreference
|
||||
android:key="scenario_selection"
|
||||
android:entries="@array/scenario_selector_titles"
|
||||
android:entryValues="@array/scenario_selector_values"
|
||||
android:defaultValue="4"
|
||||
android:icon="@drawable/ic_scenes"
|
||||
android:title="@string/music_headset_scenario_select"
|
||||
android:summary="%s" />
|
||||
|
||||
<ListPreference
|
||||
android:key="dirac_headset_pref"
|
||||
android:entries="@array/dirac_headset_pref_entries"
|
||||
android:entryValues="@array/dirac_headset_pref_values"
|
||||
android:defaultValue="0"
|
||||
android:icon="@drawable/ic_dirac_headphone"
|
||||
android:title="@string/dirac_headset_title"
|
||||
android:summary="%s" />
|
||||
|
||||
<ListPreference
|
||||
android:key="dirac_preset_pref"
|
||||
android:entries="@array/dirac_preset_pref_entries"
|
||||
android:entryValues="@array/dirac_preset_pref_values"
|
||||
android:defaultValue="0,0,0,0,0,0,0"
|
||||
android:icon="@drawable/ic_dirac_preset"
|
||||
android:title="@string/dirac_preset_title"
|
||||
android:summary="%s" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="dirac_hifi"
|
||||
android:title="@string/dirac_hifi_title">
|
||||
|
||||
<SwitchPreference
|
||||
android:key="dirac_hifi_pref"
|
||||
android:defaultValue="false"
|
||||
android:icon="@drawable/ic_hifi"
|
||||
android:title="@string/dirac_hifi_enable_title"
|
||||
android:summary="@string/dirac_hifi_summary"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
@@ -24,6 +24,7 @@ import android.util.Log;
|
||||
|
||||
import org.lineageos.settings.thermal.ThermalUtils;
|
||||
import org.lineageos.settings.refreshrate.RefreshUtils;
|
||||
import org.lineageos.settings.dirac.DiracUtils;
|
||||
|
||||
public class BootCompletedReceiver extends BroadcastReceiver {
|
||||
private static final boolean DEBUG = false;
|
||||
@@ -34,7 +35,17 @@ public class BootCompletedReceiver extends BroadcastReceiver {
|
||||
|
||||
if (DEBUG)
|
||||
Log.d(TAG, "Received boot completed intent");
|
||||
|
||||
// Dirac
|
||||
try {
|
||||
DiracUtils.getInstance(context);
|
||||
} catch (Exception e) {
|
||||
Log.d(TAG, "Dirac is not present in system");
|
||||
}
|
||||
// Thermal Profiles
|
||||
ThermalUtils.startService(context);
|
||||
|
||||
// Refresh Rate
|
||||
RefreshUtils.initialize(context);
|
||||
}
|
||||
}
|
||||
|
||||
35
parts/src/org/lineageos/settings/dirac/DiracActivity.java
Normal file
35
parts/src/org/lineageos/settings/dirac/DiracActivity.java
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2023 The LineageOS Project
|
||||
*
|
||||
* 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 org.lineageos.settings.dirac;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity;
|
||||
import com.android.settingslib.widget.R;
|
||||
|
||||
public class DiracActivity extends CollapsingToolbarBaseActivity {
|
||||
|
||||
private static final String TAG_DIRAC = "dirac";
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
getFragmentManager().beginTransaction().replace(R.id.content_frame,
|
||||
new DiracSettingsFragment(), TAG_DIRAC).commit();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright (C) 2018,2020 The LineageOS Project
|
||||
*
|
||||
* 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 org.lineageos.settings.dirac;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.widget.Switch;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.Preference.OnPreferenceChangeListener;
|
||||
import androidx.preference.PreferenceFragment;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.settingslib.widget.MainSwitchPreference;
|
||||
import com.android.settingslib.widget.OnMainSwitchChangeListener;
|
||||
|
||||
import org.lineageos.settings.R;
|
||||
|
||||
public class DiracSettingsFragment extends PreferenceFragment implements
|
||||
OnPreferenceChangeListener, OnMainSwitchChangeListener {
|
||||
|
||||
private static final String TAG = "DiracSettingsFragment";
|
||||
private static final String PREF_ENABLE = "dirac_enable";
|
||||
private static final String PREF_HEADSET = "dirac_headset_pref";
|
||||
private static final String PREF_HIFI = "dirac_hifi_pref";
|
||||
private static final String PREF_PRESET = "dirac_preset_pref";
|
||||
private static final String PREF_SCENE = "scenario_selection";
|
||||
|
||||
private MainSwitchPreference mSwitchBar;
|
||||
|
||||
private ListPreference mHeadsetType;
|
||||
private ListPreference mPreset;
|
||||
private SwitchPreference mHifi;
|
||||
private ListPreference mScenes;
|
||||
private DiracUtils mDiracUtils;
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
addPreferencesFromResource(R.xml.dirac_settings);
|
||||
|
||||
try {
|
||||
mDiracUtils = DiracUtils.getInstance(getActivity());
|
||||
} catch (Exception e) {
|
||||
Log.d(TAG, "Dirac is not present in system");
|
||||
}
|
||||
|
||||
boolean enhancerEnabled = mDiracUtils != null ? mDiracUtils.isDiracEnabled() : false;
|
||||
mSwitchBar = (MainSwitchPreference) findPreference(PREF_ENABLE);
|
||||
mSwitchBar.addOnSwitchChangeListener(this);
|
||||
mSwitchBar.setChecked(enhancerEnabled);
|
||||
|
||||
mHeadsetType = (ListPreference) findPreference(PREF_HEADSET);
|
||||
mHeadsetType.setOnPreferenceChangeListener(this);
|
||||
|
||||
mPreset = (ListPreference) findPreference(PREF_PRESET);
|
||||
mPreset.setOnPreferenceChangeListener(this);
|
||||
|
||||
mHifi = (SwitchPreference) findPreference(PREF_HIFI);
|
||||
mHifi.setOnPreferenceChangeListener(this);
|
||||
|
||||
boolean hifiEnable = mDiracUtils != null ? mDiracUtils.getHifiMode() : false;
|
||||
mHeadsetType.setEnabled(!hifiEnable && enhancerEnabled);
|
||||
mPreset.setEnabled(!hifiEnable && enhancerEnabled);
|
||||
mHifi.setEnabled(enhancerEnabled);
|
||||
|
||||
mScenes = (ListPreference) findPreference(PREF_SCENE);
|
||||
mScenes.setOnPreferenceChangeListener(this);
|
||||
mScenes.setEnabled(enhancerEnabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if (mDiracUtils == null) return false;
|
||||
switch (preference.getKey()) {
|
||||
case PREF_HEADSET:
|
||||
mDiracUtils.setHeadsetType(Integer.parseInt(newValue.toString()));
|
||||
return true;
|
||||
case PREF_HIFI:
|
||||
mDiracUtils.setHifiMode((Boolean) newValue ? 1 : 0);
|
||||
if (mDiracUtils.isDiracEnabled()) {
|
||||
mHeadsetType.setEnabled(!(Boolean) newValue);
|
||||
mPreset.setEnabled(!(Boolean) newValue);
|
||||
}
|
||||
return true;
|
||||
case PREF_PRESET:
|
||||
mDiracUtils.setLevel((String) newValue);
|
||||
return true;
|
||||
case PREF_SCENE:
|
||||
mDiracUtils.setScenario(Integer.parseInt(newValue.toString()));
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSwitchChanged(Switch switchView, boolean isChecked) {
|
||||
mSwitchBar.setChecked(isChecked);
|
||||
|
||||
if (mDiracUtils == null) return;
|
||||
mDiracUtils.setEnabled(isChecked);
|
||||
mHifi.setEnabled(isChecked);
|
||||
mHeadsetType.setEnabled(isChecked);
|
||||
mPreset.setEnabled(isChecked);
|
||||
mScenes.setEnabled(isChecked);
|
||||
|
||||
if (!isChecked) {
|
||||
mHifi.setChecked(false);
|
||||
mDiracUtils.setHifiMode(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
77
parts/src/org/lineageos/settings/dirac/DiracSound.java
Normal file
77
parts/src/org/lineageos/settings/dirac/DiracSound.java
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (C) 2018 The LineageOS Project
|
||||
*
|
||||
* 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 org.lineageos.settings.dirac;
|
||||
|
||||
import android.media.audiofx.AudioEffect;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class DiracSound extends AudioEffect {
|
||||
|
||||
private static final int DIRACSOUND_PARAM_HEADSET_TYPE = 1;
|
||||
private static final int DIRACSOUND_PARAM_EQ_LEVEL = 2;
|
||||
private static final int DIRACSOUND_PARAM_MUSIC = 4;
|
||||
private static final int DIRACSOUND_PARAM_HIFI = 8;
|
||||
private static final int DIRACSOUND_PARAM_SCENE = 15;
|
||||
|
||||
private static final UUID EFFECT_TYPE_DIRACSOUND =
|
||||
UUID.fromString("5b8e36a5-144a-4c38-b1d7-0002a5d5c51b");
|
||||
private static final String TAG = "DiracSound";
|
||||
|
||||
public DiracSound(int priority, int audioSession) {
|
||||
super(EFFECT_TYPE_NULL, EFFECT_TYPE_DIRACSOUND, priority, audioSession);
|
||||
}
|
||||
|
||||
public int getMusic() throws IllegalStateException,
|
||||
IllegalArgumentException, UnsupportedOperationException,
|
||||
RuntimeException {
|
||||
int[] value = new int[1];
|
||||
checkStatus(getParameter(DIRACSOUND_PARAM_MUSIC, value));
|
||||
return value[0];
|
||||
}
|
||||
|
||||
public void setMusic(int enable) throws IllegalStateException,
|
||||
IllegalArgumentException, UnsupportedOperationException,
|
||||
RuntimeException {
|
||||
checkStatus(setParameter(DIRACSOUND_PARAM_MUSIC, enable));
|
||||
}
|
||||
|
||||
public void setHeadsetType(int type) throws IllegalStateException,
|
||||
IllegalArgumentException, UnsupportedOperationException,
|
||||
RuntimeException {
|
||||
checkStatus(setParameter(DIRACSOUND_PARAM_HEADSET_TYPE, type));
|
||||
}
|
||||
|
||||
public void setLevel(int band, float level) throws IllegalStateException,
|
||||
IllegalArgumentException, UnsupportedOperationException,
|
||||
RuntimeException {
|
||||
checkStatus(setParameter(new int[]{DIRACSOUND_PARAM_EQ_LEVEL, band},
|
||||
String.valueOf(level).getBytes()));
|
||||
}
|
||||
|
||||
public void setHifiMode(int mode) throws IllegalStateException,
|
||||
IllegalArgumentException, UnsupportedOperationException,
|
||||
RuntimeException {
|
||||
checkStatus(setParameter(DIRACSOUND_PARAM_HIFI, mode));
|
||||
}
|
||||
|
||||
public void setScenario(int scene) throws IllegalStateException,
|
||||
IllegalArgumentException, UnsupportedOperationException,
|
||||
RuntimeException {
|
||||
checkStatus(setParameter(DIRACSOUND_PARAM_SCENE, scene));
|
||||
}
|
||||
}
|
||||
38
parts/src/org/lineageos/settings/dirac/DiracTileService.java
Normal file
38
parts/src/org/lineageos/settings/dirac/DiracTileService.java
Normal file
@@ -0,0 +1,38 @@
|
||||
package org.lineageos.settings.dirac;
|
||||
|
||||
import android.service.quicksettings.Tile;
|
||||
import android.service.quicksettings.TileService;
|
||||
|
||||
public class DiracTileService extends TileService {
|
||||
|
||||
private DiracUtils mDiracUtils;
|
||||
|
||||
@Override
|
||||
public void onStartListening() {
|
||||
mDiracUtils = DiracUtils.getInstance(getApplicationContext());
|
||||
|
||||
Tile tile = getQsTile();
|
||||
if (mDiracUtils.isDiracEnabled()) {
|
||||
tile.setState(Tile.STATE_ACTIVE);
|
||||
} else {
|
||||
tile.setState(Tile.STATE_INACTIVE);
|
||||
}
|
||||
|
||||
tile.updateTile();
|
||||
super.onStartListening();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick() {
|
||||
Tile tile = getQsTile();
|
||||
if (mDiracUtils.isDiracEnabled()) {
|
||||
mDiracUtils.setEnabled(false);
|
||||
tile.setState(Tile.STATE_INACTIVE);
|
||||
} else {
|
||||
mDiracUtils.setEnabled(true);
|
||||
tile.setState(Tile.STATE_ACTIVE);
|
||||
}
|
||||
tile.updateTile();
|
||||
super.onClick();
|
||||
}
|
||||
}
|
||||
148
parts/src/org/lineageos/settings/dirac/DiracUtils.java
Normal file
148
parts/src/org/lineageos/settings/dirac/DiracUtils.java
Normal file
@@ -0,0 +1,148 @@
|
||||
/*
|
||||
* Copyright (C) 2018,2020 The LineageOS Project
|
||||
*
|
||||
* 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 org.lineageos.settings.dirac;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Handler;
|
||||
import android.os.UserHandle;
|
||||
import android.os.SystemClock;
|
||||
import android.view.KeyEvent;
|
||||
import android.media.AudioManager;
|
||||
import android.media.session.MediaController;
|
||||
import android.media.session.MediaSessionManager;
|
||||
import android.media.session.PlaybackState;
|
||||
import java.util.List;
|
||||
|
||||
public class DiracUtils {
|
||||
|
||||
private static DiracUtils mInstance;
|
||||
private DiracSound mDiracSound;
|
||||
private MediaSessionManager mMediaSessionManager;
|
||||
private Handler mHandler = new Handler();
|
||||
private Context mContext;
|
||||
|
||||
public DiracUtils(Context context) {
|
||||
mContext = context;
|
||||
mMediaSessionManager = (MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE);
|
||||
mDiracSound = new DiracSound(0, 0);
|
||||
}
|
||||
|
||||
public static synchronized DiracUtils getInstance(Context context) {
|
||||
if (mInstance == null) {
|
||||
mInstance = new DiracUtils(context);
|
||||
}
|
||||
|
||||
return mInstance;
|
||||
}
|
||||
|
||||
private void triggerPlayPause(MediaController controller) {
|
||||
long when = SystemClock.uptimeMillis();
|
||||
final KeyEvent evDownPause = new KeyEvent(when, when, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PAUSE, 0);
|
||||
final KeyEvent evUpPause = KeyEvent.changeAction(evDownPause, KeyEvent.ACTION_UP);
|
||||
final KeyEvent evDownPlay = new KeyEvent(when, when, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY, 0);
|
||||
final KeyEvent evUpPlay = KeyEvent.changeAction(evDownPlay, KeyEvent.ACTION_UP);
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
controller.dispatchMediaButtonEvent(evDownPause);
|
||||
}
|
||||
});
|
||||
mHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
controller.dispatchMediaButtonEvent(evUpPause);
|
||||
}
|
||||
}, 20);
|
||||
mHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
controller.dispatchMediaButtonEvent(evDownPlay);
|
||||
}
|
||||
}, 1000);
|
||||
mHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
controller.dispatchMediaButtonEvent(evUpPlay);
|
||||
}
|
||||
}, 1020);
|
||||
}
|
||||
|
||||
private int getMediaControllerPlaybackState(MediaController controller) {
|
||||
if (controller != null) {
|
||||
final PlaybackState playbackState = controller.getPlaybackState();
|
||||
if (playbackState != null) {
|
||||
return playbackState.getState();
|
||||
}
|
||||
}
|
||||
return PlaybackState.STATE_NONE;
|
||||
}
|
||||
|
||||
private void refreshPlaybackIfNecessary() {
|
||||
if (mMediaSessionManager == null) return;
|
||||
|
||||
final List<MediaController> sessions
|
||||
= mMediaSessionManager.getActiveSessionsForUser(
|
||||
null, UserHandle.ALL);
|
||||
for (MediaController aController : sessions) {
|
||||
if (PlaybackState.STATE_PLAYING ==
|
||||
getMediaControllerPlaybackState(aController)) {
|
||||
triggerPlayPause(aController);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enable) {
|
||||
mDiracSound.setEnabled(enable);
|
||||
mDiracSound.setMusic(enable ? 1 : 0);
|
||||
if (enable) {
|
||||
refreshPlaybackIfNecessary();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isDiracEnabled() {
|
||||
return mDiracSound != null && mDiracSound.getMusic() == 1;
|
||||
}
|
||||
|
||||
public void setLevel(String preset) {
|
||||
String[] level = preset.split("\\s*,\\s*");
|
||||
|
||||
for (int band = 0; band <= level.length - 1; band++) {
|
||||
mDiracSound.setLevel(band, Float.valueOf(level[band]));
|
||||
}
|
||||
}
|
||||
|
||||
public void setHeadsetType(int paramInt) {
|
||||
mDiracSound.setHeadsetType(paramInt);
|
||||
}
|
||||
|
||||
public boolean getHifiMode() {
|
||||
AudioManager audioManager = mContext.getSystemService(AudioManager.class);
|
||||
return audioManager.getParameters("hifi_mode").contains("true");
|
||||
}
|
||||
|
||||
public void setHifiMode(int paramInt) {
|
||||
AudioManager audioManager = mContext.getSystemService(AudioManager.class);
|
||||
audioManager.setParameters("hifi_mode=" + (paramInt == 1 ? true : false));
|
||||
mDiracSound.setHifiMode(paramInt);
|
||||
}
|
||||
|
||||
public void setScenario(int sceneInt) {
|
||||
mDiracSound.setScenario(sceneInt);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user