亮度调节(一)

本文详细介绍了Android8.1中亮度调节的实现过程,从BrightnessPreference点击触发的BrightnessDialog,到BrightnessController的registerCallbacks监听进度条变化,再到PowerManagerService的updateDisplayPowerStateLocked方法。手动、视频播放和自动调节亮度都调用了此方法,并通过DisplayPowerController进行最终的亮度设置决策。亮度调节的优先级为自动调节>视频播放调节>手动调节。
摘要由CSDN通过智能技术生成

关于Android8.1的亮度调节的实现:
点击了BrightnessPreference以后会发送广播,对应的SettingsUI类接收广播并创建BrightnessDialog,这是一个关于调节亮度的对话框

BrightnessDialog

  @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);

        final Window window = getWindow();

        window.setGravity(Gravity.TOP);
        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        window.requestFeature(Window.FEATURE_NO_TITLE);

        // Use a dialog theme as the activity theme, but inflate the content as
        // the QS content.
        ContextThemeWrapper themedContext = new ContextThemeWrapper(this,
                com.android.internal.R.style.Theme_DeviceDefault_QuickSettings);
        View v = LayoutInflater.from(themedContext).inflate(
                R.layout.quick_settings_brightness_dialog, null);
        setContentView(v);

        final ImageView icon = findViewById(R.id.brightness_icon);
        final ToggleSliderView slider = findViewById(R.id.brightness_slider);
        //创建了BrightnessController
        mBrightnessController = new BrightnessController(this, icon, slider);
    }

    @Override
    protected void onStart() {
   
        super.onStart();
        //调用registerCallbacks()
        mBrightnessController.registerCallbacks();
        MetricsLogger.visible(this, MetricsEvent.BRIGHTNESS_DIALOG);
    }

上述BrightnessDialog里面创建并且调用了BrightnessController的registerCallbacks()方法,通过这种方式设置了对进度条改变的监听

BrightnessController

public BrightnessController(Context context, ImageView icon, ToggleSlider control) {
   
        mContext = context;
        mIcon = icon;
        mControl = control;
        mControl.setMax(GAMMA_SPACE_MAX);
        mBackgroundHandler = new Handler((Looper) Dependency.get(Dependency.BG_LOOPER));
        //创建了CurrentUserTracker,是一个广播处理器,这里面接收到Intent.ACTION_USER_SWITCHED动作的时候,会触发onUserSwitched()
        mUserTracker = new CurrentUserTracker(mContext) {
   
            @Override
            public void onUserSwitched(int newUserId) {
   
                mBackgroundHandler.post(mUpdateModeRunnable);
                mBackgroundHandler.post(mUpdateSliderRunnable);
            }
        };
        //创建了观察者
        mBrightnessObserver = new BrightnessObserver(mHandler);

        PowerManager pm = context.getSystemService(PowerManager.class);
        mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
        mMaximumBacklight = pm.getMaximumScreenBrightnessSetting();
        mDefaultBacklight = pm.getDefaultScreenBrightnessSetting();
        mMinimumBacklightForVr = pm.getMinimumScreenBrightnessForVrSetting();
        mMaximumBacklightForVr = pm.getMaximumScreenBrightnessForVrSetting();
        mDefaultBacklightForVr = pm.getDefaultScreenBrightnessForVrSetting();

        mAutomaticAvailable = context.getResources().getBoolean(
                com.android.internal.R.bool.config_automatic_brightness_available);
        mDisplayManager = context.getSystemService(DisplayManager.class);
        mVrManager = IVrManager.Stub.asInterface(ServiceManager.getService(
                Context.VR_SERVICE));
    }

被BrightnessDialog调用的registerCallbacks
 public void registerCallbacks() {
   
        if (mListening) {
   
            return;
        }

        if (mVrManager != null) {
   
            try {
   
                mVrManager.registerListener(mVrStateCallbacks);
                mIsVrModeEnabled = mVrManager.getVrModeState();
            } catch (RemoteException e) {
   
                Log.e(TAG, "Failed to register VR mode state listener: ", e);
            }
        }
      
        mBackgroundHandler.post
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值