qstitle 快速设置

本文介绍了Android系统中快速设置面板的实现,重点关注QSTileHost类如何根据tileSpec创建不同的QSTile实例,如WifiTile、BluetoothTile等。同时,内容涉及到QSPanel布局、QSTileView的更新机制,以及MobileSignalController如何处理网络名称的本地化显示。此外,还提及了信号回调和网络状态刷新的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java

 

    public QSTile<?> createTile(String tileSpec) {
        if (tileSpec.equals("wifi")) return new WifiTile(this);
        else if (tileSpec.equals("bt")) return new BluetoothTile(this);
        else if (tileSpec.equals("cell")) return new CellularTile(this);
        else if (tileSpec.equals("dnd")) return new DndTile(this);
        else if (tileSpec.equals("inversion")) return new ColorInversionTile(this);
        else if (tileSpec.equals("airplane")) return new AirplaneModeTile(this);
        else if (tileSpec.equals("work")) return new WorkModeTile(this);
        else if (tileSpec.equals("rotation")) return new RotationLockTile(this);
        else if (tileSpec.equals("flashlight")) return new FlashlightTile(this);
        else if (tileSpec.equals("location")) return new LocationTile(this);
        else if (tileSpec.equals("cast")) return new CastTile(this);
        else if (tileSpec.equals("hotspot")) return new HotspotTile(this);
        else if (tileSpec.equals("user")) return new UserTile(this);
        else if (tileSpec.equals("battery")) return new BatteryTile(this);
        else if (tileSpec.equals("saver")) return new DataSaverTile(this);
        else if (tileSpec.equals(NightModeTile.NIGHT_MODE_SPEC))
            return new NightModeTile(this);
        // Intent tiles.
        else if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(this,tileSpec);
        else if (tileSpec.startsWith(CustomTile.PREFIX)) return CustomTile.create(this,tileSpec);
        else {
            Log.w(TAG, "Bad tile spec: " + tileSpec);
            return null;
        }
    }
 

@ubuntu-server:~$ grep -rsn "quick_settings_panel" android/frameworks/base/packages/SystemUI/
android/frameworks/base/packages/SystemUI/res/layout/qs_panel.xml:27:            android:id="@+id/quick_settings_panel"
android/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java:72:        mQSPanel = (QSPanel) findViewById(R.id.quick_settings_panel);

 

android/frameworks/base/packages/SystemUI/res/layout/qs_paged_page.xml:20:    android:id="@+id/tile_page

 

android/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java:149:                .inflate(R.layout.qs_paged_page, this, false));

 

android/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java:312:        return new QSTileView(mContext, tile.createTileView(mContext), collapsedView);

 

QSIconView : 图标

tile_label:名称

 

QSTileView.java

 @Override
    protected void handleStateChanged(QSTile.State state) {
        super.handleStateChanged(state);
        if (!Objects.equal(mLabel.getText(), state.label)) {
            mLabel.setText(state.label);
        }
        mLabel.setEnabled(!state.disabledByPolicy);
        mPadLock.setVisibility(state.disabledByPolicy ? View.VISIBLE : View.GONE);
    }

 

 

CallbackInfo cb = (CallbackInfo) arg;

cb.enabledDesc

 

MobileSignalController.java

updateNetworkName( 

mCurrentState.networkName = str.toString();

        if (mConfig.showLocale) {
            if (showSpn && !TextUtils.isEmpty(spn)) {
                spn = getLocalString(spn);
            }
            if (showSpn && !TextUtils.isEmpty(dataSpn)) {
                dataSpn = getLocalString(dataSpn);
            }
            if (showPlmn && !TextUtils.isEmpty(plmn)) {
                plmn = getLocalString(plmn);//本地语言切换
            }
        }

)

 

notifyListeners(

description = mCurrentState.isEmergency ? null : mCurrentState.networkName;

(SignalCallbackExtended)callback).setMobileDataIndicators()

)

 

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java extends SignalCallbackExtended

(SignalCallbackExtended)signalCluster).setMobileDataIndicators()

setListening( mSignalCallbacks )

 

 

 

 

 

 

NetworkControllerImpl.java

addSignalCallback( mCallbackHandler.setListening(cb, true); )

 

 

 

CellularTile.java

setListening()

mController.addSignalCallback(mSignalCallback);

 

private final class CellSignalCallback extends SignalCallbackAdapter

setMobileDataIndicators()

 

refreshState()

handleUpdateState()

 

 

QSTile.java

refreshState()

handleRefreshState()

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值