1./rk3288-7.1/frameworks/base:
diff --git a/core/java/android/net/EthernetManager.java b/core/java/android/net/EthernetManager.java
index 7b7e7cd..a991306 100755
--- a/core/java/android/net/EthernetManager.java
+++ b/core/java/android/net/EthernetManager.java
@@ -64,6 +64,28 @@ public class EthernetManager {
      * @hide
      */
     public static final int ETHER_STATE_DISCONNECTING = 3;
+       
+       //wmc add for ethernet
+       /**
+     * @hide
+     */
+    public static final String  EXTRA_ETHERNET_IFACE_STATE = "ethernet_iface_state";
+       
+       /**
+     * @hide
+     */
+    public static final String  ETHERNET_IFACE_STATE_CHANGED_ACTION = "android.net.ethernet.ETHERNET_IFACE_STATE_CHANGED";
+       
+       /**
+     * @hide
+     */
+    public static final int ETHER_IFACE_STATE_DOWN = 0;
+       
+       /**
+     * @hide
+     */
+    public static final int ETHER_IFACE_STATE_UP = 1;
+       //wmc add for ethernet end
 
     private final Context mContext;
     private final IEthernetManager mService;
@@ -144,6 +166,14 @@ public class EthernetManager {
             throw e.rethrowFromSystemServer();
         }
     }
