Android Open Source - HistoryCleanerPro Database Modifier






From Project

Back to project page HistoryCleanerPro.

License

The source code is released under:

Copyright (c) 2014, John Phillips All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: ...

If you think the Android project HistoryCleanerPro listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.ayros.historycleaner.helpers;
//w ww.j av  a  2 s.c om
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.stericson.RootTools.RootTools;

public class DatabaseModifier
{
  private Context context;
  private String path;
  private String tempFile;
  private boolean open = false;
  private String[] suffixes = new String[] { "", "-journal", "-shm", "-wal" };

  public DatabaseModifier(Context c, String path)
  {
    this.context = c;
    this.path = path;
  }

  public boolean open()
  {
    if (open)
    {
      return true;
    }

    if (!RootTools.exists(path))
    {
      Logger.errorST("Database doesn't exist: " + path);
      return false;
    }

    String fn = "_db_" + ((int)(Math.random() * 900000) + 100000) + ".db";
    tempFile = context.getCacheDir().getAbsolutePath() + "/" + fn;

    for (String s : suffixes)
    {
      if (RootTools.exists(path + s))
      {
        RootTools.copyFile(path + s, tempFile + s, false, true);

        if (RootHelper.runAndWait("chmod 777 " + tempFile + s) == null)
        {
          Logger.errorST("Could not chmod database file " + tempFile + s);
          return false;
        }
      }
    }

    return (open = true);
  }

  public boolean exec(String query)
  {
    if (!open)
    {
      return false;
    }

    SQLiteDatabase db = null;
    try
    {
      db = SQLiteDatabase.openDatabase(tempFile, null, SQLiteDatabase.OPEN_READWRITE);
      db.execSQL(query);
      db.close();

      return true;
    }
    catch (Exception e)
    {
      Logger.errorST("Could not execute query on database: " + path, e);
      
      if (db != null)
      {
        db.close();
      }

      return false;
    }
  }

  public List<String[]> query(String table, String[] columns, String where)
  {
    if (!open)
    {
      return null;
    }

    SQLiteDatabase db = null;
    Cursor cursor = null;
    try
    {
      db = SQLiteDatabase.openDatabase(tempFile, null, SQLiteDatabase.OPEN_READWRITE);
      cursor = db.query(table, columns, where, null, null, null, null);

      List<String[]> rows = new ArrayList<String[]>();
      if (cursor.moveToFirst())
      {
        do
        {
          int cols = cursor.getColumnCount();
          String[] row = new String[cols];

          for (int i = 0; i < cols; i++)
          {
            row[i] = cursor.isNull(i) ? "" : cursor.getString(i);
          }

          rows.add(row);
        }
        while (cursor.moveToNext());

        return rows;
      }
      else
      {
        return new ArrayList<String[]>();
      }
    }
    catch (Exception e)
    {
      Logger.errorST("Problem querying database: " + path, e);
      return null;
    }
    finally
    {
      if (db != null)
      {
        db.close();
      }
      if (cursor != null)
      {
        cursor.close();
      }
    }
  }

  public void clean()
  {
    for (String s : suffixes)
    {
      File tf = new File(tempFile + s);
      if (tf.exists())
      {
        tf.delete();
      }
    }

    open = false;
  }

  public boolean saveChanges()
  {
    if (!open)
    {
      return true;
    }

    for (String s : suffixes)
    {
      if (RootTools.exists(tempFile + s))
      {
        // Ensure any newly created files from editing database have original user as the owner
        if (!RootTools.exists(path + s) && !s.equals(""))
        {
          if (!RootTools.copyFile(path, path + s, false, true))
          {
            Logger.errorST("Could not copy dummy file when trying to save database: " + path);
            return false;
          }
        }

        // Overwrite the files with cat to preserve file ownership
        if (RootHelper.runAndWait("cat " + tempFile + s + " > " + path + s) == null)
        {
          Logger.errorST("Error: Could not pipe modified database back to original location");
          return false;
        }
      }
      else if (!RootHelper.deleteFileOrFolder(path + s, false))
      {
        Logger.errorST("Could not delete file: " + path + s);
        
        return false;
      }
    }

    return true;
  }
}




