4.4 Программная реализация приложения
4.4.1 Инструменты и библиотеки, использованные при разработке
Вся разработка происходила в среде Android Studio, которая включает в себя все необходимые для разработки приложений под ОС Android дополнения и инструменты отладки. Основной код написал на языке программирования Java.
4.4.2 Реализация пользовательского интерфейса
В случае создания приложений под ОС Android разрабатывать пользовательский интерфейс для приложений достаточно просто. Описания элементов пользовательского интерфейса хранятся в файлах формата XML. Разметка пользовательского интерфейса задается так же как разметка обычной HTML страницы – с помощью специализированных тэгов.
Список файлов используемых в представлении пользовательского интерфейса:
Компоновки экранов: каждый файл компоновки должен содержать в себе один корневой элемент. Как только корневой элемент будет определен, в компоновку в качестве дочерних элементов можно добавлять другие элементы, которые и будут определять компоненты внешнего вида компоновки. Каждый файл должен быть сохранен с разрешением .xml в папке res/layout проекта приложения для того, чтобы он мог быть скомпилированным.
activity_fragment.xml – компоновка, предназначенная для загрузки фрагментов внутрь элемента FrameLayout. Корневым элементом компоновки является DrawerLayout, который отвечает за боковую панель меню, выводящую на экран основные навигационные опции приложения в левой части экрана.
fragment_cloud.xml – компоновка, представляющая собой экран перехода на облачные сервисы, который происходит при нажатии на соответствующую кнопку. Корневым элементом, так же как и в предыдущем случае является DrawerLayout.
fragment_dialog_default.xml – компоновка, используемая в большинстве диалоговых окон приложения, которые предполагают наличие полей ввода. Корневым элементов является LinearLayout.
fragment_recycler_view.xml – компоновка, используемая для представления основных элементов (панель инструментов, строка навигации, список файлов) пользовательского интерфейса при работе с файловой системой мобильного устройства или карты памяти. Корневым элементом является LinearLayout.
activity_dropbox – компоновка, представляющая экран приложения используемая для работы с облачным сервисом Dropbox. Корневым элементом является DrawerLayout.
nav_header_main.xml – компоновка, используемая для представления строки навигации между папками как в файловой системе мобильного, так и в случае использования облачного сервиса.
recycler_view_list_row.xml – компоновка, используемая для представления объектов (каждого отдельного файла или папки) в списке файлов. Включает в себя элементы интерфейса для размещения изображения и для размещения текста. Корневым элементом является RelativeLayout.
Меню: практически все экраны в приложении оснащены меню, с помощью которых пользователь выбирает действие для выполнения. Для каждой компоновки, в которой используется меню, создается соответствующий XML файл, который создается в директории res/menu/, для того, чтобы он мог быть скомпилированным. На рисунке 4.6 показано одно из меню приложения.
menu_manager.xml – файл, используемый для отображения меню в экране приложения, который предназначен для работы с файловой системой мобильного устройства и карты памяти.
menu_action_mode.xml – файл, используемый для отображения контекстного меню в экране приложения, который предназначен для работы с файловой системой мобильного устройства и карты памяти.
cloud_menu.xml – файл, используемый для отображения меню в экране приложения, который предназначен для работы с файловой системой облачного сервиса.
cloud_action_mode.xml – файл, используемый для отображения контекстного меню в экране приложения, который предназначен для работы с файловой системой облачного сервиса.
drawer_view.xml – файл, используемый для отображения меню в боковой панели меню приложения.
Рисунок 4.6 Меню, созданное при помощи cloud_menu.xml
4.4.3 Общие методы классов приложения
onCreate() – вызывается, когда экран приложения создается в первый раз. Все объекты, которые должны быть использованы, загружаются из XML файлов (папка res/layout) внутри этого метода, когда осуществляется вызов метода onCreateView, который используется для того, чтобы инициализировать XML-файл компоновки.
onResume() – вызывается прямо перед тем, как пользователь сможет начать взаимодействовать с приложением. В разработанном файловом менеджере в этом методе проверяются ключи приложения для облачного сервиса (если ключ существует, значит, пользователь вошел в свой аккаунт на облачном сервисе).
onActivityResult() – вызывается, когда запущенный экран приложения завершается, возвращая код запроса (requestCode). В данном проекте этот метод используется для получения данных от фрагментов, представляющих диалоговые окна.
onCreateOptionsMenu() – используется для загрузки и отображения меню из соответствующего XML-файла (папка res/menu).
onOptionsItemSelected() – используется, для обработки нажатия пользователем какого-либо из пунктов меню.
4.4.4 Использование объектов компоновок в коде
Этот раздел объясняет, как коде приложения используются объекты, загруженные из XML-файлов.
Листинг 5.1. показывает, как объекты компоновок загружаются в переменные. Для того чтобы объект реагировал на какое-то действие пользователя ему должен быть выставлен в соответствие нужный обработчик. В данном случае для того, чтобы кнопка должным образом реагировала на нажатия, ей в соответствие выставляется обработчик stopButtonListener с помощью метода setOnClickListener(stopButtonListener). Действия, выполняемые по нажатию, определяются в коде обработчика.
Листинг 5.1
stopButton = (ImageButton) mToolbar.findViewById(R.id.stop_operation_button);
stopButton.setOnClickListener(stopButtonListener);
|
Листинг 5.2. показывает как данные о файлах и папках загружаются в объект RecyclerView[10] (отображает список элементов). Это происходит при помощи адаптера, который контролирует работу RecyclerView и настраивается при помощи метода setAdapter. Кроме того, отображение элементов в RecyclerView настраивается в зависимости от ориентации мобильного устройства (ландшафтная или портретная) с помощью проверки параметра orientation.
Листинг 5.2
mRecyclerView = (RecyclerView) view.findViewById(R.id.manager_recycler_view);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
else
mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
mRecyclerView.setAdapter(mFileAdapter);
|
4.4.5 Описание класса FileManagerModel
Класс FileManagerModel разработан с целью представления методов для работы с файловой системой устройства. Кроме того, содержит в себе константы, определяющие выбранное пользователем действие, коды завершения функций и внутренний класс реализующий алгоритмы сортировки файлов по нескольким критериям. Класс является «одиночкой», то есть гарантирует, что в приложении будет единственный экземпляр класса с глобальной точкой доступа.
Список объектов и методов класса FileManagerModel приводится ниже:
private static final int BUFFER – переменная определяющая размер буфера при операции копирования файла.
private boolean replaceFlag – флаг, определяющий нужно ли производить замену файла при операции копирования.
private static int sortType – переменная, определяющая тип сортировки файлов в папке.
private File mCurrentDir – переменная, определяющая текущую директорию, в которой находится пользователь.
private Stack mHistory – переменная – стек, хранящая в себе весь путь от корневой до текущей папки.
public static AppCompatActivity appCompatActivity – переменная, хранящая в себе ссылку на вызывающий экран приложения.
private static long directorySize – переменная, хранящая в себе размер файла или папки над которой производится операция.
private static long alreadyDone – переменная, хранящая в себе количество байт которые уже были обработаны в процессе выполнения какой – либо операции.
private FileManagerModel() – приватный конструктор класса. Доступен только внутри класса, используется в методе getInstance().
public static FileManagerModel getInstance() – статический метод возвращающий существующий экземпляр класса.
public static void setAppCompatActivity(AppCompatActivity appCompatActivity) – устанавливает значение appCompatActivity.
public Stack getmHistory() – возвращает дубликат объекта mHistory.
public static long getDirectorySize() – возвращает directorySize.
public static void setDirectorySize(long directorySize) – устанавливает значение directorySize.
public static void setAlreadyDone(long alreadyDone) – устанавливает значении alreadyDone.
public static void setSortType(int srt) – устанавливает тип сортировки.
public static void resetDirectorySize() – устанавливает значение directorySize в 0.
public static void resetAlreadyDone() – устанавливает значение alreadyDone в 0.
public void clearHistory() – удаляет все объекты из переменной-стека mHistory.
public File popPreviousDir() – достает из стека mHistory значение предыдущей директории.
public File getPreviousDir() – достает из переменной-стека mHistory
предыдущую директорию, помещает ее значение обратно в стек и возвращает его.
public void setPreviousDir(File previousDir) – устанавливает и помещает в стек предыдущую директорию.
public File getCurrentDir() – возвращает значение текущей директории
public void setCurrentDir(File currentDir) – устанавливает текущую директорию.
public boolean isHistoryEmpty() – проверяет, пуста ли переменная-стек mHistory.
public List getFilesInDir(File path) – возвращает отсортированный список файлов и папок в заданной папке. Входной параметр File path – папка для которой вызывается метод.
public boolean renameFile(File filePath, String newName) – переименовывает указанный файл или папку. Возвращает результат работы в виде значения boolean – успешно или неуспешно.
public int removeFile(File filePath) – удаляет заданную папку или файл. Входной параметр – файл или папка, которую нужно удалить. Возвращает целочисленный код завершения.
public boolean createDir(String name) – создает директорию с заданным именем в текущей папке. Входной параметр String name – строковое значение, хранящее в себя имя новой папки. Возвращает результат работы в виде значения boolean – успешно или неуспешно.
public synchronized void waitReplace() – ставит поток выполнения текущей файловой операции в ожидание. Используется для ожидания ответа от диалогового окна, спрашивающего пользователя о необходимости замены файла.
public synchronized void notifyReplace(boolean replaceFlag) – вывод поток из состояния ожидания. Входной параметр – ответ на запрос о замене существующего файла.
public synchronized int pasteToDir(String fileFrom, String dirTo, boolean isRecursiveCall) – копирует файл или папку в заданную директорию. Входные параметры – путь файла и папки для копирования, путь к директории в которую копируется файл и флаг, обозначающий рекурсивный вызов. Данная функция вызывается из самой себя в случае вложенных папок так, как обход папок происходит рекурсивно. Возвращает целочисленный код завершения.
public static long sizeOfFile(File file) – определяет и возвращает размер заданного файла или папки. Входной параметр – объект типа файл, означающий папку или файл.
public static String getMimeType(final Uri URI) – определяет и возвращает MIME-тип ресурса. Входной параметр – универсальный идентификатор ресурса. Этот метод используется при создании в OC Android намерения для запуска файла.
public static int getImageResForFile(String file) – определяет необходимый ресурс изображения по имени файла. Возвращает целочисленный идентификатор ресурса. Входной параметр – строка, содержащая имя файла.
public static File getSdCardDirectory() – определяет подключена ли к телефону карта памяти и если она подключена, то возвращает объект типа File идентифицирующий её.
public static class FileComparators – внутренний класс, включающий в себя подклассы реализующие разные варианты сортировки файлов.
4.4.6 Описание и реализация класса FileBrowserFragment
Класс FileBrowserFragment представляет окно для работы с файловой системой мобильного устройства или карты памяти. В этом классе реализованы методы управляющие работой пользовательского интерфейса, а так же методы инициирующие операции с файловой системой. Кроме того, этот класс реализует интерфейс RecyclerView.OnItemTouchListener отвечающий за поведения элементов mRecyclerView после нажатия на них. Передает обработку в gestureDetector.
Список объектов и методов класса FileBrowserFragment приводится ниже:
private static RecyclerView mRecyclerView – переменная, представляющая объект RecyclerView, в котором отображается список элементов (папок и файлов).
private static Toolbar mToolbar – переменная, представляющая объект Toolbar, который является панелью инструментов в верхней части экрана.
private static TextView progressText – переменная, представляющая объект TextView, который располагается на панели инструментов и отображает прогресс текущей операции.
private static ImageButton stopButton – переменная, представляющая объект ImageButton, который является кнопкой для остановки текущей операции.
public static FileAdapter mFileAdapter – переменная, представляющая объект FileAdapter, дочерний класс RecyclerView.Adapter[11], является адаптером контролирующим работу RecyclerView.
private static String mFileToDo – строковая переменная, хранящая в себе полный путь файла над которым проводится операция вставки или удаления.
private static FileManagerModel mManagerModel – переменная, содержащая в себе экземпляр класса FileManagerModel.
private static ProgressHandler progressHandler – переменная класса ProgressHandler, обработчик, принимающий сообщения от загрузчиков для того, чтобы исходя из принятого сообщения определить дальнейшее поведение программы.
private static ActionMode actionMode – переменная класса ActionMode[12], является контекстным меню.
private static GestureDetectorCompat gestureDetector – переменная класса GestureDetectorCompat[13], детектор жестов, обрабатывает длинные нажатия для вызова контекстного меню.
private static LinearLayout mNavigationLayout – переменная класса LinearLayout, используется для отображения строки навигации между папками.
private static HorizontalScrollView navigationScrollView – переменная класса HorizontalScrollView, используется как контейнер для mNavigationLayout. Добавляет опцию прокрутки в панель навигации.
public static Boolean actionBlockFlag – переменная типа boolean, флаг устанавливается в значение true, когда приложение выполняет какое – либо продолжительное действие.
private static int fragmentType – целочисленная переменная определяет тип фрагмента, который используется при инициализации. Тип фрагмента определяет, будет ли фрагмент работать с файловой системой устройства или с файловой системой карты памяти (если она подключена к устройству).
public long dirSize – переменная, содержащая в себе размер скачиваемой с облачного сервиса директории или файла.
public ActionMode.Callback modeCallBack – интерфейс, реализующий методы работы с контекстным меню.
private GestureDetector.SimpleOnGestureListener gestureDetectorListener – интерфейс, реализующий методы работы с детектором жестов gestureDetector.
DownloadFileTask.Callback downloadTaskCallback – интерфейс, реализующий методы обратного вызова для объекта класса DownloadFileTask, отвечающего за процедуру закачки файлов с облачного сервиса.
public LoaderManager.LoaderCallbacks> dataResultLoadListener – интерфейс, реализующий методы обратного вызова для асинхронного загрузчика списка файлов из указанной папки.
public LoaderManager.LoaderCallbacks operationsLoadListener – интерфейс, реализующий методы обратного вызова для асихронных загрузчиков длительных операций с файлами.
public View.OnClickListener stopButtonListener – интерфейс, реализующий метод обрабатывающий нажатие на кнопку stopButton.
public static FileBrowserFragment newInstance(int type) – метод, возвращающий экземпляр фрагмента заданного типа.
public ActionMode getActionMode() – возвращает текущий экземпляр actionMode.
public static void refreshFragment(int type) – обновляет уже созданный фрагмент, при выборе в навигационном меню фрагмента другого типа.
public void calculateSize() – определяет и возвращает размер файла или папки для закачки.
public void downloadFile() – инициирует создание асинхронного потока для загрузки данных с облачного сервиса.
private void updateUI() – обновляет пользовательский интерфейс в случае перехода в другую директорию или после длительной операции.
private void prepareForOperation() – инициализирует переменные и устанавливает флаги перед длительной операцией.
private void setBlockAllOperations() – устанавливает флаг actionBlockFlag в значение true для блокировки вызова длительных операций во время другой длительной операции и обновляет меню соответственным образом.
private void setUnblockAllOperations() - устанавливает флаг actionBlockFlag в значение false для разблокировки вызова длительных операций во время другой длительной операции и обновляет меню и элементы на панели инструментов соответственным образом.
private void removeOperation() – инициирует операцию удаления, настраивает все необходимые переменные, устанавливает флаг текущей операции, ведет счетчик удаленных файлов.
private void pasteOperation() - инициирует операцию вставки, настраивает все необходимые переменные, устанавливает флаг текущей операции, ведет счетчик вставленных файлов.
private void createOperation() – инициирует вызов диалогового окна для запроса на создание файла, ответ приходит из диалогового окна в onActivityResult.
public void launchFile(final Uri URI) – создает намерение для запуска файла. Входящий параметр – универсальный идентификатор ресурса.
public static void initNavigationBar() – инициализирует все элементы в панели навигации по файловой системе.
private class ProgressHandler extends Handler – класс унаследованный от класса Handler[14], является обработчиком, принимающим сообщения от загрузчиков для того, чтобы исходя из принятого сообщения определить дальнейшее поведение программы.
4.4.7 Описание класса FileManagerActivity
Класс, представляющий одно из основных окон приложения. Определяет константы для каждого типа фрагмента, а так же инициализирует боковую навигационную панель.
Список объектов и методов класса FileMangerActivity приводится ниже:
public static DrawerLayout mDrawer – переменная, содержащая корневую компоновку используемую в данном экране приложения.
public static NavigationView nvDrawer – переменная класса NavigationView[15], представляющая собой боковую навигационную панель.
public static ActionBarDrawerToggle drawerToggle – переменная класса ActionBarDrawerToggle, используемая для обработки движения пальцем по экрану при вызове навигационной панели и добавляющая способ управления навигационной панелью через значок на панели инструментов.
public int type – целочисленная переменная, определяет тип загружаемого фрагмента.
public static Intent getIntent(Context context, int type) – возвращает намерение для вызова данного экрана приложения, в намерении определяется тип загружаемого фрагмента. Входные параметры – контекст и тип загружаемого фрагмента.
protected Fragment createFragment(int type_i) – возвращает экземпляр фрагмента заданного типа. Входной параметр – тип фрагмента.
private void setupDrawerContent(NavigationView navigationView) – настраивает видимость элементов боковой навигационной панели и обработчик нажатий.
private void selectDrawerItem(MenuItem item) – обрабатывает нажатия на пункты боковой навигационной панели.
4.4.8 Описание класса FileAdapter
Класс FileAdapter разработан в качестве адаптера для RecyclerView и предназначен для работы с ним и доступа к его данным.
Список объектов и методов класса FileAdapter приводится ниже:
private List mFileList – переменная интерфейса List для типа данных File. Инициализируется списком файлов конкретной директории.
private FileManagerModel mManagerModel - переменная, содержащая в себе экземпляр класса FileManagerModel.
private SparseBooleanArray selectedItems – ассоциативный массив, ключ инициализуется значением Integer, в соответствие ключу ставится значение Boolean. Хранит индексы файлов. Те файлы, чьим индексам, в соответствие поставлено значение true считаются выделенными.
private Activity activity – переменная, класса Activity[16], содержит экземпляр экрана приложения, который загружает фрагмент, обращающийся к RecyclerView через адаптер.
private FileBrowserFragment browserFragment - переменная, класса FileBrowserFragment, содержит экземпляр фрагмента обращающегося к RecyclerView через адаптер.
private SparseArray filesSelected - ассоциативный массив, ключ инициализуется значением Integer, в соответствие ключу ставится значение File. Хранит список выделенных в режиме контекстного меню файлов.
public FileAdapter(Activity act, FileBrowserFragment fragment) – конструктор, инициализирует переменные. Входные параметры – экземпляр вызывающего экрана приложения, и экземпляр вызывающего фрагмента.
public SparseArray getFilesSelected() – возвращает список выделенных в режиме контекстного меню файлов filesSelected.
public void setFilesClear() – удаляет все объекты из ассоцитивного массива filesSelected.
public void setToggleSelection(int position, File file) – помечает файл как выделенный, инициирует его добавление в ассоциативные массивы и настраивает контекстное меню соответствующим образом.
public void setFileList(List data) - устанавливает значение переменной mFileList. Входной параметр – объект реализующий интерфейс List для типа File.
private void toggleSelection(int pos) – меняет значение выбранной позиции в selectedItems на противоположное. Входной параметр – целочисленная переменная, номер позиции.
public void clearSelections() – очищает ассоциативный массив selectedItems и уведомляет об этом RecyclerView.
public int getSelectedItemCount() – возвращает количество выделенных в режиме контекстного меню элементов RecyclerView.
public List getSelectedItems() – возвращает список индексов выделенных в режиме контекстного меню элементов RecyclerView.
public class FileViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener – класс, реализующий шаблон для всех элементов RecyclerView, а так же реализующий интерфейс View.OnClickListener для отслеживания одиночных нажатий на элементы RecyclerView.
4.4.9 Описание класса CloudsFragment
Класс CloudsFragment разработан для отображения окна выбора облачного сервиса и проверки авторизации приложения в облачном сервисе.
Список объектов и методов класса CloudsFragment приводится ниже:
public static Toolbar cloudsToolbar – переменная, представляющая объект Toolbar, который является панелью инструментов в верхней части экрана.
public static Button dropBoxButton - переменная, представляющая объект Button, который является кнопкой авторизации в облачном сервисе Dropbox.
public static Button enterDropboxButton – переменная, представляющая объект Button, который является кнопкой входа в облачный сервис Dropbox. Создает и запускает намерение для работы с облачным сервисом Dropbox.
public static ViewSwitcher dropboxSwitcher – переменная, представляющая собой объект-переключатель кнопок. Помещает на место кнопки авторизации кнопку входа в облачный сервис, если авторизация была выполнена успешно.
public SharedPreferences prefs - переменная, представляющая объект SharedPreferences, через который можно сохранять или считывать заданные настройки приложения в специализированные файлы.
public static CloudsFragment newInstance() - метод, возвращающий экземпляр фрагмента.
protected boolean hasToken() – проверяет, есть в файлах настроек ключ приложения выданный ему облачным сервисом при авторизации.
4.4.10 Описание класса DefaultDialogFragment
Класс DefaultDialogFragment разработан для отображения нескольких видов диалоговых окон: запрос на удаление файла, запрос на создание новой папки, запрос о новом имени файла при операции переименования.
Список объектов и методов класса CloudsFragment приводится ниже:
private File mFile – переменная типа File, предоставляющая доступ к файлу, для которого делается запрос на какую-либо операцию.
private int mAction – целочисленная переменная, определяющая тип запрашиваемой операции.
private String dataString – строковая переменная, с данными отправляемыми назад в вызывающий фрагмент из диалогового окна (новое имя файла, имя создаваемой папки).
public static DefaultDialogFragment newInstance(File file, int action) – возвращает экземпляр диалогового окна. Входные параметры – файл, для которого запрашивается операция, и целое число, определяющее саму операцию.
private void sendResult(int resultCode, String dataString) - отправляет код и строку результата в вызывающий фрагмент.
4.4.11 Описание класса ReplaceDialogFragment
Класс ReplaceDialogFragment разработан для отображения диалогового окна запрашивающего у пользователя разрешение на замену файла с таким же именем, при операции вставки.
4.4.12 Описание класса Defaults
Класс Defaults разработан для хранения флагов, методов и переменных, используемых в приложении повсеместно.
Список объектов и методов класса Defaults приводится ниже:
public static boolean progressAllowed – флаг, в значении true обозначающий разрешение на выполнение цикла отвечающего за расчет процента готовности операции. Значение становится false - в случае, если загрузчику не удалось выполнить операцию.
public static boolean nextAllowed – флаг, в значении true обозначающий разрешение на выполнение операции для следующего файла в списке.
public static final int PROGRESS_FAILED – целочисленная константа возвращаемая загрузчиком прогресса в случае если дальнейший расчет прогресса запрещен.
public static Boolean multipleSelectionFlag – переменная типа boolean, флаг в значении true обозначающий, что включен режим контекстного меню и множественного выделения файлов.
public static boolean canceledFlag – переменная типа boolean, флаг проверяемый в экземпляере FileManagerModel и в значении true прекращающий выполнение текущей операции.
public static boolean canceledFlagForLoader – переменная типа boolean, флаг проверяемый в загрузчиках операций и прогресс и в значении true инициирующий прекращение работы загрузчика.
public static int removedCount – счетчик удаленных за операцию файлов.
public static int pastedCount – счетчик вставленных за операцию файлов.
public static int action – целочисленная переменная, определяющая текущее действие.
public static SparseArray selectedMeta – ассоциативный массив с Integer ключами и значениями типа Metadata, несет в себе информацию о выделенных в режиме контекстного меню файлах при работе с облачным сервисом.
public static boolean pasteDownload - переменная типа boolean, флаг в значении true обозначающий, что буфер хранящий информацию о файлах для закачки не пуст и пользователь может скачать эти файлы из облачного сервиса.
public static boolean downloadInterrupt - переменная типа boolean, флаг в значении true обозначающий, что буфер хранящий информацию о файлах для закачки не пуст и пользователь может скачать эти файлы из облачного сервиса.
public static String pathToDownload – строковая переменная, хранящая полный путь до папки или файла, выбранного для закачки.
public static boolean replaceDownload – переменная типа boolean, флаг, определяющий нужно ли производить замену файла при операции закачки, если встречается файл с аналогичным именем.
public static boolean moveFlag – переменная типа boolean, флаг в значении true обозначающий, что пользователь выбрал операцию перемещения находясь в режиме работы с облачным сервисом.
public static boolean dropboxLogout – переменная типа boolean, флаг в значении true обозначающий, что пользователь вышел из аккаунта Dropbox.
public static DownloadFileTask task – переменная класса DownloadFileTask, используемая для вызова асинхронной операции закачки файла из облачного сервиса.
public static FileLoader fileLoader – переменная класса FileLoader, загрузчик используемый для выполнения операции загрузки списка файлов из конкретной директории в файловой системе мобильного устройства или карты памяти.
public static PasteLoader pasteLoader – переменная класса PasteLoader, загрузчик, используемый для выполнения асинхронной операции вставки файлов и папок при работе с файловой системой мобильного устройства или карты памяти.
public static RemoveLoader removeLoader – переменная класса RemoveLoader, загрузчик, используемый для выполнения асинхронной операции удаления файлов и папок при работе с файловой системой мобильного устройства или карты памяти.
public static ProgressBarLoader progressLoader - переменная класса ProgressBarLoader, загрузчик, используемый для определения прогресса при выполнении какой-либо долговременной операции при работе с файловой системой мобильного устройства или карты памяти.
public static SparseArray filesToDo – ассоциативный массив, ключ инициализуется значением Integer, инициализируется списком выделенных в режиме контекстного меню файлов.
public static void setMultipleSelectionFlag(Boolean multipleSelectionFlag) – устанавливает значение флага multipleSelectionFlag.
public static void resetProgressAllowed() - устанавливает значение флага progressAllowed в true.
public static void cancelOperation(boolean state) - устанавливает значение флага canceledFlag.
public static void cancelLoaderOperation(boolean state) - устанавливает значение флага canceledFlagForLoader.
public static void resetNextAllowed() - устанавливает значение флага nextAllowed в false.
public static int getCountToDo() – возвращает количество элементов в ассоциативном массиве filesToDo.
4.4.13 Описание классов пакета Loader
В пакет Loader входят классы, предназначенные для выполнения асинхронных операций. Асинхронные операции всегда выполняются в отдельном потоке. В разработанном файловом менеджере все продолжительные операции запускаются и работают в отдельных потоках. Классы пакета Loader являются дочерними классами AsyncTaskLoader[17] и именуются загрузчиками. Они разработаны для выполнения операций связанных с файловой системой устройства и карты памяти, таких как загрузка списка файлов и папок, копирования, удаления, а так же для расчета прогресса выполнения текущей операции.
Основные методы, общие для всех классов приводятся ниже:
D loadInBackground() – метод, возвращающий заданный тип данных D, запускается в отдельном потоке, выполняет необходимую операцию и возвращает ее результат(при его наличии). Все загрузчики возвращают результат операции с помощью этого метода.
Интерфейс LoaderCallbacks, определяющий методы обратного вызова для менеджера загрузчиков LoaderManager, который позволяет управлять загрузчиками, требует обязательной реализации трех методов:
public Loader onCreateLoader(int id, Bundle args) – создает и возвращает новый экземпляр загрузчика для заданного идентификатора ID. Вызывается при создании Loader.
public void onLoadFinished(Loader loader, D data) – вызывается автоматически, когда Loader завершает загрузку данных. Загрузчик следит за поступающими данными, а менеджер получает уведомление о завершении загрузки и передаёт результат данному методу.
public void onLoaderReset(Loader loader) - перезагружает данные в загрузчике. Этот метод вызывается, когда состояние созданного ранее загрузчика сбрасывается, в результате чего его данные теряются. Этот обратный вызов позволяет узнать, когда данные вот-вот будут высвобождены, с тем чтобы можно было удалить свою ссылку на них.
Класс FileLoader – разработан, для асинхронного выполнения операции загрузки файлов и папок из заданной директории.
Класс PasteLoader - разработан, для асинхронного выполнения операции вставки файлов и папок в заданную директорию.
Класс RemoveLoader - разработан, для асинхронного выполнения операции удаления файлов и папок.
Класс ProgressBarLoader - разработан, для асинхронного выполнения расчета прогресса выполнения длительной операции.
4.4.14 Описание класса Dropbox Client Factory
Класс Dropbox Client Factory разработан для инициализации и предоставления существующего экземпляра объекта класса DbxClientV2[18]. Для того, чтобы приложение могло инициализировать этот объект, сначала оно должно получить специальный ключ доступа, запросив у пользователя разрешение на получение доступа к его облачному хранилищу.
Список объектов и методов класса Dropbox Client Factory приводится ниже:
private static DbxClientV2 sDbxClient – переменная класса DbxClientV2, используется для осуществления удаленных вызовов Dropbox API[18], предоставляя возможность выполнять действия с хранилищем Dropbox, как авторизованный пользователь.
public static void init(String accessToken) – инициализирует перменную sDbxClient.
public static DbxClientV2 getClient() – возвращает переменную sDbxClient в случае если она инициализирована. В противном случае метод вызывает исключение.
4.4.15 Описание класса Dropbox Activity
Класс Dropbox Activity представляет окно для работы с облачным хранилищем. В этом классе реализованы методы управляющие работой пользовательского интерфейса, а так же методы инициирующие операции с облачным хранилищем Dropbox. Кроме того, этот класс реализует интерфейс RecyclerView.OnItemTouchListener отвечающий за поведения элементов mRecyclerView после нажатия на них. Передает обработку в gestureDetector.
Большое количество переменных и методов данного класса выполняют аналогичные методам класса FileBrowserFragment функции, не смотря на отличия в реализации.
Ниже перечислены уникальные для данного класса переменные и методы:
public String mPath – строковая переменная, хранящая в себе полный путь до текущей директории в файловой системе облачного хранилища.
private UploadFileTask uploadFileTask – переменная класса UploadFileTask, используемая для вызова асинхронной операции загрузки файла на облачный сервис.
private int sortType – целочисленная переменная, принимающая константные значения, определяющие тип сортировки файлов в папке.
private void initAndLoadData(String accessToken) – вызывает метод init класса Dropbox Client Factory для инициализации объекта для работы с Dropbox API, а так же инициирует загрузку списка файлов и папок в директории mPath.
protected void loadData() – проводит необходимые настройки и инициирует создание асинхронного потока для загрузки списка файлов и папок с облачного хранилища.
public void sortFiles(int sort) – задает тип сортировки загруженных файлов и папок.
void createFolder() - инициирует создание асинхронного потока для создания папки в облачном хранилище.
public void deleteFile() - инициирует создание асинхронного потока для удаления файлов и папок в облачном хранилище.
public void renameFile() - инициирует создание асинхронного потока для переименования файлов и папок в облачном хранилище.
public void preMoveFile() – проводит необходимые настройки переменных и объектов на панели инструментов перед операцией перемещения файла или папки внутри облачного хранилища.
public void moveFile() - инициирует создание асинхронного потока для перемещения файлов и папок внутри облачного хранилища.
public void uploadFile() - инициирует создание асинхронного потока для загрузки файлов и папок на облачное хранилище.
4.4.16 Описание класса Dropbox Adapter
Класс Dropbox Adapter разработан в качестве адаптера для RecyclerView и предназначен для работы с ним и доступа к его данным.
Большое количество переменных и методов данного класса выполняют аналогичные методам класса FileAdapter функции, не смотря на отличия в реализации.
Ниже перечислены уникальные для данного класса интерфейсы обратных вызовов и описание его методов:
public final Callback mCallback – интерфейс обратных вызовов для адаптера, с помощью которого он взаимодействует с элементами вызывающего класса.
void onFolderClicked(FolderMetadata folder) – задает поведение при нажатии на элемент-папку RecyclerView. При нажатии происходит обновление переменной mPath и загрузка файлов и папок из новой директории.
boolean isActionModeActive() – возвращает переменную, говорящую о текущем состоянии контекстного меню.
4.4.17 Описание классов пакета Tasks
В пакет Tasks, так же как в пакет Loader входят классы, предназначенные для выполнения асинхронных операций. Асинхронные операции всегда выполняются в отдельном потоке. В разработанном файловом менеджере все продолжительные операции запускаются и работают в отдельных потоках. Классы пакета Tasks являются дочерними классами AsyncTask[19] (в этом их отличие от классов пакета Loader). Они разработаны для выполнения операций связанных с файловой системой облачного хранилища, таких как загрузка списка файлов и папок, копирование, удаление, перемещение файлов и папок, переименование и загрузка файлов и папок на облачное хранилище.
Основные объекты, интерфейсы и методы, общие для всех дочерних классов AsyncTask приводятся ниже:
public interface Callback – интерфейс, у каждого метода определяющий собственные методы для работы с вызывающим классом и потоком.
protected void onPostExecute(D result) – вызывается после doInBackground, вызов происходит когда AsyncTask завершает свою работу после выполнения процесса вычислений. Метод может взаимодействовать с элементами пользовательского интерфейса так, как вызывается в основном потоке.
D doInBackground (Params... params) – метод, возвращающий заданный тип данных D, запускается в отдельном потоке, выполняет необходимые операции и возвращает результат (при его наличии). Результат передается в качестве параметра метода onPostExectute. Параметры метода doInBackground могут быть любого типа и передаются в метод execute при запуске AsyncTask.
Общие для всех классов методы Callback интерфейсов:
onError(Exception e) – вызывается в случае если в любом другом методe AsyncTask вызывается исключение. Метод onError обрабатывает исключение должным образом и выводит сообщение об ошибке на пользовательский интерфейс.
Список классов пакета Tasks приводится ниже, для каждого из классов отдельными пунктами вынесены уникальные методы интерфейса Callback.
CalculateSizeTask – разработан, для проведения асинхронной операции расчета общего объема файлов и папок в облачном хранилище, над которыми пользователь хочет провести продолжительную операцию.
void onGetSizeComplete(long size) – вызывается по завершении операции вычисления размера папки или файла. Записывает результат в специальную переменную в вызывающем классе.
CreateFileTask – разработан для проведения асинхронной операции создания папки в облачном хранилище.
public void onFolderCreated() – вызывается по завершении операции создания новой папки. Скрывает диалоговое окно прогресса и обновляет список данных загруженных из текущей папки.
DeleteFileTask – разработан для проведения асинхронной операции удаления папки или файла в облачном хранилище.
public void onFileDeleted() – вызывается по завершении операции создания новой папки. Обновляет список данных загруженных из текущей папки облачного хранилища.
DownloadFileTask – разработан для проведения асинхронной операции удаления папки или файла в облачном хранилище.
void onDownloadComplete() - вызывается по завершении операции загрузки файла или папки. Обновляет список данных, загружаемый из текущего места файловой системы мобильного устройства или карты памяти.
void updateProgress(long progress) – вызывается во время выполнения операции закачки файла с облачного хранилища. Обновляет поле отображающее прогресс.
boolean replaceConfirm(File file) – показывает фрагмент диалогового окна, который запрашивает о пользователя разрешение на замену файла или папки в директории, при закачке объекта с аналогичным именем.
ListFolderTask – разработан для проведения асинхронной операции получения списков файлов и папок в текущей директории облачного хранилища.
void onDataLoaded(ListFolderResult result) – сортирует загруженные данные с помощью выбранного типа сортировки, передает их адаптеру Recycler View и инициализирует горизонтальную панель навигации между папками облачного хранилища.
MoveFileTask – разработан для проведения асинхронных операций перемещения и переименования папки или файла на облачном хранилище.
void onMovingComplete(File result) - обновляет список данных загруженных из текущей папки облачного хранилища.
UploadFileTask - разработан для проведения асинхронной операции загрузки файла или папки на облачное хранилище.
void onUploadComplete() - Скрывает диалоговое окно прогресса, очищает буфер, содержащий пути файлов или папок для закачки, обновляет пункты меню и обновляет список данных загруженных из текущей папки облачного хранилища.
void cancelAction() - Скрывает диалоговое окно прогресса, очищает буфер, содержащий пути файлов или папок для закачки и обновляет пункты меню.
|