/* * Copyright (C) 2012 The CyanogenMod Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.cyanogenmod.filemanager.console; import com.cyanogenmod.filemanager.commands.AsyncResultExecutable; import com.cyanogenmod.filemanager.commands.Executable; import com.cyanogenmod.filemanager.commands.ExecutableFactory; import com.cyanogenmod.filemanager.model.Identity; import com.cyanogenmod.filemanager.preferences.FileManagerSettings; import com.cyanogenmod.filemanager.preferences.Preferences; /** * This class represents a class for executing commands in the operating system layer, * being the base for all type of consoles (shell, java, ...). */ public abstract class Console implements AsyncResultExecutable.OnEndListener, AsyncResultExecutable.OnCancelListener { private boolean mTrace; /** * Constructor of <code>Console</code> */ public Console() { super(); // Get the current trace value reloadTrace(); } /** * Method that return if the console has to trace his operations * * @return boolean If the console has to trace */ public boolean isTrace() { return this.mTrace; } /** * Method that reload the status of trace setting */ public final void reloadTrace() { this.mTrace = Preferences.getSharedPreferences().getBoolean( FileManagerSettings.SETTINGS_SHOW_TRACES.getId(), ((Boolean)FileManagerSettings.SETTINGS_SHOW_TRACES.getDefaultValue()).booleanValue()); } /** * Method that returns the identity of the console (the current user). * * @return Identity The current identity of the console */ public abstract Identity getIdentity(); /** * Method that allocates the console. * * @throws ConsoleAllocException If the console can't be allocated */ public abstract void alloc() throws ConsoleAllocException; /** * Method that deallocates the actual console. */ public abstract void dealloc(); /** * Method that reallocates the console. This method drops the actual console * and create a new one exactly as the current. * * @throws ConsoleAllocException If the console can't be reallocated */ public abstract void realloc() throws ConsoleAllocException; /** * Method that returns if the console has root privileged. * * @return boolean Indicates if the console has root privileged */ public abstract boolean isPrivileged(); /** * Method that returns if the console is active and allocated. * * @return boolean Indicates if the console is active and allocated */ public abstract boolean isActive(); /** * Method that retrieves the {@link ExecutableFactory} associated with the {@link Console}. * * @return ExecutableFactory The execution program factory */ public abstract ExecutableFactory getExecutableFactory(); /** * Method for execute a command in the operating system layer. * * @param executable The executable command to be executed * @throws ConsoleAllocException If the console is not allocated * @throws InsufficientPermissionsException If an operation requires elevated permissions * @throws NoSuchFileOrDirectory If the file or directory was not found * @throws OperationTimeoutException If the operation exceeded the maximum time of wait * @throws CommandNotFoundException If the executable program was not found * @throws ExecutionException If the operation returns a invalid exit code * @throws ReadOnlyFilesystemException If the operation writes in a read-only filesystem */ public abstract void execute(final Executable executable) throws ConsoleAllocException, InsufficientPermissionsException, NoSuchFileOrDirectory, OperationTimeoutException, ExecutionException, CommandNotFoundException, ReadOnlyFilesystemException; }