Java Source Code List

com.ayros.historycleaner.Globals.java
com.ayros.historycleaner.ProfileAdapter.java
com.ayros.historycleaner.UIRunner.java
com.ayros.historycleaner.cleaning.CategoryList.java
com.ayros.historycleaner.cleaning.Category.java
com.ayros.historycleaner.cleaning.CleanItem.java
com.ayros.historycleaner.cleaning.CleanListener.java
com.ayros.historycleaner.cleaning.Cleaner.java
com.ayros.historycleaner.cleaning.ProfileList.java
com.ayros.historycleaner.cleaning.Profile.java
com.ayros.historycleaner.cleaning.SimpleDatabaseItem.java
com.ayros.historycleaner.cleaning.SimpleFileItem.java
com.ayros.historycleaner.cleaning.items._AdobeReader_Recent.java
com.ayros.historycleaner.cleaning.items._FirefoxBeta_Cache.java
com.ayros.historycleaner.cleaning.items._FirefoxBeta_Cookies.java
com.ayros.historycleaner.cleaning.items._FirefoxBeta_History.java
com.ayros.historycleaner.cleaning.items._FirefoxBeta_LocalStorage.java
com.ayros.historycleaner.cleaning.items._FirefoxBeta_OpenTabs.java
com.ayros.historycleaner.cleaning.items._Firefox_Cache.java
com.ayros.historycleaner.cleaning.items._Firefox_Cookies.java
com.ayros.historycleaner.cleaning.items._Firefox_History.java
com.ayros.historycleaner.cleaning.items._Firefox_LocalStorage.java
com.ayros.historycleaner.cleaning.items._Firefox_OpenTabs.java
com.ayros.historycleaner.cleaning.items._ONEBrowser_Cache.java
com.ayros.historycleaner.cleaning.items._ONEBrowser_LocalStorage.java
com.ayros.historycleaner.cleaning.items._System_BrowserHistory.java
com.ayros.historycleaner.cleaning.items._System_Cache.java
com.ayros.historycleaner.cleaning.items._System_Clipboard.java
com.ayros.historycleaner.cleaning.items._System_FrequentContacts.java
com.ayros.historycleaner.cleaning.items._System_RecentCalls.java
com.ayros.historycleaner.cleaning.items._System_SMS.java
com.ayros.historycleaner.helpers.DBHelper.java
com.ayros.historycleaner.helpers.DatabaseModifier.java
com.ayros.historycleaner.helpers.Helper.java
com.ayros.historycleaner.helpers.Logger.java
com.ayros.historycleaner.helpers.PrefsModifier.java
com.ayros.historycleaner.helpers.RootHelper.java
com.ayros.historycleaner.helpers.XML.java
com.ayros.historycleaner.locale.Constants.java
com.ayros.historycleaner.locale.bundle.BundleScrubber.java
com.ayros.historycleaner.locale.bundle.PluginBundleManager.java
com.ayros.historycleaner.locale.receiver.FireReceiver.java
com.ayros.historycleaner.locale.ui.AbstractPluginActivity.java
com.ayros.historycleaner.locale.ui.EditPluginActivity.java
com.ayros.historycleaner.ui.CleanFragment.java
com.ayros.historycleaner.ui.DataViewActivity.java
com.ayros.historycleaner.ui.HelpActivity.java
com.ayros.historycleaner.ui.MainActivity.java
com.ayros.historycleaner.ui.OnProfileUpdated.java
com.ayros.historycleaner.ui.ProfileFragment.java
com.ayros.historycleaner.ui.ShortcutActivity.java
com.ayros.historycleaner.ui.ShortcutCleanActivity.java
com.twofortyfouram.locale.BreadCrumber.java
com.twofortyfouram.locale.Constants.java
com.twofortyfouram.locale.Intent.java
com.twofortyfouram.locale.PackageUtilities.java