diff options
author | zachh <zachh@google.com> | 2017-10-31 12:35:00 -0700 |
---|---|---|
committer | zachh <zachh@google.com> | 2017-11-01 22:00:54 +0000 |
commit | 73bc4703739639d823abb743515836d4f55799c1 (patch) | |
tree | f9f58f18d4e83c64c11447ec617ee3201b308cfc | |
parent | 0cd36a6e3bfda1c8b78c0375225929f50ee408a5 (diff) |
Use unencrypted storage for shared prefs in new call log.
We need to be able to write the shared prefs when the device is in direct boot mode, and this data is not sensitive so can be unencrypted.
Bug: 68350256
Test: existing unit, manual
PiperOrigin-RevId: 174075154
Change-Id: Ib52e11c6abba0812d1dc07c642691359089c3e6e
-rw-r--r-- | java/com/android/dialer/calllog/CallLogFramework.java | 7 | ||||
-rw-r--r-- | java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java | 12 | ||||
-rw-r--r-- | java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java | 11 | ||||
-rw-r--r-- | java/com/android/dialer/storage/StorageComponent.java | 4 | ||||
-rw-r--r-- | java/com/android/dialer/storage/StorageModule.java | 1 | ||||
-rw-r--r-- | java/com/android/dialer/storage/Unencrypted.java (renamed from java/com/android/dialer/storage/DeviceProtected.java) | 4 |
6 files changed, 25 insertions, 14 deletions
diff --git a/java/com/android/dialer/calllog/CallLogFramework.java b/java/com/android/dialer/calllog/CallLogFramework.java index 788e56b93..e4bb4c89a 100644 --- a/java/com/android/dialer/calllog/CallLogFramework.java +++ b/java/com/android/dialer/calllog/CallLogFramework.java @@ -18,7 +18,6 @@ package com.android.dialer.calllog; import android.content.Context; import android.content.SharedPreferences; -import android.preference.PreferenceManager; import android.support.annotation.MainThread; import android.support.annotation.Nullable; import com.android.dialer.buildtype.BuildType; @@ -26,6 +25,7 @@ import com.android.dialer.calllog.datasources.CallLogDataSource; import com.android.dialer.calllog.datasources.DataSources; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; +import com.android.dialer.storage.Unencrypted; import javax.inject.Inject; import javax.inject.Singleton; @@ -41,12 +41,14 @@ public final class CallLogFramework implements CallLogDataSource.ContentObserver static final String PREF_FORCE_REBUILD = "callLogFrameworkForceRebuild"; private final DataSources dataSources; + private final SharedPreferences sharedPreferences; @Nullable private CallLogUi ui; @Inject - CallLogFramework(DataSources dataSources) { + CallLogFramework(DataSources dataSources, @Unencrypted SharedPreferences sharedPreferences) { this.dataSources = dataSources; + this.sharedPreferences = sharedPreferences; } /** Registers the content observers for all data sources. */ @@ -99,7 +101,6 @@ public final class CallLogFramework implements CallLogDataSource.ContentObserver Assert.isMainThread(); LogUtil.enterBlock("CallLogFramework.markDirtyAndNotify"); - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext); sharedPreferences.edit().putBoolean(PREF_FORCE_REBUILD, true).apply(); if (ui != null) { diff --git a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java index 273246649..72f73cdaf 100644 --- a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java +++ b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java @@ -22,7 +22,6 @@ import android.content.OperationApplicationException; import android.content.SharedPreferences; import android.os.Build; import android.os.RemoteException; -import android.preference.PreferenceManager; import android.support.annotation.WorkerThread; import com.android.dialer.calllog.database.CallLogDatabaseComponent; import com.android.dialer.calllog.datasources.CallLogDataSource; @@ -32,6 +31,7 @@ import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.DialerExecutor.Worker; import com.android.dialer.inject.ApplicationContext; +import com.android.dialer.storage.Unencrypted; import javax.inject.Inject; /** @@ -43,11 +43,16 @@ public class RefreshAnnotatedCallLogWorker implements Worker<Boolean, Void> { private final Context appContext; private final DataSources dataSources; + private final SharedPreferences sharedPreferences; @Inject - RefreshAnnotatedCallLogWorker(@ApplicationContext Context appContext, DataSources dataSources) { + RefreshAnnotatedCallLogWorker( + @ApplicationContext Context appContext, + DataSources dataSources, + @Unencrypted SharedPreferences sharedPreferences) { this.appContext = appContext; this.dataSources = dataSources; + this.sharedPreferences = sharedPreferences; } @Override @@ -71,7 +76,6 @@ public class RefreshAnnotatedCallLogWorker implements Worker<Boolean, Void> { long startTime = System.currentTimeMillis(); - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext); // Default to true. If the pref doesn't exist, the annotated call log hasn't been created and // we just skip isDirty checks and force a rebuild. boolean forceRebuildPrefValue = @@ -171,8 +175,6 @@ public class RefreshAnnotatedCallLogWorker implements Worker<Boolean, Void> { dataSourceName, System.currentTimeMillis() - startTime); } - - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext); sharedPreferences.edit().putBoolean(CallLogFramework.PREF_FORCE_REBUILD, false).apply(); } diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java index 1fe3507e0..5ca160778 100644 --- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java +++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java @@ -25,7 +25,6 @@ import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Handler; -import android.preference.PreferenceManager; import android.provider.CallLog; import android.provider.CallLog.Calls; import android.provider.ContactsContract.CommonDataKinds.Phone; @@ -48,6 +47,7 @@ import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.ThreadUtil; import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil; +import com.android.dialer.storage.StorageComponent; import com.android.dialer.theme.R; import com.android.dialer.util.PermissionsUtil; import com.google.i18n.phonenumbers.PhoneNumberUtil; @@ -107,7 +107,8 @@ public class SystemCallLogDataSource implements CallLogDataSource { * * Just return false unless the table has never been written to. */ - return !PreferenceManager.getDefaultSharedPreferences(appContext) + return !StorageComponent.get(appContext) + .unencryptedSharedPrefs() .contains(PREF_LAST_TIMESTAMP_PROCESSED); } @@ -142,7 +143,8 @@ public class SystemCallLogDataSource implements CallLogDataSource { public void onSuccessfulFill(Context appContext) { // If a fill operation was a no-op, lastTimestampProcessed could still be null. if (lastTimestampProcessed != null) { - PreferenceManager.getDefaultSharedPreferences(appContext) + StorageComponent.get(appContext) + .unencryptedSharedPrefs() .edit() .putLong(PREF_LAST_TIMESTAMP_PROCESSED, lastTimestampProcessed) .apply(); @@ -190,7 +192,8 @@ public class SystemCallLogDataSource implements CallLogDataSource { private void handleInsertsAndUpdates( Context appContext, CallLogMutations mutations, Set<Long> existingAnnotatedCallLogIds) { long previousTimestampProcessed = - PreferenceManager.getDefaultSharedPreferences(appContext) + StorageComponent.get(appContext) + .unencryptedSharedPrefs() .getLong(PREF_LAST_TIMESTAMP_PROCESSED, 0L); DialerPhoneNumberUtil dialerPhoneNumberUtil = diff --git a/java/com/android/dialer/storage/StorageComponent.java b/java/com/android/dialer/storage/StorageComponent.java index 067b99424..cb5c4a879 100644 --- a/java/com/android/dialer/storage/StorageComponent.java +++ b/java/com/android/dialer/storage/StorageComponent.java @@ -28,7 +28,11 @@ public abstract class StorageComponent { /** * Returns unencrypted default shared preferences. This method should not be used for private * data. + * + * <p>These shared prefs are available even when the device is in FBE mode and are generally the + * ones that should be used, because Dialer needs to function while in FBE mode. */ + @Unencrypted public abstract SharedPreferences unencryptedSharedPrefs(); public static StorageComponent get(Context context) { diff --git a/java/com/android/dialer/storage/StorageModule.java b/java/com/android/dialer/storage/StorageModule.java index 3ee72c8d8..e1c5b4b08 100644 --- a/java/com/android/dialer/storage/StorageModule.java +++ b/java/com/android/dialer/storage/StorageModule.java @@ -30,6 +30,7 @@ public class StorageModule { @Provides @Singleton + @Unencrypted static SharedPreferences provideUnencryptedSharedPrefs(@ApplicationContext Context appContext) { // #createDeviceProtectedStorageContext returns a new context each time, so we cache the shared // preferences object in order to avoid accessing disk for every operation. diff --git a/java/com/android/dialer/storage/DeviceProtected.java b/java/com/android/dialer/storage/Unencrypted.java index 862259a61..02c902145 100644 --- a/java/com/android/dialer/storage/DeviceProtected.java +++ b/java/com/android/dialer/storage/Unencrypted.java @@ -17,6 +17,6 @@ package com.android.dialer.storage; import javax.inject.Qualifier; -/** Annotation for retrieving device protected storage objects. */ +/** Annotation for retrieving unencrypted storage objects. */ @Qualifier -public @interface DeviceProtected {} +public @interface Unencrypted {} |