(3)SystemUI修改
拷贝systemui下所有.png文件到frameworks/base/packages/SystemUI/res/drawable下
修改frameworks/base/packages/SystemUI/res/values/strings.xml
在
<string name="accessibility_no_sim">No SIM.</string>
下增加如下
<!-- Content description of the Ethernet connected icon for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --><string name="accessibility_ethernet_connected">Ethernet connected.</string><string name="accessibility_ethernet_disconnected">Ethernet disconnected.</string><string name="accessibility_ethernet_connecting">Ethernet connecting.</string>
修改frameworks/base/packages/SystemUI/res/layout/signal_cluster_view.xml
在
<View
android:layout_height="6dp"
android:layout_width="6dp"
android:visibility="gone"
android:id="@+id/spacer"
/>
<!--<FrameLayout
android:id="@+id/wimax_combo"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginEnd="-6dp"
>
上增加
<FrameLayoutandroid:id="@+id/ethernet_combo"android:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_marginRight="-6dp"><ImageViewandroid:id="@+id/ethernet_state"android:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:scaleType="center"/></FrameLayout>
修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
在
private int mWifiStrengthId = 0;
下增加
private boolean mEthernetVisible = false;private int mEthernetStateId = 0;
在private String mWifiDescription, mMobileDescription, mMobileTypeDescription,mEthernetDescription;
后增加,mEthernetDescription如上
然后增加mEthernetGroup,mEthernet如下
ViewGroup mWifiGroup, mMobileGroup,mEthernetGroup;
ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType, mAirplane,mEthernet;
在
@Override
public void setIsAirplaneMode(boolean is, int airplaneIconId) {
mIsAirplaneMode = is;
mAirplaneIconId = airplaneIconId;
apply();
}
下增加
@Overridepublic void setEthernetIndicators(boolean visible, int stateIcon, int activityIcon, String contentDescription) {mEthernetVisible = visible;mEthernetStateId = stateIcon;//mEthernetActivityId = activityIcon;mEthernetDescription = contentDescription;apply();}
在
mAirplane = (ImageView) findViewById(R.id.airplane);
下增加
mEthernetGroup = (ViewGroup) findViewById(R.id.ethernet_combo);mEthernet = (ImageView) findViewById(R.id.ethernet_state);
在mAirplane = null;下增加mEthernetGroup = null;mEthernet = null;
在
if (mIsAirplaneMode) {
mAirplane.setImageResource(mAirplaneIconId);
mAirplane.setVisibility(View.VISIBLE);
} else {
mAirplane.setVisibility(View.GONE);
}
下增加
if (mEthernetVisible) {mEthernetGroup.setVisibility(View.VISIBLE);mEthernet.setImageResource(mEthernetStateId);//mEthernetActivity.setImageResource(mEthernetActivityId);mEthernetGroup.setContentDescription(mEthernetDescription);} else {mEthernetGroup.setVisibility(View.GONE);}
然后增加mEthernetVisible如下
if (mMobileVisible && mWifiVisible && mIsAirplaneMode && mEthernetVisible) {
修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
增加
import android.net.ethernet.EthernetManager;import android.net.ethernet.EthernetStateTracker;import android.util.Slog;import com.android.systemui.R;
在
String mContentDescriptionWimax;
下增加
String mContentDescriptionEthernet;//add by hclydao
在
//wimax
private boolean mWimaxSupported = false;
private boolean mIsWimaxEnabled = false;
private boolean mWimaxConnected = false;
private boolean mWimaxIdle = false;
private int mWimaxIconId = 0;
private int mWimaxSignal = 0;
private int mWimaxState = 0;
private int mWimaxExtraState = 0;
下增加
// Ethernetboolean mShowEthIcon, mEthernetWaitingDHCP;boolean mEthernetPhyConnect=false ;int mEthernetIconId = 0;
在
String mLastCombinedLabel = "";
下增加
int mLastEthernetIconId = -1;
在
void setIsAirplaneMode(boolean is, int airplaneIcon);
下增加
void setEthernetIndicators(boolean visible, int stateIcon, int activityIcon, String contentDescription);
在
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
下增加
filter.addAction(EthernetManager.ETH_STATE_CHANGED_ACTION);
在
cluster.setIsAirplaneMode(mAirplaneMode, mAirplaneIconId);
上增加如
cluster.setEthernetIndicators(mShowEthIcon,mEthernetIconId,-1,mContentDescriptionEthernet);
在
else if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION) ||
action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION) ||
action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) {
updateWimaxState(intent);
refreshViews();
}
下增加
else if (action.equals(EthernetManager.ETH_STATE_CHANGED_ACTION)) {updateEth(intent);refreshViews();}
在
updateWimaxIcons函数下增加函数
// ===== Ethernet ===================================================================
private final void updateEth(Intent intent) {final int event = intent.getIntExtra(EthernetManager.EXTRA_ETH_STATE, EthernetStateTracker.EVENT_HW_DISCONNECTED);Slog.d(TAG, "updateEth event=" + event);switch (event) {case EthernetStateTracker.EVENT_HW_CONNECTED:if (mEthernetWaitingDHCP)return;// else fallthroughcase EthernetStateTracker.EVENT_INTERFACE_CONFIGURATION_SUCCEEDED: {mEthernetWaitingDHCP = false;EthernetManager ethManager = (EthernetManager) mContext.getSystemService(mContext.ETH_SERVICE);if (ethManager.isEthDeviceAdded()) {mShowEthIcon = true;mEthernetIconId =R.drawable.ethernet_connected ; // sEthImages[0]; mContentDescriptionEthernet = mContext.getString(R.string.accessibility_ethernet_connected);}return;}case EthernetStateTracker.EVENT_INTERFACE_CONFIGURATION_FAILED:mEthernetWaitingDHCP = false;//if(!mEthernetPhyConnect)// return ;mShowEthIcon = true;mEthernetIconId = R.drawable.ethernet_disconnected; // sEthImages[1]; mContentDescriptionEthernet = mContext.getString(R.string.accessibility_ethernet_disconnected);return;case EthernetStateTracker.EVENT_DHCP_START:mEthernetWaitingDHCP = true ;return;case EthernetStateTracker.EVENT_HW_PHYCONNECTED:mEthernetPhyConnect = true ;mShowEthIcon = true;mEthernetIconId =R.drawable.ethernet_connecting ; // sEthImages[2]; // 2mContentDescriptionEthernet = mContext.getString(R.string.accessibility_ethernet_connecting);return;case EthernetStateTracker.EVENT_HW_PHYDISCONNECTED:mEthernetPhyConnect = false ;mEthernetWaitingDHCP = false;mShowEthIcon = false;mEthernetIconId = -1;mContentDescriptionEthernet = null;return;case EthernetStateTracker.EVENT_HW_DISCONNECTED:mEthernetPhyConnect = false ;mEthernetWaitingDHCP = false;mShowEthIcon = false;mEthernetIconId = -1;mContentDescriptionEthernet = null;return ;case EthernetStateTracker.EVENT_HW_CHANGED:return;default:if (mEthernetWaitingDHCP)return;mShowEthIcon = false;mEthernetIconId = -1;mContentDescriptionEthernet = null;return;}}
在
if (mBluetoothTethered) {
combinedLabel = mContext.getString(R.string.bluetooth_tethered);
combinedSignalIconId = mBluetoothTetherIconId;
mContentDescriptionCombinedSignal = mContext.getString(
R.string.accessibility_bluetooth_tether);
}
下增加
if (mShowEthIcon) {wifiLabel = mContentDescriptionEthernet;combinedSignalIconId = mEthernetIconId;mContentDescriptionCombinedSignal = mContentDescriptionEthernet;}
在这个下面增加
final boolean ethernetConnected = (mConnectedNetworkType == ConnectivityManager.TYPE_ETHERNET);if (ethernetConnected) {// TODO: icons and strings for Ethernet connectivitycombinedLabel = mConnectedNetworkTypeName;}
注释掉之前的
/*
final boolean ethernetConnected = (mConnectedNetworkType == ConnectivityManager.TYPE_ETHERNET);
if (ethernetConnected) {
combinedLabel = context.getString(R.string.ethernet_label);
}
*//
在&& !ethernetConnected后增加 && !mShowEthIcon
在 || mLastWifiIconId != mWifiIconId
下增加
|| mLastEthernetIconId != mEthernetIconId
在
// the wimax icon on phones
if (mLastWimaxIconId != mWimaxIconId) {
mLastWimaxIconId = mWimaxIconId;
}
下增加
// ethernet icon on phones
if (mLastEthernetIconId != mEthernetIconId) {mLastEthernetIconId = mEthernetIconId;// Phone UI not supported yet.}
基本上就修改这些地方
先执行下make update-api再编译。
严格按照上述步骤进行操作,即可实现Ehernet支持。