android quicksettings

/frameworks/base/packages/SystemUI/res/values/config.xml

几个重要的设置
<!-- The default tiles to display in QuickSettings -->
<string name="quick_settings_tiles_default" translatable="false">
    wifi,bt,dnd,flashlight,rotation,battery,cell,airplane,cast
</string>

<!-- The minimum number of tiles to display in QuickSettings -->
<integer name="quick_settings_min_num_tiles">6</integer>

<!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" -->
<string name="quick_settings_tiles_stock" translatable="false">
    wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,dark,work,cast,night
</string>

<!-- The tiles to display in QuickSettings -->
<string name="quick_settings_tiles" translatable="false">default</string>

<!-- The tiles to display in QuickSettings in retail mode -->
<string name="quick_settings_tiles_retail_mode" translatable="false">
    cell,battery,dnd,flashlight,rotation,location
</string>
 

 

前几天碰到一个问题:

WifiSettings UI 里WiFi的状态与quicksettings里的不一致,

WifiSettings UI里始终是对的,状态栏里的WiFi也是对的(打开时就会连上一个AP)。

quicksettings里有时候对 有时候不对,还没有重现步骤, 就是用着不知道怎么就出来了。

有一个肯定是,事先连过一个AP。

由于log基本没有打开,看不出来原因

 

 /frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
 public void onReceive(Context context, Intent intent) {
    mWifiSignalController.handleBroadcast(intent);
    
    
 /frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
   public void handleBroadcast(Intent intent) {
      mWifiTracker.handleBroadcast(intent);
      mCurrentState.enabled = mWifiTracker.enabled;
      mCurrentState.connected = mWifiTracker.connected;
      mCurrentState.ssid = mWifiTracker.ssid;
      mCurrentState.rssi = mWifiTracker.rssi;
      mCurrentState.level = mWifiTracker.level;
      mCurrentState.statusLabel = mWifiTracker.statusLabel;
      notifyListenersIfNecessary();
  }    

/frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
   public void handleBroadcast(Intent intent) {
     if (mWifiManager == null) {
         return;
     }
     String action = intent.getAction();
     if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
         updateWifiState();
     } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
         updateWifiState();
         final NetworkInfo networkInfo =
                 intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
         connected = networkInfo != null && networkInfo.isConnected();
         mWifiInfo = null;
         ssid = null;
         if (connected) {
             mWifiInfo = mWifiManager.getConnectionInfo();
             if (mWifiInfo != null) {
                 if (mWifiInfo.isPasspointAp() || mWifiInfo.isOsuAp()) {
                     ssid = mWifiInfo.getPasspointProviderFriendlyName();
                 } else {
                     ssid = getValidSsid(mWifiInfo);
                 }
                 updateRssi(mWifiInfo.getRssi());
                 maybeRequestNetworkScore();
             }
         }
         updateStatusLabel();
     } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
         // Default to -200 as its below WifiManager.MIN_RSSI.
         updateRssi(intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200));
         updateStatusLabel();
     }
 }

 private void updateWifiState() {
     state = mWifiManager.getWifiState();
     enabled = state == WifiManager.WIFI_STATE_ENABLED;
 }

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java
 public void notifyListenersIfNecessary() {
     if (isDirty()) {
         saveLastState();
         notifyListeners();
     }
 }

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
 public void notifyListeners(SignalCallback callback) {
    // only show wifi in the cluster if connected or if wifi-only
    boolean visibleWhenEnabled = mContext.getResources().getBoolean(
            R.bool.config_showWifiIndicatorWhenEnabled);
    boolean wifiVisible = mCurrentState.enabled
            && (mCurrentState.connected || !mHasMobileData || visibleWhenEnabled);
    String wifiDesc = wifiVisible ? mCurrentState.ssid : null;
    boolean ssidPresent = wifiVisible && mCurrentState.ssid != null;
    String contentDescription = getStringIfExists(getContentDescription());
    if (mCurrentState.inetCondition == 0) {
        contentDescription += ("," + mContext.getString(R.string.data_connection_no_internet));
    }
    IconState statusIcon = new IconState(wifiVisible, getCurrentIconId(), contentDescription);
    IconState qsIcon = new IconState(mCurrentState.connected, getQsCurrentIconId(),
            contentDescription);
    callback.setWifiIndicators(mCurrentState.enabled, statusIcon, qsIcon,
            ssidPresent && mCurrentState.activityIn, ssidPresent && mCurrentState.activityOut,
             wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel);
 }


