- Table Of Content
- Introduction
- Architecture
- Folders
- Video
- Features
- Post Script
- Timeline
- Tools
- Our Team
- Made with 💘 and JAVA
Đây là đồ án cuối kì của môn Phát Triển Ứng Dụng Di Động do thầy Trường Bá Thái giảng dạy. Đồng thời là ứng dụng cho thiết bị di động, phục vụ môn học Phát Triển Phần Mềm Hướng Dịch Vụ do thầy Huỳnh Trung Trụ giảng dạy.
Ngoài ra, đây là đồ án cuối cùng mà chúng mình làm với vai trò là sinh viên theo học tại Học viện Công nghệ Bưu Chính viễn thông này.
Đồ án này được phát triển theo mô hình nổi tiếng là Model - View - View Model
.
Có rất nhiều folder trong dự án này, chúng như hình ảnh dưới dây
Mỗi thư mục sẽ đảm nhiệm một vai trò khác nhau! Để dễ theo dõi, tài liệu này sẽ giải thích theo các tập hợp Folder có liên quan tới nhau thay vì giải thích theo trình tự từ trên xuống
Dự án này sử dụng thư viện Retrofit 2 để khởi tạo kết nối tới API. Trong thư mục này có 2 tệp tin chính
-
HTTP Request là một interface định nghĩa các yêu cầu gửi tới Server
-
HTTP Service là một class để khởi tạo kết nối tới API
- Thư mục Adapter là nơi chứa các class được sử dụng để in nội dung ra màn hình ứng dụng thông qua
ListView
. Thư mục này hiện có 4 class có mục đích giống nhau là liệt kê các đối tượng danh sách. Chúng có thể phục vụ cho các Spinner hoặc cho các Activity khác.
Thư mục Fragment, như tên gọi là nơi chứa các Fragment - là màn hình con của HomeActivity. Mỗi Fragment này thể hiện 1 màn hình chức năng chủ chốt của ứng dụng. Tuy nhiên, mỗi Fragment này sẽ có các Activity khác đi kèm theo tên của chúng được đặt trong thư mục Activities
Giả sử, trong thư mục này có Card Fragment( đại diện cho chức năng tạo thẻ ATM ) thì sẽ có thư mục Card chức các Activity liên quan. Điều này tương tự nếu thư mục có Setting Fragment thì cũng sẽ có thư mục Setting chứa các Activity tương ứng.
Thư mục View Model chứa các view model theo chuẩn mô hình Model-View-ViewModel
như đã đề cập bên trên
Thư mục Model cũng chứa các view model theo chuẩn mô hình Model-View-ViewModel
như đã đề cập bên trên
Mỗi đối tượng trong thư mục Model sẽ mô tả một bảng trong cơ sở dữ liệu của API.
Ngoài ra, có 2 class đặc biệt là GlobalVariable và Summary.
-
GlobalVariable là class sẽ được sử dụng để khai báo biến toàn cục trong dự án này. Ví dụ khi đăng nhập chúng ta sẽ cần lưu lại
Access Token
để định danh cho HEADER khi muốn gửi một HTTP Request -
Summary là class ngoại lệ bắt buộc phải được tạo bởi trong JSON trả về có sự hiện diện của một đối tượng tên summary có thuộc tính total_account
Thư mục Container Model là nơi sẽ định nghĩa một class đặc biệt để mapping với dữ liệu JSON trả về như dưới đây:
{
"result": 1,
"draw": 1,
"summary": {
"total_count": 5
},
"search": "",
"data": [
{
"amount": 14000,
"description": "France medium tank",
"name": "AMX CDC Liberty",
"reference": "France",
"transactiondate": "2022-05-02",
"id": 47,
"type": 1,
"account": {
"id": 1,
"name": "BIDV",
"balance": 20000,
"accountnumber": "3123123",
"description": "Tài khoản ngân hàng BIDV"
},
"category": {
"id": 1,
"name": "Panzerkampfwagen",
"type": 1,
"color": "#C5FF3F",
"description": "Phương tiện chiến đấu bọc thép"
}
}
}
Như ví dụ trên đây, trường dữ liệu data có bản chất là một mảng. Với một phần từ bao gồm các trường giá trị phức hợp. Do đó chúng ta sẽ cần một class đặc biệt để mapping đúng trường giá trị được trả về như ví dự dưới đây:
public class TransactionDetail {
@SerializedName("amount")
@Expose
private Integer amount;
@SerializedName("description")
@Expose
private String description;
@SerializedName("name")
@Expose
private String name;
@SerializedName("reference")
@Expose
private String reference;
@SerializedName("transactiondate")
@Expose
private String transactiondate;
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("type")
@Expose
private Integer type;
@SerializedName("account")
@Expose
private Account account;
@SerializedName("category")
@Expose
private Category category;
Thư mục Containter về bản chất cũng là một thư mục chức các class để mapping dữ liệu trả về giống Containter Model. Điểm khác biệt lớn nhất nằm ở chỗ, các class trong Containter sẽ là kiểu dữ liệu trả về trong các HTTP Request
Như tiêu đề, đây là thư mục chưa khai báo của các Adapter dùng cho việc in các dữ liệu dạng danh sách ra màn hình. Về bản chất, Recycle View Adapter hoạt động tương tự như ListView nhưng có hiệu suất và tiết kiệm bộ nhớ hơn khi so với ListView😎😎
Thư mục Helper chứa các hàm dùng cho việc thay đổi cách mà dữ liệu hiển thị. Ví dụ, chúng ta muốn viết con số 123456 thành dạng 123.456 thì hàm thực thi công việc này sẽ nằm trong thư mục Helper này.
Ngoài ra, thư mục Helper cũng chứa các class để hiển thị ra các Alert, thông báo trên thanh quick-setting của thiết bị, modal bottot sheet, ....v.v
Thư mục Activities là nơi chứa toàn bộ các activity liên quan tới các Fragment đã nêu ở trên. Mọi activity sẽ đảm nhiệm một chức năng hiển thị nội dung cho người dùng. Tất cả các activities ở đây đều có gắn bó chặt chẽ tới 5 fragment chính của đồ án.
Đây là activity quan trọng, đóng vai trò là màn hình chính của ứng dụng. Từ home activity ta có thể truy cập tới bất kì chức năng khác nếu muốn. Activity này là nơi quản lý và sử dụng các Fragment
Đây là nơi hiển thị các màn hình giới thiệu nếu đây là lần đầu tiên người dùng mở ứng dụng lên
Bản chất là màn hình đăng nhập. Nếu người dùng lần đầu mở ứng dụng thì sẽ đi qua Introduce Activity trước rồi mới tới màn hình Đăng nhập. Ngược lại, nếu đã đăng nhập tài khoản thì khi mở ứng dụng sẽ vào ngay màn hình Home Activity.
Quản lý các nguồn thu nhập/hoạt động chi tiêu và tạo sao kê với nhiều tùy chọn khác nhau
Bản thân Phong cũng là một tín đồ của chế độ ban đêm nên dĩ nhiên đồ án cũng không thể thiếu được chức năng vô cùng quan trọng và thiết thực này.
-
Dựng cấu trúc thư mục dự án theo chuẩn MVVM
-
Thiết lập kết nối tới RESTful API qua thư viện Retrofit 2
-
Dựng màn hình chính
-
Tạo thanh điều hướng bằng BottomAppBar kết hợp BottomNavigationView
-
Thêm màn hình tạo thẻ ATM
-
Kéo từ phải qua trái sẽ xóa thẻ ATM
-
Hiển thị thông báo mỗi khi đăng nhập ở thanh quick view của thiết bị di động
-
Cử chỉ vuốt trái | phải để xóa trong danh sách
-
Chế độ ban đêm
-
Tạo mới bằng nút tắt thông minh
-
Thêm menu tùy chọn đến các chức năng
-
Sử dụng Modal Bottom Sheet thay các Activity lựa chọn
-
Tối ưu hóa trải nghiệm người dùng
-
Tinh chỉnh lại cách các Live Data được làm mới
-
Chức năng tạo kê
-
Hỗ trợ đăng nhập bằng Google & Facebook
-
Sử dụng Extending Floating Button để tạo menu dạng bong bóng
Đồ án được xây dựng trên Android Studio Bumble | 2021.1.1 Patch 3 hoặc mới hơn.
Emulator - máy ảo giả lập thiết bị tối thiếu Pixel 2 API 24 hoặc mới hơn.
![]() Nguyễn Thành Phong |
![]() Nguyễn Đăng Hậu |
![]() Lương Đình Khang |
![]() Hoàng Đức Thuận |
![]() Nguyễn Văn Chung |