전체 글 (32) 썸네일형 리스트형 WorkManager 목표 내일 실행될 Reminder를 전날에 등록하는 백그라운드 작업을 실행하는 것. 오늘 자정이 지나가기전 내일 사용자에게 알려줘야할 Notification들을 시스템에 등록하는 작업을 실행해야 한다. 특정한 시간 이전까지 실행되어야 한다. 실행이 되지 않을 경우 Reminder가 누락될 수 있다. 실행이 보장되어야 한다. 안드로이드의 백그라운드 작업 안드로이드의 백그라운드 작업은 AlarmManager를 시작으로 JobScheduler등을 거쳐서 최신 WorkManager까지 다양한 라이브러리가 공존한다. 다양한 플랫폼, API 버전등을 포괄해서 지원하는 최신 라이브러리인 WorkManager를 사용해보는 것은 이번 프로젝트의 목표 중에 하나였다. 사용하기에 앞서 WorkManager를 간단히 살펴보자.. Notification에 Content Intent 추가하기 Notification을 클릭했을 시 실행될 화면 추가하기. 목표 사용자가 Notification을 클릭하면 해당 Task의 AddEditTaskFragment 화면으로 실행한다. Content Intent 추가시키기 사용자가 Notification을 클릭했을 때 실행될 화면을 등록하는 란이 Content Intent이다. Notification Action들과 마찬가지로 PendingIntent를 추가시킬 수 있다. 차이점은 Action에서는 Broadcast를 PendingIntent형태로 만든 것을 추가 시켰고, ContentIntent는 App의 스크린 중 하나에 접근하기 위해서 Activity를 PendingIntent 형태로 만든 것을 추가시킨다. PendingIntent contenetInt.. Reminder 기능 구현하기 구현하고자 하는 기능 Task에 설정된 날짜, 시간에 맞춰 Notification을 띄워주는 기능. 조금씩 업그레이드하며 개발하기 RecyclerView의 Item을 클릭했을 때 -> Notification 발행하기. Task를 저장하거나 수정했을 때 -> Alarm 등록하기. 등록된 알람은 BroadcastReceiver가 받아서 백그라운드 작업으로 Notification 발행하기. 필요한 기능의 단위를 쪼개서 개발해나간다. Notificatino 발행 기능 Notification이란 안드로이드 운영체제에서 유저에게 발행하는 알림이다. 노티피케이션을 내보내기 위해서는 시스템으로부터 NOTIFICATION_SERVICE를 빌려와서 실행해야한다. 즉, 만들어진 Notification 객체를 OS에게 보내어.. Logic 분리하기 # Logic 분리하기 우선 Add와 Edit기능을 하는 AddEditTaskFragment에서 작동하는 로직을 분석해보자. 간단하게 표현하면 사용자에게 Task 정보를 입력받는다. 입력 받은 정보를 Task 오브젝트로 만든다. 생성된 오브젝트를 DB에 추가한다. 3단계로 표현할 수 있다. 여기서 Edit인 경우는 기존 Task를 불러오는 선행작업이 추가된다. # 각 Logic을 처리해야하는 곳을 생각해보자. 1번은 사용자가 View에 입력값을 입력하는 상황이다. View를 다루는 Fragment가 이 로직을 처리하기 적합한 위치일 것이다. 2번은 View에 입력된 값을 취합하여 Task 오브젝트로 만드는 일이다. View의 값을 읽기 위해서는 EditText 등 입력에 관여하는 View를 사용해야하므로.. EditText Scrollable Title을 입력 받는 EditText와 다르게 Description는 여러 줄의 내용을 입력받을 수 있다. 하지만 EditText의 Height를 무한히 늘일 수 없기 때문에 5줄의 내용만 보여지도록 제한시켜놓았다. 만약 장문을 입력한다고 했을때 화면에서 보여지는 이전 내용을 수정하기 위해서는 여타 다른 에디터처럼 스크롤해서 윗부분으로 커서를 이동시킬 수 있어야한다. 에디트텍스트의 멀티라인 적용 그리고 스크롤적용 코드는 간단하다. 두 가지 옵션값으로 간단하게 지정할 수 있다. ## android:lines="5" 그리고 android:maxLines="5"의 차이점. lines="5"의 경우 EditText의 기본 높이가 5줄에 고정된다. 아무런 내용이 없을 때에도 5줄을 차지한다. 그리고 내용이 5줄.. 자동 Keypad 보여주기 새로운 Task를 생성할때 가장 먼저 하는 일은 Task의 제목을 입력하는 것이다. 오늘 구현할 기능은 Task Add모드로 진입시에 제목을 빠르게 입력할 수 있도록 Keypad를 자동으로 띄워주는 기능이다. AddEditTaskFragment에 진입했을 경우 자동으로 키패드를 보여준다. 그리고 바로 제목을 입력할 수 있도록 도와준다. 반대로 AddEditTaskFragment에서의 작업을 마친 경우 키패드를 숨겨야한다. 그리고 키패드가 화면의 많은 부분을 차지하여 EditText에 정보를 입력하는 경우를 제외하고는 사용에 불편함을 주기 때문에. 다른 메뉴 항목을 선택했을 경우에도 키패드는 숨겨져야한다. Keypad Control 키패드를 관리하기 위해서 KeypadUtils라는 클래스를 독립적으로 생성.. NavIndicator와 NavigationUp 현재 Drawer를 사용해서 메뉴를 선택하는 구조를 사용하고 있다. 그리고 Drawer와 ActionBar는 Activity에 속해 있으며, 이 부분을 제외한 부분을 Fragment가 사용한다. 우선 Navigation Component에서 NavigationView 동작을 사용할 수 있도록 연결시키자. // navController와 drawer를 연결하여 동작하도록 이어준다. NavigationUI.setupActionbarWithNavController(this, navController, drawer); navController와 Drawer를 연결시키는 코드를 적용하고 실행해보면 navController.navigateTo()의 메소드를 실행함과 동시에 ActionBar의 Icon이 자동으로 변.. FloatingActionButton Anchor to Appbar FAB 버튼을 Appbar에 부착하기 CollapsingToolbarLayout은 Toolbar를 확장된 영역으로 보여주고 스크롤 시 축소시켜 기존의 Toolbar기능을 보여주는 레이아웃이다. 이때 Floating Action Button을 Toolbar에 부착하면 Toolbar의 크기가 줄어들 때 FAB가 사라지도록 할 수 있다. 두 화면에서 다른 방식으로 FAB를 사용하기 현재 2개의 다른 Fragment를 가지고 있다. TaskListFragment와 AddEditTaskFragment이다. TaskListFragment는 RecyclerView를 갖고 있으며 아래로 길게 스크롤하며 사용될 가능성이 높다. 그러므로 스크롤 시에 FAB이 Toolbar에 숨겨지는 Anchor 모드보다는 보편적으로 사용.. 이전 1 2 3 4 다음