private void fixProfiles() {
   SettingsStorage settings = SettingsStorage.getInstance();
   ContentValues values = new ContentValues(2);
   int maxFreq = settings.getMaxFrequencyDefault();
   values.put(DB.CpuProfile.NAME_FREQUENCY_MAX, maxFreq);
   int minFreq = settings.getMinFrequencyDefault();
   values.put(DB.CpuProfile.NAME_FREQUENCY_MIN, minFreq);
   Logger.i("Changing frequencies of default profile to min " + minFreq + " and max " + maxFreq);
   Cursor c = null;
   try {
     c =
         contentResolver.query(
             DB.CpuProfile.CONTENT_URI, DB.CpuProfile.PROJECTION_DEFAULT, null, null, null);
     while (c.moveToNext()) {
       contentResolver.update(
           DB.CpuProfile.CONTENT_URI,
           values,
           DB.SELECTION_BY_ID,
           new String[] {Long.toString(c.getLong(DB.INDEX_ID))});
     }
   } finally {
     if (c != null) {
       c.close();
       c = null;
     }
   }
 }
 public void restoreConfiguration(String name, boolean isUserConfig, boolean restoreAutoload)
     throws Exception {
   synchronized (MUTEX) {
     if (name == null) {
       return;
     }
     Logger.i("Loading configuration " + name);
     Context context = cb.getContext();
     try {
       CpuTunerProvider.setNotifyChanges(false);
       if (isUserConfig) {
         File file = new File(getStoragePath(context, DIRECTORY_CONFIGURATIONS), name);
         DataJsonImporter dje = new DataJsonImporter(DB.DATABASE_NAME, file);
         restore(dje, restoreAutoload);
       } else {
         String fileName =
             DIRECTORY_CONFIGURATIONS
                 + "/"
                 + name
                 + "/"
                 + DB.DATABASE_NAME
                 + JsonConstants.FILE_NAME;
         InputStream is = context.getAssets().open(fileName);
         DataJsonImporter dje = new DataJsonImporter(DB.DATABASE_NAME, is);
         restore(dje, restoreAutoload);
         fixGovernors();
         fixProfiles();
         InstallHelper.updateProfilesFromVirtGovs(context);
       }
       PowerProfiles.getInstance(context).reapplyProfile(true);
       cb.hasFinished(true);
     } catch (Exception e) {
       Logger.e("Cannot restore configuration", e);
       cb.hasFinished(false);
       throw new Exception("Cannot restore configuration", e);
     } finally {
       CpuTunerProvider.setNotifyChanges(true);
       StringBuilder msg =
           new StringBuilder(context.getString(R.string.msg_config_loaded)).append(" ");
       msg.append(name.replaceFirst("\\d+_", ""));
       msg.append(" ").append(context.getString(R.string.msg_config));
       SwitchLog.addToLog(context, msg.toString());
     }
   }
 }
 private void fixGovernors() {
   Cursor c = null;
   String[] availCpuGov = CpuHandler.getInstance().getAvailCpuGov();
   TreeMap<String, Boolean> availGovs = new TreeMap<String, Boolean>();
   for (String gov : availCpuGov) {
     availGovs.put(gov, Boolean.TRUE);
   }
   try {
     c =
         contentResolver.query(
             DB.VirtualGovernor.CONTENT_URI,
             DB.VirtualGovernor.PROJECTION_DEFAULT,
             null,
             null,
             null);
     while (c.moveToNext()) {
       String govs = c.getString(DB.VirtualGovernor.INDEX_REAL_GOVERNOR);
       String[] govitems = govs.split("\\|");
       boolean found = false;
       for (String gov : govitems) {
         Boolean avail = availGovs.get(gov);
         if (avail != null && avail) {
           Logger.i("Using " + gov);
           ContentValues values = new ContentValues(1);
           values.put(DB.VirtualGovernor.NAME_REAL_GOVERNOR, gov);
           // check for thresholds
           GovernorConfig governorConfig = GovernorConfigHelper.getGovernorConfig(gov);
           if (!governorConfig.hasThreshholdUpFeature()) {
             values.put(DB.VirtualGovernor.NAME_GOVERNOR_THRESHOLD_UP, -1);
           }
           if (!governorConfig.hasThreshholdDownFeature()) {
             values.put(DB.VirtualGovernor.NAME_GOVERNOR_THRESHOLD_DOWN, -1);
           }
           if (contentResolver.update(
                   DB.VirtualGovernor.CONTENT_URI,
                   values,
                   DB.SELECTION_BY_ID,
                   new String[] {Long.toString(c.getLong(DB.INDEX_ID))})
               > 0) {
             found = true;
             break;
           }
         }
       }
       if (!found) {
         // we did not find a compatible gov so use none
         ContentValues values = new ContentValues(1);
         values.put(DB.VirtualGovernor.NAME_REAL_GOVERNOR, RootHandler.NOT_AVAILABLE);
         contentResolver.update(
             DB.VirtualGovernor.CONTENT_URI,
             values,
             DB.SELECTION_BY_ID,
             new String[] {Long.toString(c.getLong(DB.INDEX_ID))});
       }
     }
   } finally {
     if (c != null) {
       c.close();
       c = null;
     }
   }
 }