1. Trang chủ
  2. » Công Nghệ Thông Tin

Báo cáo đồ án ứng dụng note bằng android

44 2.7K 26

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • MỤC LỤC

  • PHẦN MỞ ĐẦU

    • 1.1. Lý do chọn đề tài

    • 1.2. Mục đích nghiên cứu.

    • 1.3. Đối tượng nghiên cứu

    • 1.4. Ý nghĩa lý luận và thực tiễn của đề tài

  • CHƯƠNG 1: CƠ SỞ LÝ THUYẾT

    • 1.1. Giới thiệu hệ điều hành Android

      • 1.1.1. Lịch sử Android

      • 1.1.2. Kiến trúc của Android

        • 1.1.2.1. Tầng ứng dụng

        • 1.1.2.2. Application framework

        • 1.1.2.3. Library

        • 1.1.2.4. Android Runtime

        • 1.1.2.5. Linux kernel

      • 1.1.3. Các thành phần cơ bản của một ứng dụng Android

        • 1.1.3.1. Activity

        • 1.1.3.2. BroadcastReceiver

        • 1.1.3.3. Service

        • 1.3.1.4. Content Providers

    • 1.2. Hệ quản trị cơ sở dữ liệu : SQLite

      • 1.2.1. Giới thiệu SQLite Database

      • 1.2.3. Các ưu điểm của SQLite

      • 1.2.4. Giới thiệu SQLiteOpenHelper

      • 1.2.5. Các thao tác với SQLite trong Android

      • 1.2.6. Các thao tác cơ bản trên cơ sở dữ liệu

    • 1.3. Máy ảo Genymotion

  • CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG

    • 2.1. Đặc tả bài toán

    • 2.2. Xác định yêu cầu hệ thống

      • 2.2.1. Cơ sở dữ liệu

      • 2.2.1. Sơ đồ Use case

      • 2.2.2. Biểu đồ lớp

      • 2.2.3. Biểu đồ tuần tự

      • 2.2.4. Biểu đồ trạng thái

      • 2.2.5.Biểu đồ hoạt động

      • 2.2.6. Yêu cầu chức năng

    • 2.3. Các lớp trong chương trình

      • 2.3.1 MainActivity

      • 2.3.2 EventCalendar

      • 2.3.3 Date

      • 2.3.4 Today

  • CHƯƠNG 3: DEMO ỨNG DỤNG

    • 3.1. Màn hình chính

    • 3.2. Thêm ghi chú mới

    • 3.3. Sửa ghi chú

    • 3.4. Danh sách ghi chú

  • KẾT LUẬN

    • 1. Kết quả đạt được

    • 2. Một số hạn chế của đề tài

    • 3. Hướng phát triển

  • TÀI LIỆU THAM KHẢO

Nội dung

