sdm660-common: XiaomiParts: Add Headphone & Mic Gain

* This is manually ported by me from Lavender tree on Corvus-Devices
* Thanks @StyloGey for reviewing the java code and giving me a better solution
* Original repo: https://github.com/Corvus-Devices/device_xiaomi_lavender.git

To get it working, you need these two commits in your kernel:
> c04d6d6e61
> 8e25ac3318

Signed-off-by: OdSazib <odsazib@gmail.com>
Change-Id: I1bb48ced1f23728daa2e5170647ce08a04347110
This commit is contained in:
OdSazib 2020-04-22 18:58:27 +06:00
parent 7580f5f636
commit 9bd430ff9b
No known key found for this signature in database
GPG key ID: A2D2E5C18BB04462
13 changed files with 94 additions and 2 deletions

View file

@ -0,0 +1,9 @@
<!-- drawable/headphone-settings.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="#000000" android:pathData="M12,1A9,9 0 0,1 21,10V17A3,3 0 0,1 18,20H15V12H19V10A7,7 0 0,0 12,3A7,7 0 0,0 5,10V12H9V20H6A3,3 0 0,1 3,17V10A9,9 0 0,1 12,1M15,24V22H17V24H15M11,24V22H13V24H11M7,24V22H9V24H7Z" />
</vector>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<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="#000000" android:pathData="M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm-1-9c0-0.55 0.45 -1 1-1s1 0.45 1 1v6c0 0.55-0.45 1-1 1s-1-0.45-1-1V5zm6 6c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-0.49 6-3.39 6-6.92h-2z" />
</vector>

View file

@ -6,5 +6,7 @@
<attr name="max" format="integer" /> <attr name="max" format="integer" />
<attr name="units" format="string|reference" /> <attr name="units" format="string|reference" />
<attr name="defaultText" format="string|reference" /> <attr name="defaultText" format="string|reference" />
<attr name="showSign" format="boolean" />
<attr name="continuousUpdates" format="boolean" />
</declare-styleable> </declare-styleable>
</resources> </resources>

View file

@ -82,7 +82,6 @@
<string name="preset_warm_amoled">Warm Amoled</string> <string name="preset_warm_amoled">Warm Amoled</string>
<string name="preset_hybrid_mamba">Hybrid Mamba</string> <string name="preset_hybrid_mamba">Hybrid Mamba</string>
<string name="hall_wakeup_title">Flip Cover Wakeup</string> <string name="hall_wakeup_title">Flip Cover Wakeup</string>
<string name="hall_title">Enable Flip Cover Wakeup</string> <string name="hall_title">Enable Flip Cover Wakeup</string>
<string name="hall_wakeup_summary">Wakeup device via magnetic Flip Cover</string> <string name="hall_wakeup_summary">Wakeup device via magnetic Flip Cover</string>
@ -98,4 +97,9 @@
<!-- FPS Info --> <!-- FPS Info -->
<string name="fps_info_title">FPS Overlay</string> <string name="fps_info_title">FPS Overlay</string>
<string name="fps_info_summary">Show overlay with with current frames per second</string> <string name="fps_info_summary">Show overlay with with current frames per second</string>
<!-- Audio amplification -->
<string name="audio_amplify">Amplify Audio</string>
<string name="headphone_gain">Headphone Gain</string>
<string name="mic_gain">Microphone Gain</string>
</resources> </resources>

View file

@ -39,6 +39,27 @@
app:units="%" app:units="%"
android:defaultValue="100" /> android:defaultValue="100" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory
android:key="audio_amplify"
android:title="@string/audio_amplify">
<org.lineageos.settings.device.preferences.CustomSeekBarPreference
android:defaultValue="0"
android:key="headphone_gain"
android:max="20"
app:min="-10"
android:icon="@drawable/ic_headphone"
android:title="@string/headphone_gain"/>
<org.lineageos.settings.device.preferences.CustomSeekBarPreference
android:defaultValue="0"
android:key="mic_gain"
android:max="20"
app:min="-10"
android:icon="@drawable/ic_mic"
android:title="@string/mic_gain"/>
</PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:key="display" android:key="display"

View file

