тоду, необхідно приводити до конкретного типу, наприклад, Button або List View, багато з яких мають унікальні властивості. Це створює ще одне небезпечне місце, сприяє виникненню помилок, пов'язаних з приведенням типів, і видачу винятків Class Cast Exception під час виконання. Крім цього, існує можливість програмно створювати елементи управління і змінювати розмітку, що сприяє більш тісному зв'язку уявлення і класу-контролера.
Активити авторизації є першим, що бачить користувач програми. Крім своїх основних функцій (надання можливості для введення логіна і пароля, а також їх валідації) даний модуль також виконують функцію визначення першого запуску програми. Архітектурою Android-додатки не передбачений метод, який викликається при найпершому старті додатки, або ж хоча б просто при старті програми. Внаслідок цього, часто обробка подібних ситуацій проводиться в початковій активують додатки, тобто, в даному випадку, в модулі авторизації. Крім того, активують авторизації є єдиною в додатку, де використовуються різні розмітки для альбомної і портретної орієнтації екрану.
Модуль роботи з камерою зроблений на базі основної, другий за рахунком, активують, яку бачить користувач. В даному випадку, модуль роботи з камерою - це щось більше, ніж просте уявлення. Android надає певні можливості для написання користувальницьких додатків, що працюють безпосередньо з камерою. Типове рішення припускає використання певного елемента керування і реалізації кількох інтерфейсів зворотного виклику для отримання подій від камери і елементів подання. Крім цього, важливим нюансів є те, що поворот екрану призводить пересозданию компонента уявлення, що відповідає за вивід відео потоку з камери. З візуальної точки зору, така поведінка виглядає не кращим чином, тому певну складність являє собою власна обробка визначення положення екрану і обробка його повороту. Таким чином, виходить досить тісно пов'язаний, вузькоспеціалізований модуль, що представляє собою синтез візуальних компонент і класу-слухача для реакції на події від камери і датчиків позиціонування телефону.
Ключовим модулем додатка є модуль редагування метаданих. Його особлива роль полягає в тому, що він контактує з багатьма компонентами системи і є агрегатором даних. У роботі модуля можна виділити три основні стадії, в ході яких він взаємодіє з різними частинами програми. На етапі ініціалізації модуль отримує вихідні дані у вигляді знімка від модуля роботи з камерою, а також встановлює зв'язок з модулями завантаження даних для асинхронного отримання кешированной інформації. У наступній фазі своєї роботи, модуль забезпечує взаємодію з користувачем: надає можливості для заповнення форми метаданих, а також забезпечує збереження введених даних до моменту відправки. У завершальній фазі модуль стає слухачем подій від фонового сервісу для того, щоб показувати користувачеві прогрес виконання завдання і надати можливість зворотного зв'язку у разі виникнення помилок.
Модуль налаштувань являє собою здебільшого системну компоненту, яка надає доступ до захищеному фалу налаштувань програми, доступному в контексті всього програми. Типовою практикою є використання модуля налаштувань для збереження стані додатки між запусками. Крім цього, модуль налаштувань зв'язується з користувача інтерфейсом, який функціонує як фасад і відкриває користувачеві частина налаштувань для редагування. Залежно від складності додатка, модуль, що відповідає за взаємодії з користувачем може мати вигляд не тільки тонкого клієнта, але і досить складно системи, що включає в себе набір власних елементів подання для редагування налаштувань, а також набору компонент, відповідальних за швидке реагування на зміну налаштувань. У даному проекті модуль користувальницького інтерфейсу не є складним і, більше того, надає можливості для редагування досить загальних властивостей, важливих в контексті всього програми, а не конкретної сесії. З цієї причини програма надає лише одну точку входу в інтерфейс налаштувань. Незважаючи на це, нижележащий модуль налаштувань досить широко використовується усіма основними компонентами системи. Даний факт є основним аргументом на користь виділення двох модулів, що мають відношення до налаштувань.
Досить відокремленим виглядає модуль роботи з БД. Багато в чому це наслідок шаблонів проектування ОС Android. Платформа надає можливості для автономної ініціалізації БД при першому запуску програми, а також дозволяє вести версійність БД. При цьому, в загальному випадку, є можливість реалізації постачальника вмісту (Content Provider), що надає зовнішній інтерфейс для взаємодії з БД. Постачальник вмісту можна трактувати як аналог сервісу, що представляє публічний API для будь-яких зовнішніх додатків. Звичайно, існує можливість обмеження доступу до постачальника. Можна дати права на підключення лише деяким додаткам або вимагати запиту дозволів від зовн...