private void importContactsFromLegacyDb() {
    int version = mSourceDb.getVersion();

    // Upgrade to version 78 was the latest that wiped out data.  Might as well follow suit
    // and ignore earlier versions.
    if (version < 78) {
      return;
    }

    if (version < 80) {
      mPhoneticNameAvailable = false;
    }

    mDbHelper = (ContactsDatabaseHelper) mContactsProvider.getDatabaseHelper();
    mTargetDb = mDbHelper.getWritableDatabase();

    /*
     * At this point there should be no data in the contacts provider, but in case
     * some was inserted by mistake, we should remove it.  The main reason for this
     * is that we will be preserving original contact IDs and don't want to run into
     * any collisions.
     */
    mContactsProvider.wipeData();

    mStructuredNameMimetypeId = mDbHelper.getMimeTypeId(StructuredName.CONTENT_ITEM_TYPE);
    mNoteMimetypeId = mDbHelper.getMimeTypeId(Note.CONTENT_ITEM_TYPE);
    mOrganizationMimetypeId = mDbHelper.getMimeTypeId(Organization.CONTENT_ITEM_TYPE);
    mPhoneMimetypeId = mDbHelper.getMimeTypeId(Phone.CONTENT_ITEM_TYPE);
    mEmailMimetypeId = mDbHelper.getMimeTypeId(Email.CONTENT_ITEM_TYPE);
    mImMimetypeId = mDbHelper.getMimeTypeId(Im.CONTENT_ITEM_TYPE);
    mPostalMimetypeId = mDbHelper.getMimeTypeId(StructuredPostal.CONTENT_ITEM_TYPE);
    mPhotoMimetypeId = mDbHelper.getMimeTypeId(Photo.CONTENT_ITEM_TYPE);
    mGroupMembershipMimetypeId = mDbHelper.getMimeTypeId(GroupMembership.CONTENT_ITEM_TYPE);

    mNameSplitter = mContactsProvider.getNameSplitter();

    mTargetDb.beginTransaction();
    importGroups();
    importPeople();
    importOrganizations();
    importPhones();
    importContactMethods();
    importPhotos();
    importGroupMemberships();

    // Deleted contacts should be inserted after everything else, because
    // the legacy table does not provide an _ID field - the _ID field
    // will be autoincremented
    importDeletedPeople();

    mDbHelper.updateAllVisible();

    mTargetDb.setTransactionSuccessful();
    mTargetDb.endTransaction();

    importCalls();
  }
  @Override
  public void onReceive(Context context, Intent intent) {
    // We are now running with the system up, but no apps started,
    // so can do whatever cleanup after an upgrade that we want.

    try {
      long startTime = System.currentTimeMillis();

      // Lookup the last known database version
      final SharedPreferences prefs = context.getSharedPreferences(TAG, Context.MODE_PRIVATE);
      final int prefDbVersion = prefs.getInt(PREF_DB_VERSION, 0);

      final String curIcuVersion = ICU.getIcuVersion();
      final String curOsVersion = getOsVersionString();

      final String prefIcuVersion = prefs.getString(PREF_ICU_VERSION, "");
      final String prefOsVersion = prefs.getString(PREF_OS_VERSION, "");

      // If the version is old go ahead and attempt to create or upgrade the database.
      if (prefDbVersion != ContactsDatabaseHelper.DATABASE_VERSION
          || !prefIcuVersion.equals(curIcuVersion)
          || !prefOsVersion.equals(curOsVersion)) {
        // Store the current version so this receiver isn't run again until the database
        // version number changes. This is intentionally done even before the upgrade path
        // is attempted to be conservative. If the upgrade fails for some reason and we
        // crash and burn we don't want to get into a loop doing so.
        SharedPreferences.Editor editor = prefs.edit();
        editor.putInt(PREF_DB_VERSION, ContactsDatabaseHelper.DATABASE_VERSION);
        editor.putString(PREF_ICU_VERSION, curIcuVersion);
        editor.putString(PREF_OS_VERSION, curOsVersion);
        editor.commit();

        // Ask for a reference to the database to force the helper to either
        // create the database or open it up, performing any necessary upgrades
        // in the process.
        ContactsDatabaseHelper helper = ContactsDatabaseHelper.getInstance(context);
        ProfileDatabaseHelper profileHelper = ProfileDatabaseHelper.getInstance(context);
        CallLogDatabaseHelper calllogHelper = CallLogDatabaseHelper.getInstance(context);

        Log.i(TAG, "Creating or opening contacts database");

        helper.getWritableDatabase();
        helper.clearDirectoryScanComplete();

        profileHelper.getWritableDatabase();
        calllogHelper.getWritableDatabase();

        ContactsProvider2.updateLocaleOffline(context, helper, profileHelper);

        // Log the total time taken for the receiver to perform the operation
        EventLogTags.writeContactsUpgradeReceiver(System.currentTimeMillis() - startTime);
      }
    } catch (Throwable t) {
      // Something has gone terribly wrong. Disable this receiver for good so we can't
      // possibly end up in a reboot loop.
      Log.wtf(TAG, "Error during upgrade attempt. Disabling receiver.", t);
      context
          .getPackageManager()
          .setComponentEnabledSetting(
              new ComponentName(context, getClass()),
              PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
              PackageManager.DONT_KILL_APP);
    }
  }