Android Open Source - HistoryCleanerPro Root Helper






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;
/*from   w  ww .j ava 2s .  c  om*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.ayros.historycleaner.Globals;
import com.stericson.RootTools.RootTools;
import com.stericson.RootTools.execution.Command;
import com.stericson.RootTools.execution.CommandCapture;
import com.stericson.RootTools.execution.Shell;

public class RootHelper
{
  public static String runAndWait(String cmd)
  {
    Logger.debug("Run&Wait: " + cmd);

    CommandCapture cc = new CommandCapture(0, false, cmd);

    try
    {
      Shell.runRootCommand(cc);
    }
    catch (Exception e)
    {
      Logger.errorST("Exception when trying to run shell command", e);

      return null;
    }

    if (!waitForCommand(cc))
    {
      return null;
    }

    return cc.toString();
  }

  private static boolean waitForCommand(Command cmd)
  {
    while (!cmd.isFinished())
    {
      synchronized (cmd)
      {
        try
        {
          if (!cmd.isFinished())
          {
            cmd.wait(2000);
          }
        }
        catch (InterruptedException e)
        {
          e.printStackTrace();
        }
      }

      if (!cmd.isExecuting() && !cmd.isFinished())
      {
        Logger.errorST("Error: Command is not executing and is not finished!");
        return false;
      }
    }

    Logger.debug("Command Finished!");
    return true;
  }

  public static boolean fileOrFolderExists(String path)
  {
    Logger.debug("File or folder exists: " + path);

    // Remove trailing slash if it exists (for directories)
    if (path.charAt(path.length() - 1) == '/')
    {
      path = path.substring(0, path.length() - 1);
    }

    int i = path.lastIndexOf('/');
    if (i == -1)
    {
      Logger.debug("Could not find path folder (invalid filename?)");
      return false;
    }

    String parentDir = path.substring(0, i);

    List<String> fileList = getFilesList(parentDir);

    boolean exists = fileList.contains(path.substring(i + 1));
    Logger.debug("Exists: " + (exists ? "true" : "false"));

    return exists;
  }

  public static List<String> getFilesList(String path)
  {
    Logger.debug("Getting file list: " + path);

    String ls = runAndWait("ls " + path);
    if (ls == null)
    {
      Logger.errorST("Error: Could not get list of files in directory: " + path);
      return new ArrayList<String>();
    }

    if (ls.equals("\n") || ls.equals(""))
    {
      Logger.debug("No files in directory");
      return new ArrayList<String>();
    }
    else
    {
      List<String> files = Arrays.asList(ls.split("\n"));
      for (String file : files)
      {
        Logger.debug("Directory List: " + file);
      }

      return files;
    }
  }

  public static String getFileContents(String path)
  {
    Logger.debug("Getting file contents: " + path);

    String tempFile = Globals.getContext().getCacheDir().getAbsolutePath() + "/_file_" + Helper.randomString(8) + ".txt";

    if (!RootTools.copyFile(path, tempFile, false, true))
    {
      Logger.debug("Could not copy " + path + " to a temp directory for reading");
      return null;
    }

    if (runAndWait("busybox chmod 777 " + tempFile) == null)
    {
      Logger.error("Could not set file attributes to read contents: " + tempFile);
      return null;
    }

    String data = Helper.getFileContents(tempFile);
    RootTools.deleteFileOrDirectory(tempFile, false);

    return data;
  }

  public static boolean deleteFileOrFolder(String path, boolean failOnNonexistant)
  {
    Logger.debug("Deleting File: " + path);

    if (!path.contains("*") && !fileOrFolderExists(path))
    {
      Logger.debug("File doesn't exist - failOnNonexistant: " + failOnNonexistant);
      return !failOnNonexistant;
    }

    // Escape spaces
    path = path.replace(" ", "\\ ");

    return RootTools.deleteFileOrDirectory(path, false);
  }
}




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