The top three prescriptions — REST API consumption via HttpURLConnection on an Executor (83% of postings), hands-on JUnit4 + AndroidJUnit4 unit testing (75%), and modern NotificationCompat + FCM push notifications (67%) — together address the three skills that more than two-thirds of the analysed mobile postings demand and that the current curriculum only gestures at. Crucially, prescription #1 doubles as the Auditor's mandated replacement of the deprecated AsyncTask chapter, and prescription #3 doubles as the replacement of the dead 'Cloud to Device Messaging' bullet, so adopting them retires two flagged patterns at the same time as closing two market gaps.
These four prescriptions cover every gap surfaced by Market-fit (REST 83%, unit testing 75%, push 67%, store deployment 42%). They do NOT close the Kotlin (33%), Jetpack Compose (50%), MVVM (50%), CI/CD (50%), SwiftUI (58%), UIKit (58%), or React Native (42%) gaps — those sit outside the course's stated depth bound (Java + Android SDK fundamentals with a brief Swift intro), so they are intentionally omitted rather than padded in. A future Kotlin-first or architecture-patterns elective would be the right home for them; this course's honest ceiling is the four items above.
REST API consumption from Android: HttpURLConnection GET/POST + JSONObject parsing, executed on a java.util.concurrent.Executor with results posted back via Handler(Looper.getMainLooper())
Teach students to actually call a REST endpoint from Android — HttpURLConnection + JSONObject on an Executor with a main-thread Handler — replacing the deprecated AsyncTask walk-through that 10 of 12 postings have made obsolete.
rest apihttphttpurlconnectionjsonjsonobjectexecutorhandlerlooperbackground thread
Where it fits
Mobile Application Programming
· Replaces — not extends — the AsyncTask material in Lecture 11 'Threads in Android' (pages 33-52, flagged outdated by the Auditor). The lecture currently teaches AsyncTask as the way to do 'Network lookups' (L11 p12), but never actually issues an HTTP request. The fix is to swap the AsyncTask example for an Executors.newSingleThreadExecutor() + Handler(Looper.getMainLooper()) pattern that performs an HttpURLConnection GET/POST against a public REST endpoint and parses the response with org.json.JSONObject. The INTERNET permission slide (L10 p22) already supplies the manifest piece; this lecture supplies the missing client code.
Prerequisites
-
Java basics (try/catch, streams, classes)
· already covered in Mobile Application Programming (L2 p9, L1 p46)
-
INTERNET permission in AndroidManifest.xml
· already covered in Mobile Application Programming (L10 p22)
-
Concept that network I/O must not run on the UI thread
· already covered in Mobile Application Programming (L11 p12 'Network lookups' listed as blocking)
-
Handler / Looper / runOnUiThread for UI updates from a background thread
· already covered in Mobile Application Programming (L11 p59, p64)
-
java.util.concurrent.Executor for background work (modern replacement for AsyncTask)
not yet covered
Hands-on unit testing for Android: JUnit4 local tests in src/test/java plus a minimal AndroidJUnit4 instrumentation test in src/androidTest/java
Turn the one-bullet 'Test your application' diagram into an actual JUnit4 lab plus a one-screen AndroidJUnit4 instrumentation test — the testing skill 9 of 12 postings list as required.
unit testingjunitjunit4assertequalsandroidjunit4instrumentation testtest runner
Where it fits
Mobile Application Programming
· Extends Lecture 1 page 70 ('Test your application using the Android testing and instrumentation framework'), which today is a single bullet in the development-process diagram with no worked example. Promote this bullet to a short hands-on unit: write a JUnit4 test of a pure-Java helper used by an existing activity (e.g. a roll-number / marks validator from the StudentDB lab — once that lab is rewritten with parameterised SQL per the Auditor's fix), and a single @RunWith(AndroidJUnit4.class) instrumentation test that launches an activity and asserts a TextView's text. Stays at SDK-fundamentals depth — no Mockito, no Espresso flows, no CI.
Prerequisites
-
Java classes and methods
· already covered in Mobile Application Programming (L2 p9)
-
Gradle build configuration (build.gradle)
· already covered in Mobile Application Programming (L1 p71)
-
Activity lifecycle and findViewById
· already covered in Mobile Application Programming (L3 p38, L1 p75)
-
JUnit4 @Test / assertEquals API and src/test vs src/androidTest source set distinction
not yet covered
Modern Android notifications: NotificationCompat.Builder + NotificationChannel for local notifications, with a conceptual walk-through of receiving a Firebase Cloud Messaging (FCM) remote push in a service
Replace the dead 'Cloud to Device Messaging' bullet with a working NotificationCompat.Builder + FCM walk-through — covering the push-notification skill 8 of 12 postings demand.
push notificationsnotificationcompatnotificationmanagernotificationchannelfirebase cloud messagingfcmfirebasemessagingservice
Where it fits
Mobile Application Programming
· Extends Lecture 2 page 22 (Notification Manager) with a concrete NotificationCompat.Builder + NotificationChannel (mandatory since API 26) example that calls NotificationManager.notify(). Simultaneously *replaces* the 'Cloud to Device Messaging' bullet on Lecture 1 page 50 — flagged dead by the Auditor (C2DM was shut down in 2015) — with a brief Firebase Cloud Messaging conceptual segment showing a FirebaseMessagingService.onMessageReceived() handler that builds the same NotificationCompat notification. Per the depth bound this stays at SDK-level construction; no full Firebase backend setup or token-management deep dive.
Prerequisites
-
AndroidManifest.xml service/receiver registration
· already covered in Mobile Application Programming (L3 p14)
-
PendingIntent / Intent to launch an activity from a notification tap
· already covered in Mobile Application Programming (L8 p10)
-
BroadcastReceiver / Service onReceive style callback (used as analogy for FirebaseMessagingService)
· already covered in Mobile Application Programming (L9 p6, p14)
-
NotificationChannel API (required since Android 8.0, API 26)
not yet covered
-
Firebase project setup + google-services.json (introductory)
not yet covered
App store deployment workflow: generate an upload-keystore-signed Android App Bundle (AAB) in Android Studio and upload to the Google Play Console (with the Xcode Archive → App Store Connect equivalent for the iOS intro)
Take the 'Release your application' bullet on the dev-process slide all the way to a signed AAB on the Play Console — the deployment skill 5 of 12 postings ask for.
app store deploymentgoogle play consolesigned apkaabandroid app bundlekeystorerelease buildxcode archiveapp store connect
Where it fits
Mobile Application Programming
· Extends the release-step slide on Lecture 1 page 70 ('Prepare your application for release — Configure, build, and test your application in release mode' / 'Release your application — Publicize, sell, and distribute your application') and the App Store / Google Play distribution mention on L1 p23. The course currently stops at the concept; this prescription adds a concrete walk-through: Build → Generate Signed Bundle/APK in Android Studio, generation of an upload keystore, an AAB upload to a Google Play Console internal-testing track, plus a parallel Product → Archive → Distribute App flow for the Lecture 12 Xcode/Swift intro. Stays at hands-on SDK depth — no Fastlane, no CI/CD pipeline per the depth bound.
Prerequisites
-
Android Studio IDE (build menu, project structure)
· already covered in Mobile Application Programming (L1 p66)
-
Gradle build.gradle (versionCode / versionName / signingConfigs)
· already covered in Mobile Application Programming (L1 p71)
-
AndroidManifest.xml application metadata
· already covered in Mobile Application Programming (L3 p14)
-
Xcode installation
· already covered in Mobile Application Programming (L12 p3)
-
Google Play Console account setup + Play App Signing concept
not yet covered
-
App Store Connect account setup + provisioning profile concept
not yet covered