/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
         public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
             boolean activityIn, boolean activityOut, String description, boolean isTransient,
             String statusLabel) {
         if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + enabled);
         mInfo.enabled = enabled;
         mInfo.connected = qsIcon.visible;
         mInfo.wifiSignalIconId = qsIcon.icon;
         mInfo.ssid = description;
         mInfo.activityIn = activityIn;
         mInfo.activityOut = activityOut;
         mInfo.wifiSignalContentDescription = qsIcon.contentDescription;
         mInfo.isTransient = isTransient;
         mInfo.statusLabel = statusLabel;
         if (isShowingDetail()) {
             mDetailAdapter.updateItems();
         }
         refreshState();
     }
 }
 
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
protected final void refreshState(Object arg) {
     mHandler.obtainMessage(H.REFRESH_STATE, arg).sendToTarget();
 }

public void handleMessage(Message msg) {
  } else if (msg.what == REFRESH_STATE) {
         name = "handleRefreshState";
         handleRefreshState(msg.obj); 

protected void handleRefreshState(Object arg) {
  handleUpdateState(mTmpState, arg);
  final boolean changed = mTmpState.copyTo(mState);
  if (changed) {
      handleStateChanged();
  }
  mHandler.removeMessages(H.STALE);
  mHandler.sendEmptyMessageDelayed(H.STALE, getStaleTimeout());
  setListening(mStaleListener, false);
 }


/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
   protected void handleUpdateState(SignalState state, Object arg) {
    if (DEBUG) Log.d(TAG, "handleUpdateState arg=" + arg);
    final CallbackInfo cb = mSignalCallback.mInfo;
    if (mExpectDisabled) {
        if (cb.enabled) {
            return; // Ignore updates until disabled event occurs.
        } else {
            mExpectDisabled = false;
        }
    }
    boolean transientEnabling = arg == ARG_SHOW_TRANSIENT_ENABLING;
    boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.ssid != null);
    boolean wifiNotConnected = (cb.wifiSignalIconId > 0) && (cb.ssid == null);
    boolean enabledChanging = state.value != cb.enabled;
    if (enabledChanging) {
        mDetailAdapter.setItemsVisible(cb.enabled);
        fireToggleStateChanged(cb.enabled);
    }
    if (state.slash == null) {
        state.slash = new SlashState();
        state.slash.rotation = 6;
    }
    state.slash.isSlashed = false;
    boolean isTransient = transientEnabling || cb.isTransient;
    state.secondaryLabel = getSecondaryLabel(isTransient, cb.statusLabel);
    state.state = Tile.STATE_ACTIVE;
    state.dualTarget = true;
    state.value = transientEnabling || cb.enabled;
    state.activityIn = cb.enabled && cb.activityIn;
    state.activityOut = cb.enabled && cb.activityOut;
    final StringBuffer minimalContentDescription = new StringBuffer();
    final Resources r = mContext.getResources();
    if (isTransient) {
        state.icon = ResourceIcon.get(
                com.android.internal.R.drawable.ic_signal_wifi_transient_animation);
        state.label = r.getString(R.string.quick_settings_wifi_label);
    } else if (!state.value) {
        state.slash.isSlashed = true;
        state.state = Tile.STATE_INACTIVE;
        state.icon = ResourceIcon.get(WifiIcons.QS_WIFI_DISABLED);
        state.label = r.getString(R.string.quick_settings_wifi_label);
    } else if (wifiConnected) {
        state.icon = ResourceIcon.get(cb.wifiSignalIconId);
        state.label = removeDoubleQuotes(cb.ssid);
    } else if (wifiNotConnected) {
        state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_disconnected);
        state.label = r.getString(R.string.quick_settings_wifi_label);
    } else {
        state.icon = ResourceIcon.get(WifiIcons.QS_WIFI_NO_NETWORK);
        state.label = r.getString(R.string.quick_settings_wifi_label);
    }
    minimalContentDescription.append(
            mContext.getString(R.string.quick_settings_wifi_label)).append(",");
    if (state.value) {
        if (wifiConnected) {
            minimalContentDescription.append(cb.wifiSignalContentDescription).append(",");
            minimalContentDescription.append(removeDoubleQuotes(cb.ssid));
            if (!TextUtils.isEmpty(state.secondaryLabel)) {
                minimalContentDescription.append(",").append(state.secondaryLabel);
            }
        }
    }
    state.contentDescription = minimalContentDescription.toString();
    state.dualLabelContentDescription = r.getString(
            R.string.accessibility_quick_settings_open_settings, getTileLabel());
    state.expandedAccessibilityClassName = Switch.class.getName();
}
 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值