(포스팅 2022.07.25)
업무 기록입니다.
고객사로부터 민원을 받았습니다.
아래 사진을 보시면, 볼륨버튼을 누르면 나오는 볼륨안내 창입니다. 이 버튼이 실수로 눌려져서 벨소리가 안나서 전화를 못받았다고 합니다.
나 : 그런 일이 있으셨군요. 어떻게 도와드리면 될까요?
고객사 : 버튼을 없애 주세요.
나 : ??? 네 아무튼 알겠습니다.
일단 대답부터 하고, 상황을 어떻게 해결할 지 고민해 봅니다.
코드야 찾을 수 있겠지만, 제가 APK 개발자가 아니다보니 GUI를 건드리는 건 자신이 없습니다. 뭐, 아무튼, 문제가 다시 발생하지 않으면 되지 않을까요?
해당 버튼을 눌러도 '진동/무음 모드'로 진입하지 않도록 코드를 수정하기로 하였습니다.
해당 버튼을 누르면 "전화 및 알림이 오면 진동이 사용됩니다." 라는 토스트가 뜬다는 것을 알게 되었습니다. 인터넷도 검색하고 안드로이드 소스코드도 검색합니다.
android / platform / prebuilts / fullsdk / platforms / android-28 / refs/heads/androidx-camerax-release / . / data / res / values-ko / strings.xml
<string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"전화 및 알림이 오면 진동이 사용됩니다."</string>
진동모드로 들어가면 'volume_dialog_ringer_guidance_vibrate' 변수가 사용되겠네요. 다시 검색을 합니다.
ㅁㅁㅁㅁㅁ/frameworks$ grep -nr volume_dialog_ringer_guidance_vibrate
base/services/core/java/com/android/server/audio/AudioService.java:2569: toastText = com.android.internal.R.string.volume_dialog_ringer_guidance_vibrate;
base/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java:517: com.android.internal.R.string.volume_dialog_ringer_guidance_vibrate);
base/core/res/res/values-or/strings.xml:1873: <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"??? ? ??????????????? ????????? ???"</string>
base/core/res/res/values-de/strings.xml:1872: <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Anrufe und Benachrichtigungen per Vibrationsalarm"</string>
base/core/res/res/values-af/strings.xml:1872: <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Oproepe en kennisgewings sal vibreer"</string>
....
base/core/res/res/values/symbols.xml:1042: <java-symbol type="string" name="volume_dialog_ringer_guidance_vibrate" />
안드로이드 소스코드에서 관련 코드를 일부 찾았습니다.
FILE : ㅁㅁㅁㅁㅁ/frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
494 private void maybeShowToastH(int newRingerMode) {
495 int seenToastCount = Prefs.getInt(mContext, Prefs.Key.SEEN_RINGER_GUIDANCE_COUNT, 0);
496
497 if (seenToastCount > VolumePrefs.SHOW_RINGER_TOAST_COUNT) {
498 return;
499 }
500 CharSequence toastText = null;
501 switch (newRingerMode) {
502 case RINGER_MODE_NORMAL:
503 final StreamState ss = mState.states.get(AudioManager.STREAM_RING);
504 if (ss != null) {
505 toastText = mContext.getString(
506 R.string.volume_dialog_ringer_guidance_ring,
507 Utils.formatPercentage(ss.level, ss.levelMax));
508 }
509 break;
510 case RINGER_MODE_SILENT:
511 toastText = mContext.getString(
512 com.android.internal.R.string.volume_dialog_ringer_guidance_silent);
513 break;
514 case RINGER_MODE_VIBRATE:
515 default:
516 toastText = mContext.getString(
517 com.android.internal.R.string.volume_dialog_ringer_guidance_vibrate);
518 }
해당 모드에 관련된 값이 RINGER_MODE_NORMAL, RINGER_MODE_SILENT, RIGNER_MODE_VIBRATE 가 있다는 것을 알아냈습니다. SILENT와 VIBRATE로 진입하는 코드를 모두 막으면 문제가 해결될 것 같습니다.
여기까지 진행하였으나, 환경설정에서 볼륨을 줄이면 진동모드로 진입하는 것을 발견하였습니다.
진동모드 진입하는 코드에서는 이미 수정을 했으니, 관련 코드를 더 수정해보아야 합니다. NORMAL 모드로 진입할때 "전화 및 알림이 오면 벨소리가 울림"가 표시되므로 관련 검색을 합니다.
ㅁㅁㅁㅁㅁ/frameworks/base$ grep -nr "volume_dialog_ringer_guidance_ring"
services/core/java/com/android/server/audio/AudioService.java:2553: int toastText = com.android.internal.R.string.volume_dialog_ringer_guidance_ring;
packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java:508: R.string.volume_dialog_ringer_guidance_ring,
packages 쪽에 소스코드가 더 있음을 확인하였습니다.
진동/무음모드로 진입하지 않도록 수정완료하였습니다.
관련하여 수정된 파일은 다음과 같습니다.
frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
frameworks/base/services/core/java/com/android/server/audio/AudioService.java
포스팅은 여기까지입니다.
언제나 감사드립니다.
fastboot 프로그래밍 (0) | 2022.08.19 |
---|---|
fastboot로 다운로드 후 리커버리 모드로 진입 (0) | 2022.08.01 |
안드로이드(AOSP) 소스코드 모델별로 분리 방법 (0) | 2022.06.10 |
드라이버 칩 긴급변경시 SW 작업 (0) | 2022.04.21 |
갤럭시 S7 안드로이드 오토 만들기 작업 (0) | 2022.04.08 |
댓글 영역