[RK3399][Android8.1.0][ETHERNET]添加setEthernetEnable()接口

测试平台

Platform: RK3399
OS: 8.1

说明

RK3399-8.1中没有控制Ethernet开关的接口,为了满足部分应用场景需要特添加setEthernetEnabled(boolean enable)和isEthernetInterfaceActive()来对开关进行控制及获取实时状态

实现代码

diff --git a/java/com/android/server/ethernet/EthernetNetworkFactory.java b/java/com/android/server/ethernet/EthernetNetworkFactory.java
index 89ddfb2..e2f78aa 100755
--- a/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -399,6 +399,53 @@ class EthernetNetworkFactory {
         }
     }
 
+    public boolean isEthernetInterfaceActive(){
+        return Settings.System.getInt(mContext.getContentResolver(),Settings.System.ETHERNET_ON,1) != 0;
+    }
+
+    public void setInterfaceDown() {
+        Log.e(TAG, "setInterfaceDown mIface:" + mIface);
+        try {
+           if(!TextUtils.isEmpty(mIface)) {
+               updateInterfaceState(mIface,false);
+               Settings.System.putInt(mContext.getContentResolver(),Settings.System.ETHERNET_ON,0);
+           }
+        }catch (Exception e) {
+            Log.e(TAG, "Error downing interface " + mIface + ": " + e);
+        }
+    }
+   public void setInterfaceUp() {
+       Log.e(TAG, "setInterfaceUp mIface:" + mIface);
+       try {
+           if(!TextUtils.isEmpty(mIface)) {
+              updateInterfaceState(mIface,true);
+              Settings.System.putInt(mContext.getContentResolver(),Settings.System.ETHERNET_ON,1);
+             }
+        }catch (Exception e) {
+            Log.e(TAG, "Error uping interface " + mIface + ": " + e);
+        }
+    }
+
     private boolean maybeTrackInterface(String iface) {
         // If we don't already have an interface, and if this interface matches
         // our regex, start tracking it.
@@ -688,8 +735,9 @@ class EthernetNetworkFactory {
                             } catch (InterruptedException ignore) {
                             }
                             int carrier = getEthernetCarrierState(mIfaceTmp);
+                            int ethernet_on = Settings.System.getInt(mContext.getContentResolver(),Settings.System.ETHERNET_ON,1);
                             Log.d(TAG, mIfaceTmp + " carrier = " + carrier);
-                            if (carrier == 1) {
+                            if (carrier == 1 && ethernet_on != 0) {
                                 updateInterfaceState(mIfaceTmp, true);
                             } else if (mEthernetCurrentState != EthernetManager.ETHER_STATE_DISCONNECTED ){
                                 updateInterfaceState(mIfaceTmp, false);
@@ -39,7 +41,7 @@ public final class EthernetService extends SystemService {
     @Override
     public void onBootPhase(int phase) {
         if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
-            mImpl.start();
+             mImpl.start();
         }
     }
 }
diff --git a/java/com/android/server/ethernet/EthernetServiceImpl.java b/java/com/android/server/ethernet/EthernetServiceImpl.java
index bab8863..beb26a0 100755
--- a/java/com/android/server/ethernet/EthernetServiceImpl.java
+++ b/java/com/android/server/ethernet/EthernetServiceImpl.java
@@ -80,6 +80,23 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
                 "ConnectivityService");
     }
 
+    public void setEthernetEnabled(boolean enable) {
+        //enforceChangePermission();
+        Log.i(TAG,"setEthernetEnabled() : enable="+enable);
+        if ( enable ) {
+            // start();
+            mTracker.setInterfaceUp();
+        } else {
+            // stop();
+            mTracker.setInterfaceDown(); 
+        }
+    }
+
+    public boolean isEthernetInterfaceActive() {
+        //enforceChangePermission();
+        return mTracker.isEthernetInterfaceActive();
+    }
+
     public void start() {
         Log.i(TAG, "Starting Ethernet service");
 
@@ -92,6 +109,11 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
         mStarted.set(true);
     }
 
+    public void stop(){
+        mTracker.stop();
+        mStarted.set(false);
+    }
+
     /**
      * Get Ethernet configuration
      * @return the Ethernet Configuration, contained in {@link IpConfiguration}. 

diff --git a/frameworks/base/core/java/android/net/EthernetManager.java b/frameworks/base/core/java/android/net/EthernetManager.java
index adfaf08..c3e9445 100755
--- a/frameworks/base/core/java/android/net/EthernetManager.java
+++ b/frameworks/base/core/java/android/net/EthernetManager.java
@@ -24,7 +24,7 @@ import android.net.IpConfiguration;
 import android.os.Handler;
 import android.os.Message;
 import android.os.RemoteException;
-
+import android.util.Log;
 import java.util.ArrayList;
 
 
@@ -147,6 +147,24 @@ public class EthernetManager {
         }
     }
     
+    public void setEthernetEnabled(boolean enabled) {
+        Log.d(TAG,enabled ? "turn on Ethernet" : "turn off Ethernet");
+        try {
+             mService.setEthernetEnabled(enabled);
+        } catch (RemoteException e) {
+            
+        }
+    }
+
+    public boolean isEthernetInterfaceActive() {
+        try {
+             return mService.isEthernetInterfaceActive();
+        } catch (RemoteException e) {
+            
+        }
+        return false;
+    }
+
     public int getEthernetCarrierState(String ifname) {
         try {
             return mService.getEthernetCarrierState(ifname);
diff --git a/frameworks/base/core/java/android/net/IEthernetManager.aidl b/frameworks/base/core/java/android/net/IEthernetManager.aidl
index 39d6b13..e4f1b11 100755
--- a/frameworks/base/core/java/android/net/IEthernetManager.aidl
+++ b/frameworks/base/core/java/android/net/IEthernetManager.aidl
@@ -41,4 +41,8 @@ interface IEthernetManager
     void disconnect(String iface);
     void addListener(in IEthernetServiceListener listener);
     void removeListener(in IEthernetServiceListener listener);
+
+    void setEthernetEnabled(in boolean enable);
+    boolean isEthernetInterfaceActive();
+
 }
diff --git a/frameworks/base/core/java/android/net/InterfaceConfiguration.java b/frameworks/base/core/java/android/net/InterfaceConfiguration.java
index 34cde08..095d1f1 100644
--- a/frameworks/base/core/java/android/net/InterfaceConfiguration.java
+++ b/frameworks/base/core/java/android/net/InterfaceConfiguration.java
@@ -33,8 +33,8 @@ public class InterfaceConfiguration implements Parcelable {
     private LinkAddress mAddr;
     private HashSet<String> mFlags = Sets.newHashSet();
 
-    private static final String FLAG_UP = "up";
-    private static final String FLAG_DOWN = "down";
+    public static final String FLAG_UP = "up";
+    public static final String FLAG_DOWN = "down";
 
     @Override
     public String toString() {
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index d5a9d09..756558a 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3065,6 +3065,11 @@ public final class Settings {
         private static final Validator DIM_SCREEN_VALIDATOR = sBooleanValidator;
 
         /**
+         * @hide
+         */
+        public static final String ETHERNET_ON = "etnernet_on";
+
+        /**
          * The display color mode.
          * @hide
          */
-- 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值