https://github.com/gabrielrovesti/accessiblehub
Code for my M.Sc. Thesis in Computer Science - A Comprehensive mobile accessibility learning toolkit for developers realized in React Native compliant to WCAG 2.2 guidelines
https://github.com/gabrielrovesti/accessiblehub
accessibility master-thesis mobile-accessibility react-native wcag
Last synced: 8 months ago
JSON representation
Code for my M.Sc. Thesis in Computer Science - A Comprehensive mobile accessibility learning toolkit for developers realized in React Native compliant to WCAG 2.2 guidelines
- Host: GitHub
- URL: https://github.com/gabrielrovesti/accessiblehub
- Owner: gabrielrovesti
- Created: 2024-11-17T16:14:22.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-03-13T18:39:14.000Z (8 months ago)
- Last Synced: 2025-03-13T19:41:45.537Z (8 months ago)
- Topics: accessibility, master-thesis, mobile-accessibility, react-native, wcag
- Language: TypeScript
- Homepage:
- Size: 171 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# AccessibleHub: A Comprehensive Mobile Accessibility Learning Platform
AccessibleHub is an **innovative React Native** mobile application designed to help developers **learn and implement** accessibility best practices. Built with **Expo** and guided by **WCAG 2.2** standards, the app provides **interactive demos**, **comparisons**, and **practical examples** of how to create inclusive mobile experiences.
---
## π Project Structure
Below is the main directory layout inside the `my-app` folder (the core Expo project):
```
my-app/
ββ .expo/
ββ app/
β ββ index.tsx # Home screen
β ββ components.tsx # Main screen listing accessible components
β ββ practices.tsx # Main screen listing best practices
β ββ tools.tsx # Mobile Accessibility Tools screen
β ββ frameworks-comparison.tsx # Framework comparison screen
β ββ accessibility-instruction.tsx # Instruction & Community screen
β ββ settings.tsx # Settings & accessibility toggles
β ββ _layout.tsx # Global Drawer/Navigation layout
β
ββ accessible-components/
β ββ _layout.tsx
β ββ accessible-button.tsx # Buttons & Touchables demo
β ββ accessible-dialog.tsx # Modal dialogs demo
β ββ accessible-form.tsx # Accessible forms demo
β ββ accessible-media.tsx # Images/media content demo
β ββ accessible-advanced.tsx # Combined advanced components (Tabs, Progress, Alerts, Sliders)
β
ββ practices-screens/
β ββ _layout.tsx
β ββ guidelines.tsx # WCAG 2.2 guidelines
β ββ gestures.tsx # Gesture tutorial
β ββ navigation.tsx # Logical focus order / navigation focus
β ββ screen-reader.tsx # Screen reader support
β ββ semantics.tsx # Semantic structure
β ββ accessibility-instruction.tsx # (If further instruction sub-screens needed)
β
ββ context/
β ββ ThemeContext.tsx # Custom theming & accessibility settings
β
ββ assets/
β ββ images/
β β ββ placeholder1.png
β β ββ placeholder2.png
β β ββ placeholder3.png
β ββ fonts/ (if custom fonts used)
β
ββ scripts/ # (Optional scripts, e.g., for builds or linting)
ββ package.json
ββ tsconfig.json
ββ babel.config.js
ββ README.md # This file
```
---
## π― Overview & Goals
**AccessibleHub** aims to:
- **Educate** developers on **mobile accessibility** techniques
- **Demonstrate** WCAG principles in **React Native** context
- **Compare** frameworks (React Native, Flutter, Ionic) from an accessibility standpoint
- **Provide** ready-to-use code examples with best practices
---
## π Key Screens & Features
1. **Home Screen (`index.tsx`)**
- Introductory page with quick stats and navigation to core sections
- Announces the appβs purpose and highlights the main features
2. **Accessibility Components (`components.tsx`)**
- Overview of multiple sub-demos in `accessible-components/` folder:
- **Buttons & Touchables** (`accessible-button.tsx`)
- **Form Controls** (`accessible-form.tsx`)
- **Media Content** (`accessible-media.tsx`)
- **Modal Dialogs** (`accessible-dialog.tsx`)
- **Advanced** (`accessible-advanced.tsx`): Tabs, Progress, Alerts, Sliders
3. **Best Practices (`practices.tsx`)**
- Index of best practice demos in `practices-screens/` folder:
- **WCAG Guidelines** (`guidelines.tsx`)
- **Gestures** (`gestures.tsx`)
- **Screen Reader Support** (`screen-reader.tsx`)
- **Semantic Structure** (`semantics.tsx`)
- **Focus/Navigation** (`navigation.tsx`)
4. **Mobile Accessibility Tools (`tools.tsx`)**
- Summaries of TalkBack, VoiceOver, Inspector, Contrast Analyzer, etc.
- Link out to external docs or tool usage
5. **Framework Comparison (`frameworks-comparison.tsx`)**
- Evaluates popular frameworks (React Native, Flutter, Ionic)
- Compares accessibility support, performance, dev experience
6. **Instruction & Community (`accessibility-instruction.tsx`)**
- Replaces older βachievementsβ approach
- Focuses on broader accessibility instruction, community links, success stories
7. **Settings (`settings.tsx`)**
- Toggles for **Dark Mode**, **High Contrast**, **Large Text**, etc.
- Stores user preferences in local storage
- Provides immediate accessibility feedback
---
## π Technical Architecture
- **React Native** + **Expo**
- **Expo Router** for navigation
- **ThemeContext** for dynamic theming (light/dark, large text, high contrast)
- **Accessibility** integrated via `AccessibilityInfo`, `accessibilityRole`, `accessibilityLabel`, etc.
- **Context API** for global state (settings, theming)
- **TypeScript** for robust type definitions
---
## π§° Installation & Setup
1. **Clone the Repository**
```bash
git clone https://github.com/your-username/AccessibleHub.git
cd AccessibleHub/my-app
```
2. **Install Dependencies**
```bash
# npm
npm install
# or yarn
yarn install
```
3. **Configure Expo**
```bash
npm install -g expo-cli
npx expo login
```
4. **Start Development**
```bash
npx expo start
# or
yarn start
```
---
## π¨ Build Instructions
1. **Android Build**
```bash
npx expo build:android
# or using EAS
eas build --platform android
# or using Expo locally (note: you need WSL or a Linux terminal to build!)
eas build --platform android --profile preview --local
```
2. **iOS Build**
```bash
npx expo build:ios
# or using EAS
eas build --platform ios
```
3. **Local Builds (Advanced)**
- Requires **Android SDK**, **Xcode** (on macOS), or WSL on Windows
- Use `eas build --local` with properly configured environment
### Windows Local Build (Recommended for Advanced Users)
#### Prerequisites
- Windows 10/11
- Basic command line knowledge
- Existing Expo/React Native project
#### Detailed Step-by-Step Local Build Guide
###### 1. Install Windows Subsystem for Linux (WSL)
```bash
# Enable WSL
wsl --install
# Update WSL
wsl --update
```
###### 2. Set Up Development Environment in WSL Ubuntu
```bash
# Install essential tools
sudo apt update
sudo apt upgrade -y
sudo apt install -y curl git unzip
# Install Java Development Kit
sudo apt install -y openjdk-17-jdk-headless
# Install Node.js via NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc
nvm install --lts
npm install -g yarn
# Install Gradle
wget https://services.gradle.org/distributions/gradle-8.5-bin.zip -P /tmp
sudo mkdir -p /opt/gradle
sudo unzip -d /opt/gradle /tmp/gradle-8.5-bin.zip
```
###### 3. Configure Environment Variables
Add the following to `~/.bashrc`:
```bash
# Java Home
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
# Android SDK Configuration
export ANDROID_HOME=$HOME/android
export ANDROID_SDK_ROOT=${ANDROID_HOME}
export PATH=$PATH:/opt/gradle/gradle-8.5/bin:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin
# Source the updated profile
source ~/.bashrc
```
###### 4. Android SDK and Build Tools Setup
```bash
# Create Android SDK directory
mkdir -p $HOME/android
# Install Android SDK command-line tools
wget https://dl.google.com/android/commandlinetools/commandlinetools-linux-10406996_latest.zip -O /tmp/cmdline-tools.zip
unzip /tmp/cmdline-tools.zip -d $HOME/android/cmdline-tools
```
###### 5. Build Setup for Expo
```bash
# Install EAS CLI
npm install -g eas-cli
# Navigate to your project in WSL
cd /mnt/c/YourProjectPath
# Initialize EAS for your project
eas init
# Configure build
eas build:configure
```
###### 6. Build Your App
```bash
# Build Android App Bundle (.aab)
eas build --platform android --local
# Build APK for testing
eas build --platform android --profile preview --local
```
###### 7. Optional: Converting AAB to Universal APK
```bash
# Create a keystore (if not already created)
keytool -genkey -v -keystore my-release-key.keystore \
-alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
# Download Bundle Tool
wget https://github.com/google/bundletool/releases/download/1.15.6/bundletool-all-1.15.6.jar \
-O bundletool.jar
# Convert AAB to Universal APK
java -jar bundletool.jar build-apks \
--bundle=your-app.aab \
--output=my_app.apks \
--mode=universal \
--ks=my-release-key.keystore \
--ks-pass=pass:your_password \
--ks-key-alias=my-key-alias \
--key-pass=pass:your_password
# Extract Universal APK
unzip my_app.apks -d apk_output
```
---
## π§ͺ Testing & Accessibility
- **TalkBack** (Android) & **VoiceOver** (iOS)
- **Accessibility Scanner** (Android)
- **Manual checks**: ensuring correct roles, labels, states
- **Performance**: React DevTools, profiling, etc.
---
## π€ Contributing
1. **Fork** & create a feature branch
2. **Implement** changes with thorough accessibility considerations
3. **Open a Pull Request** describing your feature/fix
4. Ensure **WCAG compliance** and **relevant tests**
---
## π Additional Resources
- **W3C WCAG 2.2**
- **React Native Accessibility Docs**
- **Expo Documentation**
- **MDN Accessibility Guides**
---
## β License
Distributed under the **MIT License**. See `LICENSE` for more details.
---
**Empowering Developers, Enabling Accessibility.**
Your feedback and contributions are welcome!