diff options
author | Chiao Cheng <chiaocheng@google.com> | 2013-06-17 11:52:56 -0700 |
---|---|---|
committer | Chiao Cheng <chiaocheng@google.com> | 2013-06-19 17:41:45 -0700 |
commit | e2663c31031acd574f590f845d3306ec847ecc91 (patch) | |
tree | f522bb0799eb8d73f4f753e711799feb241f221f /src/com/android/providers/contacts/BootCompletedReceiver.java | |
parent | d621a10ce45c1f9e4f6caddc7aef5b2370d595b8 (diff) | |
download | android_packages_providers_ContactsProvider-e2663c31031acd574f590f845d3306ec847ecc91.tar.gz android_packages_providers_ContactsProvider-e2663c31031acd574f590f845d3306ec847ecc91.tar.bz2 android_packages_providers_ContactsProvider-e2663c31031acd574f590f845d3306ec847ecc91.zip |
Ensure database create broadcast fires after boot complete.
Contacts database is created before boot completes by the
ContactsUpgradeReceiver. Any notifications fired before boot will not be
received by applications.
Bug: 9394450
Change-Id: I1c47308c7ec52b777f9f4ca8c19141634e4e0baa
Diffstat (limited to 'src/com/android/providers/contacts/BootCompletedReceiver.java')
-rw-r--r-- | src/com/android/providers/contacts/BootCompletedReceiver.java | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/com/android/providers/contacts/BootCompletedReceiver.java b/src/com/android/providers/contacts/BootCompletedReceiver.java new file mode 100644 index 00000000..a648fc67 --- /dev/null +++ b/src/com/android/providers/contacts/BootCompletedReceiver.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2013 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 + */ + +package com.android.providers.contacts;/* + * Copyright (C) 2013 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 + */ + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.SystemClock; +import android.preference.PreferenceManager; +import android.provider.ContactsContract; +import android.text.TextUtils; +import android.util.Log; + +/** + * Receiver that handles boot completion broadcast. + */ +public class BootCompletedReceiver extends BroadcastReceiver { + + private static final String TAG = BootCompletedReceiver.class.getSimpleName(); + public static final String DATABASE_TIME_CREATED = "database_time_created"; + + public void onReceive(Context context, Intent intent) { + // This notification is sent here instead of ContactsDatabaseHelper.onCreate() because it + // needs to be sent after boot completes. onCreate() starts before boot complete happens + // and the notification would be dropped by the framework. + + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + final String prefTime = prefs.getString(DATABASE_TIME_CREATED, ""); + + String dbTime = ContactsDatabaseHelper.getInstance(context).getProperty( + ContactsDatabaseHelper.DbProperties.DATABASE_TIME_CREATED, ""); + int count = 0; + + // db time should already exist because it's always created by the ContactsUpgradeReceiver + // pre boot. But in the event that it may be a bit slow, wait a bit. + while (TextUtils.isEmpty(dbTime) && count != 3) { + SystemClock.sleep(1000); + dbTime = ContactsDatabaseHelper.getInstance(context).getProperty( + ContactsDatabaseHelper.DbProperties.DATABASE_TIME_CREATED, ""); + count++; + } + + if (TextUtils.isEmpty(prefTime) || !prefTime.equals(dbTime)) { + Log.i(TAG, "Boot complete, newly created contact database detected. Pref Time: " + + prefTime + " DB Time: " + dbTime); + + final Intent broadcast = new Intent(ContactsContract.Intents.CONTACTS_DATABASE_CREATED); + broadcast.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); + context.sendBroadcast(broadcast, android.Manifest.permission.READ_CONTACTS); + + prefs.edit().putString(DATABASE_TIME_CREATED, dbTime).commit(); + } + } + +} |