Khi mà thời đại công nghệ phát triển để bắt kịp thời đại ở Việt Nam hiện nay Công nghệ Thông tin cũng đã được nghiên cứu và ứng dụng rộng rãi trong nhiều lĩnh vực, đặc biệt là trong lĩnh vực phần mềm hay lập trình ứng dụng, tin học đã trở thành một công cụ không thể thiếu. Gần đây điện thoại thông minh đã trở thành một vật hầu như “cần phải có” trong cuộc sống hằng ngày của mọi người. Viết phần mềm tiện ích nâng cao giá trị sử dụng cho chúng cũng trở nên một trào lưu cho các công ty phát triển phần mềm, các giới lập trình viên chuyên nghiệp cũng như không chuyên. Đặc biệt là những ứng dụng cho máy chạy trên hệ điều hành Android. Sau quá trình tìm hiểu hệ điều hành Android thì em nhận thấy trên Android có thể phát triển một chương trình giúp người dùng lập kế hoạch và quản lí nó một cách có hiệu quả và chất lượng. Xuất phát từ nhận định này em sẽ xây dựng ứng dụng Note. Hy vọng đem tới một ứng dụng thuận tiện, hữu ích cho mục đích quản lí kế hoạch, lịch trình, thời gian biểu cũng như sắp xếp công việc hàng ngày. Trong quá trình hoàn thành đề tài em đã nhận được nhiều sự giúp đỡ, đặc biệt là sự hướng dẫn của cô giáo Võ Thị Kim Hoa, em xin gửi lời cảm ơn chân thành nhất đến cô. Ngoài ra em gửi lời cảm ơn đến các thầy cô giáo trong khoa đã nhiệt tình giúp đỡ em trong thời gian qua.

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT VINH KHOA CÔNG NGHỆ THƠNG TIN BỘ MƠN KHOA HỌC MÁY TÍNH ĐỒ ÁN MÔN HỌC PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG Tên đề tài : XÂY DỰNG ỨNG DỤNG NOTE BẰNG ANDROID Giáo viên hướng dẫn: Võ Thị Kim Hoa Sinh viên thực : Phan Thị Linh Lớp: ĐHCTTCK09Z Nghệ An – 2017 TRƯỜNG ĐẠI HỌC SPKT VINH VIỆT NAM KHOA CƠNG NGHỆ THƠNG TIN BỘ MƠN: KHOA HỌC MÁY TÍNH TT Họ tên Phan Thị Linh CỘNG HÒA XÃ HỘI CHỦ NGHĨA Độc lập – Tự – Hạnh phúc MSSV Điện thoại Email 0905140786 0964456330 phanlinh25660@gmail.com PHIẾU GIAO ĐỒ ÁN MÔN HỌC MÔN HỌC: ỨNG DỤNG DI ĐỘNG ANDROID Sinh viên/ nhóm sinh viên: Lớp: DHCTTCKZ09 (Đại học CNTT Khóa 9) Ngày giao đề tài: 25/09/2017 Ngày hoàn thành: / /2017 1.1 Tên đề tài: Xây dựng ứng dụng Note Android Yêu cầu: Xây dựng ứng dụng di động Android 1.2 Nhiệm vụ đồ án:  Yêu cầu 1: Ngôn ngữ sử dụng:JAVA, máy ảo genimotion, phần mềm Android Studio, csdl firefox sqlite  Yêu cầu 2: Phân tích yêu cầu xây dựng ứng dựng bao gồm: o Ứng dụng cho phép nhập, xem, sửa xóa ghi o Tìm kiếm ghi theo tiêu đề nội dung ngày tháng  Yêu cầu 3: Giao diện người dùng mỹ thuật: o Giao diện dễ sử dụng, có tính khoa học, thân thiện với người dùng o Phối màu sắc, font chữ phù hợp o Có tính đến ứng dung rộng rãi Báo cáo chương trình: - Báo cáo, thuyết minh: file word, file trình chiếu (PowerPoint) - Mã nguồn: ghi vào đĩa CD Theo dõi trình thực đồ án Ngày kiểm tra Tiến độ công việc (yêu cầu ghi rõ nội dung hoàn thành) Nhận xét GVHD Chữ ký GVHD ./ /201 / /201 / /201 / /201 Điểm hướng dẫn (điểm chữ số) ………………………………………………………………… Đồng ý cho bảo vệ hay không đồng ý: TRƯỞNG BỘ MÔN GIÁO VIÊN HƯỚNG DẪN Võ Thị Kim Hoa SINH VIÊN THỰC HIỆN Phan Thị Linh Nhận xét giáo viên hướng dẫn Nghệ An, Ngày Tháng Năm 2017 Giáo Viên hướng dẫn (Ký ghi rõ họ tên) Nhận xét giáo viên chấm Nghệ An, Ngày Tháng Giáo Viên chấm (Ký ghi rõ họ tên) MỤC LỤC Năm 2017 PHẦN MỞ ĐẦU 1.1 Lý chọn đề tài Khi mà thời đại công nghệ phát triển để bắt kịp thời đại Việt Nam Công nghệ Thông tin nghiên cứu ứng dụng rộng rãi nhiều lĩnh vực, đặc biệt lĩnh vực phần mềm hay lập trình ứng dụng, tin học trở thành công cụ thiếu Gần điện thoại thông minh trở thành vật “cần phải có” sống ngày người Viết phần mềm tiện ích nâng cao giá trị sử dụng cho chúng trở nên trào lưu cho công ty phát triển phần mềm, giới lập trình viên chuyên nghiệp không chuyên Đặc biệt ứng dụng cho máy chạy hệ điều hành Android Sau trình tìm hiểu hệ điều hành Android em nhận thấy Android phát triển chương trình giúp người dùng lập kế hoạch quản lí cách có hiệu chất lượng Xuất phát từ nhận định em xây dựng ứng dụng Note Hy vọng đem tới ứng dụng thuận tiện, hữu ích cho mục đích quản lí kế hoạch, lịch trình, thời gian biểu xếp cơng việc hàng ngày Trong q trình hồn thành đề tài em nhận nhiều giúp đỡ, đặc biệt hướng dẫn cô giáo Võ Thị Kim Hoa, em xin gửi lời cảm ơn chân thành đến Ngồi em gửi lời cảm ơn đến thầy giáo khoa nhiệt tình giúp đỡ em thời gian qua 1.2 Mục đích nghiên cứu - Nghiên cứu kiến trúc Android Nghiên cứu thành phần Android Nghiên cứu cách phát triển ứng dụng Android Xây dựng ứng dụng Note tảng Android 1.3 Đối tượng nghiên cứu Với đề tài em tập trung vào nội dung : - Cách cài đặt chương trình để chạy Android Tìm hiểu Activity Android Tìm hiểu Service Android Cách tạo giao diện Android Cách lưu trữ liệu Android Xây dựng ứng dụng Note Android 1.4 Ý nghĩa lý luận thực tiễn đề tài Ý nghĩa lí luận: Đề tài tài liệu tham khảo hữu ích cho muốn tìm hiểu Android Bên cạnh chưa có nhiều tài liệu tham khảo Android tiếng Việt, em muốn nghiên cứu muốn đóng góp hiểu biết để làm giàu thêm tài liệu tham khảo cho chủ đề Ý nghĩa thực tiễn: Hiện hệ điều hành Android sử dụng rộng rãi thiết bị di động Nhu cầu thư giãn, giải trí, quản lí cơng việc kế hoạch người dùng điện thoại cao Chính ứng dụng Note chương trình giúp người dùng quản lí lịch trình, lên kế hoạch cho thân cách có hiệu quả, thuận tiện chất lượng CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Giới thiệu hệ điều hành Android 1.1.1 Lịch sử Android Ban đầu Android hệ điều hành cho thiết bị cầm tay dựa lõi Linux công ty Android Inc (California, Mỹ) thiết kế Công ty sau Google mua lại vào năm 2005 bắt đầu xây dựng Android Platform Các thành viên chủ chốt Android Inc gồm có: Andy Rubin, Rich Miner, Nick Sears, and Chris White Hình 1-1 Androidtimeline Và sau tiếp vào cuối năm 2007 thuộc Liên minh Thiết bị Cầm tay Mã Nguồn mở (Open Handset Alliance) gồm thành viên bật ngành viễn thông thiết bị cầm tay như: Texas Instruments, Broadcom Corporation, Google, HTC, Intel, LG, Marvell Technology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, Sprint Nextel, T-Mobile, ARM Holdings, Atheros Communications, Asustek Computer Inc, Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, and Vodafone Group,… Mục tiêu Liên minh nhanh chóng đổi để đáp ứng tốt cho nhu cầu người tiêu dùng kết tảng Android Android thiết kế để phục vụ nhu cầu nhà sản xuất thiết, nhà khai thác lập trình viên thiết bị cầm tay Phiên SDK lần phát hành vào tháng 11 năm 2007, hãng T-Mobile công bố điện thoại Android T-Mobile G1- smartphone dựa tảng Android Một vài ngày sau Google lại tiếp tục công bố mắt phiên Android SDK release Candidate 1.0 Trong tháng 10 năm 2008, Google cấp giấy phép mã nguồn mở cho Android Platform Khi Android phát hành số mục tiêu kiến trúc cho phép ứng dụng tương tác với sử dụng lại thành phần từ ứng dụng khác Việc tái sử dụng không áp dụng cho dịch vụ mà áp dụng cho thành phần liệu giao diện người dùng Vào cuối năm 2008 Google cho phát hành thiết bị cầm tay gọi Android Dev Phone chạy ứng dụng Android mà không bị ràng buộc vào nhà cung cấp mạng điện thoại di động Mục tiêu thiết bị cho phép nhà phát triển thực thí nghiệm thiết bị thực chạy hệ điều hành Android mà ký hợp đồng Vào khoảng thời gian Google cho phát hành phiên vá lỗi 1.1 hệ điều hành Ở hai phiên 1.0 1.1 Android chưa hỗ trợ soft-keyboard mà đòi hỏi thiết bị phải sử dụng bàn phím vật lý Android cố định vấn đề cách phát hành SDK 1.5 vào tháng tư năm 2009 với số tính khác Chẳng hạn nâng cao khả ghi âm truyền thông, vật dụng live folder 1.1.2 Kiến trúc Android Mơ hình sau thể cách tổng quát thành phần hệ điều hành Android Mỗi phần đặc tả cách chi tiết Hình 1-2 Cấu trúc stack hệ thống Android 1.1.2.1 Tầng ứng dụng Android tích hợp sẵn số ứng dụng cần thiết như: contacts, browser, camera, Phone,… Tất ứng dụng chạy hệ điều hành Android viết Java 1.1.2.2 Application framework Bằng cách cung cấp tảng phát triển mở, Android cung cấp cho nhà phát triển khả xây dựng ứng dụng phong phú sáng tạo Nhà phát triển tự tận dụng thiết bị phần cứng, thông tin địa điểm truy cập, dịch vụ chạy nền, thiết lập hệ thống báo động, thêm thông báo để trạng thái, nhiều, nhiều Nhà phát triển truy cập vào API khuôn khổ sử dụng ứng dụng lõi Các kiến trúc ứng dụng thiết kế để đơn giản hóa việc sử dụng lại thành phần; ứng dụng xuất khả ứng dụng khác sau sử dụng khả (có thể hạn chế bảo mật thực thi khuôn khổ) Cơ chế cho phép thành phần tương tự thay người sử dụng Cơ tất ứng dụng dịch vụ hệ thống, bao gồm: - Một tập hợp nhiều View có khả kế thừa lẫn dùng để thiết kế phần giao diện ứng dụng như: gridview, tableview, linearlayout,… - - Một “Content Provider” cho phép ứng dụng truy xuất liệu từ ứng dụng khác (chẳng hạn Contacts) chia sẻ liệu ứng dụng Một “Resource Manager” cung cấp truy xuất tới tài nguyên mã nguồn, chẳng hạn như: localized strings, graphics, and layout files Một “Notifycation Manager” cho phép tất ứng dụng hiển thị custom alerts status bar Activity Maanager dùng để quản lý chu trình sống ứng dụng điều hướng activity 1.1.2.3 Library Android bao gồm tập hợp thư viên C/C++ sử dụng nhiều thành phần khác hệ thống Android Điều thể thông qua tảng ứng dụng Android Một số thư viện liệt kê đây: - - - System C library: a BSD-derived implementation of the standard C system library (libc), tuned for embedded Linux-based devices Media Libraries - based on PacketVideo's OpenCORE; the libraries support playback and recording of many popular audio and video formats, as well as static image files, including MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị LibWebCore - a modern web browser engine which powers both the Android browser and an embeddable web view SGL - the underlying 2D graphics engine 3D libraries - an implementation based on OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration (where available) or the included, highly optimized 3D software rasterizer FreeType - bitmap and vector font rendering SQLite - a powerful and lightweight relational database engine available to all applications 1.1.2.4 Android Runtime Android bao gồm tập hợp thư viện mà cung cấp hầu hết chức có sẵn thư viện lõi ngơn ngữ lập trình Java Tất ứng dụng Android chạy tiến trình riêng Máy ảo Dalvik viết thiết bị chạy nhiều máy ảo hiệu Các VM Dalvik thực thi tập tin thực thi Dalvik (dex) Định dạng tối ưu hóa cho nhớ tối thiểu VM dựa register-based chạy lớp biên dịch trình biên dịch Java để chuyển đổi thành định dạng dex Các VM Dalvik dựa vào nhân Linux cho chức luồng quản lý nhớ thấp 2.2.2 Biểu đồ lớp Hình 5: Biểu đồ lớp tổng quát Hình 6: Biểu đồ lớp hệ thống Hình 7: Biểu đồ lớp sửa ghi Hình 8: Biểu đồ lớp xóa ghi 2.2.3 Biểu đồ Hình 9: Biểu đồ mở hệ thống Hình 10: Biểu đồ đóng hệ thống 2.2.4 Biểu đồ trạng thái Hình 11: Biểu đồ trạng thái hệ thống Hình 12: Biểu đồ trạng thái tìm kiếm 2.2.5.Biểu đồ hoạt động Hình 13: Biểu đồ hoạt động mở phần mềm Hình 14: Biểu đồ hoạt động đóng phần mềm 2.2.6 Yêu cầu chức - Chức thêm ghi  Chức thêm ghi cho phép người sử dụng thêm ghi phù hợp với thân như: học, làm, gặp gỡ bạn bè, họp,… - Chức sửa ghi  Chức sửa ghi cho phép người sử dụng sửa ghi phù hợp với thân như: lịch trình thay đổi , kế hoạch tương lai gần… - Chức xóa ghi  Giúp người dùng xóa ghi cũ - Chức tìm kiếm ghi  Giúp người dùng tìm ghi lưu 2.3 Các lớp chương trình 2.3.1 MainActivity public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener { public static MyDatabase database; private static final int DIALOG = 1; private MainFragment mainFragment; private StartFragment startFragment = new StartFragment(); private FrameLayout frameLayout; private TranslateAnimation animation; private String notecontent; ArrayList arrayList; EventAdapter adapter; @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.SYSTEM_ALERT_WINDOW) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[] {Manifest.permission.SYSTEM_ALERT_WINDOW}, 1); } addFragment(); initViews(); showFragmentOnDelay(); } private void initViews() { animation = (TranslateAnimation) AnimationUtils.loadAnimation(this, R.anim.fragment_anim); frameLayout = (FrameLayout) findViewById(R.id.frameLayout); } public void addFragment() { mainFragment = new MainFragment(this); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.frameLayout, mainFragment); fragmentTransaction.add(R.id.frameLayout, startFragment); fragmentTransaction.hide(mainFragment); fragmentTransaction.commit(); } public void showFragmentOnDelay() { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { showFragment(mainFragment, startFragment); } }, 2000); } public void showFragment(Fragment show, Fragment hide) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.hide(hide); frameLayout.startAnimation(animation); fragmentTransaction.show(show); fragmentTransaction.commit(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE) { if (resultCode == RESULT_OK) { mainFragment.initCalendar(); } } } public void showExitDialog() { final AlertDialog.Builder builder = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog); builder.setTitle("Bạn có muốn không ? "); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); builder.create().show(); } } 2.3.2 EventCalendar public class EventCalendar { //private final String NoteName; private String NoteName; private static String NoteContent; private int RowId; public EventCalendar(int rowid, String notename, String notecontent) { rowid = rowid; NoteName = notename; NoteContent = notecontent; } public int getRowid() { return RowId; } public void setRowid(int rowid, int RowId) { RowId = rowid; } public static String getNoteName() { return getNoteName(); } public void setNoteName(String NoteName, String notename) { NoteName = notename; } public static String getNoteContent() { return NoteContent; } public void setNoteContent(String notecontent) { NoteContent = notecontent; } public void add(EventCalendar eventCalendar) { } } 2.3.3 Date public class Date { private int date; private int month; private int year; public Date(int date, int month, int year) { this.date = date; this.month = month; this.year = year; } @Override public String toString() { return date+"/"+(month+1)+"/"+year; } public int getDate() { return date; } public void setDate(int date) { this.date = date; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } } 2.3.4 Today public class Today { public static int dayOfMonth(){ Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.DAY_OF_MONTH); } public static int month(){ Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.MONTH); } public static int year(){ Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.YEAR); } public static int dayOfWeek(){ Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.DAY_OF_WEEK); } } CHƯƠNG 3: DEMO ỨNG DỤNG 3.1 Màn hình Giao diện phần mềm ứng dụng Note Android gồm chức : nhập, xem, sửa, xóa, tìm kiếm 3.2 Thêm ghi 3.3 Sửa ghi 3.4 Danh sách ghi KẾT LUẬN Kết đạt Sau xây dựng ứng dụng Note HĐH Android, em đạt số kết sau: - Đã xây dựng chương trình có chức năng: nhập, xem, sửa, xóa, tìm kiếm - Củng cố kỹ phân tích, thiết kế hệ thống - Giao diện dễ sử dụng cho người dùng Một số hạn chế đề tài Do kiến thức kinh nghiệm em hạn chế nên phần mềm khơng thể tránh khỏi thiếu sót, chưa chuyên sâu Hướng phát triển Phát triển thêm số chức khác chỉnh sửa giao diện đẹp Do thời gian kiến thức có hạn nên sau hồn thành chương trình “ứng dụng Note Android” em thiếu sót mong giáo Võ Thị Kim Hoa góp ý để chương trình hồn thiện Em xin chân thành cảm ơn! TÀI LIỆU THAM KHẢO [1] Phân tích, thiết kế hướng đối tượng UML, Đồn Văn Ban [2] Phân tích thiết kế hệ thống thông tin, Nguyễn Văn Ba, Nhà xuất Đại học Quốc gia Hà Nội, 2003 [3].Giáo trình java [4] Website: https://developer.android.com/training/animation/screenslide.html#pagetransformer [5] https://thinhme.wordpress.com/page/2/ [6] http://monhoc.vn/tai-lieu/do-an-xay-dung-he-thong-tim-kiem-may-atm-trenhe-dieu-hanh-android-3003/ ... Tên đề tài: Xây dựng ứng dụng Note Android Yêu cầu: Xây dựng ứng dụng di động Android 1.2 Nhiệm vụ đồ án:  Yêu cầu 1: Ngôn ngữ sử dụng: JAVA, máy ảo genimotion, phần mềm Android Studio, csdl... thư viện Trong Android hệ sở liệu sử dụng SQLite Database nhúng vào thành phần bên Android Trong Android sở liệu mà bạn tạo cho ứng dụng ứng dụng có quyền truy cập sử dụng, ứng dụng khác khơng... truy cập vào API khuôn khổ sử dụng ứng dụng lõi Các kiến trúc ứng dụng thiết kế để đơn giản hóa việc sử dụng lại thành phần; ứng dụng xuất khả ứng dụng khác sau sử dụng khả (có thể hạn chế bảo mật

Ngày đăng: 31/12/2017, 11:16

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w