Skip to main content

Overview

Threadly is built using modern Android development technologies and follows industry best practices. The application leverages a robust set of libraries for networking, media handling, real-time communication, and local data persistence.

Language & Build System

ComponentVersionPurpose
Java11Primary development language
Kotlin1.9.22Supporting language for modern Android features
Gradle8.13.2Build system and dependency management
Android SDKMin: 29, Target: 36Platform compatibility

Core Dependencies

Networking

LibraryVersionPurpose
Fast Android Networking1.0.4HTTP client for REST API calls
OkHttp-Underlying HTTP engine
// Example from AndroidNetworkingLayer.java
AndroidNetworking.get(Url)
    .setPriority(Priority.HIGH)
    .addHeaders("Authorization", "Bearer " + PreferenceUtil.getJWT())
    .build()
    .getAsJSONObject(new JSONObjectRequestListener() {
        @Override
        public void onResponse(JSONObject jsonObject) {
            callbackInterfaceJsonObject.onSuccess(jsonObject);
        }

        @Override
        public void onError(ANError anError) {
            callbackInterfaceJsonObject.onError(anError.getErrorCode());
        }
    });

Real-Time Communication

LibraryVersionPurpose
Socket.IO Client2.0.0WebSocket communication
Firebase Cloud Messaging25.0.0Push notifications fallback
See Real-Time Communication for implementation details.

Media Handling

LibraryVersionPurpose
Glide4.16.0Image loading and caching
Coil3.3.0Modern image loading (Kotlin)
ExoPlayer (Media3)1.3.1Video playback
CameraX1.4.0Camera integration

Local Data Storage

LibraryVersionPurpose
Room Database2.6.1SQLite abstraction layer
SharedPreferences-Key-value storage
See Offline Support for caching implementation.

UI Components

LibraryVersionPurpose
Material Design1.12.0UI components
Navigation Component2.9.0Fragment navigation
ConstraintLayout2.2.1Flexible layouts
SwipeRefreshLayout1.1.0Pull-to-refresh
Shimmer0.5.0Loading animations

Background Processing

LibraryVersionPurpose
WorkManager2.10.2Background task scheduling

Architecture Pattern

Threadly follows a component-based architecture with clear separation of concerns:
app/
├── network_managers/     # API communication layer
│   ├── PostsManager.java
│   ├── MessageManager.java
│   ├── AuthManager.java
│   └── ...
├── SocketIo/            # Real-time communication
│   ├── SocketManager.java
│   └── SocketEmitterEvents.java
├── RoomDb/              # Local database
│   ├── DataBase.java
│   ├── schemas/
│   └── Dao/
└── ...

Layer Responsibilities

LayerResponsibilityExample
Network ManagersHandle HTTP requests and responsesPostsManager, MessageManager
SocketIoManage WebSocket connectionsSocketManager
RoomDbLocal data persistence and cachingDataBase, MessageSchema
Activities/FragmentsUI presentation and user interactionViews and controllers
UtilsShared utilities and helpersPreferenceUtil, ReUsableFunctions

Backend Technology

Threadly’s backend services are built with:
TechnologyPurpose
Node.jsServer runtime
Express.jsWeb framework
MySQLPrimary database
Socket.IOReal-time bidirectional communication

API Endpoints

Base URL: https://threadlyserver.onrender.com/api
// API endpoint configuration from ApiEndPoints.java
private static final String baseUrl = BuildConfig.BASE_URL;

public static final String GET_IMAGE_FEED = baseUrl + "/posts/getImagePostsFeed/";
public static final String ADD_IMAGE_POST = baseUrl + "/posts/addImagePost/";
public static final String SEND_MESSAGE = baseUrl + "/messages/sendMessage/";

Build Configuration

Gradle Setup

// app/build.gradle
android {
    compileSdk 36
    
    defaultConfig {
        minSdk 29
        targetSdk 36
        versionCode 1
        versionName "1.2"
    }
    
    buildTypes {
        debug {
            buildConfigField "String", "BASE_URL", 
                "\"https://threadlyserver.onrender.com/api\""
            buildConfigField "String", "SOCKET_URL", 
                "\"https://threadlyserver.onrender.com/\""
        }
    }
}

Version Catalog

Threadly uses Gradle Version Catalogs for dependency management:
# gradle/libs.versions.toml
[versions]
androidNetworking = "1.0.4"
glide = "4.16.0"
media3Exoplayer = "1.3.1"
roomRuntime = "2.6.1"
socketIoClient = "2.0.0"
firebaseMessaging = "25.0.0"

Development Tools

ToolPurpose
Android StudioPrimary IDE
ViewBindingType-safe view access
BuildConfigEnvironment-specific configuration
ProGuardCode obfuscation (release builds)

Next Steps

Build docs developers (and LLMs) love