Project

General

Profile

完成 #278 » 0001-feat-add-otg-mode-switch-to-Settings-apk.patch

余 顺, 03/15/2025 09:02 AM

View differences:

device/rockchip/rk3576/init.rk3576.rc
chmod 0664 /sys/class/devfreq/27800000.gpu/governor
chmod 0664 /sys/class/devfreq/27800000.gpu/min_freq
chmod 0664 /sys/class/devfreq/27800000.gpu/max_freq
chmod 0666 /sys/kernel/debug/usb/23000000.usb/mode
write /sys/kernel/debug/usb/23000000.usb/mode device
write /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 0
packages/apps/Settings/AndroidManifest.xml
android:value="com.android.settings.ramextension.RamExtensionFragment"/>
</activity>
<!-- ======================================== -->
+ <!-- add by rpdzkj for config usb host or device mode -->
<activity
android:name="Settings$UsbHostDeviceSettingsActivity"
android:label="@string/usb_host_device_manager"
android:exported="true"
android:theme="@style/Theme.SubSettings"
android:enabled="true">
<intent-filter android:priority="1">
<action android:name="android.settings.SCREENSHOT_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter android:priority="60">
<action android:name="android.intent.action.MAIN" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.UsbHostDeviceSetting" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
<!-- This is the longest AndroidManifest.xml ever. -->
</application>
packages/apps/Settings/res/drawable/ic_otg.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,21.55Q11.275,21.55 10.762,21.038Q10.25,20.525 10.25,19.8Q10.25,19.3 10.525,18.888Q10.8,18.475 11.25,18.25V15.75H8.25Q7.5,15.75 6.975,15.225Q6.45,14.7 6.45,13.95V11.75Q6,11.55 5.725,11.15Q5.45,10.75 5.45,10.2Q5.45,9.475 5.963,8.962Q6.475,8.45 7.2,8.45Q7.925,8.45 8.438,8.962Q8.95,9.475 8.95,10.2Q8.95,10.75 8.663,11.137Q8.375,11.525 7.95,11.75V13.95Q7.95,14.05 8.037,14.15Q8.125,14.25 8.25,14.25H11.25V6.125H9.5L12,2.8L14.5,6.125H12.75V14.25H15.75Q15.875,14.25 15.963,14.15Q16.05,14.05 16.05,13.95V11.95H15.05V8.45H18.55V11.95H17.55V13.95Q17.55,14.7 17.025,15.225Q16.5,15.75 15.75,15.75H12.75V18.25Q13.225,18.475 13.488,18.888Q13.75,19.3 13.75,19.8Q13.75,20.525 13.238,21.038Q12.725,21.55 12,21.55Z"/>
</vector>
packages/apps/Settings/res/values-zh-rCN/arrays.xml
<item msgid="7025253383416830453">"1 分钟后"</item>
<item msgid="1574040255478150028">"5 分钟后"</item>
</string-array>
<!-- add by rpdzkj for config usb host or device mode -->
<string-array name="usb_function_location">
<item>连接外部设备</item>
<item>连接电脑</item>
</string-array>
<!-- add end -->
<string-array name="screenshot_delay_entries">
<item>15秒后</item>
<item>30秒后</item>
packages/apps/Settings/res/values-zh-rCN/strings.xml
<string name="display_contrast_title">对比度</string>
<string name="display_saturation_title">饱和度</string>
<!-- ======================================== -->
<!-- add by rpdzkj for config usb host or device mode -->
<string name="otg">OTG 模式</string>
<string name="header_category_otg">OTG模式</string>
<string name="usb_host_device_manager">OTG模式</string>
<string name="otg_summary">"设置OTG口模式,默认device"</string>
<!-- end -->
</resources>
packages/apps/Settings/res/values/arrays.xml
<item>@string/battery_app_item_hint_in_fg</item>
</string-array>
<!-- add by rpdzkj for config usb host or device mode -->
<string-array name="usb_function_location">
<item>Connect external Device</item>
<item>Connect computer</item>
</string-array>
<string-array name="usb_function_location_values">
<item>host</item>
<item>device</item>
</string-array>
<!-- end -->
</resources>
packages/apps/Settings/res/values/menu_keys.xml
<string name="menu_key_system" translatable="false">top_level_system</string>
<string name="menu_key_about_device" translatable="false">top_level_about_device</string>
<string name="menu_key_support" translatable="false">top_level_support</string>
<string name="menu_key_otg" translatable="false">top_level_otg</string>
</resources>
packages/apps/Settings/res/values/strings.xml
<string name="display_contrast_title">Contrast</string>
<string name="display_saturation_title">Saturation</string>
<!-- ======================================== -->
<!-- add by rpdzkj for config usb host or device mode -->
<string name="otg">OTG Mode</string>
<string name="usb_host_device_manager">Usb Mode</string>
<string name="header_category_otg">OTG Mode</string>
<string name="otg_summary">Set mode for OTG</string>
<string name="help_url_otg" translatable="false"></string>
<!-- end -->
</resources>
packages/apps/Settings/res/xml/top_level_settings.xml
settings:highlightableMenuKey="@string/menu_key_support"
settings:controller="com.android.settings.support.SupportPreferenceController"/>
<!-- add by rpdzkj for config usb host or device mode -->
<com.android.settings.widget.HomepagePreference
android:fragment="com.android.settings.UsbHostDeviceSetting"
android:icon="@drawable/ic_otg"
android:key="top_level_otg"
android:order="20"
android:title="@string/header_category_otg"
android:summary="@string/otg_summary"/>
<!-- end -->
</PreferenceScreen>
packages/apps/Settings/res/xml/usb_host_device.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/otg"
settings:keywords="@string/otg">
<ListPreference
android:title="@string/otg"
android:entries="@array/usb_function_location"
android:entryValues="@array/usb_function_location_values"
android:key="usb_mode"
android:persistent="true"/>
</PreferenceScreen>
packages/apps/Settings/src/com/android/settings/Settings.java
public static class BlueToothPairingActivity extends SettingsActivity { /* empty */ }
/** Activity for Reduce Bright Colors. */
public static class ReduceBrightColorsSettingsActivity extends SettingsActivity { /* empty */ }
public static class UsbHostDeviceSettingsActivity extends SettingsActivity { /* empty */ } //add by rpdzkj for config usb host or device mode
/** Activity for text reading settings. */
public static class TextReadingSettingsActivity extends SettingsActivity { /* empty */ }
/** Activity for text color and motion settings. */
packages/apps/Settings/src/com/android/settings/SettingsActivity.java
Settings.BluetoothSettingsActivity.class.getName()),
pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH), isAdmin)
|| somethingChanged;
//add by rpdzkj yang for config usb host or device mode
somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
Settings.UsbHostDeviceSettingsActivity.class.getName()),
true, isAdmin)
|| somethingChanged;
//end
// Enable DataUsageSummaryActivity if the data plan feature flag is turned on otherwise
// enable DataPlanUsageSummaryActivity.
packages/apps/Settings/src/com/android/settings/UsbHostDeviceSetting.java
package com.android.settings;
import static android.content.Context.MODE_PRIVATE;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
public class UsbHostDeviceSetting extends SettingsPreferenceFragment implements OnPreferenceChangeListener {
/**
* Called when the activity is first created.
*/
private static final String KEY_USB_MODE_LOCATION = "usb_mode";
private static final String RK3576_OTG_CTRL_PATH = "/sys/kernel/debug/usb/23000000.usb/mode";
private static final String MODEL_PATH = "/proc/device-tree/compatible";
private static final String TAG = "UsbHostDeviceDebug";
private ListPreference mUsbMode;
private Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.usb_host_device);
mContext = getActivity();
mUsbMode = (ListPreference) findPreference(KEY_USB_MODE_LOCATION);
mUsbMode.setOnPreferenceChangeListener(this);
String currentMode = readFileValue(getCtrlPath());
updateSummary(currentMode);
}
private String getCtrlPath() {
String platform = readFileValue(MODEL_PATH);
String ctrlPath;
if ("".equals(platform)) return "";
if (platform.contains("3576")) {
ctrlPath = RK3576_OTG_CTRL_PATH;
} else {
//do nothing
Log.e(TAG, platform + ": otg mode switch not adaptation! should not be happened!!");
ctrlPath = "";
}
return ctrlPath;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// TODO Auto-generated method stub
if (preference == mUsbMode) {
String platform = readFileValue(MODEL_PATH);
String ctrlPath, modeString;
String mode = (String) newValue;
if ("".equals(platform)) return true;
if (platform.contains("3576")) {
ctrlPath = RK3576_OTG_CTRL_PATH;
modeString = mode.equals("device") ? "device" : "host";
} else {
//do nothing
Log.e(TAG, platform + ": otg mode switch not adaptation! should not be happened!!");
return true;
}
Log.d(TAG, "usb mode is " + mode);
writeFileWithValue(ctrlPath, modeString.getBytes());
//delay update summary
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
String currentMode = readFileValue(ctrlPath);
if(currentMode.equals(modeString))
Toast.makeText(mContext, "otg mode switch success!", Toast.LENGTH_SHORT).show();
else
Toast.makeText(mContext, "otg mode switch failed!", Toast.LENGTH_SHORT).show();
updateSummary(currentMode);
}
}, 2000); // 延时的毫秒数
}
return true;
}
private void updateSummary(String mode) {
if (mode.equals("device") || mode.equals("otg")) {
mUsbMode.setSummary("device mode");
} else if (mode.equals("host")){
mUsbMode.setSummary("host mode");
} else {
mUsbMode.setSummary("unknow mode");
}
}
private void writeFileWithValue(String path, byte[] buffer) {
try {
File file = new File(path);
FileOutputStream fos = new FileOutputStream(file);
fos.write(buffer);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private String readFileValue(String path) {
FileReader fileReader;
String line;
try {
fileReader = new FileReader(path);
BufferedReader bufferedReader = new BufferedReader(fileReader);
line = bufferedReader.readLine();
bufferedReader.close();
return line;
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
@Override
public int getMetricsCategory() {
// TODO Auto-generated method stub
return 5;
}
}
packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java
import com.android.settings.wifi.p2p.WifiP2pSettings;
import com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2;
import com.android.settings.wifi.tether.WifiTetherSettings;
import com.android.settings.UsbHostDeviceSetting; //add by rpdzkj for config usb host or device mode
//-----------------------rk code----------
import com.android.settings.display.HdmiSettings;
......
LongBackgroundTasksDetails.class.getName(),
RegionalPreferencesEntriesFragment.class.getName(),
BatteryInfoFragment.class.getName(),
UserAspectRatioDetails.class.getName()
UserAspectRatioDetails.class.getName(),
UsbHostDeviceSetting.class.getName(), //add by rpdzkj for config usb host or device mode
};
public static final String[] SETTINGS_FOR_RESTRICTED = {
......
UserBackupSettingsActivity.class.getName(),
Settings.MemtagPageActivity.class.getName(),
Settings.NavigationModeSettingsActivity.class.getName(),
Settings.UsbHostDeviceSettingsActivity.class.getName(), //add by rpdzkj for config usb host or device mode
};
}
(2-2/3)