+       
+    public boolean setEthernetEnabled(boolean enabled) {
+        try {
+            return mService.setEthernetEnabled(enabled);
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
 
     public int getEthernetCarrierState(String ifname) {
         try {
@@ -168,6 +198,14 @@ public class EthernetManager {
             throw e.rethrowFromSystemServer();
         }
     }
+       
+       public int getEthernetIfaceState() {
+       try {
+            return mService.getEthernetIfaceState();
+       } catch (RemoteException e) {
+            return EthernetManager.ETHER_IFACE_STATE_DOWN;
+       }
+    }
 
     public String getIpAddress() {
         try {
diff --git a/core/java/android/net/IEthernetManager.aidl b/core/java/android/net/IEthernetManager.aidl
old mode 100644
new mode 100755
index 39d6b13..4a04fcb
--- a/core/java/android/net/IEthernetManager.aidl
+++ b/core/java/android/net/IEthernetManager.aidl
@@ -41,4 +41,6 @@ interface IEthernetManager
     void disconnect(String iface);
     void addListener(in IEthernetServiceListener listener);
     void removeListener(in IEthernetServiceListener listener);
+       boolean setEthernetEnabled(in boolean enable);
+    int getEthernetIfaceState();
 }
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index b08eeb9..9da039f 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2549,6 +2549,11 @@ public final class Settings {
         @Deprecated
         public static final String MODE_RINGER = Global.MODE_RINGER;
 
+               /**
+         * @hide wmc add for ethernet
+         */
+        public static final String ETHERNET_ON = Secure.ETHERNET_ON;
+               
         /**
          * @hide
          */
@@ -5131,6 +5136,11 @@ public final class Settings {
          * @hide
          */
         public static final String PPPOE_PHY_IFACE = "pppoe_phy_iface";
+               
+        /**
+         * @hide wmc add for ethernet
+         */
+        public static final String ETHERNET_ON = "ethernet_on";
 
         /**
          * Whether to draw text with high contrast while in accessibility mode.
          
2.rk3288-7.1/frameworks/opt/net/ethernet:
diff --git a/java/com/android/server/ethernet/EthernetNetworkFactory.java b/java/com/android/server/ethernet/EthernetNetworkFactory.java
index 15fe2e2..45cc4ae 100755
--- a/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -130,6 +130,7 @@ class EthernetNetworkFactory {
     private Thread mIpProvisioningThread;
 
     public int mEthernetCurrentState = EthernetManager.ETHER_STATE_DISCONNECTED;
+       public int ethCurrentIfaceState = EthernetManager.ETHER_IFACE_STATE_DOWN;
     private boolean mReconnecting;
     private IpAssignment mConnectMode;
 
@@ -155,6 +156,15 @@ class EthernetNetworkFactory {
         intent.putExtra(EthernetManager.EXTRA_ETHERNET_STATE, curState);
         mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
     }
+       
+    private void sendEthIfaceStateChangedBroadcast(int curState) {
+        final Intent intent = new Intent(EthernetManager.ETHERNET_IFACE_STATE_CHANGED_ACTION);
+        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+        intent.putExtra(EthernetManager.EXTRA_ETHERNET_IFACE_STATE, curState);
+        ethCurrentIfaceState = curState;
+        Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.ETHERNET_ON, curState);
+        mContext.sendStickyBroadcast(intent);
+    }
 
     private String ReadFromFile(File file) {
         if((file != null) && file.exists()) {
@@ -308,6 +318,7 @@ class EthernetNetworkFactory {
 
     private void setInterfaceUp(String iface) {
         // Bring up the interface so we get link status indications.
+               int ethernet_on = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ETHERNET_ON, 1);
         Log.d(TAG, "setInterfaceUp: " + iface);
         try {
             mNMService.setInterfaceUp(iface);
@@ -329,6 +340,9 @@ class EthernetNetworkFactory {
                     mNMService.setInterfaceDown(iface);
                 }
             }
+
+                        if (ethernet_on == 0)
+                mNMService.setInterfaceDown(iface);
         } catch (RemoteException e) {
             Log.e(TAG, "Error upping interface " + mIface + ": " + e);
         }
@@ -816,6 +830,57 @@ class EthernetNetworkFactory {
             mListeners.finishBroadcast();
         }
     }
+       
+       public int getEthernetIfaceState() {
+        // enforceAccessPermission();
+        //Log.d(TAG, "getEthernetIfaceState()");
+        File file = new File("/sys/class/net/" + mIface + "/flags");
+        String flags = ReadFromFile(file);
+        //Log.d(TAG, "flags=" + flags);
+        if (flags == null) {
+            return EthernetManager.ETHER_IFACE_STATE_DOWN;
+        }
+
+        String flags_no_0x = flags.substring(2);
+        int flags_int = Integer.parseInt(flags_no_0x, 16);
+        if ((flags_int & 0x1) > 0) {
+            //Log.d(TAG, "state=up");
+            return EthernetManager.ETHER_IFACE_STATE_UP;
+        } else {
+            //Log.d(TAG, "state=down");
+            return EthernetManager.ETHER_IFACE_STATE_DOWN;
+        }
+    }
+
+    public boolean setInterfaceDown() {
+        try {
+            if (!TextUtils.isEmpty(mIface)) {
+                mNMService.setInterfaceDown(mIface);
+                sendEthIfaceStateChangedBroadcast(EthernetManager.ETHER_IFACE_STATE_DOWN);
+                return true;
+            } else {
+                Log.e(TAG, "mIface is null");
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "Error downing interface " + mIface + ": " + e);
+        }
+        return false;
+    }
+
+    public boolean setInterfaceUp() {
+        try {
+            if (!TextUtils.isEmpty(mIface)) {
+                mNMService.setInterfaceUp(mIface);
+                sendEthIfaceStateChangedBroadcast(EthernetManager.ETHER_IFACE_STATE_UP);
+                return true;
+            } else {
+                Log.e(TAG, "mIface is null");
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "Error downing interface " + mIface + ": " + e);
+        }
+        return false;
+    }
 
     synchronized void dump(FileDescriptor fd, IndentingPrintWriter pw, String[] args) {
         if (isTrackingInterface()) {
diff --git a/java/com/android/server/ethernet/EthernetServiceImpl.java b/java/com/android/server/ethernet/EthernetServiceImpl.java
index dcac91b..2918bc4 100755
--- a/java/com/android/server/ethernet/EthernetServiceImpl.java
+++ b/java/com/android/server/ethernet/EthernetServiceImpl.java
@@ -227,6 +227,22 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
         enforceAccessPermission();
         mTracker.disconnect(iface);
     }
+       
+       @Override
+    public int getEthernetIfaceState() {
+        return mTracker.getEthernetIfaceState();
+    }
+
+    @Override
+    public boolean setEthernetEnabled(boolean enable) {
+        //enforceChangePermission();
+        Log.i(TAG, "setEthernetEnabled() : enable=" + enable);
+        if (enable) {
+            return mTracker.setInterfaceUp();
+        } else {
+            return mTracker.setInterfaceDown();
+        }
+    }
 
     @Override
     protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
    
3.rk3288-7.1/packages/apps/Settings:
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a1b2173..6f45f55 100755
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -3089,6 +3089,7 @@
     <string name="ethernet_data_usage" msg+mEthManager.getConfiguration().toString());
+        }
+        return super.onPreferenceTreeClick(preference);
+    }  
     
   //将子网掩码转换成ip子网掩码形式,比如输入32输出为255.255.255.255  
     public  String interMask2String(int prefixLength) {
    
    
参考:https://www.codeleading.com/article/5500991651/

 

相关文章:

  • 2022-02-21
  • 2021-07-20
  • 2021-12-02
  • 2021-08-06
  • 2021-12-05
  • 2021-07-16
  • 2021-06-15
  • 2021-05-08
猜你喜欢
  • 2021-04-02
  • 2021-08-12
  • 2021-12-26
  • 2021-10-26
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
相关资源
相似解决方案