Skip to content

usetrmnl/trmnl-android

Repository files navigation

Android CI

Android - TRMNL Display Mirror πŸͺž

A simple app to mirror existing TRMNL's content to your Android device (preferably e-ink display).

πŸ“œ Preconditions

You must have a valid access-token to access the screen content using TRMNL server API.

Here are some of the known ways you can get access to the access-token.

  1. You must own a TRMNL device with "developer edition" add-on purchased
  2. You have purchased their BYOD product.
  3. You have self-serve installation of TRMNL service using BYOS

How to try

⬇️ Install the APK on your Android device.

  1. Configure the API access-token in the app settings
    i. πŸ“ NOTE: Right now only https://trmnl.app/api/ service API is supported, custom service URL support will be added later
  2. Save the token and keep the app always-on with the TRMNL's display image showing.

Download Release

Check installable APK from Assets in latest release.

Demo Video

▢️ See full demo

Limitations 🚧

  1. Right now, screen lock using Google's recommended FLAG_KEEP_SCREEN_ON is not working on e-Ink tablet due to strict battery optimization. So, if you plan to keep the screen on indefinitely, you should set that in the device settings.
    • On normal Android tablet or device, screen wake lock should work. However it's not recommended to use it without device being always plugged-in πŸ”Œ.
  2. Currently the app uses Android WorkManager to schedule refresh job and it has minimum interval of ⏰ 15 min between jobs. So, if your TRMNL is setup to refresh every 5 min, you will not see it refresh until 15 min is elapsed.
    • This can be overcome by using some clever logic or not using WorkManager. However, this is a OS optimized and reliable way to refresh image periodically.

Application Overview

The TRMNL Display Mirror app serves as a digital display mirror for TRMNL e-ink devices. The app connects to the TRMNL API, fetches display data, and shows it on Android devices.

Key Features

  • Token-based authentication with the TRMNL API
  • Automatic periodic image refresh from the server
  • Adaptive refresh rate based on server response config
  • Manual refresh capabilities
  • Image caching for offline viewing
  • Refresh history logging for tracking & validation

Android Developer Guide

This guide will help you get started with the TRMNL Display Mirror Android application development.

See technical details on the project

Prerequisites

Getting Started

Clone the Repository

git clone https://github.com/usetrmnl/trmnl-android.git
cd trmnl-android

Open Project in Android Studio

  1. Start Android Studio
  2. Select "Open an existing project"
  3. Navigate to and select the cloned repository folder

Build the Project

  • Wait for the Gradle sync to complete
  • Build the project by selecting Build > Make Project or pressing Ctrl+F9 (Windows/Linux) or Cmd+F9 (macOS)

Run the App

  • Connect an Android device or start an emulator
  • Click the Run button (green triangle) in the toolbar
  • Select your target device and click OK

Project Structure

The app uses a modern Android architecture with the following components:

  • UI: Jetpack Compose with Circuit UI architecture
  • Background Processing: WorkManager for scheduled image (re)loading
  • Networking: Retrofit and OkHttp for API communication
  • DI: Dagger with Anvil for dependency injection
  • Data Storage: DataStore for preferences and token storage

Key Features/Screens

  • Main TRMNL Mirror Display visualization in TrmnlMirrorDisplayScreen
  • Settings management via AppSettingsScreen
  • Image refresh log/history in DisplayRefreshLogScreen
  • Background refresh scheduling with TrmnlWorkScheduler & TrmnlImageRefreshWorker

Related References πŸ“–