public ArrayList<Loc8Preference> constructAllPrefsFromDb() {
    ArrayList<Loc8Preference> prefList = new ArrayList<Loc8Preference>();

    DBAdapter mDbHelper = new DBAdapter(GlobalContext.getContext());
    mDbHelper.open();
    Cursor pc = mDbHelper.fetchAllPreferences();
    pc.moveToFirst();
    for (int i = 0; i < pc.getCount(); i++) {
      Integer[] prefs = {0, 0, 0, 0, 0, 0};
      Integer[] days = {0, 0, 0, 0, 0, 0, 0};
      String id;
      String name;
      List<List<Integer>> times = new ArrayList<List<Integer>>();
      List<Loc8Contact> blockList = new ArrayList<Loc8Contact>();
      List<Loc8Location> locs = new ArrayList<Loc8Location>();
      List<Integer> times1 = new ArrayList<Integer>();
      List<Integer> times2 = new ArrayList<Integer>();
      int enabledNum;
      boolean enabled = false;
      prefs[Loc8Preference.ALARM] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_ALARM));
      prefs[Loc8Preference.BLOCK] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_BLOCKCALLS));
      prefs[Loc8Preference.NOTIFICATION] =
          pc.getInt(pc.getColumnIndex(DBAdapter.KEY_NOTIFICATIONS));
      prefs[Loc8Preference.SILENT] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_RINGER));
      prefs[Loc8Preference.SMS] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_TEXTMESSAGES));
      prefs[Loc8Preference.VIBRATE] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_VIBRATE));
      days[Loc8Preference.MONDAY] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_MONDAY));
      days[Loc8Preference.TUESDAY] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_TUESDAY));
      days[Loc8Preference.WEDNESDAY] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_WEDNESDAY));
      days[Loc8Preference.THURSDAY] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_THURSDAY));
      days[Loc8Preference.FRIDAY] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_FRIDAY));
      days[Loc8Preference.SATURDAY] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_SATURDAY));
      days[Loc8Preference.SUNDAY] = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_SUNDAY));
      enabledNum = pc.getInt(pc.getColumnIndex(DBAdapter.KEY_ENABLED));
      if (enabledNum != 0) {
        enabled = true;
      }
      times1.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_STARTYEAR)));
      times1.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_STARTMONTH)));
      times1.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_STARTDAY)));
      times1.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_STARTHOUR)));
      times1.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_STARTMINUTE)));
      times2.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_ENDYEAR)));
      times2.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_ENDMONTH)));
      times2.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_ENDDAY)));
      times2.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_ENDHOUR)));
      times2.add(pc.getInt(pc.getColumnIndex(DBAdapter.KEY_ENDMINUTE)));
      times.add(times1);
      times.add(times2);
      id = pc.getString(pc.getColumnIndex(DBAdapter.KEY_ROWID));
      name = pc.getString(pc.getColumnIndex(DBAdapter.KEY_NAME));
      Cursor c = mDbHelper.getPreferenceContacts(id);
      Cursor l = mDbHelper.getPreferenceLocations(id);
      for (l.moveToFirst(); !l.isAfterLast(); l.moveToNext()) {
        // These values are specific to preferences. Don't try to use them in another context!
        Loc8Location temp =
            new Loc8Location(
                new GeoPoint((int) (l.getDouble(32) * 1000000), (int) (l.getDouble(31) * 1000000)),
                l.getFloat(30),
                l.getString(29));
        locs.add(temp);
      }
      for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        String phoneNum = c.getString(c.getColumnIndex(DBAdapter.KEY_PHONENUMBER));
        String phoneNumNoDash = phoneNum.replace("-", "").replace("\\s", "");
        long phoneNumber = Long.parseLong(phoneNumNoDash);
        Loc8Contact temp = Loc8ContactList.getContactFromNumber(phoneNumber);
        blockList.add(temp);
      }
      prefList.add(new Loc8Preference(prefs, blockList, times, days, locs, name, id, enabled));
      pc.moveToNext();
    }
    mDbHelper.close();
    return prefList;
  }