정보공간_1

[7기 강북 전소현] 안드로이드 QuickSettings 분석 본문

IT 놀이터/Elite Member Tech & Talk

[7기 강북 전소현] 안드로이드 QuickSettings 분석

알 수 없는 사용자 2015. 5. 22. 05:22

안녕하세요. 강북멤버십 23-1기 전소현입니다.

이번 게시물에서는 안드로이드의 QuickSettings를 분석해보겠습니다.

[이 게시물은 안드로이드 KitKat(4.4.2)을 기준으로 직접 분석한 내용을 정리한 것입니다.]

 

안드로이드 화면을 위쪽에서 아래쪽으로 스크롤 하면 다음과 같은 것을 볼 수 있는데요. 이를 QuickSettings라고 합니다. QuickSettings를 통해 사용자들은 좀 더 쉽게 화면 밝기, Wi-Fi, 블루투스 등 스마트폰의 여러 설정을 변경할 수 있습니다.

 

 

안드로이드 풀소스의 SystemUI 폴더 하위에 QuickSettings와 관련된 소스들이 존재합니다. 이번 게시물에서는 많은 소스들 중에서도 QuickSettings.java QuickSettingsModel.java 중심으로 분석해보겠습니다.

 

QuickSettings.java에는 QuickSettings 클래스의 생성자가 존재하고, 다양한 초기 설정과 관련된 함수들이 존재합니다. 먼저 setup() 함수를 통해 블루투스, 위치, 네트워크 등 여러 컨트롤러들을 설정해주고, 아래와 같이 setupQuickSettings()라는 함수도 호출합니다.

QuickSettings에서 사용자에게 보여지는 각각의 설정 항목들을 타일(Tile)이라고 합니다. setupQuickSettings() 함수에 사용자에게 보여질 타일들을 설정해주는 부분이 있기 때문에 비교적 간단해 보이지만 가장 핵심적인 역할을 한다고 할 수 있습니다. setupQuickSettings() 함수는 아래와 같습니다.

타일들은 각각 UserTile, SystemTile, TemporaryTile 이렇게 나뉘어 추가됩니다. 그렇다면 User, System, Temporary 각 타입에 해당하는 타일들에는 어떠한 것들이 있을까요?

UserTile에는 사용자 계정, 밝기, 설정에 해당하는 타일들이, SystemTile에는 Wi-Fi, 전화통화, 블루투스 설정 등에 해당하는 타일들이 존재합니다. 마지막으로 TemporaryTile들은 평소에는 보이지 않지만 사용자가 어떠한 설정을 했을 경우 나타나게 되고, 이러한 예로는 알람, 버그리포트 등이 있습니다.

 

setupQuickSettings() 함수의 addUserTiles(), addSystemTiles(), addTemporaryTiles() 함수들은 자신의 분류에 해당되는 타일의 이미지 리소스와 클릭 리스너를 등록하고, 이 타일들을 뷰에 추가시켜줍니다. 타일의 종류에 따라 추가되는 방식에서 약간의 차이는 있지만 대부분의 타일이 이와 같은 형태로 추가됩니다. 아래 첨부한 소스는 여러 타일들 가운데 스크린 밝기 조절을 위한 타일이 추가되는 과정을 나타낸 것입니다.

타일 클릭 리스너에서 타일 클릭 시, collapsePanels() 함수와 showBrightnessDialog() 함수를 호출해주기 때문에 실제 이 타일을 사용자가 눌렀을 경우 QuickSettings 화면이 사라지고, 밝기를 조절할 수 있는 다이얼로그가 나타나게 됩니다.

 

이렇게 타일 클릭을 통해 설정 변경을 해주고 나면 타일에 표시된 이미지 리소스들 역시 변하게 되는데요. 이렇게 타일의 이미지 리소스 및 텍스트의 refresh 및 콜백 부분을 담당해주는 소스가 바로 QuickSettingsModel.java입니다.

위에서 예로 든 밝기 설정 부분에서 mModel.addBrightnessTile()과 같은 부분이 있는데 실제 이 부분이 QuickSettingsModel.java addBrightnessTile() 함수를 호출하는 부분입니다.

 

QuickSettingsModel.java에서는 이러한 타일의 refresh 역할 뿐만 아니라 타일 클릭 리스너를 독립적으로 관리하기도 하는데 비행기 모드를 그 예로 들 수 있습니다. 비행기 모드의 경우 QuickSetitngs.java가 아닌 QuickSettingsModel.java에 타일 클릭 리스너가 등록되어 동작하게 됩니다.

 

이번 게시물을 통해 QuickSettings의 타일 초기화 과정 및 동작 방식에 대해 알아보았습니다. 위에서 언급했던 것과 같이 SystemUI 폴더 하위의 QuickSettings.java QuickSettingsModel.java를 직접 분석하면 이해에 좀 더 도움이 될 것 같습니다. , 이를 통해 새로운 타일을 추가하여 Custom QuickSettings를 만드는 것도 어렵지 않게 할 수 있습니다.