Skip to content

nanogiants/nebula-android

Repository files navigation

Nebula Android App

Nebula Launch Screen

About Nebula

Nebula is a mobile application designed to help users verify the credibility of news articles and text content. In an era of widespread misinformation, Nebula empowers users to make informed decisions by providing tools to check the reliability of information they encounter online.

The app offers an intuitive interface for submitting text for analysis, managing verification requests, and accessing educational resources about identifying misinformation.

Screenshots

Onboarding Dashboard Verified Texts Neutral Result Tutorial

Features

  • Text Verification: Submit text content for credibility analysis
  • Image Analysis: Upload screenshots containing text for verification
  • Dashboard: View and manage all your verification requests
  • Detailed Results: Access comprehensive analysis results with confidence scores
  • Educational Resources: Learn how to identify fake news and misinformation
  • Fact-Checking Tools: Access curated list of international fact-checking organizations
  • Tutorial: Interactive onboarding to guide new users
  • Settings: Customize app behavior and manage preferences
  • Offline Support: View previously checked content without internet connection

Technology Stack

Core Technologies

  • Language: Kotlin 2.1.0
  • UI Framework: Jetpack Compose with Material Design 3
  • Minimum SDK: Android 8.0 (API 26)
  • Target SDK: Android 15 (API 35)
  • Build System: Gradle with Kotlin DSL

Key Libraries

  • Compose BOM: 2025.01.00
  • Navigation: Jetpack Navigation Compose
  • Dependency Injection: Koin 4.0.1
  • Image Loading: Coil 2.4.0
  • Animations: Lottie 6.6.2
  • Networking: Shared module (nebula-shared)
  • Error Tracking: Sentry Android 7.16.0
  • Serialization: Kotlinx Serialization 1.8.0

Architecture

  • Pattern: MVVM (Model-View-ViewModel)
  • State Management: Compose State with ViewModels
  • Navigation: Type-safe Jetpack Navigation
  • Modular Design: Shared business logic via Git submodule

Prerequisites

Before you begin, ensure you have the following installed:

  • Android Studio: Hedgehog (2023.1.1) or newer
  • JDK: Java 17 or higher
  • Git: For cloning the repository and managing submodules
  • Android SDK: API Level 26-35

Setup & Installation

1. Clone the Repository

git clone https://github.com/nanogiants/nebula-android.git
cd nebula-android

2. Initialize Submodules

This project uses a shared module as a Git submodule. Initialize it with:

git submodule init
git submodule update --recursive

Alternatively, clone with submodules in one step:

git clone --recursive https://github.com/nanogiants/nebula-android.git

3. Open in Android Studio

  1. Launch Android Studio
  2. Select File → Open
  3. Navigate to the cloned repository directory
  4. Click OK
  5. Wait for Gradle sync to complete

4. Configure Build Variants (Optional)

The project includes two build flavors:

  • develop: Development build with debug features (default)
    • Application ID: de.unisiegen.nebula.develop
    • Suitable for testing and development
  • production: Production-ready build
    • Application ID: de.unisiegen.nebula
    • Optimized with ProGuard/R8

Select your preferred variant via Build → Select Build Variant in Android Studio.

Build & Run

Run on Emulator/Device

  1. Connect an Android device or start an emulator
  2. Select the develop build variant (default)
  3. Click the Run button (▶️) or press Shift + F10
  4. Select your target device
  5. Wait for the app to build and install

Build APK

Generate a debug APK:

./gradlew assembleDevelopDebug

The APK will be located at:

app/build/outputs/apk/develop/debug/nebula-android-{version}.apk

Build Release APK

For production builds (requires keystore configuration):

./gradlew assembleProductionRelease

Note: Release builds require signing configuration. Set up the following environment variables:

  • BITRISEIO_ANDROID_KEYSTORE_PASSWORD
  • BITRISEIO_ANDROID_KEYSTORE_ALIAS
  • BITRISEIO_ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD

And place your nebulaRelease.keystore file in the project root.

Project Structure

unisiegen-nebula-app-android/
├── app/                          # Main application module
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/de/unisiegen/nebula/
│   │   │   │   ├── MainActivity.kt
│   │   │   │   ├── NebulaApplication.kt
│   │   │   │   ├── di/          # Dependency injection modules
│   │   │   │   ├── navigation/  # Navigation graph and destinations
│   │   │   │   └── ui/
│   │   │   │       ├── screens/ # Feature screens
│   │   │   │       │   ├── start/              # Main dashboard
│   │   │   │       │   ├── checkRequestsList/  # Verification history
│   │   │   │       │   ├── checkDetails/       # Result details
│   │   │   │       │   ├── fakeNewsDetection/  # Educational content
│   │   │   │       │   ├── faq/                # FAQ screen
│   │   │   │       │   └── tutorial/           # Onboarding
│   │   │   │       ├── settings/               # App settings
│   │   │   │       ├── theme/                  # Material theme
│   │   │   │       └── components/             # Reusable UI components
│   │   │   └── res/ # Resources (layouts, strings, drawables)
│   │   └── test/    # Unit tests
│   └── build.gradle.kts
├── neb-shared/      # Shared business logic submodule
├── art/             # Screenshots and promotional images
├── gradle/          # Gradle wrapper and version catalogs
├── build.gradle.kts # Root build configuration
└── settings.gradle.kts

Development

Code Style

This project uses Detekt for static code analysis and formatting. The configuration is located in:

neb-shared/detekt-config.yml

Run Detekt:

./gradlew detekt

Version Management

  • Version Code: Auto-generated from Git commit count
  • Version Name: Defaults to 0.1.0 (override via OVERRIDE_VERSION_NAME env var)

Current version can be checked in app/build.gradle.kts.

Adding Dependencies

Dependencies are managed via Gradle Version Catalogs:

  • App dependencies: gradle/libs.versions.toml
  • Shared dependencies: neb-shared/gradle/shared.libs.versions.toml

Example:

[libraries]
your-library = { group = "com.example", name = "library", version = "1.0.0" }

Then reference in app/build.gradle.kts:

implementation(libs.your.library)

Shared Module Updates

To update the shared submodule:

cd neb-shared
git pull origin main
cd ..
git add neb-shared
git commit -m "Update shared module"

Testing

Run Unit Tests

./gradlew test

Run Instrumented Tests

./gradlew connectedAndroidTest

Test Coverage

Generate coverage reports:

./gradlew testDevelopDebugUnitTest

Reports will be available in app/build/reports/tests/.

Contributing

Contributions are welcome! Please follow these guidelines:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run code analysis (./gradlew detekt)
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

Commit Message Convention

  • feat: New feature
  • fix: Bug fix
  • docs: Documentation changes
  • style: Code style changes (formatting, etc.)
  • refactor: Code refactoring
  • test: Adding or updating tests
  • chore: Maintenance tasks

License

MIT License Copyright (c) 2022-2026 NanoGiants GmbH

Permission is hereby granted, free
of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the
following conditions:

The above copyright notice and this permission notice
(including the next paragraph) shall be included in all copies or substantial
portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Note: This is an Android-only implementation. For the iOS version, please refer to the separate iOS repository.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages