Andorid 켜기 자동 잠금 주파수 분석 - 기본 켜기 잠금 안 함
9121 단어 AndroidFrameworks안드로이드 소스 분석
Set default lockscreen disabled
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index bb128c5..43ef213 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -80,7 +80,7 @@
/system/media/audio/ui/Trusted.ogg
/system/media/audio/ui/WirelessChargingStarted.ogg
- false
+ true
false
1
보안 설정 읽기 구성 열기
packages/apps/Settings/src/com/android/settings/SecuritySettings.java
여기서 isLockScreen Disabled는 def 를 읽으러 갑니다.lockscreen_disabled의 값을true로 설정하면 자동 잠금 화면이 켜지지 않습니다
private static int getResIdForLockUnlockScreen(Context context,
LockPatternUtils lockPatternUtils, ManagedLockPasswordProvider managedPasswordProvider,
int userId) {
final boolean isMyUser = userId == MY_USER_ID;
int resid = 0;
if (!lockPatternUtils.isSecure(userId)) {
// , isLockScreenDisabled
if (!isMyUser) {
resid = R.xml.security_settings_lockscreen_profile;
} else if (lockPatternUtils.isLockScreenDisabled(userId)) {
// :
resid = R.xml.security_settings_lockscreen;
} else {
// :
resid = R.xml.security_settings_chooser;
}
} else {
// ,
switch (lockPatternUtils.getKeyguardStoredPasswordQuality(userId)) {
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
resid = isMyUser ? R.xml.security_settings_pattern
: R.xml.security_settings_pattern_profile;
break;
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
resid = isMyUser ? R.xml.security_settings_pin
: R.xml.security_settings_pin_profile;
break;
case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
resid = isMyUser ? R.xml.security_settings_password
: R.xml.security_settings_password_profile;
break;
case DevicePolicyManager.PASSWORD_QUALITY_MANAGED:
resid = managedPasswordProvider.getResIdForLockUnlockScreen(!isMyUser);
break;
}
}
return resid;
}
final Preference lockPreference =
root.findPreference(KEY_UNLOCK_SET_OR_CHANGE_PROFILE);
화면 잠금 Ilock Settings.aidl 잠금 화면 서비스 LockSettings 서비스를 호출합니다.java
frameworks/base/core/java/com/android/internal/widget/ILockSettings.aidl
읽기 및 쓰기 설정, getLockSettings()에서 IlockSettings를 호출합니다.aidl
frameworks/base/core/java/com/android/internal/widget/LockPatternUtils.java
getLockSettings () lock settings 서비스 받기
private ILockSettings
getLockSettings() {
if (mLockSettingsService == null) {
ILockSettings service = ILockSettings.Stub.asInterface(
ServiceManager.getService("lock_settings"));
mLockSettingsService= service;
}
return mLockSettingsService;
}
getLong 데이터 가져오기 - 암호화 유형
public final static String PASSWORD_TYPE_KEY = "lockscreen.password_type";
public int getKeyguardStoredPasswordQuality(int userHandle) {
return (int) getLong(
PASSWORD_TYPE_KEY,
DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userHandle);
}
private long getLong(String secureSettingKey, long defaultValue, int userHandle) {
try {
return getLockSettings().getLong(secureSettingKey, defaultValue, userHandle);
} catch (RemoteException re) {
return defaultValue;
}
}
잠금 화면 서비스 LockSettings 서비스.java
frameworks/base/services/core/java/com/android/server/LockSettingsService.java
LockSettingsStorage 스토리지 데이터 초기화
public LockSettingsService(Context context) {
mContext = context;
mHandler = new Handler();
mStrongAuth = new LockSettingsStrongAuth(context);
//Open the database
mLockPatternUtils = new LockPatternUtils(context);
mFirstCallToVold = true;
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_ADDED);
filter.addAction(Intent.ACTION_USER_STARTING);
filter.addAction(Intent.ACTION_USER_REMOVED);
mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);
mStorage = new LockSettingsStorage(context, new LockSettingsStorage.Callback() {
@Override
public void initialize(SQLiteDatabase db) {
//Get the lockscreen default from a system property, if available
boolean lockScreenDisable = SystemProperties.getBoolean(
"ro.lockscreen.disable.default", false);
if (lockScreenDisable) {
mStorage.writeKeyValue(db, LockPatternUtils.DISABLE_LOCKSCREEN_KEY, "1", 0);
}
}
});
mNotificationManager = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
mStrongAuthTracker = new SynchronizedStrongAuthTracker(mContext);
mStrongAuthTracker.register();
}
getLong 값 가져오기
public String getStringUnchecked(String key, String defaultValue, int userId) {
if (Settings.Secure.
LOCK_PATTERN_ENABLED.equals(key)) {
long ident = Binder.clearCallingIdentity();
try {
return mLockPatternUtils.isLockPatternEnabled(userId) ? "1": "0";
} finally {
Binder.restoreCallingIdentity(ident);
}
}
if (LockPatternUtils.LEGACY_LOCK_PATTERN_ENABLED.equals(key)) {
key = Settings.Secure.LOCK_PATTERN_ENABLED;
}
//Settings.Secure.LOCK_PATTERN_ENABLED의 정의는 우리가 찾는 PASSWORD가 아닙니다.TYPE_KEY = "lockscreen.password_type";
//frameworks/base/core/java/android/provider/Settings.java
//public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock";//Whether autolock is enabled (0 = false, 1 = true)
//데이터 private final LockSettings Storage mStorage 읽기
return mStorage.readKeyValue(key, defaultValue, userId);
}
LockSettingsStorage에서 데이터 읽기
frameworks/base/services/core/java/com/android/server/LockSettingsStorage.java
일부 데이터베이스 매개 변수
private static final String TABLE = "
locksettings";
private static final String COLUMN_KEY = "name";
private static final String COLUMN_USERID = "user";
private static final String COLUMN_VALUE = "value";
private static final String SYSTEM_DIRECTORY = "/system/";
private static final String LOCK_PATTERN_FILE = "gatekeeper.pattern.key";
private static final String BASE_ZERO_LOCK_PATTERN_FILE = "gatekeeper.gesture.key";
private static final String LEGACY_LOCK_PATTERN_FILE = "gesture.key";
private static final String LOCK_PASSWORD_FILE = "gatekeeper.password.key";
private static final String LEGACY_LOCK_PASSWORD_FILE = "password.key";
private static final String CHILD_PROFILE_LOCK_FILE = "gatekeeper.profile.key";
데이터 저장 경로/data/system/locksettings.db
String dataSystemDirectory = android.os.Environment.getDataDirectory().getAbsolutePath() + SYSTEM_DIRECTORY;
데이터베이스 열기
public LockSettingsStorage(Context context, Callback callback) {
mContext = context;
mOpenHelper = new DatabaseHelper(context, callback);
mStoredCredentialType = new SparseArray();
}
데이터 읽기
public String readKeyValue(String key, String defaultValue, int userId) {
int version;
synchronized (mCache) {
if (mCache.hasKeyValue(key, userId)) {
return mCache.peekKeyValue(key, defaultValue, userId);
}
version = mCache.getVersion();
}
Cursor cursor;
Object result = DEFAULT;
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
if ((cursor = db.query(TABLE, COLUMNS_FOR_QUERY,
COLUMN_USERID + "=? AND "+ COLUMN_KEY + "=?",
new String[] { Integer.toString(userId), key },
null, null, null)) != null) {
if (cursor.moveToFirst()) {
result = cursor.getString(0);
}
cursor.close();
}
mCache.putKeyValueIfUnchanged(key, result, userId, version);
return result == DEFAULT ? defaultValue : (String) result;
}
벽돌을 던져 옥을 끌어올리는 것은 단지 참고로 제공할 뿐이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.