朋友们,以太网功能真的是太太太太常用了,这次我又带着 13 的以太网静态IP功能来了,相比 12.0 而言,
设置界面添加菜单没啥变化,可以直接对比移植。
framework层就有变化了,EthernetManager相关代码从framework移到packages/modules/Connectivity/下了。
效果图 和 12一样差别不大。
话不多说,直接上代码
[MTK_13][Ethernet]add etherent static ip
diff --git a/system/packages/modules/Connectivity/framework-t/api/module-lib-current.txt b/system/packages/modules/Connectivity/framework-t/api/module-lib-current.txt
old mode 100644
new mode 100755
index 5a8d47b5f5c..8d81025a91e
--- a/system/packages/modules/Connectivity/framework-t/api/module-lib-current.txt
+++ b/system/packages/modules/Connectivity/framework-t/api/module-lib-current.txt
@@ -44,9 +44,18 @@ package android.net {
public class EthernetManager {
method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void addEthernetStateListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.IntConsumer);
method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void addInterfaceStateListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.EthernetManager.InterfaceStateListener);
+ method public String[] getAvailableInterfaces();
+ method public android.net.IpConfiguration getConfiguration(String);
+ method public String getDns(String);
+ method public String getGateway(String);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public java.util.List<java.lang.String> getInterfaceList();
+ method public String getIpAddress(String);
+ method public String getNetmask(String);
+ method public boolean isAvailable();
+ method public boolean isInterfaceup(String);
method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void removeEthernetStateListener(@NonNull java.util.function.IntConsumer);
method public void removeInterfaceStateListener(@NonNull android.net.EthernetManager.InterfaceStateListener);
+ method public void setConfiguration(@NonNull String, @NonNull android.net.IpConfiguration);
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void setEthernetEnabled(boolean);
method public void setIncludeTestInterfaces(boolean);
field public static final int ETHERNET_STATE_DISABLED = 0; // 0x0
diff --git a/system/packages/modules/Connectivity/framework-t/api/module-lib-lint-baseline.txt b/system/packages/modules/Connectivity/framework-t/api/module-lib-lint-baseline.txt
old mode 100644
new mode 100755
index 3158bd45963..d3d312dc775
--- a/system/packages/modules/Connectivity/framework-t/api/module-lib-lint-baseline.txt
+++ b/system/packages/modules/Connectivity/framework-t/api/module-lib-lint-baseline.txt
@@ -5,3 +5,29 @@ BannedThrow: android.app.usage.NetworkStatsManager#querySummary(android.net.Netw
Methods must not mention RuntimeException subclasses in throws clauses (was `java.lang.SecurityException`)
BannedThrow: android.app.usage.NetworkStatsManager#queryTaggedSummary(android.net.NetworkTemplate, long, long):
Methods must not mention RuntimeException subclasses in throws clauses (was `java.lang.SecurityException`)
+
+
+MissingNullability: android.net.EthernetManager#getAvailableInterfaces():
+ Missing nullability on method `getAvailableInterfaces` return
+MissingNullability: android.net.EthernetManager#getConfiguration(String):
+ Missing nullability on method `getConfiguration` return
+MissingNullability: android.net.EthernetManager#getConfiguration(String) parameter #0:
+ Missing nullability on parameter `iface` in method `getConfiguration`
+MissingNullability: android.net.EthernetManager#getDns(String):
+ Missing nullability on method `getDns` return
+MissingNullability: android.net.EthernetManager#getDns(String) parameter #0:
+ Missing nullability on parameter `iface` in method `getDns`
+MissingNullability: android.net.EthernetManager#getGateway(String):
+ Missing nullability on method `getGateway` return
+MissingNullability: android.net.EthernetManager#getGateway(String) parameter #0:
+ Missing nullability on parameter `iface` in method `getGateway`
+MissingNullability: android.net.EthernetManager#getIpAddress(String):
+ Missing nullability on method `getIpAddress` return
+MissingNullability: android.net.EthernetManager#getIpAddress(String) parameter #0:
+ Missing nullability on parameter `iface` in method `getIpAddress`
+MissingNullability: android.net.EthernetManager#getNetmask(String):
+ Missing nullability on method `getNetmask` return
+MissingNullability: android.net.EthernetManager#getNetmask(String) parameter #0:
+ Missing nullability on parameter `iface` in method `getNetmask`
+MissingNullability: android.net.EthernetManager#isInterfaceup(String) parameter #0:
+ Missing nullability on parameter `iface` in method `isInterfaceup`
diff --git a/system/packages/modules/Connectivity/framework-t/src/android/net/EthernetManager.java b/system/packages/modules/Connectivity/framework-t/src/android/net/EthernetManager.java
old mode 100644
new mode 100755
index 886d19499cb..d2c60ee3180
--- a/system/packages/modules/Connectivity/framework-t/src/android/net/EthernetManager.java
+++ b/system/packages/modules/Connectivity/framework-t/src/android/net/EthernetManager.java
@@ -190,7 +190,8 @@ public class EthernetManager {
* Get Ethernet configuration.
* @return the Ethernet Configuration, contained in {@link IpConfiguration}.
* @hide
- */
+ *///<dengli>@<20230412> for <add Ethernet>
+ @SystemApi(client = MODULE_LIBRARIES)
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public IpConfiguration getConfiguration(String iface) {
try {
@@ -203,7 +204,8 @@ public class EthernetManager {
/**
* Set Ethernet configuration.
* @hide
- */
+ *///<dengli>@<20230412> for <add Ethernet>
+ @SystemApi(client = MODULE_LIBRARIES)
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setConfiguration(@NonNull String iface, @NonNull IpConfiguration config) {
try {
@@ -216,7 +218,8 @@ public class EthernetManager {
/**
* Indicates whether the system currently has one or more Ethernet interfaces.
* @hide
- */
+ *///<dengli>@<20230412> for <add Ethernet>
+ @SystemApi(client = MODULE_LIBRARIES)
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isAvailable() {
return getAvailableInterfaces().length > 0;
@@ -236,6 +239,75 @@ public class EthernetManager {
throw e.rethrowFromSystemServer();
}
}
+ //<dengli>@<20230412> for <add Ethernet>
+ /**
+ * Indicates whether the interface is up.
+ *
+ * @param iface Ethernet interface name
+ * @hide
+ */
+ @SystemApi(client = MODULE_LIBRARIES)
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
+ public boolean isInterfaceup(String iface) {
+ try {
+ return mService.isInterfaceup(iface);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @hide
+ */
+ @SystemApi(client = MODULE_LIBRARIES)
+ @UnsupportedAppUsage
+ public String getIpAddress(String iface) {
+ try {
+ return mService.getIpAddress(iface);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @hide
+ */
+ @SystemApi(client = MODULE_LIBRARIES)
+ @UnsupportedAppUsage
+ public String getNetmask(String iface) {
+ try {
+ return mService.getNetmask(iface);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @hide
+ */
+ @SystemApi(client = MODULE_LIBRARIES)
+ @UnsupportedAppUsage
+ public String getGateway(String iface) {
+ try {
+ return mService.getGateway(iface);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @hide
+ */
+ @SystemApi(client = MODULE_LIBRARIES)
+ @UnsupportedAppUsage
+ public String getDns(String iface) {
+ try {
+ return mService.getDns(iface);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+ //<dengli>@<20230412> for <add Ethernet>
/**
* Adds a listener.
@@ -317,7 +389,8 @@ public class EthernetManager {
/**
* Returns an array of available Ethernet interface names.
* @hide
- */
+ *///<dengli>@<20230412> for <add Ethernet>
+ @SystemApi(client = MODULE_LIBRARIES)
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public String[] getAvailableInterfaces() {
try {
diff --git a/system/packages/modules/Connectivity/framework-t/src/android/net/IEthernetManager.aidl b/system/packages/modules/Connectivity/framework-t/src/android/net/IEthernetManager.aidl
old mode 100644
new mode 100755
index 42e4c1ac55a..54ac9c114a2
--- a/system/packages/modules/Connectivity/framework-t/src/android/net/IEthernetManager.aidl
+++ b/system/packages/modules/Connectivity/framework-t/src/android/net/IEthernetManager.aidl
@@ -36,6 +36,13 @@ interface IEthernetManager
IpConfiguration getConfiguration(String iface);
void setConfiguration(String iface, in IpConfiguration config);
boolean isAvailable(String iface);
+ /*<dengli>@<20230412> for <add Ethernet>*/
+ boolean isInterfaceup(String iface);
+ String getIpAddress(String iface);
+ String getNetmask(String iface);
+ String getGateway(String iface);
+ String getDns(String iface);
+ /*<dengli>@<20230412> for <add Ethernet>*/
void addListener(in IEthernetServiceListener listener);
void removeListener(in IEthernetServiceListener listener);
void setIncludeTestInterfaces(boolean include);
diff --git a/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java b/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java
old mode 100644
new mode 100755
index c4ea9ae8b04..2bac5901fdf
--- a/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -59,6 +59,15 @@ import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+//<dengli>@<20230412> for <add Ethernet>
+import android.net.EthernetManager;
+import android.net.LinkAddress;
+import android.net.RouteInfo;
+import com.android.net.module.util.Inet4AddressUtils;
+import java.lang.reflect.Method;
+import java.net.Inet4Address;
+import java.net.InetAddress;
+//<dengli>@<20230412> for <add Ethernet>
/**
* {@link NetworkProvider} that manages NetworkOffers for Ethernet networks.
*/
@@ -74,6 +83,10 @@ public class EthernetNetworkFactory {
private final Context mContext;
private final NetworkProvider mProvider;
final Dependencies mDeps;
+ //<dengli>@<20230412> for <add Ethernet>
+ private EthernetManager mEthernetManager;
+ private static boolean[] mIfaceStatus = new boolean[2];
+ //<dengli>@<20230412> for <add Ethernet>
public static class Dependencies {
public void makeIpClient(Context context, String iface, IpClientCallbacks callbacks) {
@@ -109,6 +122,8 @@ public class EthernetNetworkFactory {
public EthernetNetworkFactory(Handler handler, Context context) {
this(handler, context, new NetworkProvider(context, handler.getLooper(), TAG),
new Dependencies());
+ //<dengli>@<20230412> for <add Ethernet>
+ mEthernetManager = (EthernetManager) context.getSystemService(Context.ETHERNET_SERVICE);
}
@VisibleForTesting
@@ -240,7 +255,12 @@ public class EthernetNetworkFactory {
if (DBG) {
Log.d(TAG, "updateInterfaceLinkState, iface: " + ifaceName + ", up: " + up);
}
-
+ //<dengli>@<20230412> for <add Ethernet>
+ if (ifaceName.equals("eth0"))
+ mIfaceStatus[0] = up;
+ if (ifaceName.equals("eth1"))
+ mIfaceStatus[1] = up;
+ //<dengli>@<20230412> for <add Ethernet>
NetworkInterfaceState iface = mTrackingInterfaces.get(ifaceName);
return iface.updateLinkState(up, listener);
}
@@ -251,7 +271,131 @@ public class EthernetNetworkFactory {
new EthernetNetworkManagementException(
ifaceName + " can't be updated as it is not available."));
}
+ //<dengli>@<20230412> for <add Ethernet>
+ boolean isInterfaceup(String interfacName) {
+ if (interfacName.equals("eth0"))
+ return mIfaceStatus[0];
+ else if (interfacName.equals("eth1"))
+ return mIfaceStatus[1];
+ else
+ return false;
+ }
+
+ String getIpAddress(String iface) {
+ if(mEthernetManager==null){
+ mEthernetManager = (EthernetManager) mContext.getSystemService(Context.ETHERNET_SERVICE);
+ }
+ IpConfiguration config = mEthernetManager.getConfiguration(iface);
+ if (config.getIpAssignment() == IpAssignment.STATIC) {
+ return config.getStaticIpConfiguration().getIpAddress().getAddress().getHostAddress();
+ } else {
+ NetworkInterfaceState netState = mTrackingInterfaces.get(iface);
+ if (null != netState) {
+ for (LinkAddress l : netState.mLinkProperties.getLinkAddresses()) {
+ InetAddress source = l.getAddress();
+ //Log.d(TAG, "getIpAddress: " + source.getHostAddress());
+ if (source instanceof Inet4Address) {
+ return source.getHostAddress();
+ }
+ }
+ }
+ }
+ return "";
+ }
+
+ private String prefix2netmask(int prefix) {
+ // convert prefix to netmask
+ if (true) {
+ int mask = 0xFFFFFFFF << (32 - prefix);
+ //Log.d(TAG, "mask = " + mask + " prefix = " + prefix);
+ return ((mask>>>24) & 0xff) + "." + ((mask>>>16) & 0xff) + "." + ((mask>>>8) & 0xff) + "." + ((mask) & 0xff);
+ } else {
+ int hostAddress = Inet4AddressUtils.prefixLengthToV4NetmaskIntHTL(prefix);
+ return Inet4AddressUtils.intToInet4AddressHTL(hostAddress).getHostName();
+ }
+ }
+
+ String getNetmask(String iface) {
+ if(mEthernetManager==null){
+ mEthernetManager = (EthernetManager) mContext.getSystemService(Context.ETHERNET_SERVICE);
+ }
+ IpConfiguration config = mEthernetManager.getConfiguration(iface);
+ if (config.getIpAssignment() == IpAssignment.STATIC) {
+ return prefix2netmask(config.getStaticIpConfiguration().getIpAddress().getPrefixLength());
+ } else {
+ NetworkInterfaceState netState = mTrackingInterfaces.get(iface);
+ if (null != netState) {
+ for (LinkAddress l : netState.mLinkProperties.getLinkAddresses()) {
+ InetAddress source = l.getAddress();
+ if (source instanceof Inet4Address) {
+ return prefix2netmask(l.getPrefixLength());
+ }
+ }
+ }
+ }
+ return "";
+ }
+
+ String getGateway(String iface) {
+ if(mEthernetManager==null){
+ mEthernetManager = (EthernetManager) mContext.getSystemService(Context.ETHERNET_SERVICE);
+ }
+ IpConfiguration config = mEthernetManager.getConfiguration(iface);
+ if (config.getIpAssignment() == IpAssignment.STATIC) {
+ return config.getStaticIpConfiguration().getGateway().getHostAddress();
+ } else {
+ NetworkInterfaceState netState = mTrackingInterfaces.get(iface);
+ if (null != netState) {
+ for (RouteInfo route : netState.mLinkProperties.getRoutes()) {
+ if (route.hasGateway()) {
+ InetAddress gateway = route.getGateway();
+ Object isIPv4Default = invokeMethodNoParameter(route, "isIPv4Default");
+ if (null != isIPv4Default && (Boolean)isIPv4Default) {
+ return gateway.getHostAddress();
+ }
+ }
+ }
+ }
+ }
+ return "";
+ }
+ private Object invokeMethodNoParameter(Object object, String methodName) {
+ try {
+ Method method = object.getClass().getDeclaredMethod(methodName);
+ method.setAccessible(true);
+ return method.invoke(object);
+ //return method.invoke(object, paramTypes);
+ } catch (Exception e) {
+ Log.e(TAG, "invokeMethod->methodName:" + methodName + ", " + e);
+ }
+ return null;
+ }
+
+ /*
+ * return dns format: "8.8.8.8,4.4.4.4"
+ */
+ String getDns(String iface) {
+ String dns = "";
+ if(mEthernetManager==null){
+ mEthernetManager = (EthernetManager) mContext.getSystemService(Context.ETHERNET_SERVICE);
+ }
+ IpConfiguration config = mEthernetManager.getConfiguration(iface);
+ if (config.getIpAssignment() == IpAssignment.STATIC) {
+ for (InetAddress nameserver : config.getStaticIpConfiguration().getDnsServers()) {
+ dns += nameserver.getHostAddress() + ",";
+ }
+ } else {
+ NetworkInterfaceState netState = mTrackingInterfaces.get(iface);
+ if (null != netState) {
+ for (InetAddress nameserver : netState.mLinkProperties.getDnsServers()) {
+ dns += nameserver.getHostAddress() + ",";
+ }
+ }
+ }
+ return dns;
+ }
+ //<dengli>@<20230412> for <add Ethernet>
@VisibleForTesting
protected boolean hasInterface(String ifaceName) {
return mTrackingInterfaces.containsKey(ifaceName);
diff --git a/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java b/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java
old mode 100644
new mode 100755
index 5e830ad83a6..3a184e31b15
--- a/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java
+++ b/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java
@@ -44,7 +44,22 @@ import java.io.PrintWriter;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
-
+//<dengli>@<20230412> for <add Ethernet>
+import android.net.IpConfiguration.IpAssignment;
+import android.net.IpConfiguration.ProxySettings;
+import android.database.ContentObserver;
+import java.net.InetAddress;
+import android.net.Uri;
+import android.net.LinkAddress;
+import android.net.StaticIpConfiguration;
+import android.provider.Settings;
+import android.provider.Settings.System;
+import java.util.ArrayList;
+import android.os.SystemProperties;
+import java.net.Inet4Address;
+import android.net.InetAddresses;
+import java.util.regex.Pattern;
+//<dengli>@<20230412> for <add Ethernet>
/**
* EthernetServiceImpl handles remote Ethernet operation requests by implementing
* the IEthernetManager interface.
@@ -57,7 +72,8 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
private final Context mContext;
private final Handler mHandler;
private final EthernetTracker mTracker;
-
+ //<dengli>@<20230412> for <add Ethernet>
+ public StaticIpConfiguration mStaticIpConfiguration;
EthernetServiceImpl(@NonNull final Context context, @NonNull final Handler handler,
@NonNull final EthernetTracker tracker) {
mContext = context;
@@ -74,9 +90,77 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
return PermissionUtils.checkAnyPermissionOf(mContext,
android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS);
}
+ //<dengli>@<20230412> for <add Ethernet>
+ private Inet4Address getIPv4Address(String text) {
+ try {
+ return (Inet4Address)InetAddresses.parseNumericAddress(text);
+ } catch (IllegalArgumentException | ClassCastException e) {
+ return null;
+ }
+ }
+ /*
+ * convert subMask string to prefix length
+ */
+ private int maskStr2InetMask(String maskStr) {
+ StringBuffer sb;
+ String str;
+ int inetmask = 0;
+ int count = 0;
+ /*
+ * check the subMask format
+ */
+ Pattern pattern = Pattern.compile("(^((\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$)|^(\\d|[1-2]\\d|3[0-2])$");
+ if (pattern.matcher(maskStr).matches() == false) {
+ Log.e(TAG, "subMask is error");
+ return 0;
+ }
+ String[] ipSegment = maskStr.split("\\.");
+ for (int n = 0; n < ipSegment.length; n++) {
+ sb = new StringBuffer(Integer.toBinaryString(Integer.parseInt(ipSegment[n])));
+ str = sb.reverse().toString();
+ count = 0;
+ for (int i = 0; i < str.length(); i++) {
+ i = str.indexOf("1", i);
+ if (i == -1)
+ break;
+ count++;
+ }
+ inetmask += count;
+ }
+ return inetmask;
+ }
+ //<dengli>@<20230412> for <add Ethernet>
public void start() {
Log.i(TAG, "Starting Ethernet service");
+ //<dengli>@<20230412> for <add Ethernet>
+ if ("1".equals(SystemProperties.get("persist.xxxxx.ethernet_static"))) {
+ try {
+ Inet4Address inetAddr = getIPv4Address(SystemProperties.get("persist.xxxxx.ethernet_static_ip"));
+ int prefixLength = maskStr2InetMask(SystemProperties.get("persist.xxxxx.ethernet_static_mask"));
+ InetAddress gatewayAddr = getIPv4Address(SystemProperties.get("persist.xxxxx.ethernet_static_gateway"));
+ InetAddress dnsAddr = getIPv4Address(SystemProperties.get("persist.xxxxx.ethernet_static_dns1"));
+ String dnsStr2 = SystemProperties.get("persist.xxxxx.ethernet_static_dns2");
+ ArrayList<InetAddress> dnsAddrs = new ArrayList<InetAddress>();
+ dnsAddrs.add(dnsAddr);
+ if (!dnsStr2.isEmpty()) {
+ dnsAddrs.add(getIPv4Address(dnsStr2));
+ }
+ mStaticIpConfiguration = new StaticIpConfiguration.Builder()
+ .setIpAddress(new LinkAddress(inetAddr, prefixLength))
+ .setGateway(gatewayAddr)
+ .setDnsServers(dnsAddrs)
+ .build();
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ IpConfiguration mIpConfiguration = new IpConfiguration();
+ mIpConfiguration.setIpAssignment(IpAssignment.STATIC);
+ mIpConfiguration.setProxySettings(ProxySettings.STATIC);
+ mIpConfiguration.setStaticIpConfiguration(mStaticIpConfiguration);
+ mTracker.updateIpConfiguration("eth0", mIpConfiguration);
+ }
+ //<dengli>@<20230412> for <add Ethernet>
mTracker.start();
mStarted.set(true);
}
@@ -136,6 +220,56 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
return mTracker.isTrackingInterface(iface);
}
+//<dengli>@<20230412> for <add Ethernet>
+ @Override
+ public boolean isInterfaceup(String iface) {
+ PermissionUtils.enforceAccessNetworkStatePermission(mContext, TAG);
+ if (mTracker.isRestrictedInterface(iface)) {
+ PermissionUtils.enforceRestrictedNetworkPermission(mContext, TAG);
+ }
+
+ return mTracker.isInterfaceup(iface);
+ }
+
+ @Override
+ public String getIpAddress(String iface) {
+ PermissionUtils.enforceAccessNetworkStatePermission(mContext, TAG);
+ if (mTracker.isRestrictedInterface(iface)) {
+ PermissionUtils.enforceRestrictedNetworkPermission(mContext, TAG);
+ }
+
+ return mTracker.getIpAddress(iface);
+ }
+
+ @Override
+ public String getNetmask(String iface) {
+ PermissionUtils.enforceAccessNetworkStatePermission(mContext, TAG);
+ if (mTracker.isRestrictedInterface(iface)) {
+ PermissionUtils.enforceRestrictedNetworkPermission(mContext, TAG);
+ }
+
+ return mTracker.getNetmask(iface);
+ }
+
+ @Override
+ public String getGateway(String iface) {
+ PermissionUtils.enforceAccessNetworkStatePermission(mContext, TAG);
+ if (mTracker.isRestrictedInterface(iface)) {
+ PermissionUtils.enforceRestrictedNetworkPermission(mContext, TAG);
+ }
+ return mTracker.getGateway(iface);
+ }
+
+ @Override
+ public String getDns(String iface) {
+ PermissionUtils.enforceAccessNetworkStatePermission(mContext, TAG);
+ if (mTracker.isRestrictedInterface(iface)) {
+ PermissionUtils.enforceRestrictedNetworkPermission(mContext, TAG);
+ }
+
+ return mTracker.getDns(iface);
+ }
+ //<dengli>@<20230412> for <add Ethernet>
/**
* Adds a listener.
diff --git a/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java b/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java
old mode 100644
new mode 100755
index 1ab7515b8cb..d8e8e871fb6
--- a/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java
+++ b/system/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java
@@ -305,7 +305,27 @@ public class EthernetTracker {
protected boolean isTrackingInterface(String iface) {
return mFactory.hasInterface(iface);
}
+ //<dengli>@<20230412> for <add Ethernet>
+ boolean isInterfaceup(String iface) {
+ return mFactory.isInterfaceup(iface);
+ }
+
+ String getIpAddress(String iface) {
+ return mFactory.getIpAddress(iface);
+ }
+
+ String getNetmask(String iface) {
+ return mFactory.getNetmask(iface);
+ }
+
+ String getGateway(String iface) {
+ return mFactory.getGateway(iface);
+ }
+ String getDns(String iface) {
+ return mFactory.getDns(iface);
+ }
+ //<dengli>@<20230412> for <add Ethernet>
String[] getInterfaces(boolean includeRestricted) {
return mFactory.getAvailableInterfaces(includeRestricted);
}
diff --git a/system/system/sepolicy/private/property_contexts b/system/system/sepolicy/private/property_contexts
old mode 100644
new mode 100755
index 1b2360d18bf..d1bfbed9359
--- a/system/system/sepolicy/private/property_contexts
+++ b/system/system/sepolicy/private/property_contexts
@@ -283,6 +283,8 @@ bpf.progs_loaded u:object_r:bpf_progs_loaded_prop:s0 exact bool
gsid. u:object_r:gsid_prop:s0
ro.gsid. u:object_r:gsid_prop:s0
+#<dengli>@<20230412> for <add Ethernet>
+persist.xxxxx. u:object_r:system_prop:s0
# Property for disabling NNAPI vendor extensions on product image (used on GSI /product image,
# which can't use NNAPI vendor extensions).
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/AndroidManifest.xml b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/AndroidManifest.xml
index e07fce8daa2..a7283b7d336 100755
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/AndroidManifest.xml
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/AndroidManifest.xml
@@ -797,7 +797,32 @@
<meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
android:value="@string/menu_key_network"/>
</activity-alias>
+ <!-- <dengli>@<20230412> for <add Ethernet> -->
+ <activity android:name="Settings$EthernetSettingsActivity"
+ android:label="@string/ethernet_settings_title"
+ android:icon="@drawable/ic_settings_wireless"
+ android:exported="true"
+ android:taskAffinity="">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.VOICE_LAUNCH" />
+ <category android:name="com.android.settings.SHORTCUT" />
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.ethernet.EthernetSettings" />
+ </activity>
+ <!-- Keep compatibility with old shortcuts. -->
+ <activity-alias android:name=".EthernetSettings"
+ android:label="@string/ethernet_settings"
+ android:clearTaskOnLaunch="true"
+ android:targetActivity="Settings$EthernetSettingsActivity"
+ android:exported="true">
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.EthernetSettings" />
+ </activity-alias>
+ <!-- <dengli>@<20230412> for <add Ethernet> end -->
<activity android:name="Settings$WifiP2pSettingsActivity"
android:exported="true">
<intent-filter>
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/drawable/ic_ethernet.xml b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/drawable/ic_ethernet.xml
new file mode 100755
index 00000000000..ca47ec96d01
--- /dev/null
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/drawable/ic_ethernet.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 The Android Open Source 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
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M7.77,6.76L6.23,5.48 0.82,12l5.41,6.52 1.54,-1.28L3.42,12l4.35,-5.24zM7,13h2v-2L7,11v2zM17,11h-2v2h2v-2zM11,13h2v-2h-2v2zM17.77,5.48l-1.54,1.28L20.58,12l-4.35,5.24 1.54,1.28L23.18,12l-5.41,-6.52z"/>
+</vector>
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/layout/static_ip_dialog.xml b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/layout/static_ip_dialog.xml
new file mode 100755
index 00000000000..8e7bef0815f
--- /dev/null
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/layout/static_ip_dialog.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2010 The Android Open Source 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.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:fadeScrollbars="false" >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingBottom="8dip" >
+
+ <LinearLayout
+ android:id="@+id/wifi_advanced_fields"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+
+ <LinearLayout
+ android:id="@+id/proxy_fields"
+ style="@style/wifi_section"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <LinearLayout
+ android:id="@+id/staticip"
+ style="@style/wifi_section"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <LinearLayout
+ style="@style/wifi_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <TextView
+ style="@style/wifi_item_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/wifi_ip_address" />
+
+ <EditText
+ android:id="@+id/ipaddress"
+ style="@style/wifi_item_edit_content"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/wifi_ip_address_hint"
+ android:inputType="textNoSuggestions"
+ android:singleLine="true" />
+ </LinearLayout>
+
+ <LinearLayout
+ style="@style/wifi_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <TextView
+ style="@style/wifi_item_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/wifi_gateway" />
+
+ <EditText
+ android:id="@+id/gateway"
+ style="@style/wifi_item_edit_content"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/wifi_gateway_hint"
+ android:inputType="textNoSuggestions"
+ android:singleLine="true" />
+ </LinearLayout>
+
+ <LinearLayout
+ style="@style/wifi_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <TextView
+ style="@style/wifi_item_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/ethernet_netmask" />
+
+ <EditText
+ android:id="@+id/network_prefix_length"
+ style="@style/wifi_item_edit_content"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/ethernet_netmask_hint"
+ android:inputType="textNoSuggestions"
+ android:singleLine="true" />
+ </LinearLayout>
+
+ <LinearLayout
+ style="@style/wifi_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <TextView
+ style="@style/wifi_item_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/wifi_dns1" />
+
+ <EditText
+ android:id="@+id/dns1"
+ style="@style/wifi_item_edit_content"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/wifi_dns1_hint"
+ android:inputType="textNoSuggestions"
+ android:singleLine="true" />
+ </LinearLayout>
+
+ <LinearLayout
+ style="@style/wifi_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <TextView
+ style="@style/wifi_item_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/wifi_dns2" />
+
+ <EditText
+ android:id="@+id/dns2"
+ style="@style/wifi_item_edit_content"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/wifi_dns2_hint"
+ android:inputType="textNoSuggestions"
+ android:singleLine="true" />
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+
+</ScrollView>
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml
index ca1cbb52d5a..8b5a9f60536 100755
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml
@@ -5800,4 +5800,50 @@
<string name="date_time_set_time">"设置时间"</string>
<string name="date_time_24hour_auto_summary">"使用默认语言区域"</string>
<!--<dengli>@<20230322> for <add Chinese translation string>-->
+ <!-- <dengli>@<20230412> for <add Ethernet> -->
+ <string name="ethernet_settings_title">以太网</string>
+ <string name="ethernet_netmask_hint" translatable="false"> 255.255.255.0</string>
+ <!--string name="ethernet_info_getting">"getting IP info..."</string-->
+ <string name="ethernet_settings">以太网</string>
+ <string name="ethernet_connect">连接</string>
+ <string name="ethernet_cancel">取消</string>
+ <!--Wireless controls screen, settings summary for the item tot ake you to the ethernet settings screen -->
+ <string name="ethernet_settings_summary">管理以太网</string>
+ <!-- ethernet hw address -->
+ <string name="ethernet_hw_addr">MAC</string>
+ <!-- ethernet ip address -->
+ <string name="ethernet_ip_addr">IP 地址</string>
+ <!-- ethernet netmask -->
+ <string name="ethernet_netmask">网络掩码</string>
+ <!-- ethernet gateway -->
+ <string name="ethernet_gateway">网关</string>
+ <!-- ethernet dns1 -->
+ <string name="ethernet_dns1">dns1</string>
+ <!-- ethernet dns2 -->
+ <string name="ethernet_dns2">dns2</string>
+ <string name="category_ethernet">静态IP设置</string>
+ <string name="usedhcp">动态</string>
+ <string name="usestatic">静态</string>
+ <string name="ethernet_use_static_ip">使用静态IP</string>
+ <string name="ethernet_ip_address">IP 地址</string>
+ <string name="staticip_save">保存</string>
+ <string name="staticip_cancel">取消</string>
+ <string name="str_ok">OK</string>
+ <string name="str_cancel">取消</string>
+ <string name="str_about">重要的</string>
+ <string name="str_mesg">是否保存设置?</string>
+ <string name="save_failed">保存失败!</string>
+ <string name="ethernet_ip_settings_invalid_ip">请输入一个有效的IP地址。</string>
+ <string name="eth_ip_settings_please_complete_settings">请给完整的静态IP设置!</string>
+ <string name="ethernet_quick_toggle_title">以太网</string>
+ <!-- Ethernet settings check box summary for turning on ethernet -->
+ <string name="ethernet_quick_toggle_summary_off">以太网是禁用的</string>
+ <!--Used as title on second screen after selecting Ethernet settings -->
+ <string name="ethernet_quick_toggle_summary_on">启用以太网</string>
+ <!--Used as title on second screen after selecting Ethernet settings -->
+ <string name="ethernet_mode_title">以太网Ip模式</string>
+ <string name="ethernet_info_getting">"获得IP信息…"</string>
+ <string name="disabled_low_ram_device">"该设备不支持此功能"</string>
+ <string name="add_network_cable">"请先确认网线是否连接"</string>
+ <!-- <dengli>@<20230412> for <add Ethernet> end -->
</resources>
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/arrays.xml b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/arrays.xml
index 053ff722da6..fb93c2ce3a5 100755
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/arrays.xml
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/arrays.xml
@@ -1691,4 +1691,13 @@
[CHAR LIMIT=NONE] -->
<string-array name="allowlist_hide_summary_in_battery_usage" translatable="false">
</string-array>
+ <!--<dengli>@<20230412> for <add Ethernet>-->
+ <string-array name="ethernet_mode_location">
+ <item>@string/usestatic</item>
+ <item>@string/usedhcp</item>
+ </string-array>
+ <string-array name="ethernet_mode_values">
+ <item>StaticIP</item>
+ <item>DHCP</item>
+ </string-array>
</resources>
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml
index fff8da97eac..59236546b55 100755
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml
@@ -14197,5 +14197,50 @@
<string name="bt_le_audio_scan_qr_code_scanner">To start listening, center the QR code below</string>
<!-- [CHAR LIMIT=NONE] Hint for QR code process failure -->
<string name="bt_le_audio_qr_code_is_not_valid_format">QR code isn\u0027t a valid format</string>
-
+ <!-- <dengli>@<20230412> for <add Ethernet> -->
+ <string name="ethernet_settings_title">Ethernet</string>
+ <string name="ethernet_netmask_hint" translatable="false"> 255.255.255.0</string>
+ <!--string name="ethernet_info_getting">"getting IP info..."</string-->
+ <string name="ethernet_settings">Ethernet</string>
+ <string name="ethernet_connect">Connect</string>
+ <string name="ethernet_cancel">Cancel</string>
+ <!--Wireless controls screen, settings summary for the item tot ake you to the ethernet settings screen -->
+ <string name="ethernet_settings_summary">Manager ethernet</string>
+ <!-- ethernet hw address -->
+ <string name="ethernet_hw_addr">MAC</string>
+ <!-- ethernet ip address -->
+ <string name="ethernet_ip_addr">IP address</string>
+ <!-- ethernet netmask -->
+ <string name="ethernet_netmask">netmask</string>
+ <!-- ethernet gateway -->
+ <string name="ethernet_gateway">gateway</string>
+ <!-- ethernet dns1 -->
+ <string name="ethernet_dns1">dns1</string>
+ <!-- ethernet dns2 -->
+ <string name="ethernet_dns2">dns2</string>
+ <string name="category_ethernet">Static IP Setttings</string>
+ <string name="usedhcp">dhcp</string>
+ <string name="usestatic">static</string>
+ <string name="ethernet_use_static_ip">Use static IP</string>
+ <string name="ethernet_ip_address">IP address</string>
+ <string name="staticip_save">Save</string>
+ <string name="staticip_cancel">Cancel</string>
+ <string name="str_ok">OK</string>
+ <string name="str_cancel">Cancel</string>
+ <string name="str_about">Important</string>
+ <string name="str_mesg">Whether save Settings?</string>
+ <string name="save_failed">Save failed!</string>
+ <string name="ethernet_ip_settings_invalid_ip">Please type a valid IP address.</string>
+ <string name="eth_ip_settings_please_complete_settings">Please give complete static IP settings!</string>
+ <string name="ethernet_quick_toggle_title">Ethernet</string>
+ <!-- Ethernet settings check box summary for turning on ethernet -->
+ <string name="ethernet_quick_toggle_summary_off">Ethernet is disabled</string>
+ <!--Used as title on second screen after selecting Ethernet settings -->
+ <string name="ethernet_quick_toggle_summary_on">Ethernet is enabled</string>
+ <!--Used as title on second screen after selecting Ethernet settings -->
+ <string name="ethernet_mode_title">Ethernet Ip mode</string>
+ <string name="ethernet_info_getting">"getting IP info..."</string>
+ <string name="disabled_low_ram_device">This feature is not available on this device</string>
+ <string name="add_network_cable">Check whether the network cable is connected first</string>
+ <!--<dengli>@<20230412> for <add Ethernet> end -->
</resources>
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/ethernet_settings.xml b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/ethernet_settings.xml
new file mode 100755
index 00000000000..31899a82791
--- /dev/null
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/ethernet_settings.xml
@@ -0,0 +1,74 @@
+<?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/com.android.settings"
+ android:title="@string/ethernet_settings" >
+
+ <!-- $_rbox_$_modify_$_lijiehong: change to support bluetooth checkbox -->
+<!--
+ <SwitchPreference
+ android:key="ethernet"
+ android:title="@string/ethernet_quick_toggle_title"
+ android:summaryOff="@string/ethernet_quick_toggle_summary_off"
+ android:summaryOn="@string/ethernet_quick_toggle_summary_on"
+ android:persistent="false"
+ android:disableDependentsState="true" />
+ -->
+ <!--
+ <Preference
+ style="?android:preferenceInformationStyle"
+ android:key="ethernet_hw_addr"
+ android:summary="@string/device_info_default"
+ android:title="@string/ethernet_hw_addr" />
+ -->
+ <!-- ethernet ip address -->
+ <Preference
+ style="?android:preferenceInformationStyle"
+ android:key="ethernet_ip_addr"
+ android:summary="@string/device_info_default"
+ android:title="@string/ethernet_ip_addr" />
+
+ <!-- ethernet netmask -->
+ <Preference
+ style="?android:preferenceInformationStyle"
+ android:key="ethernet_netmask"
+ android:summary="@string/device_info_default"
+ android:title="@string/ethernet_netmask" />
+
+ <!-- ethernet gateway -->
+ <Preference
+ style="?android:preferenceInformationStyle"
+ android:key="ethernet_gateway"
+ android:summary="@string/device_info_default"
+ android:title="@string/ethernet_gateway" />
+
+ <!-- ethernet dns1 -->
+ <Preference
+ style="?android:preferenceInformationStyle"
+ android:key="ethernet_dns1"
+ android:summary="@string/device_info_default"
+ android:title="@string/ethernet_dns1" />
+
+ <!-- ethernet dns2 -->
+ <Preference
+ style="?android:preferenceInformationStyle"
+ android:key="ethernet_dns2"
+ android:summary="@string/device_info_default"
+ android:title="@string/ethernet_dns2" />
+
+ <ListPreference
+ android:entries="@array/ethernet_mode_location"
+ android:entryValues="@array/ethernet_mode_values"
+ android:key="ethernet_mode_select"
+ android:persistent="true"
+ android:title="@string/ethernet_mode_title" />
+
+ <!--
+ <CheckBoxPreference
+ android:key="static_ethernet"
+ android:title="@string/usestatic" />
+ <CheckBoxPreference
+ android:key="dhcp_ethernet"
+ android:title="@string/usedhcp" />
+ -->
+</PreferenceScreen>
+
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/network_provider_internet.xml b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/network_provider_internet.xml
old mode 100644
new mode 100755
index 9e7086cef91..e0a7b7990b0
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/network_provider_internet.xml
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/network_provider_internet.xml
@@ -131,5 +131,14 @@
android:order="30">
<intent android:action="com.mediatek.security.NETWORK_DATA_CONTROLLER" />
</Preference>
+ <!--<dengli>@<20230412> for <add Ethernet>-->
+ <com.android.settingslib.RestrictedPreference
+ android:fragment="com.android.settings.ethernet.EthernetSettings"
+ android:icon="@drawable/ic_ethernet"
+ android:key="ethernet_settings"
+ android:title="@string/ethernet_settings_title"
+ android:order="35"
+ settings:useAdminDisabledSummary="true"
+ settings:userRestriction="no_ethernet_settings" />
</PreferenceScreen>
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/Settings.java b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/Settings.java
old mode 100644
new mode 100755
index 9c8794de699..cfe90c01682
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/Settings.java
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/Settings.java
@@ -328,6 +328,8 @@ public class Settings extends SettingsActivity {
}
public static class ApnSettingsActivity extends SettingsActivity { /* empty */ }
+ public static class EthernetSettingsActivity extends SettingsActivity { /* empty */ }//<dengli>@<20230412> for <add Ethernet>
+
public static class WifiCallingSettingsActivity extends SettingsActivity {
/// M: Add for revising the action bar for WFC setting. @{
@Override
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SettingsActivity.java b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SettingsActivity.java
old mode 100644
new mode 100755
index 9a325e587dc..1c2151201ed
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SettingsActivity.java
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SettingsActivity.java
@@ -68,6 +68,7 @@ import com.android.settings.core.gateway.SettingsGateway;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.homepage.DeepLinkHomepageActivityInternal;
import com.android.settings.homepage.SettingsHomepageActivity;
+import com.android.settings.ethernet.EthernetSettings;//<dengli>@<20230412> for <add Ethernet>
import com.android.settings.homepage.TopLevelSettings;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.PasswordUtils;
@@ -866,7 +867,12 @@ public class SettingsActivity extends SettingsBaseActivity
somethingChanged = UtilsExt.getMiscPlugin(this).doUpdateTilesList(
this, isAdmin, somethingChanged);
/// @}
-
+ //<dengli>@<20230412> for <add Ethernet>
+ somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
+ Settings.EthernetSettingsActivity.class.getName()),
+ EthernetSettings.isAvailable(), isAdmin)
+ || somethingChanged;
+ //<dengli>@<20230412> for <add Ethernet> end
if (UserHandle.MU_ENABLED && !isAdmin) {
// When on restricted users, disable all extra categories (but only the settings ones).
final List<DashboardCategory> categories = mDashboardFeatureProvider.getAllCategories();
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/core/gateway/SettingsGateway.java b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/core/gateway/SettingsGateway.java
old mode 100644
new mode 100755
index bc982e7759f..69653567126
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -100,6 +100,7 @@ import com.android.settings.display.SmartAutoRotatePreferenceFragment;
import com.android.settings.display.darkmode.DarkModeSettingsFragment;
import com.android.settings.dream.DreamSettings;
import com.android.settings.enterprise.EnterprisePrivacySettings;
+import com.android.settings.ethernet.EthernetSettings;//<dengli>@<20230412> for <add Ethernet>
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleSettings;
@@ -212,6 +213,7 @@ public class SettingsGateway {
WifiTetherSettings.class.getName(),
BackgroundCheckSummary.class.getName(),
VpnSettings.class.getName(),
+ EthernetSettings.class.getName(),//<dengli>@<20230412> for <add Ethernet>
DataSaverSummary.class.getName(),
DateTimeSettings.class.getName(),
LocaleListEditor.class.getName(),
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EtherentStaticIpDialog.java b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EtherentStaticIpDialog.java
new file mode 100755
index 00000000000..321dfde567b
--- /dev/null
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EtherentStaticIpDialog.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2010 The Android Open Source 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 com.android.settings.ethernet;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+
+import com.android.settings.R;
+
+import java.util.regex.Pattern;
+
+import android.content.Context;
+import android.preference.EditTextPreference;
+import android.provider.Settings.System;
+import android.app.AlertDialog;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.provider.Settings.System;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Button;
+
+import android.net.EthernetManager;
+
+class ethernet_static_ip_dialog extends AlertDialog implements TextWatcher {
+
+ public getStaticIpInfo mGetStaticInfo;
+ private TextView mIpAddressView;
+ private TextView mIPgateway;
+ private TextView ipnetmask;
+ private TextView mdns1;
+ private TextView mdns2;
+
+ public EditText ip_address;
+ public EditText ip_gateway;
+ public EditText gateway;
+ public EditText dns1;
+ public EditText dns2;
+
+ static final int BUTTON_SUBMIT = DialogInterface.BUTTON_POSITIVE;
+ static final int BUTTON_FORGET = DialogInterface.BUTTON_NEUTRAL;
+
+ private final static String nullIpInfo = "0.0.0.0";
+
+ // private final boolean mEdit;
+ private final DialogInterface.OnClickListener mListener;
+
+ private View mView;
+ Context mcontext;
+ EthernetManager mEthManager;
+ private String mIfaceName;
+
+ // private boolean mHideSubmitButton;
+
+ public ethernet_static_ip_dialog(Context context, boolean cancelable,
+ DialogInterface.OnClickListener listener, getStaticIpInfo GetgetStaticIpInfo,
+ String ifaceName) {
+ super(context);
+ mcontext = context;
+ mListener = listener;
+ mGetStaticInfo = GetgetStaticIpInfo;
+ mIfaceName = ifaceName;
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ mView = getLayoutInflater().inflate(R.layout.static_ip_dialog, null);
+ setView(mView);
+ setInverseBackgroundForced(true);
+
+ mIpAddressView = (TextView) mView.findViewById(R.id.ipaddress);
+ ipnetmask = (TextView) mView.findViewById(R.id.network_prefix_length);
+ mIPgateway = (TextView) mView.findViewById(R.id.gateway);
+ mdns1 = (TextView) mView.findViewById(R.id.dns1);
+ mdns2 = (TextView) mView.findViewById(R.id.dns2);
+
+ mIpAddressView.addTextChangedListener(this);
+ ipnetmask.addTextChangedListener(this);
+ mIPgateway.addTextChangedListener(this);
+ mdns1.addTextChangedListener(this);
+ mdns2.addTextChangedListener(this);
+
+ setButton(BUTTON_SUBMIT, mcontext.getString(R.string.ethernet_connect), mListener);
+ setButton(BUTTON_NEGATIVE, mcontext.getString(R.string.ethernet_cancel), mListener);
+ setTitle(mcontext.getString(R.string.ethernet_settings));
+
+ mEthManager = (EthernetManager) mcontext.getSystemService(Context.ETHERNET_SERVICE);
+
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ updateIpSettingsInfo();
+ checkIPValue();
+ }
+
+ private void updateIpSettingsInfo() {
+ Log.d("blb", "Static IP status updateIpSettingsInfo");
+ ContentResolver contentResolver = mcontext.getContentResolver();
+ String staticip = /*System.getString(contentResolver,System.ETHERNET_STATIC_IP);*/
+ mEthManager.getIpAddress(mIfaceName);
+ if (!TextUtils.isEmpty(staticip))
+ mIpAddressView.setText(staticip);
+
+ String ipmask = /*System.getString(contentResolver,System.ETHERNET_STATIC_NETMASK);*/
+ mEthManager.getNetmask(mIfaceName);
+ if (!TextUtils.isEmpty(ipmask))
+ ipnetmask.setText(ipmask);
+
+ String gateway = /*System.getString(contentResolver,System.ETHERNET_STATIC_GATEWAY);*/
+ mEthManager.getGateway(mIfaceName);
+ if (!TextUtils.isEmpty(gateway))
+ mIPgateway.setText(gateway);
+
+ String dns = /*System.getString(contentResolver,System.ETHERNET_STATIC_DNS1);*/
+ mEthManager.getDns(mIfaceName);
+ String mDns1 = nullIpInfo;
+ String mDns2 = nullIpInfo;
+ if ((dns != null) && (!dns.equals(""))) {
+ String data[] = dns.split(",");
+ mDns1 = data[0];
+ if (data.length > 1)
+ mDns2 = data[1];
+ }
+ if (!TextUtils.isEmpty(mDns1))
+ mdns1.setText(mDns1);
+ if (!TextUtils.isEmpty(mDns2))
+ mdns2.setText(mDns2);
+ }
+
+ public void saveIpSettingInfo() {
+ ContentResolver contentResolver = mcontext.getContentResolver();
+ String ipAddr = mIpAddressView.getText().toString();
+ String gateway = mIPgateway.getText().toString();
+ String netMask = ipnetmask.getText().toString();
+ String dns1 = mdns1.getText().toString();
+ String dns2 = mdns2.getText().toString();
+ int network_prefix_length = 24;// Integer.parseInt(ipnetmask.getText().toString());
+ mGetStaticInfo.getStaticIp(ipAddr);
+ mGetStaticInfo.getStaticNetMask(netMask);
+ mGetStaticInfo.getStaticGateway(gateway);
+ mGetStaticInfo.getStaticDns1(dns1);
+ mGetStaticInfo.getStaticDns2(dns2);
+ }
+
+ /*
+ * 返回 指定的 String 是否是 有效的 IP 地址.
+ */
+ private boolean isValidIpAddress(String value) {
+ int start = 0;
+ int end = value.indexOf('.');
+ int numBlocks = 0;
+
+ while (start < value.length()) {
+
+ if (-1 == end) {
+ end = value.length();
+ }
+
+ try {
+ int block = Integer.parseInt(value.substring(start, end));
+ if ((block > 255) || (block < 0)) {
+ Log.w("EthernetIP",
+ "isValidIpAddress() : invalid 'block', block = "
+ + block);
+ return false;
+ }
+ } catch (NumberFormatException e) {
+ Log.w("EthernetIP", "isValidIpAddress() : e = " + e);
+ return false;
+ }
+
+ numBlocks++;
+
+ start = end + 1;
+ end = value.indexOf('.', start);
+ }
+ return numBlocks == 4;
+ }
+
+ public void checkIPValue() {
+
+ boolean enable = false;
+ String ipAddr = mIpAddressView.getText().toString();
+ String gateway = mIPgateway.getText().toString();
+ String dns1 = mdns1.getText().toString();
+ String dns2 = mdns2.getText().toString();
+ String netMask = ipnetmask.getText().toString();
+ Pattern pattern = Pattern.compile("(^((\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$)|^(\\d|[1-2]\\d|3[0-2])$"); /*check subnet mask*/
+ if (isValidIpAddress(ipAddr) && isValidIpAddress(gateway)
+ && isValidIpAddress(dns1) && (pattern.matcher(netMask).matches())) {
+ if (TextUtils.isEmpty(dns2)) { // 为空可以不考虑
+ enable = true;
+ } else {
+ if (isValidIpAddress(dns2)) {
+ enable = true;
+ } else {
+ enable = false;
+ }
+ }
+ } else {
+ enable = false;
+ }
+ getButton(BUTTON_SUBMIT).setEnabled(enable);
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ checkIPValue();
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {
+ // work done in afterTextChanged
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ // work done in afterTextChanged
+ }
+
+}
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EthernetSettings.java b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EthernetSettings.java
new file mode 100755
index 00000000000..ff7760974f3
--- /dev/null
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EthernetSettings.java
@@ -0,0 +1,703 @@
+/*
+ * Copyright (C) 2009 The Android Open Source 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 com.android.settings.ethernet;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.admin.DevicePolicyManager;
+import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.net.ConnectivityManager;
+import android.net.InetAddresses;
+import android.net.NetworkInfo;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.SystemProperties;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceScreen;
+import android.provider.SearchIndexableResource;
+import android.provider.Settings;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.content.Intent;
+
+import androidx.preference.SwitchPreference;
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.File;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import java.util.regex.Pattern;
+import java.lang.Integer;
+import java.net.InetAddress;
+import java.net.Inet4Address;
+import java.util.Iterator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
+
+import com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment;
+
+/*for 5.0*/
+import android.net.EthernetManager;
+import android.net.IpConfiguration;
+import android.net.IpConfiguration.IpAssignment;
+import android.net.IpConfiguration.ProxySettings;
+import android.net.wifi.SupplicantState;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.net.StaticIpConfiguration;
+//import android.net.NetworkUtils;
+import android.net.LinkAddress;
+import android.net.LinkProperties;
+import android.widget.Toast;
+//import android.preference.ListPreference;
+//import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+
+import com.android.settings.ethernet.ethernet_static_ip_dialog;
+
+public class EthernetSettings extends SettingsPreferenceFragment
+ implements DialogInterface.OnClickListener, Preference.OnPreferenceChangeListener {
+ private static final String TAG = "EthernetSettings";
+
+ public enum ETHERNET_STATE {
+ ETHER_STATE_DISCONNECTED,
+ ETHER_STATE_CONNECTING,
+ ETHER_STATE_CONNECTED
+ }
+
+ private static final String KEY_ETH_IP_ADDRESS = "ethernet_ip_addr";
+ private static final String KEY_ETH_HW_ADDRESS = "ethernet_hw_addr";
+ private static final String KEY_ETH_NET_MASK = "ethernet_netmask";
+ private static final String KEY_ETH_GATEWAY = "ethernet_gateway";
+ private static final String KEY_ETH_DNS1 = "ethernet_dns1";
+ private static final String KEY_ETH_DNS2 = "ethernet_dns2";
+ private static final String KEY_ETH_MODE = "ethernet_mode_select";
+
+
+ private static String mEthHwAddress = null;
+ private static String mEthIpAddress = null;
+ private static String mEthNetmask = null;
+ private static String mEthGateway = null;
+ private static String mEthdns1 = null;
+ private static String mEthdns2 = null;
+ private final static String nullIpInfo = "0.0.0.0";
+
+ private ListPreference mkeyEthMode;
+ // private SwitchPreference mEthCheckBox;
+ private CheckBoxPreference staticEthernet;
+
+ private final IntentFilter mIntentFilter;
+ IpConfiguration mIpConfiguration;
+ EthernetManager mEthManager;
+ StaticIpConfiguration mStaticIpConfiguration;
+ Context mContext;
+ private ethernet_static_ip_dialog mDialog;
+ private String mIfaceName;
+ private long mChangeTime;
+ private static final int SHOW_RENAME_DIALOG = 0;
+ private static final int ETHER_IFACE_STATE_DOWN = 0;
+ private static final int ETHER_IFACE_STATE_UP = 1;
+
+ private static final String FILE = "/sys/class/net/eth0/flags";
+ private static final int MSG_GET_ETHERNET_STATE = 0;
+
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ if (MSG_GET_ETHERNET_STATE == msg.what) {
+ handleEtherStateChange((ETHERNET_STATE) msg.obj);
+ }
+ }
+ };
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.WIFI_TETHER_SETTINGS;
+ }
+
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case SHOW_RENAME_DIALOG:
+ return MetricsEvent.WIFI_TETHER_SETTINGS;
+ default:
+ return 0;
+ }
+ }
+
+
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ log("Action " + action);
+ if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
+ NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
+ Log.v(TAG, "===" + info.toString());
+ if (null != info && ConnectivityManager.TYPE_ETHERNET == info.getType()) {
+ long currentTime = System.currentTimeMillis();
+ int delayTime = 0;
+ if (currentTime - mChangeTime < 1000) {
+ delayTime = 2000;
+ }
+ if (NetworkInfo.State.CONNECTED == info.getState()) {
+ handleEtherStateChange(ETHERNET_STATE.ETHER_STATE_CONNECTED, delayTime);
+ } else if (NetworkInfo.State.DISCONNECTED == info.getState()) {
+ handleEtherStateChange(ETHERNET_STATE.ETHER_STATE_DISCONNECTED, delayTime);
+ }
+ }
+ }
+ }
+ };
+
+ public EthernetSettings() {
+ mIntentFilter = new IntentFilter();
+ mIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+ }
+
+ private void handleEtherStateChange(ETHERNET_STATE EtherState, long delayMillis) {
+ mHandler.removeMessages(MSG_GET_ETHERNET_STATE);
+ if (delayMillis > 0) {
+ Message msg = new Message();
+ msg.what = MSG_GET_ETHERNET_STATE;
+ msg.obj = EtherState;
+ mHandler.sendMessageDelayed(msg, delayMillis);
+ } else {
+ handleEtherStateChange(EtherState);
+ }
+ }
+
+ private void handleEtherStateChange(ETHERNET_STATE EtherState) {
+ log("curEtherState" + EtherState);
+
+ switch (EtherState) {
+ case ETHER_STATE_DISCONNECTED:
+ mEthHwAddress = nullIpInfo;
+ mEthIpAddress = nullIpInfo;
+ mEthNetmask = nullIpInfo;
+ mEthGateway = nullIpInfo;
+ mEthdns1 = nullIpInfo;
+ mEthdns2 = nullIpInfo;
+ break;
+ case ETHER_STATE_CONNECTING:
+ String mStatusString = this.getResources().getString(R.string.ethernet_info_getting);
+ mEthHwAddress = mStatusString;
+ mEthIpAddress = mStatusString;
+ mEthNetmask = mStatusString;
+ mEthGateway = mStatusString;
+ mEthdns1 = mStatusString;
+ mEthdns2 = mStatusString;
+ break;
+ case ETHER_STATE_CONNECTED:
+ getEthInfo();
+ break;
+ }
+
+ refreshUI();
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.ethernet_settings);
+
+ mContext = this.getActivity().getApplicationContext();
+ mEthManager = (EthernetManager) getSystemService(Context.ETHERNET_SERVICE);
+
+ if (mEthManager == null) {
+ Log.e(TAG, "get ethernet manager failed");
+ Toast.makeText(mContext, R.string.disabled_low_ram_device, Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+ String[] ifaces = mEthManager.getAvailableInterfaces();
+ if (ifaces.length > 0) {
+ mIfaceName = ifaces[0];//"eth0";
+ }
+ if (null == mIfaceName) {
+ Log.e(TAG, "get ethernet ifaceName failed");
+ Toast.makeText(mContext, R.string.add_network_cable, Toast.LENGTH_SHORT).show();
+ finish();
+ }
+ }
+
+ private Inet4Address getIPv4Address(String text) {
+ try {
+ return (Inet4Address)InetAddresses.parseNumericAddress(text);
+ } catch (IllegalArgumentException | ClassCastException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (null == mIfaceName) {
+ return;
+ }
+ if (mkeyEthMode == null) {
+ mkeyEthMode = (ListPreference) findPreference(KEY_ETH_MODE);
+ mkeyEthMode.setOnPreferenceChangeListener(this);
+ }
+ /*
+ if (mEthCheckBox== null) {
+ mEthCheckBox = (SwitchPreference) findPreference("ethernet");
+ mEthCheckBox.setOnPreferenceChangeListener(this);
+ }
+ */
+ //handleEtherStateChange(1 == getEthernetCarrierState(mIfaceName)? EthernetManager.ETHER_STATE_CONNECTED/*mEthManager.getEthernetConnectState()*/);
+ refreshUI();
+ log("resume");
+ mContext.registerReceiver(mReceiver, mIntentFilter);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (null == mIfaceName) {
+ return;
+ }
+ mContext.unregisterReceiver(mReceiver);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mHandler.removeMessages(MSG_GET_ETHERNET_STATE);
+ log("destory");
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ log("stop");
+ }
+
+ private void setStringSummary(String preference, String value) {
+ try {
+ findPreference(preference).setSummary(value);
+ } catch (RuntimeException e) {
+ findPreference(preference).setSummary("");
+ log("can't find " + preference);
+ }
+ }
+
+ private String getStringFromPref(String preference) {
+ try {
+ return findPreference(preference).getSummary().toString();
+ } catch (RuntimeException e) {
+ return null;
+ }
+ }
+
+ private void refreshUI() {
+
+ // setStringSummary(KEY_ETH_HW_ADDRESS,mEthHwAddress);
+
+ setStringSummary(KEY_ETH_IP_ADDRESS, mEthIpAddress);
+ setStringSummary(KEY_ETH_NET_MASK, mEthNetmask);
+ setStringSummary(KEY_ETH_GATEWAY, mEthGateway);
+ setStringSummary(KEY_ETH_DNS1, mEthdns1);
+ setStringSummary(KEY_ETH_DNS2, mEthdns2);
+ updateCheckbox();
+ }
+
+ private void updateCheckbox() { //
+
+ if (mEthManager == null) {
+ mkeyEthMode.setSummary("null");
+ } else {
+ IpAssignment mode = mEthManager.getConfiguration(mIfaceName).getIpAssignment();
+ if (mode == IpAssignment.DHCP || mode == IpAssignment.UNASSIGNED) {
+ mkeyEthMode.setValue("DHCP");
+ mkeyEthMode.setSummary(R.string.usedhcp);
+ } else {
+ mkeyEthMode.setValue("StaticIP");
+ mkeyEthMode.setSummary(R.string.usestatic);
+ }
+/* int isEnable = mEthManager.getEthernetIfaceState();
+ if(isEnable == ETHER_IFACE_STATE_UP) {
+ mEthCheckBox.setChecked(true);
+ }else{
+ mEthCheckBox.setChecked(false);
+ }
+*/
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ log("onPreferenceChange");
+ if (preference == mkeyEthMode) {
+ String value = (String) newValue;
+ if (value.equals("DHCP")) {
+ mChangeTime = System.currentTimeMillis();
+ handleEtherStateChange(ETHERNET_STATE.ETHER_STATE_CONNECTING);
+ IpConfiguration ipConfiguration = new IpConfiguration();
+ ipConfiguration.setIpAssignment(IpAssignment.DHCP);
+ ipConfiguration.setProxySettings(ProxySettings.NONE);
+ mEthManager.setConfiguration(mIfaceName, ipConfiguration);
+ SystemProperties.set("persist.xxxxx.ethernet_static","0");
+ SystemProperties.set("persist.xxxxx.ethernet_static_ip","");
+ SystemProperties.set("persist.xxxxx.ethernet_static_gateway","");
+ SystemProperties.set("persist.xxxxx.ethernet_static_mask","");
+ SystemProperties.set("persist.xxxxx.ethernet_static_dns1","");
+ SystemProperties.set("persist.xxxxx.ethernet_static_dns2","");
+ log("switch to dhcp");
+ } else if (value.equals("StaticIP")) {
+ log("static editor");
+ this.showDialog(SHOW_RENAME_DIALOG);
+ }
+
+ }
+ return true;
+ }
+
+ //将子网掩码转换成ip子网掩码形式,比如输入32输出为255.255.255.255
+ public String interMask2String(int prefixLength) {
+ String netMask = null;
+ int inetMask = prefixLength;
+
+ int part = inetMask / 8;
+ int remainder = inetMask % 8;
+ int sum = 0;
+
+ for (int i = 8; i > 8 - remainder; i--) {
+ sum = sum + (int) Math.pow(2, i - 1);
+ }
+
+ if (part == 0) {
+ netMask = sum + ".0.0.0";
+ } else if (part == 1) {
+ netMask = "255." + sum + ".0.0";
+ } else if (part == 2) {
+ netMask = "255.255." + sum + ".0";
+ } else if (part == 3) {
+ netMask = "255.255.255." + sum;
+ } else if (part == 4) {
+ netMask = "255.255.255.255";
+ }
+
+ return netMask;
+ }
+
+ /*
+ * convert subMask string to prefix length
+ */
+ private int maskStr2InetMask(String maskStr) {
+ StringBuffer sb;
+ String str;
+ int inetmask = 0;
+ int count = 0;
+ /*
+ * check the subMask format
+ */
+ Pattern pattern = Pattern.compile("(^((\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$)|^(\\d|[1-2]\\d|3[0-2])$");
+ if (pattern.matcher(maskStr).matches() == false) {
+ Log.e(TAG, "subMask is error");
+ return 0;
+ }
+
+ String[] ipSegment = maskStr.split("\\.");
+ for (int n = 0; n < ipSegment.length; n++) {
+ sb = new StringBuffer(Integer.toBinaryString(Integer.parseInt(ipSegment[n])));
+ str = sb.reverse().toString();
+ count = 0;
+ for (int i = 0; i < str.length(); i++) {
+ i = str.indexOf("1", i);
+ if (i == -1)
+ break;
+ count++;
+ }
+ inetmask += count;
+ }
+ return inetmask;
+ }
+
+ private boolean setStaticIpConfiguration() {
+ /*
+ * get ip address, netmask,dns ,gw etc.
+ */
+ Inet4Address inetAddr = getIPv4Address(this.mEthIpAddress);
+ int prefixLength = maskStr2InetMask(this.mEthNetmask);
+ InetAddress gatewayAddr = getIPv4Address(this.mEthGateway);
+ InetAddress dnsAddr = getIPv4Address(this.mEthdns1);
+
+ if (null == inetAddr || inetAddr.getAddress().toString().isEmpty()
+ || prefixLength == 0
+ || gatewayAddr.toString().isEmpty()
+ || dnsAddr.toString().isEmpty()) {
+ log("ip,mask or dnsAddr is wrong");
+ return false;
+ }
+
+ String dnsStr2 = this.mEthdns2;
+ ArrayList<InetAddress> dnsAddrs = new ArrayList<InetAddress>();
+ dnsAddrs.add(dnsAddr);
+ if (!dnsStr2.isEmpty()) {
+ dnsAddrs.add(getIPv4Address(dnsStr2));
+ }
+ mStaticIpConfiguration = new StaticIpConfiguration.Builder()
+ .setIpAddress(new LinkAddress(inetAddr, prefixLength))
+ .setGateway(gatewayAddr)
+ .setDnsServers(dnsAddrs)
+ .build();
+
+ mIpConfiguration = new IpConfiguration();
+ mIpConfiguration.setIpAssignment(IpAssignment.STATIC);
+ mIpConfiguration.setProxySettings(ProxySettings.NONE);
+ mIpConfiguration.setStaticIpConfiguration(mStaticIpConfiguration);
+ SystemProperties.set("persist.xxxxx.ethernet_static_ip",mEthIpAddress);
+ SystemProperties.set("persist.xxxxx.ethernet_static_gateway",mEthGateway);
+ SystemProperties.set("persist.xxxxx.ethernet_static_mask",mEthNetmask);
+ SystemProperties.set("persist.xxxxx.ethernet_static_dns1",mEthdns1);
+ SystemProperties.set("persist.xxxxx.ethernet_static_dns2",mEthdns2);
+ return true;
+ }
+
+ public void getEthInfoFromDhcp() {
+ String tempIpInfo;
+
+ tempIpInfo = /*SystemProperties.get("dhcp."+ iface +".ipaddress");*/
+ mEthManager.getIpAddress(mIfaceName);
+
+ if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) {
+ mEthIpAddress = tempIpInfo;
+ } else {
+ mEthIpAddress = nullIpInfo;
+ }
+
+ tempIpInfo = /*SystemProperties.get("dhcp."+ iface +".mask");*/
+ mEthManager.getNetmask(mIfaceName);
+ if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) {
+ mEthNetmask = tempIpInfo;
+ } else {
+ mEthNetmask = nullIpInfo;
+ }
+
+ tempIpInfo = /*SystemProperties.get("dhcp."+ iface +".gateway");*/
+ mEthManager.getGateway(mIfaceName);
+ if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) {
+ mEthGateway = tempIpInfo;
+ } else {
+ mEthGateway = nullIpInfo;
+ }
+
+ tempIpInfo = /*SystemProperties.get("dhcp."+ iface +".dns1");*/
+ mEthManager.getDns(mIfaceName);
+ if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) {
+ String data[] = tempIpInfo.split(",");
+ mEthdns1 = data[0];
+ if (data.length <= 1) {
+ mEthdns2 = nullIpInfo;
+ } else {
+ mEthdns2 = data[1];
+ }
+ } else {
+ mEthdns1 = nullIpInfo;
+ }
+ }
+
+ public void getEthInfoFromStaticIp() {
+ StaticIpConfiguration staticIpConfiguration = mEthManager.getConfiguration(mIfaceName).getStaticIpConfiguration();
+
+ if (staticIpConfiguration == null) {
+ return;
+ }
+ LinkAddress ipAddress = staticIpConfiguration.getIpAddress();
+ InetAddress gateway = staticIpConfiguration.getGateway();
+ List<InetAddress> dnsServers = staticIpConfiguration.getDnsServers();
+
+ if (ipAddress != null) {
+ mEthIpAddress = ipAddress.getAddress().getHostAddress();
+ mEthNetmask = interMask2String(ipAddress.getPrefixLength());
+ }
+ if (gateway != null) {
+ mEthGateway = gateway.getHostAddress();
+ }
+ mEthdns1 = dnsServers.get(0).getHostAddress();
+
+ if (dnsServers.size() > 1) { /* 只保留两个*/
+ mEthdns2 = dnsServers.get(1).getHostAddress();
+ }
+ }
+
+ /*
+ * TODO:
+ */
+ public void getEthInfo() {
+ /*
+ mEthHwAddress = mEthManager.getEthernetHwaddr(mEthManager.getEthernetIfaceName());
+ if (mEthHwAddress == null) mEthHwAddress = nullIpInfo;
+ */
+ IpAssignment mode = mEthManager.getConfiguration(mIfaceName).getIpAssignment();
+
+
+ if (mode == IpAssignment.DHCP || mode == IpAssignment.UNASSIGNED) {
+ /*
+ * getEth from dhcp
+ */
+ getEthInfoFromDhcp();
+ } else if (mode == IpAssignment.STATIC) {
+ /*
+ * TODO: get static IP
+ */
+ getEthInfoFromStaticIp();
+ }
+ }
+
+ /*
+ * tools
+ */
+ private void log(String s) {
+ Log.d(TAG, s);
+ }
+
+ @Override
+ public void onClick(DialogInterface dialogInterface, int button) {
+ if (button == ethernet_static_ip_dialog.BUTTON_SUBMIT) {
+ mDialog.saveIpSettingInfo(); //从Dialog获取静态数据
+ if (setStaticIpConfiguration()) {
+ mChangeTime = System.currentTimeMillis();
+ handleEtherStateChange(ETHERNET_STATE.ETHER_STATE_CONNECTING);
+ mEthManager.setConfiguration(mIfaceName, mIpConfiguration);
+ SystemProperties.set("persist.xxxxx.ethernet_static_kte","0");
+ SystemProperties.set("persist.xxxxx.ethernet_static","1");
+ } else {
+ Log.e(TAG, mIpConfiguration.toString());
+ }
+ }
+ updateCheckbox();
+ }
+
+ @Override
+ public Dialog onCreateDialog(int dialogId) {
+ log("onCreateDialog " + dialogId);
+ switch (dialogId) {
+ case SHOW_RENAME_DIALOG:
+
+ mDialog = new ethernet_static_ip_dialog(getActivity(), false, this, mGetStaticIpInfo, mIfaceName);
+ return mDialog;
+ }
+ return super.onCreateDialog(dialogId);
+ }
+
+ /*interface*/
+
+ public getStaticIpInfo mGetStaticIpInfo = new getStaticIpInfo() {
+
+ public boolean getStaticIp(String ipAddr) {
+ mEthIpAddress = ipAddr;
+
+ log("ipAddr: " + ipAddr);
+ return true;
+ }
+
+ public boolean getStaticNetMask(String netMask) {
+ mEthNetmask = netMask;
+
+ log("netMask: " + netMask);
+ return true;
+ }
+
+ public boolean getStaticGateway(String gateway) {
+ mEthGateway = gateway;
+
+ log("gateway: " + gateway);
+ return true;
+ }
+
+ public boolean getStaticDns1(String dns1) {
+ mEthdns1 = dns1;
+
+ log("dns1: " + dns1);
+ return true;
+ }
+
+ public boolean getStaticDns2(String dns2) {
+ mEthdns2 = dns2;
+
+ log("dns2: " + dns2);
+ return true;
+ }
+ };
+
+ private String ReadFromFile(File file) {
+ if ((file != null) && file.exists()) {
+ try {
+ FileInputStream fin = new FileInputStream(file);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
+ String flag = reader.readLine();
+ fin.close();
+ return flag;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return null;
+ }
+
+ private int getEthernetCarrierState(String iface) {
+ if (iface != "") {
+ try {
+ File file = new File("/sys/class/net/" + iface + "/carrier");
+ String carrier = ReadFromFile(file);
+ return Integer.parseInt(carrier);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ public static boolean isAvailable() {
+ return "true".equals(SystemProperties.get("ro.xxxxx.ethernet_settings"));
+ }
+}
\ No newline at end of file
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EthernetSettingsPreferenceController.java b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EthernetSettingsPreferenceController.java
new file mode 100755
index 00000000000..c9793e46b85
--- /dev/null
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/EthernetSettingsPreferenceController.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2016 The Android Open Source 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 com.android.settings.ethernet;
+
+import android.content.Context;
+import android.os.SystemProperties;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+public class EthernetSettingsPreferenceController extends AbstractPreferenceController implements
+ PreferenceControllerMixin {
+
+ private final String mEthernetSettingsKey;
+
+ public EthernetSettingsPreferenceController(Context context, String key) {
+ super(context);
+ mEthernetSettingsKey = key;
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return EthernetSettings.isAvailable();
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return mEthernetSettingsKey;
+ }
+
+}
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/getStaticIpInfo.java b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/getStaticIpInfo.java
new file mode 100755
index 00000000000..396482af689
--- /dev/null
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/ethernet/getStaticIpInfo.java
@@ -0,0 +1,9 @@
+package com.android.settings.ethernet;
+
+public interface getStaticIpInfo {
+ public boolean getStaticIp(String ipAddr);
+ public boolean getStaticNetMask(String netMask);
+ public boolean getStaticGateway(String gateway);
+ public boolean getStaticDns1(String dns1);
+ public boolean getStaticDns2(String dns2);
+}
diff --git a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/network/NetworkDashboardFragment.java b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/network/NetworkDashboardFragment.java
old mode 100644
new mode 100755
index 197baae82a2..eb155879fea
--- a/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/system/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -46,7 +46,8 @@ import com.mediatek.settings.network.NetworkDataControllerPreferenceController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-
+//<dengli>@<20230412> for <add Ethernet>
+import com.android.settings.ethernet.EthernetSettings;
@SearchIndexable
public class NetworkDashboardFragment extends DashboardFragment implements
MobilePlanPreferenceHost, OnActivityResultListener {
@@ -80,6 +81,11 @@ public class NetworkDashboardFragment extends DashboardFragment implements
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
super.onCreatePreferences(savedInstanceState, rootKey);
use(AllInOneTetherPreferenceController.class).initEnabler(getSettingsLifecycle());
+ //<dengli>@<20230412> for <add Ethernet>
+ if(!EthernetSettings.isAvailable()){
+ getPreferenceScreen().removePreference(findPreference("ethernet_settings"));
+ }
+ //<dengli>@<20230412> for <add Ethernet>
}
@Override
以上就是一个整体的修改,其中ro.xxxxx 和persist.xxxxx开头属性可以按需修改