AOSP-系统应用-Keyguard源码解读

前言

本文基于 AOSP android 12 源码。

核心文件

platform_frameworks_base\packages\SystemUI\src\com\android\systemui\keyguard

  • KeyguardService.java
  • KeyguardViewMediator.java

platform_frameworks_base\packages\SystemUI\src\com\android\keyguard

  • KeyguardUpdateMonitor.java
  • KeyguardSecurityContainer.java

platform_frameworks_base\packages\SystemUI\src\com\android\systemui\statusbar\phone

  • StatusBarKeyguardViewManager.java
  • KeyguardBouncer.java

platform_frameworks_base\services\core\java\com\android\server\policy\keyguard

  • KeyguardServiceDelegate.java
  • KeyguardServiceWrapper.java

KeyguardService

KeyguardService 持有 KeyguardViewMediator 的对象,调用 KeyguardViewMediator 中的接口。

public class KeyguardService extends Service {
   
    // KeyguardService 持有 KeyguardViewMediator 的对象,调用 KeyguardViewMediator 中的接口
    private final KeyguardViewMediator mKeyguardViewMediator;
    
    ...
    @Override
    public void onCreate() {
   
        ((SystemUIApplication) getApplication()).startServicesIfNeeded();
    }
    
    @Override
    public IBinder onBind(Intent intent) {
   
        return mBinder;
    }

    // com.android.internal.policy.IKeyguardService,aidl文件
    private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
   
    
        // 
        @Override // Binder interface
        public void setOccluded(boolean isOccluded, boolean animate) {
   
            ...
        }
    }
    ...
}

KeyguardViewMediator

KeyguardViewMediator 持有 KeyguardUpdateMonitor 的对象,调用 KeyguardUpdateMonitor 中的接口。

public class KeyguardViewMediator extends SystemUI implements Dumpable,
        StatusBarStateController.StateListener {
   
    private final KeyguardUpdateMonitor mUpdateMonitor;
    
    // 创建 KeyguardUpdateMonitorCallback
    KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
   
        ...
    };
    
    ...
}

KeyguardViewMediator 内部通过 handler 进行消息的分发。

    // used for handler messages
    private static final int SHOW = 1;
    private static final int HIDE = 2;
    private static final int RESET = 3;
    private static final int VERIFY_UNLOCK = 4;
    private static final int NOTIFY_FINISHED_GOING_TO_SLEEP = 5;
    private static final int NOTIFY_SCREEN_TURNING_ON = 6;
    private static final int KEYGUARD_DONE = 7;
    private static final int KEYGUARD_DONE_DRAWING = 8;
    private static final int SET_OCCLUDED = 9;
    private static final</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在AOSP中使用i2c-gpio的步骤与在Linux中使用的步骤类似,只是在AOSP中需要将i2c-gpio驱动程序编译进Android系统中。 以下是在AOSP中使用i2c-gpio的基本步骤: 1. 确认设备树中使用i2c-gpio。在设备树中需要指定SDA和SCL引脚的GPIO编号,并将i2c-gpio驱动程序与设备绑定。例如,下面是在设备树中使用i2c-gpio的示例: ``` i2c-gpio { #address-cells = <1>; #size-cells = <0>; compatible = "i2c-gpio"; gpios = <&gpio0 1 GPIO_ACTIVE_LOW>, <&gpio0 2 GPIO_ACTIVE_LOW>; i2c-gpio,delay-us = <2>; i2c-gpio,sda-inverted; i2c-gpio,scl-inverted; i2c-gpio,sda-open-drain; i2c-gpio,scl-open-drain; status = "okay"; }; ``` 2. 在Android的kernel配置中需要启用i2c-gpio模块。可以使用以下命令进行配置: ``` $ make menuconfig ``` 然后找到Device Drivers -> I2C support -> I2C GPIO expanders和Device Drivers -> GPIO Support -> GPIO bit-banging interfaces,选择i2c-gpio模块并将其编译进内核或编译为模块。 3. 编译Android系统。可以使用以下命令进行编译: ``` $ make ``` 4. 在Android中使用i2c-gpio。可以像在Linux中一样,使用modprobe命令加载i2c-gpio模块,并配置GPIO引脚。例如,使用以下命令加载模块: ``` $ modprobe i2c-gpio ``` 然后,使用类似以下的命令将SDA和SCL引脚的GPIO编号配置为相应的值: ``` $ echo "gpio_sda=<SDA_GPIO_NUM>" > /sys/module/i2c_gpio/parameters/options $ echo "gpio_scl=<SCL_GPIO_NUM>" > /sys/module/i2c_gpio/parameters/options ``` 5. 现在可以在Android系统中使用i2c-gpio进行I2C通信。可以使用i2c-tools等工具进行测试。 以上是在AOSP中使用i2c-gpio的基本步骤。注意要根据具体的硬件环境和需求进行相应的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值