Fix SecurityException at getActiveSubscriptionInfoList() on N and O
Creating ConnectivityUtil instances after checking the minimum set of
permissions since SubscriptionManager#getActiveSubscriptionInfoList()
requires READ_PHONE_STATE and users can revoke the permission.
On P and beyond, the subscription list will be filtered instead when no
permission.
Bug: 159421050
Test: Manual
Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
Change-Id: Iafc3c57060e1893a91e629b1b3e3ba9ad78967cb
diff --git a/src/com/android/messaging/datamodel/DataModelImpl.java b/src/com/android/messaging/datamodel/DataModelImpl.java
index bbb695b..ddb17ff 100644
--- a/src/com/android/messaging/datamodel/DataModelImpl.java
+++ b/src/com/android/messaging/datamodel/DataModelImpl.java
@@ -79,11 +79,6 @@
mDataModelWorker = new BackgroundWorker();
mDatabaseHelper = DatabaseHelper.getInstance(context);
mSyncManager = new SyncManager();
- if (OsUtil.isAtLeastN()) {
- createConnectivityUtilForEachActiveSubscription();
- } else {
- sConnectivityUtilInstanceCachePreN = new ConnectivityUtil(context);
- }
}
@Override
@@ -219,6 +214,12 @@
@Override
public void onApplicationCreated() {
+ if (OsUtil.isAtLeastN()) {
+ createConnectivityUtilForEachActiveSubscription();
+ } else {
+ sConnectivityUtilInstanceCachePreN = new ConnectivityUtil(mContext);
+ }
+
FixupMessageStatusOnStartupAction.fixupMessageStatus();
ProcessPendingMessagesAction.processFirstPendingMessage();
SyncManager.immediateSync();