Android N 修改网络类型,数据上下行和漫游图标相关布局和逻辑

实现效果如下图:
在这里插入图片描述
1.网络类型在左上方显示,如4G;

2.数据上下行在网络类型的下方;

3.当漫游时,漫游图标R将显示在信号强度上方,如红色箭头地方。

具体修改如下

  • alps/frameworks/base/packages/SystemUI/res/layout/mobile_signal_group.xml
--- a/alps/frameworks/base/packages/SystemUI/res/layout/mobile_signal_group.xml
+++ b/alps/frameworks/base/packages/SystemUI/res/layout/mobile_signal_group.xml
@@ -38,9 +38,10 @@
         android:alpha="0.0"
         systemui:hasOverlappingRendering="false"
         />

     <ImageView
-        android:id="@+id/mobile_type"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        />
+            android:id="@+id/mobile_type_roaming"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
 </FrameLayout>

  • alps/frameworks/base/packages/SystemUI/res_ext/layout/mobile_signal_group_ext.xml
--- a/alps/frameworks/base/packages/SystemUI/res_ext/layout/mobile_signal_group_ext.xml
+++ b/alps/frameworks/base/packages/SystemUI/res_ext/layout/mobile_signal_group_ext.xml
@@ -17,5 +17,21 @@ mobile_signal_group and add image view for show network Type -->
         android:layout_width="wrap_content"
         android:visibility="gone"
         />

+    <FrameLayout
+        android:id="@+id/mobile_lr"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" 
+        >
+           <ImageView
+            android:id="@+id/mobile_type"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+        <ImageView
+            android:id="@+id/data_inout"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+    </FrameLayout>

     <include layout="@layout/mobile_signal_group"/>
 </LinearLayout>

  • alps/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
--- a/alps/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/alps/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -37,6 +37,7 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 
@@ -90,7 +91,7 @@ public class SignalClusterView
     private int mIconTint = Color.WHITE;
     private float mDarkIntensity;
     private final Rect mTintArea = new Rect();
-
+       private String  mMobileRoaming ;
     ViewGroup mEthernetGroup, mWifiGroup;
     View mNoSimsCombo;
     ImageView mVpn, mEthernet, mWifi, mAirplane, mNoSims, mEthernetDark, mWifiDark, mNoSimsDark;
@@ -119,7 +120,31 @@ public class SignalClusterView
 
     /// M: for vowifi
     boolean mIsWfcEnable;
-
+       static final int[] DATA_ACTIVITY = {
+               R.drawable.stat_sys_signal_in,
+               R.drawable.stat_sys_signal_out,
+               R.drawable.stat_sys_signal_inout,
+               R.drawable.stat_sys_signal_noinout
+       };
+       
+       public void setDataActivityMTK(boolean in, boolean out,int subId) {
+               Log.d(TAG, "setDataActivityMTK(in= " + in + "), out= " +out);
+               int imgDataActivityID = 0;
+               if(in&&out){
+                       imgDataActivityID = DATA_ACTIVITY[2];
+               }else if(out){
+                       imgDataActivityID = DATA_ACTIVITY[1];
+               }else if(in){
+                       imgDataActivityID = DATA_ACTIVITY[0];
+               }else {
+                   imgDataActivityID = DATA_ACTIVITY[3];
+               }
+               PhoneState state = getState(subId);
+               state.mDataActivityId = imgDataActivityID;
+       }
+       
     public SignalClusterView(Context context) {
         this(context, null);
     }
@@ -308,12 +333,13 @@ public class SignalClusterView
         state.mIsMobileTypeIconWide = statusType != 0 && isWide;
         state.mNetworkIcon = networkType;
         state.mVolteIcon = volteIcon;
-
+        Log.d(TAG,"add log setMobileDataIndicators mMobileTypeId = " + statusType + " mMobileTypeDescription = " + typeContentDescription);
         /// M: Add for plugin features. @ {
         state.mDataActivityIn = activityIn;
         state.mDataActivityOut = activityOut;
         /// @ }
 
+               setDataActivityMTK(activityIn, activityOut, subId);
         apply();
     }
 
@@ -636,6 +662,12 @@ public class SignalClusterView
         private boolean mDataActivityIn, mDataActivityOut;
         private ISystemUIStatusBarExt mPhoneStateExt;
         /// @ }

