summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChen Xu <fionaxu@google.com>2020-05-12 14:10:04 -0700
committerChen Xu <fionaxu@google.com>2020-05-27 20:26:16 +0000
commit5fe786c79b10cf10bcc034835bd34b6a4bc73b5e (patch)
tree43d0ad47d37cc4026bc6b181bbde2d53c471d83c
parentef6a97609e0f24ce022a6f53ed4f0eac8d27f54a (diff)
downloadCellBroadcastReceiver-5fe786c79b10cf10bcc034835bd34b6a4bc73b5e.tar.gz
support data migration by default
As part of mainline effort, cellbroadcastreceiver package name has been renamed. Now its a completely new apk with different uid. That said all user data e.g, cellbroadcast history and user preference from legacy app com.android.cellbroadcastreceiver are gone. This change is to support preserve user data when devices upgrating to R and taking cellbroadcast mainline module. 1. create legacy cellbroadcast app with old pakcage name com.android.cellbroadcastreceiver. this app only surface the old data and should not contains any activities/services to handle emergecy apert 2. legacy cellbroadcast app will be included to the system image by default. OEMs are free to remove it if they don't care data loss or R data migration is done. leagcy app will not be part of com.android.cellbroadcast apex. 3. the real mainline module rename to com.android.cellbroadcast.module Bug: 155844209 Change-Id: I25beb1b76f3231691188de51977ce17f721dcdae Merged-in: I25beb1b76f3231691188de51977ce17f721dcdae
-rw-r--r--Android.bp9
-rw-r--r--AndroidManifest.xml26
-rw-r--r--CleanSpec.mk2
-rw-r--r--legacy/Android.bp26
-rw-r--r--legacy/AndroidManifest.xml37
-rw-r--r--legacy/src/com/android/cellbroadcastreceiver/LegacyCellBroadcastContentProvider.java112
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastContentProvider.java34
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastDatabaseHelper.java44
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java2
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastListItem.java2
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java2
-rw-r--r--tests/testapp/AndroidManifest.xml1
-rw-r--r--tests/unit/AndroidManifest.xml2
13 files changed, 246 insertions, 53 deletions
diff --git a/Android.bp b/Android.bp
index f0e9459a0..83f8708ac 100644
--- a/Android.bp
+++ b/Android.bp
@@ -28,6 +28,7 @@ android_app {
name: "CellBroadcastApp",
defaults: ["CellBroadcastCommon"],
certificate: "networkstack",
+ aaptflags: ["--custom-package com.android.cellbroadcastreceiver"],
manifest: "AndroidManifest.xml",
apex_available: ["com.android.cellbroadcast"],
}
@@ -41,3 +42,11 @@ android_app {
overrides: ["com.android.cellbroadcast"],
manifest: "AndroidManifest_Platform.xml",
}
+
+// source file shared with legacy cellbroadcast app
+filegroup {
+ name: "cellbroadcast-database-sources",
+ srcs: [
+ "src/com/android/cellbroadcastreceiver/CellBroadcastDatabaseHelper.java",
+ ],
+}
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 44bd7ab33..d4a217666 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -17,7 +17,7 @@
*/
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.cellbroadcastreceiver"
+ package="com.android.cellbroadcastreceiver.module"
android:versionCode="300000000"
android:versionName="R-initial">
@@ -40,7 +40,7 @@
<uses-sdk android:minSdkVersion="21"/>
- <application android:name="CellBroadcastReceiverApp"
+ <application android:name="com.android.cellbroadcastreceiver.CellBroadcastReceiverApp"
android:label="@string/app_label"
android:icon="@mipmap/ic_launcher_cell_broadcast"
android:backupAgent="CellBroadcastBackupAgent"
@@ -51,25 +51,25 @@
<meta-data android:name="com.google.android.backup.api_key"
android:value="AEdPqrEAAAAI2_Lb4sDI0e0twL-kf6GIqXpZIfrR0OhnM1pNJQ" />
- <service android:name="CellBroadcastAlertAudio"
+ <service android:name="com.android.cellbroadcastreceiver.CellBroadcastAlertAudio"
android:exported="false" />
- <service android:name="CellBroadcastAlertService"
+ <service android:name="com.android.cellbroadcastreceiver.CellBroadcastAlertService"
android:exported="false" />
- <service android:name="CellBroadcastConfigService"
+ <service android:name="com.android.cellbroadcastreceiver.CellBroadcastConfigService"
android:exported="false" />
- <service android:name="CellBroadcastAlertReminder"
+ <service android:name="com.android.cellbroadcastreceiver.CellBroadcastAlertReminder"
android:exported="false" />
<!-- Export provider for AT&T Device and Network Reset-->
- <provider android:name="CellBroadcastContentProvider"
+ <provider android:name="com.android.cellbroadcastreceiver.CellBroadcastContentProvider"
android:authorities="cellbroadcasts-app"
android:exported="true"
android:readPermission="android.permission.READ_CELL_BROADCASTS" />
- <activity android:name="CellBroadcastListActivity"
+ <activity android:name="com.android.cellbroadcastreceiver.CellBroadcastListActivity"
android:label="@string/app_label"
android:theme="@style/CellBroadcastSettingsTheme"
android:configChanges="orientation|keyboardHidden" >
@@ -89,12 +89,12 @@
</activity>
<!-- Settings opened by ListActivity menu, Settings app link or opt-out dialog. -->
- <activity android:name="CellBroadcastSettings"
+ <activity android:name="com.android.cellbroadcastreceiver.CellBroadcastSettings"
android:theme="@style/CellBroadcastSettingsTheme"
android:label="@string/sms_cb_settings"
android:exported="true" />
- <activity android:name="CellBroadcastAlertDialog"
+ <activity android:name="com.android.cellbroadcastreceiver.CellBroadcastAlertDialog"
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog"
android:launchMode="singleTask"
android:exported="false"
@@ -106,10 +106,10 @@
</activity>
<!-- Container activity for CMAS opt-in/opt-out dialog. -->
- <activity android:name="CellBroadcastOptOutActivity"
+ <activity android:name="com.android.cellbroadcastreceiver.CellBroadcastOptOutActivity"
android:exported="false" />
- <receiver android:name="CellBroadcastReceiver">
+ <receiver android:name="com.android.cellbroadcastreceiver.CellBroadcastReceiver">
<intent-filter>
<action android:name="android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED" />
<action android:name="android.telephony.action.CARRIER_CONFIG_CHANGED" />
@@ -127,7 +127,7 @@
</receiver>
<provider
- android:name="CellBroadcastSearchIndexableProvider"
+ android:name="com.android.cellbroadcastreceiver.CellBroadcastSearchIndexableProvider"
android:authorities="com.android.cellbroadcastreceiver"
android:multiprocess="false"
android:grantUriPermissions="true"
diff --git a/CleanSpec.mk b/CleanSpec.mk
index c1ea9066f..1c17118ff 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -50,7 +50,7 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/CellBroadcastApp)
# Build finger print update in order to trigger default permission grant policy on incremental build
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/ETC/system_build_prop_intermediates/build.prop)
-
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/ETC/system_build_prop_intermediates/build.prop)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/legacy/Android.bp b/legacy/Android.bp
new file mode 100644
index 000000000..c6b2a4ea9
--- /dev/null
+++ b/legacy/Android.bp
@@ -0,0 +1,26 @@
+// Copyright 2020 The Android Open Source Project
+// legacy app only used to preserve data and migrate to CellBroadcastApp.
+// This will not be part of the Cellbroadcast mainline module.
+// The app is included to system img by default. If OEMs have their own legacy
+// app they can replace this one. If OEMs don't care about data loss or data
+// migration complete, OEMs can remove this app going forward.
+android_app {
+ name: "CellBroadcastLegacyApp",
+ manifest: "AndroidManifest.xml",
+ certificate: "platform",
+
+ static_libs: [
+ "androidx.appcompat_appcompat",
+ ],
+
+ libs: ["app-compat-annotations"],
+
+ srcs: [
+ "src/**/*.aidl",
+ "src/**/*.java",
+ ":framework-annotations",
+ ":cellbroadcast-database-sources",
+ ],
+ privileged: true,
+ sdk_version: "system_current",
+} \ No newline at end of file
diff --git a/legacy/AndroidManifest.xml b/legacy/AndroidManifest.xml
new file mode 100644
index 000000000..33a37444c
--- /dev/null
+++ b/legacy/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.cellbroadcastreceiver"
+ android:versionCode="300000000"
+ android:versionName="R-initial">
+
+ <!-- This "legacy" instance is retained on the device to preserve the
+ database contents before cellbroadcast was migrated into a
+ Mainline module. -->
+ <application
+ android:forceQueryable="true"
+ android:defaultToDeviceProtectedStorage="true"
+ android:directBootAware="true">
+ <provider
+ android:name="LegacyCellBroadcastContentProvider"
+ android:authorities="cellbroadcast-legacy"
+ android:readPermission="android.permission.READ_CELL_BROADCASTS"
+ android:exported="true" />
+ </application>
+</manifest>
diff --git a/legacy/src/com/android/cellbroadcastreceiver/LegacyCellBroadcastContentProvider.java b/legacy/src/com/android/cellbroadcastreceiver/LegacyCellBroadcastContentProvider.java
new file mode 100644
index 000000000..41a8f26dd
--- /dev/null
+++ b/legacy/src/com/android/cellbroadcastreceiver/LegacyCellBroadcastContentProvider.java
@@ -0,0 +1,112 @@
+package com.android.cellbroadcastreceiver;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.database.sqlite.SQLiteQueryBuilder;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.provider.Telephony;
+import android.provider.Telephony.CellBroadcasts;
+import android.util.Log;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Very limited subset of function which is only used to surfaces data.
+ */
+public class LegacyCellBroadcastContentProvider extends ContentProvider {
+
+ private static final String TAG = LegacyCellBroadcastContentProvider.class.getSimpleName();
+ /** A list of preference supported by legacy app **/
+ private static final List<String> PREF_KEYS = Arrays.asList(
+ CellBroadcasts.Preference.ENABLE_CMAS_AMBER_PREF,
+ CellBroadcasts.Preference.ENABLE_AREA_UPDATE_INFO_PREF,
+ CellBroadcasts.Preference.ENABLE_TEST_ALERT_PREF,
+ CellBroadcasts.Preference.ENABLE_STATE_LOCAL_TEST_PREF,
+ CellBroadcasts.Preference.ENABLE_PUBLIC_SAFETY_PREF,
+ CellBroadcasts.Preference.ENABLE_CMAS_SEVERE_THREAT_PREF,
+ CellBroadcasts.Preference.ENABLE_CMAS_EXTREME_THREAT_PREF,
+ CellBroadcasts.Preference.ENABLE_CMAS_PRESIDENTIAL_PREF,
+ CellBroadcasts.Preference.ENABLE_EMERGENCY_PERF,
+ CellBroadcasts.Preference.ENABLE_ALERT_VIBRATION_PREF,
+ CellBroadcasts.Preference.ENABLE_CMAS_IN_SECOND_LANGUAGE_PREF
+ );
+
+ /** The database for this content provider. */
+ private SQLiteOpenHelper mOpenHelper;
+
+ @Override
+ public boolean onCreate() {
+ Log.d(TAG, "onCreate");
+ mOpenHelper = new CellBroadcastDatabaseHelper(getContext(), true);
+ return true;
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] projectionIn, String selection,
+ String[] selectionArgs, String sortOrder) {
+ Log.d(TAG, "query:"
+ + " uri=" + uri
+ + " values=" + Arrays.toString(projectionIn)
+ + " selection=" + selection
+ + " selectionArgs=" + Arrays.toString(selectionArgs));
+
+ SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
+ qb.setTables(CellBroadcastDatabaseHelper.TABLE_NAME);
+ SQLiteDatabase db = mOpenHelper.getReadableDatabase();
+ Cursor c = qb.query(db, projectionIn, selection, selectionArgs, null, null, sortOrder);
+ Log.d(TAG, "query from legacy cellbroadcast, returned " + c.getCount() + " messages");
+ return c;
+ }
+
+ @Override
+ public Bundle call(String method, String name, Bundle args) {
+ Log.d(TAG, "call:"
+ + " method=" + method
+ + " name=" + name
+ + " args=" + args);
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
+ if (Telephony.CellBroadcasts.CALL_METHOD_GET_PREFERENCE.equals(method)) {
+ if (PREF_KEYS.contains(name)) {
+ // if preference value does not exists, return null.
+ if (sp != null && sp.contains(name)) {
+ Bundle result = new Bundle();
+ result.putBoolean(name, sp.getBoolean(name, true));
+ Log.d(TAG, "migrate sharedpreference: " + name + " val: " + result.get(name));
+ return result;
+ }
+ } else {
+ Log.e(TAG, "unsupported preference name" + name);
+ }
+ } else {
+ Log.e(TAG, "unsuppprted call method: " + method);
+ }
+ return null;
+ }
+
+ @Override
+ public String getType(Uri uri) {
+ Log.d(TAG, "getType");
+ return null;
+ }
+
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {
+ throw new UnsupportedOperationException("insert not supported");
+ }
+
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {
+ throw new UnsupportedOperationException("delete not supported");
+ }
+
+ @Override
+ public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ throw new UnsupportedOperationException("update not supported");
+ }
+} \ No newline at end of file
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastContentProvider.java b/src/com/android/cellbroadcastreceiver/CellBroadcastContentProvider.java
index 23c9e077e..4f7572d6b 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastContentProvider.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastContentProvider.java
@@ -67,33 +67,6 @@ public class CellBroadcastContentProvider extends ContentProvider {
sUriMatcher.addURI(CB_AUTHORITY, "#", CB_ALL_ID);
}
- /*
- * Query columns for instantiating SmsCbMessage.
- */
- public static final String[] QUERY_COLUMNS = {
- Telephony.CellBroadcasts._ID,
- Telephony.CellBroadcasts.SLOT_INDEX,
- Telephony.CellBroadcasts.GEOGRAPHICAL_SCOPE,
- Telephony.CellBroadcasts.PLMN,
- Telephony.CellBroadcasts.LAC,
- Telephony.CellBroadcasts.CID,
- Telephony.CellBroadcasts.SERIAL_NUMBER,
- Telephony.CellBroadcasts.SERVICE_CATEGORY,
- Telephony.CellBroadcasts.LANGUAGE_CODE,
- Telephony.CellBroadcasts.MESSAGE_BODY,
- Telephony.CellBroadcasts.DELIVERY_TIME,
- Telephony.CellBroadcasts.MESSAGE_READ,
- Telephony.CellBroadcasts.MESSAGE_FORMAT,
- Telephony.CellBroadcasts.MESSAGE_PRIORITY,
- Telephony.CellBroadcasts.ETWS_WARNING_TYPE,
- Telephony.CellBroadcasts.CMAS_MESSAGE_CLASS,
- Telephony.CellBroadcasts.CMAS_CATEGORY,
- Telephony.CellBroadcasts.CMAS_RESPONSE_TYPE,
- Telephony.CellBroadcasts.CMAS_SEVERITY,
- Telephony.CellBroadcasts.CMAS_URGENCY,
- Telephony.CellBroadcasts.CMAS_CERTAINTY
- };
-
/** The database for this content provider. */
private SQLiteOpenHelper mOpenHelper;
@@ -103,7 +76,12 @@ public class CellBroadcastContentProvider extends ContentProvider {
*/
@Override
public boolean onCreate() {
- mOpenHelper = new CellBroadcastDatabaseHelper(getContext());
+ mOpenHelper = new CellBroadcastDatabaseHelper(getContext(), false);
+ // trigger this to create database explicitly. Otherwise the db will be created only after
+ // the first query/update/insertion. Data migration is done inside db creation and we want
+ // to migrate data from cellbroadcast-legacy immediately when upgrade to the mainline module
+ // rather than migrate after the first emergency alert.
+ mOpenHelper.getReadableDatabase();
return true;
}
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastDatabaseHelper.java b/src/com/android/cellbroadcastreceiver/CellBroadcastDatabaseHelper.java
index 5080a05d8..fd736f330 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastDatabaseHelper.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastDatabaseHelper.java
@@ -40,6 +40,33 @@ public class CellBroadcastDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "cell_broadcasts.db";
static final String TABLE_NAME = "broadcasts";
+ /*
+ * Query columns for instantiating SmsCbMessage.
+ */
+ public static final String[] QUERY_COLUMNS = {
+ Telephony.CellBroadcasts._ID,
+ Telephony.CellBroadcasts.SLOT_INDEX,
+ Telephony.CellBroadcasts.GEOGRAPHICAL_SCOPE,
+ Telephony.CellBroadcasts.PLMN,
+ Telephony.CellBroadcasts.LAC,
+ Telephony.CellBroadcasts.CID,
+ Telephony.CellBroadcasts.SERIAL_NUMBER,
+ Telephony.CellBroadcasts.SERVICE_CATEGORY,
+ Telephony.CellBroadcasts.LANGUAGE_CODE,
+ Telephony.CellBroadcasts.MESSAGE_BODY,
+ Telephony.CellBroadcasts.DELIVERY_TIME,
+ Telephony.CellBroadcasts.MESSAGE_READ,
+ Telephony.CellBroadcasts.MESSAGE_FORMAT,
+ Telephony.CellBroadcasts.MESSAGE_PRIORITY,
+ Telephony.CellBroadcasts.ETWS_WARNING_TYPE,
+ Telephony.CellBroadcasts.CMAS_MESSAGE_CLASS,
+ Telephony.CellBroadcasts.CMAS_CATEGORY,
+ Telephony.CellBroadcasts.CMAS_RESPONSE_TYPE,
+ Telephony.CellBroadcasts.CMAS_SEVERITY,
+ Telephony.CellBroadcasts.CMAS_URGENCY,
+ Telephony.CellBroadcasts.CMAS_CERTAINTY
+ };
+
/**
* Database version 1: initial version (support removed)
* Database version 2-9: (reserved for OEM database customization) (support removed)
@@ -50,10 +77,12 @@ public class CellBroadcastDatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 12;
private final Context mContext;
+ final boolean mLegacyProvider;
- CellBroadcastDatabaseHelper(Context context) {
+ CellBroadcastDatabaseHelper(Context context, boolean legacyProvider) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
+ mLegacyProvider = legacyProvider;
}
@Override
@@ -83,7 +112,9 @@ public class CellBroadcastDatabaseHelper extends SQLiteOpenHelper {
db.execSQL("CREATE INDEX IF NOT EXISTS deliveryTimeIndex ON " + TABLE_NAME
+ " (" + Telephony.CellBroadcasts.DELIVERY_TIME + ");");
- migrateFromLegacy(db);
+ if (!mLegacyProvider) {
+ migrateFromLegacy(db);
+ }
}
@Override
@@ -101,8 +132,8 @@ public class CellBroadcastDatabaseHelper extends SQLiteOpenHelper {
}
/**
- * This is the migration logic to accommodate OEMs who previously use non-AOSP CBR and move to
- * mainlined CBR for the first time. When the db is initially created, this is called once to
+ * This is the migration logic to accommodate OEMs move to mainlined CBR for the first time.
+ * When the db is initially created, this is called once to
* migrate predefined data through {@link Telephony.CellBroadcasts#AUTHORITY_LEGACY_URI}
* from OEM app.
*/
@@ -118,12 +149,11 @@ public class CellBroadcastDatabaseHelper extends SQLiteOpenHelper {
log("Starting migration from legacy provider");
// migration columns are same as query columns
try (Cursor c = client.query(Telephony.CellBroadcasts.AUTHORITY_LEGACY_URI,
- CellBroadcastContentProvider.QUERY_COLUMNS,
- null, null, null)) {
+ QUERY_COLUMNS, null, null, null)) {
final ContentValues values = new ContentValues();
while (c.moveToNext()) {
values.clear();
- for (String column : CellBroadcastContentProvider.QUERY_COLUMNS) {
+ for (String column : QUERY_COLUMNS) {
copyFromCursorToContentValues(column, c, values);
}
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
index 7b5228688..2f68db6b9 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
@@ -256,7 +256,7 @@ public class CellBroadcastListActivity extends Activity {
if (id == LOADER_NORMAL_HISTORY) {
Log.d(TAG, "onCreateLoader: normal history.");
return new CursorLoader(getActivity(), CellBroadcastContentProvider.CONTENT_URI,
- CellBroadcastContentProvider.QUERY_COLUMNS, null, null,
+ CellBroadcastDatabaseHelper.QUERY_COLUMNS, null, null,
Telephony.CellBroadcasts.DELIVERY_TIME + " DESC");
} else if (id == LOADER_HISTORY_FROM_CBS) {
Log.d(TAG, "onCreateLoader: history from cell broadcast service");
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastListItem.java b/src/com/android/cellbroadcastreceiver/CellBroadcastListItem.java
index d1e723eff..81b0c3608 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastListItem.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastListItem.java
@@ -75,7 +75,7 @@ public class CellBroadcastListItem extends RelativeLayout {
SpannableStringBuilder messageText = new SpannableStringBuilder(message.getMessageBody());
try (Cursor cursor = mContext.getContentResolver().query(
CellBroadcastContentProvider.CONTENT_URI,
- CellBroadcastContentProvider.QUERY_COLUMNS,
+ CellBroadcastDatabaseHelper.QUERY_COLUMNS,
Telephony.CellBroadcasts.DELIVERY_TIME + "=?",
new String[] {Long.toString(message.getReceivedTime())},
null)) {
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
index fd0198ab8..27cfcaeec 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
@@ -277,7 +277,7 @@ public class CellBroadcastReceiver extends BroadcastReceiver {
CellBroadcasts.AUTHORITY_LEGACY,
CellBroadcasts.CALL_METHOD_GET_PREFERENCE,
key, null);
- if (pref != null) {
+ if (pref != null && pref.containsKey(key)) {
Log.d(TAG, "migrateSharedPreferenceFromLegacy: " + key + "val: "
+ pref.getBoolean(key));
sp.putBoolean(key, pref.getBoolean(key));
diff --git a/tests/testapp/AndroidManifest.xml b/tests/testapp/AndroidManifest.xml
index f3e244748..2b7bf4955 100644
--- a/tests/testapp/AndroidManifest.xml
+++ b/tests/testapp/AndroidManifest.xml
@@ -44,6 +44,7 @@
<provider
android:name="DataMigrationContentProvider"
android:authorities="cellbroadcast-legacy"
+ android:enabled="false"
android:exported="true" />
</application>
diff --git a/tests/unit/AndroidManifest.xml b/tests/unit/AndroidManifest.xml
index df400bf95..3cb73df61 100644
--- a/tests/unit/AndroidManifest.xml
+++ b/tests/unit/AndroidManifest.xml
@@ -22,7 +22,7 @@
</application>
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.cellbroadcastreceiver"
+ android:targetPackage="com.android.cellbroadcastreceiver.module"
android:label="CellBroadcastReceiver Unit Test Cases">
</instrumentation>