jQuery鼠标指针特效

Android 11 (MTK)状态栏图标反色-->跟随当前应用变化代码流程

Android 11 (MTK)状态栏图标反色

//StatusBar.java

public void start() {
   .............
   
    onSystemBarAppearanceChanged(mDisplayId, result.mAppearance, result.mAppearanceRegions,
                result.mNavbarColorManagedByIme);
        mAppFullscreen = result.mAppFullscreen;
        mAppImmersive = result.mAppImmersive;

    ............
}

    @Override
    public void onSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
            AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
        if (displayId != mDisplayId) {
            return;
        }
        ........
        //状态栏图标跟随barMode改变
        mLightBarController.onStatusBarAppearanceChanged(appearanceRegions, barModeChanged,
                mStatusBarMode, navbarColorManagedByIme);

        updateBubblesVisibility();
    }


//LightBarController.java

private void updateStatus() {
        final int numStacks = mAppearanceRegions.length;
        int numLightStacks = 0;

        // We can only have maximum one light stack.
        int indexLightStack = -1;

        for (int i = 0; i < numStacks; i++) {
            if (isLight(mAppearanceRegions[i].getAppearance(), mStatusBarMode,
                    APPEARANCE_LIGHT_STATUS_BARS)) {
                numLightStacks++;
                indexLightStack = i;
            }
        }

        // If all stacks are light, all icons get dark.
        if (numLightStacks == numStacks) {
            mStatusBarIconController.setIconsDarkArea(null);
            mStatusBarIconController.getTransitionsController().setIconsDark(true, animateChange());
        }

        // If no one is light, all icons become white.
        else if (numLightStacks == 0) {
            mStatusBarIconController.getTransitionsController().setIconsDark(
                    false, animateChange());
        }

        // Not the same for every stack, magic!
        else {
            mStatusBarIconController.setIconsDarkArea(
                    mAppearanceRegions[indexLightStack].getBounds());
            mStatusBarIconController.getTransitionsController().setIconsDark(true, animateChange());
        }
    }

参考_1
参考_2
重点文章

Android 13 深色主题切换流程解析

Android 13 深色主题切换流程解析_

       frameworks/base/services/core/java/com/android/server/UiModeManagerService.java
       @Override
        public boolean setNightModeActivated(boolean active) {
            return setNightModeActivatedForModeInternal(mNightModeCustomType, active);
        }
        private boolean setNightModeActivatedForModeInternal(int modeCustomType, boolean active) {
            
            // 省略部分代码......            
            synchronized (mLock) {
                final long ident = Binder.clearCallingIdentity();
                try {
                    // 自动、自定义的主题切换
                    if (mNightMode == MODE_NIGHT_AUTO || mNightMode == MODE_NIGHT_CUSTOM) {
                        unregisterScreenOffEventLocked();
                        mOverrideNightModeOff = !active;
                        mOverrideNightModeOn = active;
                        mOverrideNightModeUser = mCurrentUser;
                        persistNightModeOverrides(mCurrentUser);
                    } else if (mNightMode == UiModeManager.MODE_NIGHT_NO
                            && active) {
                        // 夜间模式
                        mNightMode = UiModeManager.MODE_NIGHT_YES;
                    } else if (mNightMode == UiModeManager.MODE_NIGHT_YES
                            && !active) {
                        // 日间模式
                        mNightMode = UiModeManager.MODE_NIGHT_NO;
                    }
                    // 更新 Configuration
                    updateConfigurationLocked();
                    // 应用 Configuration
                    applyConfigurationExternallyLocked();
                    // 为当前用户 Secure.putIntForUser 配置   
                    persistNightMode(mCurrentUser);
                    return true;
                } finally {
                    Binder.restoreCallingIdentity(ident);
                }
            }
        }

默认深色模式
adb shell settings put secure ui_night_mode 2  //深色
adb shell settings put secure ui_night_mode 1 //还原

    
+++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -327,5 +327,8 @@

+    <!--Default set ui night mode-->
+    <integer name="def_ui_night_mode">2</integer>


frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

+            //add text
+            loadIntegerSetting(stmt, Settings.Secure.UI_NIGHT_MODE,
+                    R.integer.def_ui_night_mode);
+            //add text

posted @ 2023-11-14 16:46  僵小七  阅读(432)  评论(0)    收藏  举报