@ -29,6 +29,9 @@ import java.lang.Math.*;
public class BootReceiver extends BroadcastReceiver implements Utils { public class BootReceiver extends BroadcastReceiver implements Utils {
public static final String HEADPHONE_GAIN_PATH = "/sys/kernel/sound_control/headphone_gain";
public static final String MIC_GAIN_PATH = "/sys/kernel/sound_control/mic_gain";
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
@ -58,6 +61,12 @@ public class BootReceiver extends BroadcastReceiver implements Utils {
FileUtils.setValue(KCAL_HUE, Settings.Secure.getInt(context.getContentResolver(), FileUtils.setValue(KCAL_HUE, Settings.Secure.getInt(context.getContentResolver(),
PREF_HUE, HUE_DEFAULT)); PREF_HUE, HUE_DEFAULT));
} }
int gain = Settings.Secure.getInt(context.getContentResolver(),
DeviceSettings.PREF_HEADPHONE_GAIN, 0);
FileUtils.setValue(HEADPHONE_GAIN_PATH, gain + " " + gain);
FileUtils.setValue(MIC_GAIN_PATH, Settings.Secure.getInt(context.getContentResolver(),
DeviceSettings.PREF_MIC_GAIN, 0));
FileUtils.setValue(DeviceSettings.NOTIF_LED_PATH,(1 + Math.pow(1.05694, Settings.Secure.getInt( FileUtils.setValue(DeviceSettings.NOTIF_LED_PATH,(1 + Math.pow(1.05694, Settings.Secure.getInt(
context.getContentResolver(), DeviceSettings.PREF_NOTIF_LED, 100)))); context.getContentResolver(), DeviceSettings.PREF_NOTIF_LED, 100))));

View file

@ -32,6 +32,7 @@ import org.lineageos.settings.device.preferences.SecureSettingListPreference;
import org.lineageos.settings.device.preferences.SecureSettingSwitchPreference; import org.lineageos.settings.device.preferences.SecureSettingSwitchPreference;
import org.lineageos.settings.device.preferences.VibrationSeekBarPreference; import org.lineageos.settings.device.preferences.VibrationSeekBarPreference;
import org.lineageos.settings.device.preferences.NotificationLedSeekBarPreference; import org.lineageos.settings.device.preferences.NotificationLedSeekBarPreference;
import org.lineageos.settings.device.preferences.CustomSeekBarPreference;
import java.lang.Math.*; import java.lang.Math.*;
@ -47,6 +48,12 @@ public class DeviceSettings extends PreferenceFragment implements
public static final String NOTIF_LED_PATH = "/sys/class/leds/white/max_brightness"; public static final String NOTIF_LED_PATH = "/sys/class/leds/white/max_brightness";
public static final String PREF_KEY_FPS_INFO = "fps_info"; public static final String PREF_KEY_FPS_INFO = "fps_info";
public static final String CATEGORY_AUDIO_AMPLIFY = "audio_amplify";
public static final String PREF_HEADPHONE_GAIN = "headphone_gain";
public static final String PREF_MIC_GAIN = "mic_gain";
public static final String HEADPHONE_GAIN_PATH = "/sys/kernel/sound_control/headphone_gain";
public static final String MIC_GAIN_PATH = "/sys/kernel/sound_control/mic_gain";
// value of vtg_min and vtg_max // value of vtg_min and vtg_max
public static final int MIN_VIBRATION = 116; public static final int MIN_VIBRATION = 116;
@ -93,6 +100,16 @@ public class DeviceSettings extends PreferenceFragment implements
VibrationSeekBarPreference vibrationStrength = (VibrationSeekBarPreference) findPreference(PREF_VIBRATION_STRENGTH); VibrationSeekBarPreference vibrationStrength = (VibrationSeekBarPreference) findPreference(PREF_VIBRATION_STRENGTH);
vibrationStrength.setOnPreferenceChangeListener(this); vibrationStrength.setOnPreferenceChangeListener(this);
} else { getPreferenceScreen().removePreference(findPreference(CATEGORY_VIBRATOR)); } } else { getPreferenceScreen().removePreference(findPreference(CATEGORY_VIBRATOR)); }
// Headphone & Mic Gain
if (FileUtils.fileWritable(HEADPHONE_GAIN_PATH) && FileUtils.fileWritable(MIC_GAIN_PATH)) {
CustomSeekBarPreference headphoneGain = (CustomSeekBarPreference) findPreference(PREF_HEADPHONE_GAIN);
headphoneGain.setOnPreferenceChangeListener(this);
CustomSeekBarPreference micGain = (CustomSeekBarPreference) findPreference(PREF_MIC_GAIN);
micGain.setOnPreferenceChangeListener(this);
} else {
getPreferenceScreen().removePreference(findPreference(CATEGORY_AUDIO_AMPLIFY));
}
PreferenceCategory displayCategory = (PreferenceCategory) findPreference(CATEGORY_DISPLAY); PreferenceCategory displayCategory = (PreferenceCategory) findPreference(CATEGORY_DISPLAY);
if (isAppNotInstalled(DEVICE_DOZE_PACKAGE_NAME)) { if (isAppNotInstalled(DEVICE_DOZE_PACKAGE_NAME)) {
@ -142,6 +159,14 @@ public class DeviceSettings extends PreferenceFragment implements
FileUtils.setValue(VIBRATION_STRENGTH_PATH, vibrationValue); FileUtils.setValue(VIBRATION_STRENGTH_PATH, vibrationValue);
break; break;
case PREF_HEADPHONE_GAIN:
FileUtils.setValue(HEADPHONE_GAIN_PATH, value + " " + value);
break;
case PREF_MIC_GAIN:
FileUtils.setValue(MIC_GAIN_PATH, (int) value);
break;
case PREF_THERMAL: case PREF_THERMAL:
mTHERMAL.setValue((String) value); mTHERMAL.setValue((String) value);
mTHERMAL.setSummary(mTHERMAL.getEntry()); mTHERMAL.setSummary(mTHERMAL.getEntry());

View file

@ -21,6 +21,7 @@ import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
import androidx.preference.*;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.AttributeSet; import android.util.AttributeSet;

View file

@ -307,3 +307,4 @@ service vendor.hvdcp_opti /system/vendor/bin/hvdcp_opti
user root user root
group system wakelock group system wakelock
writepid /dev/cpuset/system-background/tasks writepid /dev/cpuset/system-background/tasks

View file

@ -26,6 +26,12 @@ on boot
chmod 0660 /sys/devices/virtual/graphics/fb0/measured_fps chmod 0660 /sys/devices/virtual/graphics/fb0/measured_fps
chown system system /sys/class/graphics/fb0/measured_fps chown system system /sys/class/graphics/fb0/measured_fps
chmod 0660 /sys/class/graphics/fb0/measured_fps chmod 0660 /sys/class/graphics/fb0/measured_fps
# Audio Amplification
chown system system /sys/kernel/sound_control/headphone_gain
chown system system /sys/kernel/sound_control/mic_gain
chmod 0660 /sys/kernel/sound_control/headphone_gain
chmod 0660 /sys/kernel/sound_control/mic_gain
# KCal # KCal
chown system system /sys/devices/platform/kcal_ctrl.0/kcal_cont chown system system /sys/devices/platform/kcal_ctrl.0/kcal_cont

View file

@ -25,3 +25,5 @@ type thermal_data_file, file_type, data_file_type;
# XiamiParts # XiamiParts
type sysfs_fpsinfo, sysfs_type, fs_type; type sysfs_fpsinfo, sysfs_type, fs_type;
type sysfs_headphonegain, sysfs_type, fs_type;
type sysfs_micgain, sysfs_type, fs_type;

View file

@ -38,3 +38,5 @@ genfscon sysfs /devices/soc/800f000.qcom,spmi/spmi-0/spmi0-03/800f000.qcom,spmi:
# XiaomiParts # XiaomiParts
genfscon sysfs /devices/virtual/graphics/fb0/measured_fps u:object_r:sysfs_fpsinfo:s0 genfscon sysfs /devices/virtual/graphics/fb0/measured_fps u:object_r:sysfs_fpsinfo:s0
genfscon sysfs /class/graphics/fb0/measured_fps u:object_r:sysfs_fpsinfo:s0 genfscon sysfs /class/graphics/fb0/measured_fps u:object_r:sysfs_fpsinfo:s0
genfscon sysfs /kernel/sound_control/headphone_gain u:object_r:sysfs_headphonegain:s0
genfscon sysfs /kernel/sound_control/mic_gain u:object_r:sysfs_micgain:s0

View file

@ -13,5 +13,6 @@ allow system_app sysfs_graphics:dir search;
allow system_app sysfs_graphics:file rw_file_perms; allow system_app sysfs_graphics:file rw_file_perms;
allow system_app sysfs_leds:dir search; allow system_app sysfs_leds:dir search;
allow system_app sysfs_fpsinfo:file rw_file_perms; allow system_app sysfs_fpsinfo:file rw_file_perms;
allow system_app sysfs_headphonegain:file rw_file_perms;
allow system_app sysfs_micgain:file rw_file_perms;
set_prop(system_app, system_prop); set_prop(system_app, system_prop);