From cb9bf3068c9ca241a8b1ab4f6bc2cb5f4fec3429 Mon Sep 17 00:00:00 2001 From: lzf Date: Sat, 9 Nov 2024 01:52:29 +0000 Subject: [PATCH] feat: add otg mode switch to Settings apk --- device/rockchip/rk3576/init.rk3576.rc | 2 + packages/apps/Settings/AndroidManifest.xml | 22 +++ .../apps/Settings/res/drawable/ic_otg.xml | 10 ++ .../Settings/res/values-zh-rCN/arrays.xml | 7 + .../Settings/res/values-zh-rCN/strings.xml | 7 + packages/apps/Settings/res/values/arrays.xml | 10 ++ .../apps/Settings/res/values/menu_keys.xml | 1 + packages/apps/Settings/res/values/strings.xml | 9 ++ .../Settings/res/xml/top_level_settings.xml | 11 ++ .../apps/Settings/res/xml/usb_host_device.xml | 14 ++ .../src/com/android/settings/Settings.java | 1 + .../android/settings/SettingsActivity.java | 7 + .../settings/UsbHostDeviceSetting.java | 150 ++++++++++++++++++ .../core/gateway/SettingsGateway.java | 5 +- 14 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 packages/apps/Settings/res/drawable/ic_otg.xml create mode 100644 packages/apps/Settings/res/xml/usb_host_device.xml create mode 100755 packages/apps/Settings/src/com/android/settings/UsbHostDeviceSetting.java diff --git a/device/rockchip/rk3576/init.rk3576.rc b/device/rockchip/rk3576/init.rk3576.rc index bda4912b724..d2011e207fc 100755 --- a/device/rockchip/rk3576/init.rk3576.rc +++ b/device/rockchip/rk3576/init.rk3576.rc @@ -7,6 +7,8 @@ on property:sys.boot_completed=1 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 diff --git a/packages/apps/Settings/AndroidManifest.xml b/packages/apps/Settings/AndroidManifest.xml index 2a775361913..f3748568e8b 100644 --- a/packages/apps/Settings/AndroidManifest.xml +++ b/packages/apps/Settings/AndroidManifest.xml @@ -5047,6 +5047,28 @@ android:value="com.android.settings.ramextension.RamExtensionFragment"/> + + + + + + + + + + + + + + + + diff --git a/packages/apps/Settings/res/drawable/ic_otg.xml b/packages/apps/Settings/res/drawable/ic_otg.xml new file mode 100644 index 00000000000..fb5a0f34e9c --- /dev/null +++ b/packages/apps/Settings/res/drawable/ic_otg.xml @@ -0,0 +1,10 @@ + + + diff --git a/packages/apps/Settings/res/values-zh-rCN/arrays.xml b/packages/apps/Settings/res/values-zh-rCN/arrays.xml index bef91f4f251..a3a99fd5248 100644 --- a/packages/apps/Settings/res/values-zh-rCN/arrays.xml +++ b/packages/apps/Settings/res/values-zh-rCN/arrays.xml @@ -479,6 +479,13 @@ "1 分钟后" "5 分钟后" + + + + 连接外部设备 + 连接电脑 + + 15秒后 30秒后 diff --git a/packages/apps/Settings/res/values-zh-rCN/strings.xml b/packages/apps/Settings/res/values-zh-rCN/strings.xml index 41a24f761f0..fe678e21551 100644 --- a/packages/apps/Settings/res/values-zh-rCN/strings.xml +++ b/packages/apps/Settings/res/values-zh-rCN/strings.xml @@ -4842,4 +4842,11 @@ 对比度 饱和度 + + OTG 模式 + OTG模式 + OTG模式 + "设置OTG口模式,默认device" + + diff --git a/packages/apps/Settings/res/values/arrays.xml b/packages/apps/Settings/res/values/arrays.xml index afb48d5baa4..b7d114ca802 100644 --- a/packages/apps/Settings/res/values/arrays.xml +++ b/packages/apps/Settings/res/values/arrays.xml @@ -1556,4 +1556,14 @@ @string/battery_app_item_hint_in_fg + + + Connect external Device + Connect computer + + + host + device + + diff --git a/packages/apps/Settings/res/values/menu_keys.xml b/packages/apps/Settings/res/values/menu_keys.xml index 27e9639122a..b6e2dd70e63 100755 --- a/packages/apps/Settings/res/values/menu_keys.xml +++ b/packages/apps/Settings/res/values/menu_keys.xml @@ -36,5 +36,6 @@ top_level_system top_level_about_device top_level_support + top_level_otg diff --git a/packages/apps/Settings/res/values/strings.xml b/packages/apps/Settings/res/values/strings.xml index 23835c62882..25a3ce8e3e9 100644 --- a/packages/apps/Settings/res/values/strings.xml +++ b/packages/apps/Settings/res/values/strings.xml @@ -12404,4 +12404,13 @@ Contrast Saturation + + + OTG Mode + Usb Mode + OTG Mode + Set mode for OTG + + + diff --git a/packages/apps/Settings/res/xml/top_level_settings.xml b/packages/apps/Settings/res/xml/top_level_settings.xml index e35a404dc2d..c33ec45ba22 100644 --- a/packages/apps/Settings/res/xml/top_level_settings.xml +++ b/packages/apps/Settings/res/xml/top_level_settings.xml @@ -231,4 +231,15 @@ settings:highlightableMenuKey="@string/menu_key_support" settings:controller="com.android.settings.support.SupportPreferenceController"/> + + + + + diff --git a/packages/apps/Settings/res/xml/usb_host_device.xml b/packages/apps/Settings/res/xml/usb_host_device.xml new file mode 100644 index 00000000000..3130fd75e58 --- /dev/null +++ b/packages/apps/Settings/res/xml/usb_host_device.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/packages/apps/Settings/src/com/android/settings/Settings.java b/packages/apps/Settings/src/com/android/settings/Settings.java index 415938cb649..e0aff3623c6 100644 --- a/packages/apps/Settings/src/com/android/settings/Settings.java +++ b/packages/apps/Settings/src/com/android/settings/Settings.java @@ -148,6 +148,7 @@ public class Settings extends SettingsActivity { 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. */ diff --git a/packages/apps/Settings/src/com/android/settings/SettingsActivity.java b/packages/apps/Settings/src/com/android/settings/SettingsActivity.java index 0b46b24b62c..94114ddc6c3 100644 --- a/packages/apps/Settings/src/com/android/settings/SettingsActivity.java +++ b/packages/apps/Settings/src/com/android/settings/SettingsActivity.java @@ -829,6 +829,13 @@ public class SettingsActivity extends SettingsBaseActivity 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. diff --git a/packages/apps/Settings/src/com/android/settings/UsbHostDeviceSetting.java b/packages/apps/Settings/src/com/android/settings/UsbHostDeviceSetting.java new file mode 100755 index 00000000000..55d5899233f --- /dev/null +++ b/packages/apps/Settings/src/com/android/settings/UsbHostDeviceSetting.java @@ -0,0 +1,150 @@ +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; + } +} diff --git a/packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java b/packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java index 2f7f742b498..46c60ce91a0 100644 --- a/packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java @@ -195,6 +195,7 @@ import com.android.settings.wifi.details.WifiNetworkDetailsFragment; 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; @@ -390,7 +391,8 @@ public class SettingsGateway { 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 = { @@ -443,5 +445,6 @@ public class SettingsGateway { 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.25.1