Unimage Photo Viewer

Category: Android App, Internship Project

Github repos: akmalrusli363/Unimage-Photo-Viewer

App logo

Unimage Photo Viewer is a personal project which provides photos from Unsplash using Unsplash API (The documentation). The Unsplash API itself have many common API endpoints such as:

  • Search image
  • Show user profile
  • List user photos
  • Get a photo
  • Get a photo’s statistics
  • Get random photos
  • Search for user
  • Search for collections
  • and many more…

To be noted, the Unsplash API uses OAuth 2.0 Authentication (Bearer) where the user can obtain the OAuth’s access token by taking the app’s Access Key, Secret Key, and Redirect URI from Unsplash Developer App’s page. You also need to be registered on Unsplash to create your application first before proceeding OAuth access authentication on your HTTP Client.

Features

This application has 3 activities: photo search, photo detail, and user’s profile. Each activities has it’s own ViewModel and access to libraries using Dagger’s dependency injection.

For main Unsplash API URL, the link of https://api.unsplash.com is the main API’s URL that refers to each endpoint. Please refer to the documentation for detailed documentation.

Photo Search (MainActivity)

API URL Endpoint: https://api.unsplash.com/search/photos

API Parameters:

  • query: Query to search
  • page: Page number to display
  • per_page: Number of items to display for a page

This activity consists of a SearchView and a RecyclerView which displays photo grid using StaggeredGridLayoutManager which display photos according to their dimension and orientation. Basically, each photo represents photo’s URL (thumbnail) which loaded using Picasso through Picasso.get().load(imageUrl).into(imageView).

When the app launches, the activity shows only search bar and a blank view where it displays search photo result based on your search query.

Photo Detail (PhotoDetailActivity)

API URL Endpoint: https://api.unsplash.com/photos/{photoId}

API Parameters:

  • {photoId} : The photo ID

This activity consists of a photo picture, like count, view in browser button, full view, user profile, and descriptions in general.

While user access the profile of the photo owner, they’ll redirected to Profile Activity which displays user’s bio data and photo collections. Also, the user can download the photo through download icon which redirects user to show full size of photo, or view more information or related images through “view in web” button.

Because this activity only provides basic information of the photo, user need to be access on browser using “view in web” button to choose photo size to download, like, share, or view EXIF information of that photo.

EXIF

The feature was added in new version of Unimage App which displays EXIF information (eg. camera brand/model, focal length, exposure time, aperture, ISO) for the photo. This field is hidden if no fields were present for that photo.

Profile (ProfileActivity)

API URL Endpoint: https://api.unsplash.com/users/{userName}

API Parameters:

  • {userName} : Username to search

The profile activity consists of user bio data consists of username, full name, and user statistics. Also, this activity provides user photos through secondary link /photos which provides set of images through RecyclerView photo grid using StaggeredGridLayoutManager (display photo grid according to their dimension and orientation).

Same as photo search activity, user can access their photo which redirects to photo detail. Even with same user, the activity shown through user photo are redirects back to user profile if the owner of the photo are equal to previous photos.

Scenario: Offline

For additional information how the offline image caching works, see repository’s README.md for more details.

While offline, if user have already searched for photos using a query, the photos will stored into database though Room which stored on 3 different tables:

Unimage Entity Relationship Diagram

Not all images are shown because the image fetched separately by image loader, Picasso, which has it’s own caching system to store cached image and fetched the cached images while offline as possible.

Libraries

Essentials

  • Kotlin & AndroidX Core
  • AppCompat (androidx.appcompat:appcompat)
  • Google Material Design (com.google.android.material:material)

AndroidX

  • AndroidX Preferences (androidx.preference:preference-ktx)
  • AndroidX Multidex (androidx.multidex:multidex)
  • AndroidX Room (androidx.room)
    • Room Runtime
    • Room RxJava2 Adapter

Testing Libraries

  • AndroidX Test (androidx.test)
  • Android Architecture Test (androidx.arch.core:core-testing)
  • Android Fragment Test (androidx.fragment:fragment-testing)
  • Espresso (androidx.test.espresso)
    • espresso-core
    • espresso-contrib
    • espresso-intents
  • Mockito (org.mockito)
    • Mockito Core
    • Mockito Kotlin
    • Mockito Android

External Libraries

  • Retrofit (com.squareup.retrofit2):
    • Retrofit
    • GSON Converter
    • Adapter RxJava2
  • RxJava (io.reactivex.rxjava2):
    • RxJava
    • RxAndroid
  • Picasso (com.squareup.picasso:picasso)
  • Dagger (com.google.dagger):
    • Dagger Android
    • Dagger Android Processor (Annotator)
    • Dagger Compiler (Annotator)

BNCC x Go-Academy: Siaga Corona App

Category: Educational/Team Project, Mobile App

Personal Github repos: akmalrusli363/BNCC-Academy-Kotlin-Demo | Team Project’s Github repos: SteveWKurnia/BNCCAcademy—CoronaApp

Siaga Corona is a BNCC x Go-Academy (Gojek Academy) collaborative application where through this project, the BNCC boards and praetorians were encouraged to create an Android App for COVID-19 Mitigation in Indonesia using Kotlin programming language which was a popular programming language for mobile and server-side developments and used by lot of IT Ventures and startups (including Square, Pinterest, Google, Gojek, DANA, and many more).

