Android下拉框WIFI图标更新

        下拉框里面WIFI组件的定义为WifiTitle(frameworks/base/packages/SystemUI),图标定义在WifiIcons里面,以太网和手机网络图标定义为EthernetIcons和TelephonyIcons。而图标的更新逻辑放在类SignalController里面:

Android下拉框WIFI图标更新_第1张图片

        通过上面的代码可以看到,主要是根据是当前网类型的状态(mCurrentState)否连接上网络(并不代表此网络可以上网),是否开启此网络类型(例如WIFI开关)确定显示的图标。而SignalController是个基类,它有三个子类分别为:EthernetSignalController、WifiSignalController和MobileSignalController,除了MobileSignalController覆盖了函数getQsCurrentIconId(),其他两个类都使用了基类的实现。

        关于WIFI的实现,我们可以看到在mCurrentState.connected为true的情况下,又要区分

mCurrentState.inetCondition是否为true来显示不同的图标。在Android10上面inetCondition为false时的图标为Android下拉框WIFI图标更新_第2张图片,而在后面的版本改为了Android下拉框WIFI图标更新_第3张图片,这个值的含义可以理解为当前的网络的数据传输类型是不是本类型(以太网、WIFI、蜂窝)。inetCondition的赋值是在updateConnectivity()函数中实现的,通过代码可以得知只要服务端(ConnectivityService)返回的当前网络类型等于以太网或WIFI,此类型的inetCondition就为true,但是蜂窝网络不一样,返回类型类型如果不对,但是当前状态不是默认时也会赋值为true(不为默认的含义?)。

SignalController

Android下拉框WIFI图标更新_第4张图片 MobileSignalController

图标更新的流程大致为有三种(1、切换用户;2、收到广播: ConnectivityManager.CONNECTIVITY_ACTION, ConnectivityManager.INET_CONDITION_ACTION;ConnectivityService的 )情况触发调用NetworkControllerImpl.updateConnectivity(),函数updateConnectivity()主要工作是用ConnectivityService获取到当前的数据传输方式。

Android下拉框WIFI图标更新_第5张图片

上面获取到数据传输方式后会分别调用以太网、蜂窝网和WIFI的更新,这里调用后就会走到我们上面赋值inetCondition的函数。

Android下拉框WIFI图标更新_第6张图片

你可能感兴趣的:(Android开发,android)