完成 #278 » 0001-feat-add-otg-mode-switch-to-Settings-apk.patch
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
|
||
};
|
||
}
|