Not only developing Android app based on Kotlin, the BNCC Academy members are also taught to design a good user interface, obtained COVID-19 case statistics through API REST call, and apply App Architecture as a foundation for developing quality software.

This app serves COVID-19 statistical data overview, regional cases overview, and Hotline for emergency phone number services while you’re experiencing some minor or major COVID-19 symptoms (e.g. fever, dry cough, tiredness, heavy breathes, etc.)

Dalam project Siaga Corona App, saya terlibat dalam pengerjaan final project dengan masing-masing anggotanya:

  • Stephen William
  • Annetta Carolina
  • Diaz
  • Akmal
  • Juan Sebastian

For further information about the team’s project, visit our team project’s Github repos (Team 2) below:

SteveWKurnia/BNCCAcademy---CoronaApp

A repository for an app made during BNCC x GoJek academy, which shows data about Coronavirus statistics in Indonesia - SteveWKurnia/BNCCAcademy---CoronaApp

Or while you need to sneak peek with my experiments project for COVID-19 mitigation app, visit my personal app project’s Github repos below:

akmalrusli363/BNCC-Academy-Kotlin-Demo

A repository for an app made during BNCC x Gojek Academy demonstrated using Kotlin, which shows data about COVID19 statistics in Indonesia - akmalrusli363/BNCC-Academy-Kotlin-Demo

Code Reengineering (Forked from mrp130/smell)

Category: Refactoring

Github repos: akmalrusli363/smell | wiki | Github Pages

Info

Repository tersebut pada aslinya dibuatkan oleh dosen Code Reengineering, Michael Reynaldo Phangtriastu untuk keperluan materi online class COMP6106 - Code Reengineering, kelas LE01 semester genap tahun 2019-2020.

Repository ini kemudian ditambahkan dengan wiki dan github-pages oleh saya sendiri untuk memperlengkap materi baik secara literal maupun naratif terhadap materi mata kuliah COMP6106 - Code Reengineering dengan tambahan teks narasi, ilustrasi, dan referensi terhadap sumber luar.

Repository ini terdiri atas banyak jenis-jenis smell yang dibahas secara literatur oleh Martin Fowler dan Girish Suryanaryana dkk.

Jika anda ingin melihat sekilas dan lebih detail mengenai materi Code Reengineering yang dibuatkan oleh dosen Michael Reynaldo Phangtriastu (mrp130), dapat mengunjungi link repository asli Code Reengineering - mrp130.

mrp130/smell

Contribute to mrp130/smell development by creating an account on GitHub.

Atau bila anda ingin melihat informasi yang lebih afirmatif, menarik, dan lebih lengkap silahkan kunjungi GitHub wiki saya dan GitHub Pages Code Reengineering di bawah:

akmalrusli363/smell

Repository berisikan berbagai smell dan teknik-teknik refactoring dalam menyelesaikan kasus tersebut (Code Reengineering) - akmalrusli363/smell

CATATAN

Code pada materi ini masih menggunakan bahasa pemrograman Java!

Bagi anda yang ingin menyumbangkan code dalam bahasa pemrograman favorit kalian (C++, C#, Python, Ruby, Go, PHP, dan lain-lain):

  1. Silahkan fork repository ini
  2. Kreasikan dengan versi code kalian (dalam bahasa pemrograman favorit kalian)
  3. Manfaatkan/gunakan issue dan pull request pada repository di atas.

Referensi

  • Fowler, Martin. Refactoring: improving the design of existing code. Addison-Wesley Professional, 2018.
  • Suryanarayana, Girish, Ganesh Samarthyam, and Tushar Sharma. Refactoring for software design smells: managing technical debt. Morgan Kaufmann, 2014.
  • Sourcemaking (kompilasi dari refactoring.guru & sumber tambahan)
  • refactoring.guru (sumber asli dari sourcemaking)

BNCC Training: Java Ebanking App

Category: Educational Project, Java

Github repos: akmalrusli363/ebankingku-java

ebankingku-java merupakan sebuah Java demo project untuk mendemonstrasikan cara menghubungkan Java GUI project ke MySQL melalui JDBC connection.

Project ini dibuat saat mengikuti BNCC Praetorian Training sebagai project demonstrasi cara menghubungkan Java GUI ke MySQL dengan MySQL JDBC Connector.

Requirement / Hal-hal yang diperlukan

  • JDK 8 or newer - Diperlukan dalam menjalankan project
  • MySQL - Untuk database server (manually atau via XAMPP)
  • MySQL JDBC Connector - Connector dari MySQL ke Java Project

Untuk melakukan demonstrasi pada project ini, anda memerlukan MySQL dan MySQL JDBC Connector versi terbaru dimana anda dapat download Java Connector melalui (https://dev.mysql.com/downloads/connector/j/).

Untuk MySQL Database, anda dapat menggunakan XAMPP versi apa saja atau install MySQL secara manual melalui (https://dev.mysql.com/downloads/)


JSON Currency

Github repos: akmalrusli363/JSON-Currency

json-currency is a JSON Currency command line to obtain currency exchange table and rates from JSON currency exchange site.

NOTICE: json-currency is under work-in-progress project, so you can contribute for extra things or corrections related for the project repository.


Go to the Home Page