+               private FrameLayout mobile_lr;
+               private ImageView mDataActivityInOut;
+               private ImageView mMobileTypeRoaming;
+               private int mDataActivityId = 0;

 
         public PhoneState(int subId, Context context) {
             ViewGroup root = (ViewGroup) LayoutInflater.from(context)
@@ -657,9 +689,15 @@ public class SignalClusterView
             mMobileType     = (ImageView) root.findViewById(R.id.mobile_type);
             mNetworkType    = (ImageView) root.findViewById(R.id.network_type);
             mVolteType      = (ImageView) root.findViewById(R.id.volte_indicator_ext);

+                       mobile_lr       = (FrameLayout) root.findViewById(R.id.mobile_lr);
+                       mMobileTypeRoaming = (ImageView)root.findViewById(R.id.mobile_type_roaming);
+                       mDataActivityInOut = (ImageView)root.findViewById(R.id.data_inout);

         }
 
         public boolean apply(boolean isSecondaryIcon) {
+            mMobileRoaming = getContext().getResources().getString(R.string.accessibility_data_connection_roaming);
             if (mMobileVisible && !mIsAirplaneMode) {
                 if (mLastMobileStrengthId != mMobileStrengthId) {
                     updateAnimatableIcon(mMobile, mMobileStrengthId);
@@ -671,10 +709,20 @@ public class SignalClusterView
                     mMobileType.setImageResource(mMobileTypeId);
                     mLastMobileTypeId = mMobileTypeId;
                 }
+                mMobileTypeRoaming.setImageResource(R.drawable.stat_sys_data_fully_connected_roam);
                 mMobileGroup.setContentDescription(mMobileTypeDescription
                         + " " + mMobileDescription);
                 mMobileGroup.setVisibility(View.VISIBLE);
                 showViewInWfcCase();

+                               if (mDataActivityId!=0) {
+                    mDataActivityInOut.setImageResource(mDataActivityId);
+                    mDataActivityInOut.setVisibility(View.VISIBLE);
+                } else {
+                    mDataActivityInOut.setImageDrawable(null);
+                    mDataActivityInOut.setVisibility(View.GONE);
+                }

             } else {
                 if (mIsAirplaneMode && (mIsWfcEnable && mVolteIcon != 0)) {
                     /// M:Bug fix for show vowifi icon in flight mode
@@ -701,8 +749,25 @@ public class SignalClusterView
 
             if (DEBUG) Log.d(TAG, String.format("mobile: %s sig=%d typ=%d",
                         (mMobileVisible ? "VISIBLE" : "GONE"), mMobileStrengthId, mMobileTypeId));
-
-            mMobileType.setVisibility(mMobileTypeId != 0 ? View.VISIBLE : View.GONE);
+            //mMobileType.setVisibility(mMobileTypeId != 0 ? View.VISIBLE : View.GONE);
+            if(mMobileTypeId != 0){
+                if(mMobileTypeDescription.equals(mMobileRoaming)){    
+                    mMobileTypeRoaming.setVisibility(View.VISIBLE);
+                    if(mMobileTypeId == 1){
+                        mobile_lr.setVisibility(View.GONE);
+                    }else{
+                        mobile_lr.setVisibility(View.VISIBLE);
+                    }
+                }else{
+                    mobile_lr.setVisibility(View.VISIBLE);
+                    mMobileTypeRoaming.setVisibility(View.GONE);
+                }
+            }else{
+                mobile_lr.setVisibility(View.GONE);
+                mMobileTypeRoaming.setVisibility(View.GONE);
+            }

 
             /// M: Add for support plugin featurs. @ {
             setCustomizedOpViews();
@@ -802,7 +867,7 @@ public class SignalClusterView
                 mNetworkType.setVisibility(View.GONE);
             } else {
                 mNetworkType.setImageResource(mNetworkIcon);
-                mNetworkType.setVisibility(View.VISIBLE);
+                mNetworkType.setVisibility(View.GONE);
             }
         }


  • alps/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
--- a/alps/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/alps/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java

         if (mCurrentState.dataSim) {
-            qsTypeIcon = showDataIcon ? icons.mQsDataType : 0;
+            qsTypeIcon = showDataIcon && !dataDisabled ? icons.mQsDataType : 0;
             qsIcon = new IconState(mCurrentState.enabled
                     && !mCurrentState.isEmergency, getQsCurrentIconId(), contentDescription);
             description = mCurrentState.isEmergency ? null : mCurrentState.networkName;
@@ -296,7 +295,7 @@ public class MobileSignalController extends SignalController<
         showDataIcon &= mCurrentState.isDefault
                 || mCurrentState.iconGroup == TelephonyIcons.ROAMING
                 || dataDisabled;
-        int typeIcon = showDataIcon ? icons.mDataType : 0;
+        int typeIcon = showDataIcon && !dataDisabled ? icons.mDataType : 0;
         /** M: Support [Network Type on StatusBar], change the implement methods.
           * Get the network icon base on service state.
           * Add one more parameter for network type.
@@ -323,7 +322,15 @@ public class MobileSignalController extends SignalController<
                         mDataNetType,
                         mServiceState);
         /// @ }
-
+        if (mCurrentState.iconGroup == TelephonyIcons.ROAMING) {
+            if (mCurrentState.dataConnected) {
+                typeIcon = mNetworkToIconLookup.get(mDataNetType).mDataType;
+            } else {
+                typeIcon = 1;
+            }
+        }
         callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, networkIcon, volteIcon,


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最乱纷飞的code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值