android 8.1 下拉欄Systemui的修改

1.下拉開關的創建(哪些顯示哪些不顯示):
在vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java中進行開關的創建;不顯示直接屏蔽就好 

  public QSTile createTile(String tileSpec) {
        /// M: Add extra tiles in quicksetting @{
        Context context = mHost.getContext();
        IQuickSettingsPlugin quickSettingsPlugin = OpSystemUICustomizationFactoryBase
                .getOpFactory(context).makeQuickSettings(context);
        /// @}
        if (tileSpec.equals("wifi")) return new WifiTile(mHost); //wifi
        else if (tileSpec.equals("bt")) return new BluetoothTile(mHost);//藍牙
        else if (tileSpec.equals("cell")) return new CellularTile(mHost);//移動數據
        /**
         * 屏蔽狀態欄功能  wanchengguo 20190527 begin
         * 
         */
       // else if (tileSpec.equals("dnd")) return new DndTile(mHost);
       // else if (tileSpec.equals("inversion")) return new ColorInversionTile(mHost);
        //else if (tileSpec.equals("airplane")) return new AirplaneModeTile(mHost);//飛行模式
        //else if (tileSpec.equals("work")) return new WorkModeTile(mHost);
        else if (tileSpec.equals("rotation")) return new RotationLockTile(mHost);//屏幕旋轉 
        else if (tileSpec.equals("flashlight")) return new FlashlightTile(mHost);//手電筒
        else if (tileSpec.equals("location")) return new LocationTile(mHost);//位置信息
        //else if (tileSpec.equals("cast")) return new CastTile(mHost);
       // else if (tileSpec.equals("hotspot")) return new HotspotTile(mHost);
        //else if (tileSpec.equals("user")) return new UserTile(mHost);
        //else if (tileSpec.equals("battery")) return new BatterySaverTile(mHost);//省電模式 
       // else if (tileSpec.equals("saver")) return new DataSaverTile(mHost);
       // else if (tileSpec.equals("night")) return new NightDisplayTile(mHost);
       // else if (tileSpec.equals("nfc")) return new NfcTile(mHost);
        /// M: Customize the quick settings tiles for operator. @{
        /*else if (tileSpec.equals("dataconnection") && !SIMHelper.isWifiOnlyDevice())
            return new MobileDataTile(mHost);
       else if (tileSpec.equals("simdataconnection") && !SIMHelper.isWifiOnlyDevice() &&
                quickSettingsPlugin.customizeAddQSTile(new SimDataConnectionTile(mHost)) != null) {
            return (SimDataConnectionTile) quickSettingsPlugin.customizeAddQSTile(
                    new SimDataConnectionTile(mHost));
        } else if (tileSpec.equals("dulsimsettings") && !SIMHelper.isWifiOnlyDevice() &&
                quickSettingsPlugin.customizeAddQSTile(new DualSimSettingsTile(mHost)) != null) {
            return (DualSimSettingsTile) quickSettingsPlugin.customizeAddQSTile(
                    new DualSimSettingsTile(mHost));
        } */else if (tileSpec.equals("apnsettings") && !SIMHelper.isWifiOnlyDevice() &&
                quickSettingsPlugin.customizeAddQSTile(new ApnSettingsTile(mHost)) != null) {//設置
            return (ApnSettingsTile) quickSettingsPlugin.customizeAddQSTile(
                    new ApnSettingsTile(mHost));
        }
        //*/ freeme.gouzhouping, 20180120. FreemeAppTheme, add extra tiles.
        /*else if (tileSpec.equals("supershot")) {//超級截屏
            return new com.freeme.systemui.qs.tiles.FreemeSuperShot(mHost);
        }*/
        /**
         * 屏蔽狀態欄功能  wanchengguo 20190527 end
         * 
         */
        else if (tileSpec.equals("audioprofile")) {//聲音
            return new com.freeme.systemui.qs.tiles.FreemeAudioProfile(mHost);
        }
        //*/
        /// @}
        // Intent tiles.
        else if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(mHost, tileSpec);
        else if (tileSpec.startsWith(CustomTile.PREFIX)) return CustomTile.create(mHost, tileSpec);
        else {
            Log.w(TAG, "Bad tile spec: " + tileSpec);
            return null;
        }
    }

2.顯示兩行三列還是兩行四列:

由SystemUI\src\com\android\systemui\qs\PagedTileLayout.java中決定:詳見如下:

 public static class TilePage extends TileLayout {
        private int mMaxRows = 3;//定義下拉欄行數的地方 wanchengguo 20190618


        public TilePage(Context context, AttributeSet attrs) {
            super(context, attrs);
            updateResources();
        }

        @Override
        public boolean updateResources() {
            final int rows = getRows();
            boolean changed = rows != mMaxRows;
            if (changed) {
                mMaxRows = rows;
                requestLayout();
            }
            return super.updateResources() || changed;
        }

        private int getRows() {
            final Resources res = getContext().getResources();
            if (res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
                return res.getInteger(R.integer.quick_settings_num_rows_portrait);
            }
            return Math.max(1, res.getInteger(R.integer.quick_settings_num_rows));
        }

        public void setMaxRows(int maxRows) {
            mMaxRows = maxRows;
        }

        public boolean isFull() {
            return mRecords.size() >= mColumns * mMaxRows;//mColumns決定列數,這個是在哪個地方來的
        }
    }

 根據代碼可知mColumns是在TileLayout.java裏定義的;具體方法如下:

public boolean updateResources() {
    final Resources res = mContext.getResources();
    final int columns = Math.max(1, res.getInteger(R.integer.quick_settings_num_columns));
    mCellHeight = mContext.getResources().getDimensionPixelSize(R.dimen.qs_tile_height);
    mCellMargin = res.getDimensionPixelSize(R.dimen.qs_tile_margin);
    mCellMarginTop = res.getDimensionPixelSize(R.dimen.qs_tile_margin_top);
    if (mColumns != columns) {
        mColumns = columns;
        requestLayout();
        return true;
    }
    return false;
}

所以列數只需要修改quick_settings_num_columns 即可

3.將亮度調節放在Viewpage的下面

修改SystemUI\src\com\android\systemui\qs\QSPanel.java 

 public QSPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;

        setOrientation(VERTICAL);
/**
 * 將亮度調節放在最末尾 20190618 begin wanchengguo
 */
       /* mBrightnessView = LayoutInflater.from(context).inflate(
                R.layout.quick_settings_brightness_dialog, this, false);
        addView(mBrightnessView);*/

        // M: @ {
        mQuickSettingsExt = OpSystemUICustomizationFactoryBase
                .getOpFactory(context).makeQuickSettings(context);
        if (mQuickSettingsExt != null) {
            mQuickSettingsExt.addOpViews(this);
        }
        // @ }

        setupTileLayout();

        mPageIndicator = LayoutInflater.from(context).inflate(
                R.layout.qs_page_indicator, this, false);
        addView(mPageIndicator);
        mBrightnessView = LayoutInflater.from(context).inflate(
                R.layout.quick_settings_brightness_dialog, this, false);
        addView(mBrightnessView);
        /**
         * 將亮度調節放在最末尾 20190618 end wanchengguo
         */
        if (mTileLayout instanceof PagedTileLayout) {
            ((PagedTileLayout) mTileLayout).setPageIndicator((PageIndicator) mPageIndicator);
        }

        addDivider();

        mFooter = new QSSecurityFooter(this, context);
        addView(mFooter.getView());

        updateResources();

        mBrightnessController = new BrightnessController(getContext(),
                findViewById(R.id.brightness_icon),
                findViewById(R.id.brightness_slider));
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章