admin管理员组文章数量:1536092
测试平台
Platform: RK3399
OS: industry-71
现象
测试反馈,测试过程中概率出现机器开机15s后会自动休眠,但是固件中设置的是永不休眠
分析
分析发现是由于SettingsProvider的设置项没有初始化,导致获取的是PowerManagerService默认的15s
//PowerManagerService.java:162: private static final int DEFAULT_SCREEN_OFF_TIMEOUT = 15 * 1000;
怀疑是升级开机立刻断电或者其他原因造成SettingsProvider值没有报错
解决方案
系统原本SettingsProvider在升级初始化后,就不会再次初始化。现在改为在每次开机都会检测system、global和secure的部分必备值,若无则重新初始化》
From 1b6e990f4691f249330360a146690f16baad25fb Mon Sep 17 00:00:00 2001
From: sjf <sjf@t-chip.com.cn>
Date: Thu, 2 Dec 2021 17:33:28 +0800
Subject: [PATCH] =?UTF-8?q?Android->SettingsProvider:=E5=BC=80=E6=9C=BA?=
=?UTF-8?q?=E6=97=B6=E6=A3=80=E6=B5=8Bsystem=E3=80=81global=E5=92=8Csecure?=
=?UTF-8?q?=E7=9A=84=E9=83=A8=E5=88=86=E5=BF=85=E5=A4=87=E5=80=BC,?=
=?UTF-8?q?=E8=8B=A5=E6=97=A0=E5=88=99=E9=87=8D=E6=96=B0=E5=88=9D=E5=A7=8B?=
=?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../providers/settings/SettingsProvider.java | 63 ++++++++++++++++++-
1 file changed, 60 insertions(+), 3 deletions(-)
diff --git a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index fec33a2708..b3c5e2f1bc 100644
--- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -79,6 +79,8 @@ import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
+import android.util.Log;
+
/**
* <p>
* This class is a content provider that publishes the system settings.
@@ -1821,17 +1823,59 @@ public class SettingsProvider extends ContentProvider {
private void migrateAllLegacySettingsIfNeeded() {
synchronized (mLock) {
final int key = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM);
File globalFile = getSettingsFile(key);
- if (globalFile.exists()) {
- return;
- }
+ // if (globalFile.exists()) {
+ // return;
+ // }
final long identity = Binder.clearCallingIdentity();
try {
List<UserInfo> users = mUserManager.getUsers(true);
final int userCount = users.size();
+
+ boolean needReset = false;
+ if(globalFile.exists()){
+ for (int i = 0; i < userCount; i++) {
+ final int userId = users.get(i).id;
+ UpgradeController upgrader = new UpgradeController(userId);
+ Log.v(LOG_TAG,"userId:"+userId);
+ SettingsState secureSettings = upgrader.getSecureSettingsLocked(userId);
+ Setting currentSetting = secureSettings
+ .getSettingLocked(Settings.Secure.USER_SETUP_COMPLETE);
+ if (currentSetting.isNull()) {
+ Log.v(LOG_TAG,"Secure.USER_SETUP_COMPLETE is null");
+ needReset = true;
+ break;
+ }
+
+ SettingsState globalSettings = upgrader.getGlobalSettingsLocked();
+ currentSetting = globalSettings
+ .getSettingLocked(Settings.Global.DEVICE_PROVISIONED);
+ if (currentSetting.isNull()) {
+ Log.v(LOG_TAG,"Global.DEVICE_PROVISIONED is null");
+ needReset = true;
+ break;
+ }
+
+ SettingsState systemSettings = upgrader.getSystemSettingsLocked(userId);
+ currentSetting = systemSettings
+ .getSettingLocked(Settings.System.SCREEN_OFF_TIMEOUT);
+ if (currentSetting.isNull()) {
+ Log.v(LOG_TAG,"System.SCREEN_OFF_TIMEOUT is null");
+ needReset = true;
+ break;
+ }
+
+ }
+ }
+
+ if (globalFile.exists() && !needReset) {
+ return;
+ }
+
for (int i = 0; i < userCount; i++) {
final int userId = users.get(i).id;
@@ -1847,6 +1891,19 @@ public class SettingsProvider extends ContentProvider {
if (!mUserManager.isUserRunning(new UserHandle(userId))) {
removeUserStateLocked(userId, false);
}
+
+ if(needReset){
+ final SettingsState globalSettings = upgrader.getGlobalSettingsLocked();
+ globalSettings.updateSettingLocked(Settings.Global.DEVICE_PROVISIONED,
+ "1",
+ SettingsState.SYSTEM_PACKAGE_NAME);
+
+ SettingsState secureSettings = upgrader.getSecureSettingsLocked(userId);
+ secureSettings.insertSettingLocked(Settings.Secure.USER_SETUP_COMPLETE,
+ "1",
+ SettingsState.SYSTEM_PACKAGE_NAME);
+
+ }
}
} finally {
Binder.restoreCallingIdentity(identity);
--
2.20.1
本文标签: 初始化概率默认值industrySettingsProvider
版权声明:本文标题:[RK3399][industry-71] Android->SettingsProvider:概率性出现开机后没有初始化成功,导致默认值没有设置成功 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1726916500a1090173.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论