From ff2ad7ffdba7c74077eae3016b32174f0f2dad30 Mon Sep 17 00:00:00 2001 From: Eric Erfanian Date: Thu, 27 Jul 2017 10:45:54 -0700 Subject: Update oc-dr1-dev to v11 RC17 This change updates the oc-dr1-dev branch to v11 RC17, from the previous state synced @160679286. This contains: - A ROLLUP from 161342943 - Fixes for the following bugs: Bug: 33490149 36608790 37846172 62294499 62338925 63013427 63089358 63104326 63112642 63143138 63161630 63405063 63415147 63450835 63494010 63522618 63523694 63523776 63524435 63575857 63594129 63634700 63642638 63643370 63709810 63710739 63716219 63757003 64009408 64025042 64060628 64073371 Test: make Merged-In: I69ba6cbadbd1a02f05405ca0f5273b0a5ea0e5e9 Change-Id: Iaad73fa51796f62f4947571ddb744bbdadcca64e --- Android.mk | 3 + .../drawable/quantum_ic_enterprise_vd_theme_24.xml | 2 +- .../compat/telecom/TelecomManagerCompat.java | 5 + .../common/lettertiles/LetterTileDrawable.java | 122 +- .../about/res/raw/third_party_license_metadata | 70 +- .../dialer/about/res/raw/third_party_licenses | 2487 ++++++++++++++------ .../android/dialer/app/calllog/CallLogAdapter.java | 28 +- .../dialer/app/calllog/CallLogFragment.java | 29 +- .../app/calllog/CallLogListItemViewHolder.java | 2 +- .../calllog/VisualVoicemailCallLogFragment.java | 10 +- .../app/calllog/calllogcache/CallLogCache.java | 62 +- .../dialer/app/list/PhoneFavoriteTileView.java | 8 +- .../dialer/app/list/PhoneFavoritesTileAdapter.java | 1 + .../android/dialer/app/res/values-bs/strings.xml | 6 +- .../android/dialer/app/res/values-da/strings.xml | 2 +- .../LegacyVoicemailNotificationReceiver.java | 13 +- .../error/VoicemailTosMessageCreator.java | 33 +- .../android/dialer/backup/DialerBackupAgent.java | 148 +- .../callcomposer/CameraComposerFragment.java | 11 +- .../dialer/callcomposer/res/values-bs/strings.xml | 2 +- .../android/dialer/calldetails/AndroidManifest.xml | 6 +- .../dialer/callintent/CallIntentBuilder.java | 7 + .../dialer/callintent/CallIntentParser.java | 22 +- .../dialer/calllogutils/CallEntryFormatter.java | 24 +- .../dialer/contactsfragment/ContactsFragment.java | 4 + .../dialer/database/CallLogQueryHandler.java | 14 + .../dialer/interactions/res/values-bs/strings.xml | 4 +- java/com/android/dialer/postcall/PostCall.java | 8 +- java/com/android/dialer/protos/ProtoParsers.java | 26 +- .../android/dialer/theme/res/values-af/strings.xml | 1 - .../android/dialer/theme/res/values-am/strings.xml | 1 - .../android/dialer/theme/res/values-ar/strings.xml | 1 - .../android/dialer/theme/res/values-az/strings.xml | 1 - .../dialer/theme/res/values-b+sr+Latn/strings.xml | 1 - .../android/dialer/theme/res/values-be/strings.xml | 1 - .../android/dialer/theme/res/values-bg/strings.xml | 1 - .../android/dialer/theme/res/values-bn/strings.xml | 1 - .../android/dialer/theme/res/values-bs/strings.xml | 1 - .../android/dialer/theme/res/values-ca/strings.xml | 1 - .../android/dialer/theme/res/values-cs/strings.xml | 1 - .../android/dialer/theme/res/values-da/strings.xml | 1 - .../android/dialer/theme/res/values-de/strings.xml | 1 - .../android/dialer/theme/res/values-el/strings.xml | 1 - .../dialer/theme/res/values-en-rAU/strings.xml | 1 - .../dialer/theme/res/values-en-rGB/strings.xml | 1 - .../dialer/theme/res/values-en-rIN/strings.xml | 1 - .../dialer/theme/res/values-es-rUS/strings.xml | 1 - .../android/dialer/theme/res/values-es/strings.xml | 1 - .../android/dialer/theme/res/values-et/strings.xml | 1 - .../android/dialer/theme/res/values-eu/strings.xml | 1 - .../android/dialer/theme/res/values-fa/strings.xml | 1 - .../android/dialer/theme/res/values-fi/strings.xml | 1 - .../dialer/theme/res/values-fr-rCA/strings.xml | 1 - .../android/dialer/theme/res/values-fr/strings.xml | 1 - .../android/dialer/theme/res/values-gl/strings.xml | 1 - .../android/dialer/theme/res/values-gu/strings.xml | 1 - .../android/dialer/theme/res/values-hi/strings.xml | 1 - .../android/dialer/theme/res/values-hr/strings.xml | 1 - .../android/dialer/theme/res/values-hu/strings.xml | 1 - .../android/dialer/theme/res/values-hy/strings.xml | 1 - .../android/dialer/theme/res/values-in/strings.xml | 1 - .../android/dialer/theme/res/values-is/strings.xml | 1 - .../android/dialer/theme/res/values-it/strings.xml | 1 - .../android/dialer/theme/res/values-iw/strings.xml | 1 - .../android/dialer/theme/res/values-ja/strings.xml | 1 - .../android/dialer/theme/res/values-ka/strings.xml | 1 - .../android/dialer/theme/res/values-kk/strings.xml | 1 - .../android/dialer/theme/res/values-km/strings.xml | 1 - .../android/dialer/theme/res/values-kn/strings.xml | 1 - .../android/dialer/theme/res/values-ko/strings.xml | 1 - .../android/dialer/theme/res/values-ky/strings.xml | 1 - .../android/dialer/theme/res/values-lo/strings.xml | 1 - .../android/dialer/theme/res/values-lt/strings.xml | 1 - .../android/dialer/theme/res/values-lv/strings.xml | 1 - .../android/dialer/theme/res/values-mk/strings.xml | 1 - .../android/dialer/theme/res/values-ml/strings.xml | 1 - .../android/dialer/theme/res/values-mn/strings.xml | 1 - .../android/dialer/theme/res/values-mr/strings.xml | 1 - .../android/dialer/theme/res/values-ms/strings.xml | 1 - .../android/dialer/theme/res/values-my/strings.xml | 1 - .../android/dialer/theme/res/values-nb/strings.xml | 1 - .../android/dialer/theme/res/values-ne/strings.xml | 1 - .../android/dialer/theme/res/values-nl/strings.xml | 1 - .../android/dialer/theme/res/values-no/strings.xml | 1 - .../android/dialer/theme/res/values-pa/strings.xml | 1 - .../android/dialer/theme/res/values-pl/strings.xml | 1 - .../dialer/theme/res/values-pt-rBR/strings.xml | 1 - .../dialer/theme/res/values-pt-rPT/strings.xml | 1 - .../android/dialer/theme/res/values-pt/strings.xml | 1 - .../android/dialer/theme/res/values-ro/strings.xml | 1 - .../android/dialer/theme/res/values-ru/strings.xml | 1 - .../android/dialer/theme/res/values-si/strings.xml | 1 - .../android/dialer/theme/res/values-sk/strings.xml | 1 - .../android/dialer/theme/res/values-sl/strings.xml | 1 - .../android/dialer/theme/res/values-sq/strings.xml | 1 - .../android/dialer/theme/res/values-sr/strings.xml | 1 - .../android/dialer/theme/res/values-sv/strings.xml | 1 - .../android/dialer/theme/res/values-sw/strings.xml | 1 - .../android/dialer/theme/res/values-ta/strings.xml | 1 - .../android/dialer/theme/res/values-te/strings.xml | 1 - .../android/dialer/theme/res/values-th/strings.xml | 1 - .../android/dialer/theme/res/values-tl/strings.xml | 1 - .../android/dialer/theme/res/values-tr/strings.xml | 1 - .../android/dialer/theme/res/values-uk/strings.xml | 1 - .../android/dialer/theme/res/values-ur/strings.xml | 1 - .../android/dialer/theme/res/values-uz/strings.xml | 1 - .../android/dialer/theme/res/values-vi/strings.xml | 1 - .../dialer/theme/res/values-zh-rCN/strings.xml | 1 - .../dialer/theme/res/values-zh-rHK/strings.xml | 1 - .../dialer/theme/res/values-zh-rTW/strings.xml | 1 - .../android/dialer/theme/res/values-zu/strings.xml | 1 - .../android/dialer/theme/res/values/strings.xml | 3 - java/com/android/dialer/util/PermissionsUtil.java | 26 + .../android/dialer/util/res/values-af/strings.xml | 2 + .../android/dialer/util/res/values-am/strings.xml | 2 + .../android/dialer/util/res/values-ar/strings.xml | 2 + .../android/dialer/util/res/values-az/strings.xml | 2 + .../dialer/util/res/values-b+sr+Latn/strings.xml | 2 + .../android/dialer/util/res/values-be/strings.xml | 2 + .../android/dialer/util/res/values-bg/strings.xml | 2 + .../android/dialer/util/res/values-bn/strings.xml | 2 + .../android/dialer/util/res/values-bs/strings.xml | 2 + .../android/dialer/util/res/values-ca/strings.xml | 2 + .../android/dialer/util/res/values-cs/strings.xml | 2 + .../android/dialer/util/res/values-da/strings.xml | 2 + .../android/dialer/util/res/values-de/strings.xml | 2 + .../android/dialer/util/res/values-el/strings.xml | 2 + .../dialer/util/res/values-en-rAU/strings.xml | 2 + .../dialer/util/res/values-en-rGB/strings.xml | 2 + .../dialer/util/res/values-en-rIN/strings.xml | 2 + .../dialer/util/res/values-es-rUS/strings.xml | 2 + .../android/dialer/util/res/values-es/strings.xml | 2 + .../android/dialer/util/res/values-et/strings.xml | 2 + .../android/dialer/util/res/values-eu/strings.xml | 2 + .../android/dialer/util/res/values-fa/strings.xml | 2 + .../android/dialer/util/res/values-fi/strings.xml | 2 + .../dialer/util/res/values-fr-rCA/strings.xml | 2 + .../android/dialer/util/res/values-fr/strings.xml | 2 + .../android/dialer/util/res/values-gl/strings.xml | 2 + .../android/dialer/util/res/values-gu/strings.xml | 2 + .../android/dialer/util/res/values-hi/strings.xml | 2 + .../android/dialer/util/res/values-hr/strings.xml | 2 + .../android/dialer/util/res/values-hu/strings.xml | 2 + .../android/dialer/util/res/values-hy/strings.xml | 2 + .../android/dialer/util/res/values-in/strings.xml | 2 + .../android/dialer/util/res/values-is/strings.xml | 2 + .../android/dialer/util/res/values-it/strings.xml | 2 + .../android/dialer/util/res/values-iw/strings.xml | 2 + .../android/dialer/util/res/values-ja/strings.xml | 2 + .../android/dialer/util/res/values-ka/strings.xml | 2 + .../android/dialer/util/res/values-kk/strings.xml | 2 + .../android/dialer/util/res/values-km/strings.xml | 2 + .../android/dialer/util/res/values-kn/strings.xml | 2 + .../android/dialer/util/res/values-ko/strings.xml | 2 + .../android/dialer/util/res/values-ky/strings.xml | 2 + .../android/dialer/util/res/values-lo/strings.xml | 2 + .../android/dialer/util/res/values-lt/strings.xml | 2 + .../android/dialer/util/res/values-lv/strings.xml | 2 + .../android/dialer/util/res/values-mk/strings.xml | 2 + .../android/dialer/util/res/values-ml/strings.xml | 2 + .../android/dialer/util/res/values-mn/strings.xml | 2 + .../android/dialer/util/res/values-mr/strings.xml | 2 + .../android/dialer/util/res/values-ms/strings.xml | 2 + .../android/dialer/util/res/values-my/strings.xml | 2 + .../android/dialer/util/res/values-nb/strings.xml | 2 + .../android/dialer/util/res/values-ne/strings.xml | 2 + .../android/dialer/util/res/values-nl/strings.xml | 2 + .../android/dialer/util/res/values-no/strings.xml | 2 + .../android/dialer/util/res/values-pa/strings.xml | 2 + .../android/dialer/util/res/values-pl/strings.xml | 2 + .../dialer/util/res/values-pt-rBR/strings.xml | 2 + .../dialer/util/res/values-pt-rPT/strings.xml | 2 + .../android/dialer/util/res/values-pt/strings.xml | 2 + .../android/dialer/util/res/values-ro/strings.xml | 2 + .../android/dialer/util/res/values-ru/strings.xml | 2 + .../android/dialer/util/res/values-si/strings.xml | 2 + .../android/dialer/util/res/values-sk/strings.xml | 2 + .../android/dialer/util/res/values-sl/strings.xml | 2 + .../android/dialer/util/res/values-sq/strings.xml | 2 + .../android/dialer/util/res/values-sr/strings.xml | 2 + .../android/dialer/util/res/values-sv/strings.xml | 2 + .../android/dialer/util/res/values-sw/strings.xml | 2 + .../android/dialer/util/res/values-ta/strings.xml | 2 + .../android/dialer/util/res/values-te/strings.xml | 2 + .../android/dialer/util/res/values-th/strings.xml | 2 + .../android/dialer/util/res/values-tl/strings.xml | 2 + .../android/dialer/util/res/values-tr/strings.xml | 2 + .../android/dialer/util/res/values-uk/strings.xml | 2 + .../android/dialer/util/res/values-ur/strings.xml | 2 + .../android/dialer/util/res/values-uz/strings.xml | 2 + .../android/dialer/util/res/values-vi/strings.xml | 2 + .../dialer/util/res/values-zh-rCN/strings.xml | 2 + .../dialer/util/res/values-zh-rHK/strings.xml | 2 + .../dialer/util/res/values-zh-rTW/strings.xml | 2 + .../android/dialer/util/res/values-zu/strings.xml | 2 + .../com/android/dialer/util/res/values/strings.xml | 2 + java/com/android/incallui/CallButtonPresenter.java | 2 +- java/com/android/incallui/ContactInfoCache.java | 24 +- java/com/android/incallui/StatusBarNotifier.java | 19 +- java/com/android/incallui/VideoCallPresenter.java | 18 +- .../incallui/answer/impl/AnswerFragment.java | 2 +- java/com/android/incallui/call/TelecomAdapter.java | 4 + .../disconnectdialog/EnableWifiCallingPrompt.java | 2 +- .../VideoCallNotAvailablePrompt.java | 5 +- .../disconnectdialog/res/values-af/strings.xml | 12 +- .../disconnectdialog/res/values-am/strings.xml | 12 +- .../disconnectdialog/res/values-ar/strings.xml | 12 +- .../disconnectdialog/res/values-be/strings.xml | 12 +- .../disconnectdialog/res/values-bg/strings.xml | 12 +- .../disconnectdialog/res/values-cs/strings.xml | 12 +- .../disconnectdialog/res/values-da/strings.xml | 12 +- .../disconnectdialog/res/values-de/strings.xml | 12 +- .../disconnectdialog/res/values-es-rUS/strings.xml | 12 +- .../disconnectdialog/res/values-es/strings.xml | 12 +- .../disconnectdialog/res/values-eu/strings.xml | 12 +- .../disconnectdialog/res/values-fa/strings.xml | 12 +- .../disconnectdialog/res/values-fi/strings.xml | 12 +- .../disconnectdialog/res/values-fr/strings.xml | 12 +- .../disconnectdialog/res/values-gl/strings.xml | 12 +- .../disconnectdialog/res/values-hi/strings.xml | 12 +- .../disconnectdialog/res/values-hr/strings.xml | 12 +- .../disconnectdialog/res/values-hu/strings.xml | 12 +- .../disconnectdialog/res/values-hy/strings.xml | 12 +- .../disconnectdialog/res/values-in/strings.xml | 12 +- .../disconnectdialog/res/values-it/strings.xml | 12 +- .../disconnectdialog/res/values-iw/strings.xml | 12 +- .../disconnectdialog/res/values-ka/strings.xml | 12 +- .../disconnectdialog/res/values-kk/strings.xml | 12 +- .../disconnectdialog/res/values-km/strings.xml | 12 +- .../disconnectdialog/res/values-ky/strings.xml | 12 +- .../disconnectdialog/res/values-mk/strings.xml | 12 +- .../disconnectdialog/res/values-ms/strings.xml | 12 +- .../disconnectdialog/res/values-my/strings.xml | 12 +- .../disconnectdialog/res/values-pt-rPT/strings.xml | 2 +- .../disconnectdialog/res/values-ro/strings.xml | 12 +- .../disconnectdialog/res/values-ru/strings.xml | 12 +- .../disconnectdialog/res/values-si/strings.xml | 12 +- .../disconnectdialog/res/values-sk/strings.xml | 12 +- .../disconnectdialog/res/values-sq/strings.xml | 12 +- .../disconnectdialog/res/values-sv/strings.xml | 12 +- .../disconnectdialog/res/values-sw/strings.xml | 12 +- .../disconnectdialog/res/values-tl/strings.xml | 12 +- .../disconnectdialog/res/values-tr/strings.xml | 12 +- .../disconnectdialog/res/values-ur/strings.xml | 12 +- .../disconnectdialog/res/values-uz/strings.xml | 12 +- .../disconnectdialog/res/values-vi/strings.xml | 12 +- .../disconnectdialog/res/values-zh-rCN/strings.xml | 12 +- .../disconnectdialog/res/values-zh-rTW/strings.xml | 12 +- .../video/impl/SurfaceViewVideoCallFragment.java | 22 +- .../incallui/video/impl/VideoCallFragment.java | 161 +- .../video/protocol/VideoCallScreenDelegate.java | 2 +- .../videosurface/impl/VideoSurfaceTextureImpl.java | 3 - .../videotech/lightbringer/LightbringerTech.java | 4 +- .../incallui/videotech/utils/VideoUtils.java | 20 +- java/com/android/voicemail/AndroidManifest.xml | 21 +- java/com/android/voicemail/VoicemailClient.java | 26 + .../voicemail/VoicemailPowerCycleReceiver.java | 38 + .../voicemail/VoicemailSecretCodeReceiver.java | 36 + .../com/android/voicemail/impl/AndroidManifest.xml | 9 +- java/com/android/voicemail/impl/OmtpService.java | 52 +- .../voicemail/impl/OmtpVvmCarrierConfigHelper.java | 56 +- .../voicemail/impl/VoicemailClientImpl.java | 29 + .../voicemail/impl/VoicemailClientReceiver.java | 6 + .../voicemail/impl/configui/AndroidManifest.xml | 25 + .../impl/configui/ConfigOverrideFragment.java | 175 ++ .../impl/configui/VoicemailSecretCodeActivity.java | 58 + .../impl/configui/res/values-af/strings.xml | 19 + .../impl/configui/res/values-am/strings.xml | 19 + .../impl/configui/res/values-ar/strings.xml | 19 + .../impl/configui/res/values-az/strings.xml | 19 + .../impl/configui/res/values-b+sr+Latn/strings.xml | 19 + .../impl/configui/res/values-be/strings.xml | 19 + .../impl/configui/res/values-bg/strings.xml | 19 + .../impl/configui/res/values-bn/strings.xml | 19 + .../impl/configui/res/values-bs/strings.xml | 19 + .../impl/configui/res/values-ca/strings.xml | 19 + .../impl/configui/res/values-cs/strings.xml | 19 + .../impl/configui/res/values-da/strings.xml | 19 + .../impl/configui/res/values-de/strings.xml | 19 + .../impl/configui/res/values-el/strings.xml | 19 + .../impl/configui/res/values-en-rAU/strings.xml | 19 + .../impl/configui/res/values-en-rGB/strings.xml | 19 + .../impl/configui/res/values-en-rIN/strings.xml | 19 + .../impl/configui/res/values-es-rUS/strings.xml | 19 + .../impl/configui/res/values-es/strings.xml | 19 + .../impl/configui/res/values-et/strings.xml | 19 + .../impl/configui/res/values-eu/strings.xml | 19 + .../impl/configui/res/values-fa/strings.xml | 19 + .../impl/configui/res/values-fi/strings.xml | 19 + .../impl/configui/res/values-fr-rCA/strings.xml | 19 + .../impl/configui/res/values-fr/strings.xml | 19 + .../impl/configui/res/values-gl/strings.xml | 19 + .../impl/configui/res/values-gu/strings.xml | 19 + .../impl/configui/res/values-hi/strings.xml | 19 + .../impl/configui/res/values-hr/strings.xml | 19 + .../impl/configui/res/values-hu/strings.xml | 19 + .../impl/configui/res/values-hy/strings.xml | 19 + .../impl/configui/res/values-in/strings.xml | 19 + .../impl/configui/res/values-is/strings.xml | 19 + .../impl/configui/res/values-it/strings.xml | 19 + .../impl/configui/res/values-iw/strings.xml | 19 + .../impl/configui/res/values-ja/strings.xml | 19 + .../impl/configui/res/values-ka/strings.xml | 19 + .../impl/configui/res/values-kk/strings.xml | 19 + .../impl/configui/res/values-km/strings.xml | 19 + .../impl/configui/res/values-kn/strings.xml | 19 + .../impl/configui/res/values-ko/strings.xml | 19 + .../impl/configui/res/values-ky/strings.xml | 19 + .../impl/configui/res/values-lo/strings.xml | 19 + .../impl/configui/res/values-lt/strings.xml | 19 + .../impl/configui/res/values-lv/strings.xml | 19 + .../impl/configui/res/values-mk/strings.xml | 19 + .../impl/configui/res/values-ml/strings.xml | 19 + .../impl/configui/res/values-mn/strings.xml | 19 + .../impl/configui/res/values-mr/strings.xml | 19 + .../impl/configui/res/values-ms/strings.xml | 19 + .../impl/configui/res/values-my/strings.xml | 19 + .../impl/configui/res/values-nb/strings.xml | 19 + .../impl/configui/res/values-ne/strings.xml | 19 + .../impl/configui/res/values-nl/strings.xml | 19 + .../impl/configui/res/values-no/strings.xml | 19 + .../impl/configui/res/values-pa/strings.xml | 19 + .../impl/configui/res/values-pl/strings.xml | 19 + .../impl/configui/res/values-pt-rBR/strings.xml | 19 + .../impl/configui/res/values-pt-rPT/strings.xml | 19 + .../impl/configui/res/values-pt/strings.xml | 19 + .../impl/configui/res/values-ro/strings.xml | 19 + .../impl/configui/res/values-ru/strings.xml | 19 + .../impl/configui/res/values-si/strings.xml | 19 + .../impl/configui/res/values-sk/strings.xml | 19 + .../impl/configui/res/values-sl/strings.xml | 19 + .../impl/configui/res/values-sq/strings.xml | 19 + .../impl/configui/res/values-sr/strings.xml | 19 + .../impl/configui/res/values-sv/strings.xml | 19 + .../impl/configui/res/values-sw/strings.xml | 19 + .../impl/configui/res/values-ta/strings.xml | 19 + .../impl/configui/res/values-te/strings.xml | 19 + .../impl/configui/res/values-th/strings.xml | 19 + .../impl/configui/res/values-tl/strings.xml | 19 + .../impl/configui/res/values-tr/strings.xml | 19 + .../impl/configui/res/values-uk/strings.xml | 19 + .../impl/configui/res/values-ur/strings.xml | 19 + .../impl/configui/res/values-uz/strings.xml | 19 + .../impl/configui/res/values-vi/strings.xml | 19 + .../impl/configui/res/values-zh-rCN/strings.xml | 19 + .../impl/configui/res/values-zh-rHK/strings.xml | 19 + .../impl/configui/res/values-zh-rTW/strings.xml | 19 + .../impl/configui/res/values-zu/strings.xml | 19 + .../voicemail/impl/configui/res/values/strings.xml | 21 + .../impl/configui/res/xml/vvm_config_override.xml | 76 + .../android/voicemail/impl/res/values/strings.xml | 4 + .../voicemail/stub/StubVoicemailClient.java | 18 + 352 files changed, 4845 insertions(+), 1605 deletions(-) create mode 100644 java/com/android/voicemail/VoicemailPowerCycleReceiver.java create mode 100644 java/com/android/voicemail/VoicemailSecretCodeReceiver.java create mode 100644 java/com/android/voicemail/impl/configui/AndroidManifest.xml create mode 100644 java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java create mode 100644 java/com/android/voicemail/impl/configui/VoicemailSecretCodeActivity.java create mode 100644 java/com/android/voicemail/impl/configui/res/values-af/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-am/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ar/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-az/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-b+sr+Latn/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-be/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-bg/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-bn/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-bs/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ca/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-cs/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-da/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-de/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-el/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-en-rAU/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-en-rGB/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-en-rIN/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-es-rUS/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-es/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-et/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-eu/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-fa/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-fi/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-fr-rCA/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-fr/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-gl/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-gu/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-hi/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-hr/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-hu/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-hy/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-in/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-is/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-it/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-iw/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ja/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ka/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-kk/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-km/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-kn/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ko/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ky/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-lo/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-lt/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-lv/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-mk/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ml/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-mn/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-mr/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ms/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-my/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-nb/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ne/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-nl/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-no/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-pa/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-pl/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-pt-rBR/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-pt-rPT/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-pt/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ro/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ru/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-si/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-sk/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-sl/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-sq/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-sr/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-sv/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-sw/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ta/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-te/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-th/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-tl/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-tr/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-uk/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-ur/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-uz/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-vi/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-zh-rCN/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-zh-rHK/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-zh-rTW/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values-zu/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/values/strings.xml create mode 100644 java/com/android/voicemail/impl/configui/res/xml/vvm_config_override.xml diff --git a/Android.mk b/Android.mk index cf543aa59..beccd865a 100644 --- a/Android.mk +++ b/Android.mk @@ -118,6 +118,7 @@ RES_DIRS := \ $(BASE_DIR)/incallui/telecomeventui/res \ $(BASE_DIR)/incallui/video/impl/res \ $(BASE_DIR)/incallui/video/protocol/res \ + $(BASE_DIR)/voicemail/impl/configui/res \ $(BASE_DIR)/voicemail/impl/res \ @@ -178,6 +179,7 @@ DIALER_MANIFEST_FILES += \ $(BASE_DIR)/incallui/video/impl/AndroidManifest.xml \ $(BASE_DIR)/incallui/video/protocol/AndroidManifest.xml \ $(BASE_DIR)/voicemail/AndroidManifest.xml \ + $(BASE_DIR)/voicemail/impl/configui/AndroidManifest.xml \ $(BASE_DIR)/voicemail/impl/AndroidManifest.xml \ @@ -257,6 +259,7 @@ LOCAL_AAPT_FLAGS := \ --extra-packages com.android.incallui.video.impl \ --extra-packages com.android.phone.common \ --extra-packages com.android.voicemail \ + --extra-packages com.android.voicemail.impl.configui \ --extra-packages com.android.voicemail.impl \ --extra-packages com.android.voicemail.impl.fetch \ --extra-packages com.android.voicemail.impl.settings \ diff --git a/assets/quantum/res/drawable/quantum_ic_enterprise_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_enterprise_vd_theme_24.xml index 6495ac7eb..b3493b8f5 100644 --- a/assets/quantum/res/drawable/quantum_ic_enterprise_vd_theme_24.xml +++ b/assets/quantum/res/drawable/quantum_ic_enterprise_vd_theme_24.xml @@ -6,5 +6,5 @@ android:tint="?attr/colorControlNormal"> + android:pathData="M20,6h-4L16,4c0,-1.11 -0.89,-2 -2,-2h-4c-1.11,0 -2,0.89 -2,2v2L4,6c-1.11,0 -1.99,0.89 -1.99,2L2,19c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2L22,8c0,-1.11 -0.89,-2 -2,-2zM12,15c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM14,6h-4L10,4h4v2z"/> diff --git a/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java b/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java index 8393b2601..2d77dc73f 100644 --- a/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java +++ b/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java @@ -35,6 +35,11 @@ public class TelecomManagerCompat { public static final String EXTRA_HANDOVER_VIDEO_STATE = "android.telecom.extra.HANDOVER_VIDEO_STATE"; + // This is a hidden constant in android.telecom.DisconnectCause. Telecom sets this as a disconnect + // reason if it wants us to prompt the user that the video call is not available. + // TODO: Reference it to constant in android.telecom.DisconnectCause. + public static final String REASON_IMS_ACCESS_BLOCKED = "REASON_IMS_ACCESS_BLOCKED"; + /** * Returns the current SIM call manager. Apps must be prepared for this method to return null, * indicating that there currently exists no registered SIM call manager. diff --git a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java b/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java index 5c401fe38..73809c467 100644 --- a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java +++ b/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java @@ -34,7 +34,6 @@ import android.support.annotation.Nullable; import android.telecom.TelecomManager; import android.text.TextUtils; import com.android.contacts.common.R; -import com.android.contacts.common.lettertiles.LetterTileDrawable.ContactType; import com.android.dialer.common.Assert; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -88,24 +87,24 @@ public class LetterTileDrawable extends Drawable { private static final float VECTOR_ICON_SCALE = 0.7f; /** Reusable components to avoid new allocations */ - private static final Paint sPaint = new Paint(); + private final Paint mPaint = new Paint(); + + private final Rect mRect = new Rect(); + private final char[] mFirstChar = new char[1]; - private static final Rect sRect = new Rect(); - private static final char[] sFirstChar = new char[1]; /** Letter tile */ - private static TypedArray sColors; - - private static int sSpamColor; - private static int sDefaultColor; - private static int sTileFontColor; - private static float sLetterToTileRatio; - private static Drawable sDefaultPersonAvatar; - private static Drawable sDefaultBusinessAvatar; - private static Drawable sDefaultVoicemailAvatar; - private static Drawable sDefaultSpamAvatar; - private static Drawable sDefaultConferenceAvatar; - - private final Paint mPaint; + @NonNull private final TypedArray mColors; + + private final int mSpamColor; + private final int mDefaultColor; + private final int mTileFontColor; + private final float mLetterToTileRatio; + @NonNull private final Drawable mDefaultPersonAvatar; + @NonNull private final Drawable mDefaultBusinessAvatar; + @NonNull private final Drawable mDefaultVoicemailAvatar; + @NonNull private final Drawable mDefaultSpamAvatar; + @NonNull private final Drawable mDefaultConferenceAvatar; + @ContactType private int mContactType = TYPE_DEFAULT; private float mScale = 1.0f; private float mOffset = 0.0f; @@ -117,33 +116,25 @@ public class LetterTileDrawable extends Drawable { private String mDisplayName; public LetterTileDrawable(final Resources res) { - if (sColors == null) { - sColors = res.obtainTypedArray(R.array.letter_tile_colors); - sSpamColor = res.getColor(R.color.spam_contact_background); - sDefaultColor = res.getColor(R.color.letter_tile_default_color); - sTileFontColor = res.getColor(R.color.letter_tile_font_color); - sLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1); - sDefaultPersonAvatar = - res.getDrawable(R.drawable.product_logo_avatar_anonymous_white_color_120, null); - Assert.isNotNull(sDefaultPersonAvatar, "sDefaultPersonAvatar is null"); - sDefaultBusinessAvatar = res.getDrawable(R.drawable.quantum_ic_business_vd_theme_24, null); - Assert.isNotNull(sDefaultBusinessAvatar, "sDefaultBusinessAvatar is null"); - sDefaultVoicemailAvatar = res.getDrawable(R.drawable.quantum_ic_voicemail_vd_theme_24, null); - Assert.isNotNull(sDefaultVoicemailAvatar, "sDefaultVoicemailAvatar is null"); - sDefaultSpamAvatar = res.getDrawable(R.drawable.quantum_ic_report_vd_theme_24, null); - Assert.isNotNull(sDefaultSpamAvatar, "sDefaultSpamAvatar is null"); - sDefaultConferenceAvatar = res.getDrawable(R.drawable.quantum_ic_group_vd_theme_24, null); - Assert.isNotNull(sDefaultConferenceAvatar, "sDefaultConferenceAvatar is null"); - - sPaint.setTypeface( - Typeface.create(res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL)); - sPaint.setTextAlign(Align.CENTER); - sPaint.setAntiAlias(true); - } - mPaint = new Paint(); + mColors = res.obtainTypedArray(R.array.letter_tile_colors); + mSpamColor = res.getColor(R.color.spam_contact_background); + mDefaultColor = res.getColor(R.color.letter_tile_default_color); + mTileFontColor = res.getColor(R.color.letter_tile_font_color); + mLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1); + mDefaultPersonAvatar = + res.getDrawable(R.drawable.product_logo_avatar_anonymous_white_color_120, null); + mDefaultBusinessAvatar = res.getDrawable(R.drawable.quantum_ic_business_vd_theme_24, null); + mDefaultVoicemailAvatar = res.getDrawable(R.drawable.quantum_ic_voicemail_vd_theme_24, null); + mDefaultSpamAvatar = res.getDrawable(R.drawable.quantum_ic_report_vd_theme_24, null); + mDefaultConferenceAvatar = res.getDrawable(R.drawable.quantum_ic_group_vd_theme_24, null); + + mPaint.setTypeface( + Typeface.create(res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL)); + mPaint.setTextAlign(Align.CENTER); + mPaint.setAntiAlias(true); mPaint.setFilterBitmap(true); mPaint.setDither(true); - mColor = sDefaultColor; + mColor = mDefaultColor; } private Rect getScaledBounds(float scale, float offset) { @@ -165,20 +156,20 @@ public class LetterTileDrawable extends Drawable { switch (contactType) { case TYPE_BUSINESS: mScale = VECTOR_ICON_SCALE; - return sDefaultBusinessAvatar; + return mDefaultBusinessAvatar; case TYPE_VOICEMAIL: mScale = VECTOR_ICON_SCALE; - return sDefaultVoicemailAvatar; + return mDefaultVoicemailAvatar; case TYPE_SPAM: mScale = VECTOR_ICON_SCALE; - return sDefaultSpamAvatar; + return mDefaultSpamAvatar; case TYPE_CONFERENCE: mScale = VECTOR_ICON_SCALE; - return sDefaultConferenceAvatar; + return mDefaultConferenceAvatar; case TYPE_PERSON: case TYPE_GENERIC_AVATAR: default: - return sDefaultPersonAvatar; + return mDefaultPersonAvatar; } } @@ -206,39 +197,38 @@ public class LetterTileDrawable extends Drawable { private void drawLetterTile(final Canvas canvas) { // Draw background color. - sPaint.setColor(mColor); - sPaint.setAlpha(mPaint.getAlpha()); + mPaint.setColor(mColor); final Rect bounds = getBounds(); final int minDimension = Math.min(bounds.width(), bounds.height()); if (mIsCircle) { - canvas.drawCircle(bounds.centerX(), bounds.centerY(), minDimension / 2, sPaint); + canvas.drawCircle(bounds.centerX(), bounds.centerY(), minDimension / 2, mPaint); } else { - canvas.drawRect(bounds, sPaint); + canvas.drawRect(bounds, mPaint); } // Draw letter/digit only if the first character is an english letter or there's a override if (mLetter != null) { // Draw letter or digit. - sFirstChar[0] = mLetter; + mFirstChar[0] = mLetter; // Scale text by canvas bounds and user selected scaling factor - sPaint.setTextSize(mScale * sLetterToTileRatio * minDimension); - sPaint.getTextBounds(sFirstChar, 0, 1, sRect); - sPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL)); - sPaint.setColor(sTileFontColor); - sPaint.setAlpha(ALPHA); + mPaint.setTextSize(mScale * mLetterToTileRatio * minDimension); + mPaint.getTextBounds(mFirstChar, 0, 1, mRect); + mPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL)); + mPaint.setColor(mTileFontColor); + mPaint.setAlpha(ALPHA); // Draw the letter in the canvas, vertically shifted up or down by the user-defined // offset canvas.drawText( - sFirstChar, + mFirstChar, 0, 1, bounds.centerX(), - bounds.centerY() + mOffset * bounds.height() - sRect.exactCenterY(), - sPaint); + bounds.centerY() + mOffset * bounds.height() - mRect.exactCenterY(), + mPaint); } else { // Draw the default image if there is no letter/digit to be drawn Drawable drawable = getDrawableForContactType(mContactType); @@ -248,7 +238,7 @@ public class LetterTileDrawable extends Drawable { } drawable.setBounds(getScaledBounds(mScale, mOffset)); - drawable.setAlpha(drawable == sDefaultSpamAvatar ? SPAM_ALPHA : ALPHA); + drawable.setAlpha(drawable == mDefaultSpamAvatar ? SPAM_ALPHA : ALPHA); drawable.draw(canvas); } } @@ -265,20 +255,20 @@ public class LetterTileDrawable extends Drawable { /** Returns a deterministic color based on the provided contact identifier string. */ private int pickColor(final String identifier) { if (mContactType == TYPE_SPAM) { - return sSpamColor; + return mSpamColor; } if (mContactType == TYPE_VOICEMAIL || mContactType == TYPE_BUSINESS || TextUtils.isEmpty(identifier)) { - return sDefaultColor; + return mDefaultColor; } // String.hashCode() implementation is not supposed to change across java versions, so // this should guarantee the same email address always maps to the same color. // The email should already have been normalized by the ContactRequest. - final int color = Math.abs(identifier.hashCode()) % sColors.length(); - return sColors.getColor(color, sDefaultColor); + final int color = Math.abs(identifier.hashCode()) % mColors.length(); + return mColors.getColor(color, mDefaultColor); } @Override @@ -354,7 +344,7 @@ public class LetterTileDrawable extends Drawable { return this; } - public LetterTileDrawable setContactType(@ContactType int contactType) { + private LetterTileDrawable setContactType(@ContactType int contactType) { mContactType = contactType; return this; } diff --git a/java/com/android/dialer/about/res/raw/third_party_license_metadata b/java/com/android/dialer/about/res/raw/third_party_license_metadata index 1acf3480c..10ed4a2ab 100644 --- a/java/com/android/dialer/about/res/raw/third_party_license_metadata +++ b/java/com/android/dialer/about/res/raw/third_party_license_metadata @@ -1,34 +1,38 @@ 40:10695 Android Annotations Support Library -10770:10695 Android Compat Support Library -21501:10695 Android Core UI Support Library -32235:10691 Android Core Utils Support Library -42961:10695 Android Design Support Library -53694:10695 Android Fragments Support Library -64426:10695 Android Graphics Support Library -75162:10691 Android Media Compat Support Library -85892:10691 Android Transition Support Library -96621:10695 Android Compatibility Library v13 -107353:10695 Android Compatibility Library v4 -118085:10695 Android Compatibility Library v7 -128796:16013 Android SDK -144828:11358 Android Common -156196:4771 Glide -160982:11358 Guava JDK5 -172358:12847 jibercsclient -185224:10173 libphonenumber -195416:10699 shortcutbadger -206126:11358 Volley -217495:18982 mime4j -236493:11358 Google Auto -247862:11358 Dagger -259236:11357 Error Prone -270604:11358 J2ObjC -281984:11359 Apache Commons IO -293355:11358 JSR 250 -304725:1602 JSR 305 -306339:11365 JSR 330 -317738:12847 carrierservices -317738:12847 rcsclientlib -330614:11358 material_components -330614:11358 lib -341987:11362 Guava JDK7 +10754:11358 Android Common +22147:10695 Android Compat Support Library +32880:10695 Android Compatibility Library v13 +43612:10695 Android Compatibility Library v4 +54344:10695 Android Compatibility Library v7 +65075:10695 Android Core UI Support Library +75809:10691 Android Core Utils Support Library +86535:10695 Android Design Support Library +97276:10695 Android Dynamic Animation Support Library +108009:10695 Android Fragments Support Library +118741:10695 Android Graphics Support Library +129477:10691 Android Media Compat Support Library +140207:10691 Android Transition Support Library +150920:11359 Apache Commons IO +162290:11358 Dagger +173664:11357 Error Prone +185037:11358 Google Auto +196410:11358 Guava JDK5 +207783:11362 Guava JDK7 +219156:11358 J2ObjC +230526:11358 JSR 250 +241896:11365 JSR 330 +253297:11358 Material Components for Android +264666:11358 OkHttp +276033:11358 Okio +287402:11358 Volley +298780:12847 carrierservices +311636:10402 gRPC +322058:11358 instrumentation +333434:12847 jibercsclient +346300:10173 libphonenumber +356484:18982 mime4j +375485:10699 shortcutbadger +386200:16013 Android SDK +402232:1096 Animal Sniffer +403338:4771 Glide +408121:1602 JSR 305 diff --git a/java/com/android/dialer/about/res/raw/third_party_licenses b/java/com/android/dialer/about/res/raw/third_party_licenses index c56f8a42c..51f548288 100644 --- a/java/com/android/dialer/about/res/raw/third_party_licenses +++ b/java/com/android/dialer/about/res/raw/third_party_licenses @@ -194,19 +194,7 @@ Android Annotations Support Library: -Android Compat Support Library: - - - Copyright (c) 2005-2011, The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Android Common: Apache License @@ -386,9 +374,33 @@ Android Compat Support Library: END OF TERMS AND CONDITIONS + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + Copyright [yyyy] [name of copyright owner] -Android Core UI Support Library: + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +Android Compat Support Library: Copyright (c) 2005-2011, The Android Open Source Project @@ -582,10 +594,10 @@ Android Core UI Support Library: -Android Core Utils Support Library: +Android Compatibility Library v13: - Copyright (c) 2005-2011, The Android Open Source Project + Copyright (c) 2005-2011, The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -774,7 +786,9 @@ Android Core Utils Support Library: END OF TERMS AND CONDITIONS -Android Design Support Library: + + +Android Compatibility Library v4: Copyright (c) 2005-2011, The Android Open Source Project @@ -968,7 +982,7 @@ Android Design Support Library: -Android Fragments Support Library: +Android Compatibility Library v7: Copyright (c) 2005-2011, The Android Open Source Project @@ -1162,7 +1176,7 @@ Android Fragments Support Library: -Android Graphics Support Library: +Android Core UI Support Library: Copyright (c) 2005-2011, The Android Open Source Project @@ -1356,7 +1370,7 @@ Android Graphics Support Library: -Android Media Compat Support Library: +Android Core Utils Support Library: Copyright (c) 2005-2011, The Android Open Source Project @@ -1548,10 +1562,10 @@ Android Media Compat Support Library: END OF TERMS AND CONDITIONS -Android Transition Support Library: +Android Design Support Library: - Copyright (c) 2005-2011, The Android Open Source Project + Copyright (c) 2005-2011, The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -1740,7 +1754,9 @@ Android Transition Support Library: END OF TERMS AND CONDITIONS -Android Compatibility Library v13: + + +Android Dynamic Animation Support Library: Copyright (c) 2005-2011, The Android Open Source Project @@ -1934,7 +1950,7 @@ Android Compatibility Library v13: -Android Compatibility Library v4: +Android Fragments Support Library: Copyright (c) 2005-2011, The Android Open Source Project @@ -2128,7 +2144,7 @@ Android Compatibility Library v4: -Android Compatibility Library v7: +Android Graphics Support Library: Copyright (c) 2005-2011, The Android Open Source Project @@ -2322,278 +2338,211 @@ Android Compatibility Library v7: -Android SDK: +Android Media Compat Support Library: -ANDROID SOFTWARE DEVELOPMENT KIT -Terms and Conditions + Copyright (c) 2005-2011, The Android Open Source Project -This is the Android Software Development Kit License Agreement. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. -1. Introduction + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and -specifically including the Android system files, packaged APIs, and Google APIs add-ons) is -licensed to you subject to the terms of this License Agreement. This License Agreement forms a -legally binding contract between you and Google in relation to your use of the SDK. -1.2 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 -Amphitheatre Parkway, Mountain View, CA 94043, United States. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -2. Accepting this License Agreement + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use the -SDK if you do not accept this License Agreement. + 1. Definitions. -2.2 You can accept this License Agreement by: + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -(A) clicking to accept or agree to this License Agreement, where this option is made available to -you; or + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -(B) by actually using the SDK. In this case, you agree that use of the SDK constitutes acceptance of -the Licensing Agreement from that point onwards. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -2.3 You may not use the SDK and may not accept the Licensing Agreement if you are a person barred -from receiving the SDK under the laws of the United States or other countries including the country -in which you are resident or from which you use the SDK. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or other -entity, you represent and warrant that you have full legal authority to bind your employer or such -entity to this License Agreement. If you do not have the requisite authority, you may not accept -the Licensing Agreement or use the SDK on behalf of your employer or other entity. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -3. SDK License from Google + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, -royalty-free, non- assignable and non-exclusive license to use the SDK solely to develop -applications to run on the Android platform. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -3.2 You agree that Google or third parties own all legal right, title and interest in and to the -SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property -Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, -and any and all other proprietary rights. Google reserves all rights not expressly granted to you. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -3.3 Except to the extent required by applicable third party licenses, you may not copy (except for -backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create -derivative works of the SDK or any part of the SDK. Except to the extent required by applicable -third party licenses, you may not load any part of the SDK onto a mobile handset or any other -hardware device except a personal computer, combine any part of the SDK with other software, or -distribute any software or device incorporating a part of the SDK. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -3.4 Use, reproduction and distribution of components of the SDK licensed under an open source -software license are governed solely by the terms of that open source software license and not -this License Agreement. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -3.5 You agree that the form and nature of the SDK that Google provides may change without prior -notice to you and that future versions of the SDK may be incompatible with applications developed -on previous versions of the SDK. You agree that Google may stop (permanently or temporarily) -providing the SDK (or any features within the SDK) to you or to users generally at Google's sole -discretion, without prior notice to you. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -3.6 Nothing in this License Agreement gives you a right to use any of Google's trade names, -trademarks, service marks, logos, domain names, or other distinctive brand features. + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -3.7 You agree that you will not remove, obscure, or alter any proprietary rights notices (including -copyright and trademark notices) that may be affixed to or contained within the SDK. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -4. Use of the SDK by You + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under -this License Agreement in or to any software applications that you develop using the SDK, including -any intellectual property rights that subsist in those applications. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) this -License Agreement and (b) any applicable law, regulation or generally accepted practices or -guidelines in the relevant jurisdictions (including any laws regarding the export of data or -software to and from the United States or other relevant countries). + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -4.3 You agree that if you use the SDK to develop applications for general public users, you will -protect the privacy and legal rights of those users. If the users provide you with user names, -passwords, or other login information or personal information, your must make the users aware that -the information will be available to your application, and you must provide legally adequate privacy -notice and protection for those users. If your application stores personal or sensitive information -provided by users, it must do so securely. If the user provides your application with Google Account -information, your application may only use that information to access the user's Google Account -when, and for the limited purposes for which, the user has given you permission to do so. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -4.4 You agree that you will not engage in any activity with the SDK, including the development or -distribution of an application, that interferes with, disrupts, damages, or accesses in an -unauthorized manner the servers, networks, or other properties or services of any third party -including, but not limited to, Google or any mobile communications carrier. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or -to any third party for) any data, content, or resources that you create, transmit or display through -the Android platform and/or applications for the Android platform, and for the consequences of your -actions (including any loss or damage which Google may suffer) by doing so. - -4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or -to any third party for) any breach of your obligations under this License Agreement, any applicable -third party contract or Terms of Service, or any applicable law or regulation, and for the -consequences (including any loss or damage which Google or any third party may suffer) of any such -breach. - -5. Your Developer Credentials - -5.1 You agree that you are responsible for maintaining the confidentiality of any developer -credentials that may be issued to you by Google or which you may choose yourself and that you will -be solely responsible for all applications that are developed under your developer credentials. - -6. Privacy and Information - -6.1 In order to continually innovate and improve the SDK, Google may collect certain usage -statistics from the software including but not limited to a unique identifier, associated IP -address, version number of the software, and information on which tools and/or services in the SDK -are being used and how they are being used. Before any of this information is collected, the SDK -will notify you and seek your consent. If you withhold consent, the information will not be -collected. - -6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in -accordance with Google's Privacy Policy. - -7. Third Party Applications for the Android Platform - -7.1 If you use the SDK to run applications developed by a third party or that access data, content -or resources provided by a third party, you agree that Google is not responsible for those -applications, data, content, or resources. You understand that all data, content or resources which -you may access through such third party applications are the sole responsibility of the person from -which they originated and that Google is not liable for any loss or damage that you may experience -as a result of the use or access of any of those third party applications, data, content, or -resources. - -7.2 You should be aware the data, content, and resources presented to you through such a third party -application may be protected by intellectual property rights which are owned by the providers (or by -other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute -or create derivative works based on these data, content, or resources (either in whole or in part) -unless you have been specifically given permission to do so by the relevant owners. - -7.3 You acknowledge that your use of such third party applications, data, content, or resources may -be subject to separate terms between you and the relevant third party. In that case, this License -Agreement does not affect your legal relationship with these third parties. - -8. Using Android APIs - -8.1 Google Data APIs - -8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be -protected by intellectual property rights which are owned by Google or those parties that provide -the data (or by other persons or companies on their behalf). Your use of any such API may be subject -to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create -derivative works based on this data (either in whole or in part) unless allowed by the relevant -Terms of Service. - -8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you -shall retrieve data only with the user's explicit consent and only when, and for the limited -purposes for which, the user has given you permission to do so. - -9. Terminating this License Agreement - -9.1 This License Agreement will continue to apply until terminated by either you or Google as set -out below. - -9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of the SDK -and any relevant developer credentials. - -9.3 Google may at any time, terminate this License Agreement with you if: - -(A) you have breached any provision of this License Agreement; or - -(B) Google is required to do so by law; or - -(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated -its relationship with Google or ceased to offer certain parts of the SDK to you; or - -(D) Google decides to no longer providing the SDK or certain parts of the SDK to users in the -country in which you are resident or from which you use the service, or the provision of the SDK or -certain SDK services to you by Google is, in Google's sole discretion, no longer commercially -viable. - -9.4 When this License Agreement comes to an end, all of the legal rights, obligations and -liabilities that you and Google have benefited from, been subject to (or which have accrued over -time whilst this License Agreement has been in force) or which are expressed to continue -indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall -continue to apply to such rights, obligations and liabilities indefinitely. - -10. DISCLAIMER OF WARRANTIES - -10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE -SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE. - -10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE -SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR -COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE. - -10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - -11. LIMITATION OF LIABILITY - -11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS -LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY -LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN -AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING. - -12. Indemnification - -12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless -Google, its affiliates and their respective directors, officers, employees and agents from and -against any and all claims, actions, suits or proceedings, as well as any and all losses, -liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or -accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any -copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any -person or defames any person or violates their rights of publicity or privacy, and (c) any -non-compliance by you with this License Agreement. - -13. Changes to the License Agreement - -13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. -When these changes are made, Google will make a new version of the License Agreement available on -the website where the SDK is made available. - -14. General Legal Terms + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -14.1 This License Agreement constitute the whole legal agreement between you and Google and govern -your use of the SDK (excluding any services which Google may provide to you under a separate written -agreement), and completely replace any prior agreements between you and Google in relation to the -SDK. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is -contained in this License Agreement (or which Google has the benefit of under any applicable law), -this will not be taken to be a formal waiver of Google's rights and that those rights or remedies -will still be available to Google. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision -of this License Agreement is invalid, then that provision will be removed from this License -Agreement without affecting the rest of this License Agreement. The remaining provisions of this -License Agreement will continue to be valid and enforceable. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -14.4 You acknowledge and agree that each member of the group of companies of which Google is the -parent shall be third party beneficiaries to this License Agreement and that such other companies -shall be entitled to directly enforce, and rely upon, any provision of this License Agreement that -confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall -be third party beneficiaries to this License Agreement. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST -COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE -LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE. + END OF TERMS AND CONDITIONS -14.6 The rights granted in this License Agreement may not be assigned or transferred by either you -or Google without the prior written approval of the other party. Neither you nor Google shall be -permitted to delegate their responsibilities or obligations under this License Agreement without the -prior written approval of the other party. +Android Transition Support Library: -14.7 This License Agreement, and your relationship with Google under this License Agreement, shall -be governed by the laws of the State of California without regard to its conflict of laws -provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located -within the county of Santa Clara, California to resolve any legal matter arising from this License -Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for -injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction. -April 10, 2009 + Copyright (c) 2005-2011, The Android Open Source Project + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. -Android Common: + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. Apache License @@ -2773,163 +2722,37 @@ Android Common: END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. +Apache Commons IO: - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - http://www.apache.org/licenses/LICENSE-2.0 + 1. Definitions. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -Glide: + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -Covers library/ + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -Copyright 2014 Google, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE, INC. OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those of the -authors and should not be interpreted as representing official policies, either expressed -or implied, of Google, Inc. - --------------------------------------------------------------------------- -Covers third_party/gif_decoder - -Copyright (c) 2013 Xcellent Creations, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------- -Covers third_party/disklrucache - -Copyright 2012 Jake Wharton -Copyright 2011 The Android Open Source Project - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. --------------------------------------------------------------------------- -Covers third_party/gif_encoder/AnimatedGifEncoder.java and -third_party/gif_encoder/LZWEncoder.java: - -No copyright asserted on the source code of this class. May be used for any -purpose, however, refer to the Unisys LZW patent for restrictions on use of -the associated LZWEncoder class. Please forward any corrections to -kweiner@fmsware.com. - ------------------------------------------------------------------------------ -Covers third_party/gif_encoder/NeuQuant.java - -Copyright (c) 1994 Anthony Dekker - -NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. See -"Kohonen neural networks for optimal colour quantization" in "Network: -Computation in Neural Systems" Vol. 5 (1994) pp 351-367. for a discussion of -the algorithm. - -Any party obtaining a copy of these files from the author, directly or -indirectly, is granted, free of charge, a full and unrestricted irrevocable, -world-wide, paid up, royalty-free, nonexclusive right and license to deal in -this software and documentation files (the "Software"), including without -limitation the rights to use, copy, modify, merge, publish, distribute, -sublicense, and/or sell copies of the Software, and to permit persons who -receive copies from any such party to do so, with the only requirement being -that this copyright notice remain intact. - - -Guava JDK5: - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but @@ -3105,31 +2928,8 @@ Guava JDK5: limitations under the License. -jibercsclient: - -These components - com.google.android.rcs.core, - com.google.android.rcs.core.utils.CaseInsensitiveMap, - com.google.android.rcs.core.utils.DateTime, - com.google.android.rcs.core.utils.InetAddresses, - com.google.android.rcs.core.network.ConnectivityMonitor, - com.google.android.rcs.client.PrivateDataStorage, - com.google.android.rcs.client.utils.FastXmlSerializer, - com.google.android.rcs.client.utils.XmlUtils, - com.google.android.rcs.client.utils.QueuedWork -are licensed under Apache v2. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +Dagger: Apache License @@ -3309,42 +3109,33 @@ limitations under the License. END OF TERMS AND CONDITIONS -=============================================================================== + APPENDIX: How to apply the Apache License to your work. -These components - com.google.android.rcs.core.utils.FastBase64, - com.google.android.rcs.core.utils.LibraryLoaderHelper -are licensed under BSD. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: + Copyright [yyyy] [name of copyright owner] - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. + http://www.apache.org/licenses/LICENSE-2.0 -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -libphonenumber: +Error Prone: Apache License Version 2.0, January 2004 @@ -3523,20 +3314,33 @@ libphonenumber: END OF TERMS AND CONDITIONS + APPENDIX: How to apply the Apache License to your work. -shortcutbadger: + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at + Copyright [yyyy] [name of copyright owner] - http://www.apache.org/licenses/LICENSE-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +Google Auto: Apache License @@ -3716,20 +3520,45 @@ limitations under the License. END OF TERMS AND CONDITIONS + APPENDIX: How to apply the Apache License to your work. -Volley: - + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Copyright [yyyy] [name of copyright owner] - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - 1. Definitions. + http://www.apache.org/licenses/LICENSE-2.0 - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +Guava JDK5: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. @@ -3923,7 +3752,8 @@ Volley: limitations under the License. -mime4j: +Guava JDK7: + Apache License Version 2.0, January 2004 @@ -4101,194 +3931,35 @@ mime4j: of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS - - - - THIS PRODUCT ALSO INCLUDES THIRD PARTY SOFTWARE REDISTRIBUTED UNDER THE - FOLLOWING LICENSES: + APPENDIX: How to apply the Apache License to your work. - Apache Commons Logging, - The Apache Software License, Version 1.1 (commons-logging-1.1.1.jar) - - The Apache Software License, Version 1.1 - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. The end-user documentation included with the redistribution, - if any, must include the following acknowledgment: - "This product includes software developed by the - Apache Software Foundation (http://www.apache.org/)." - Alternately, this acknowledgment may appear in the software itself, - if and wherever such third-party acknowledgments normally appear. - - 4. The names "Apache" and "Apache Software Foundation" must - not be used to endorse or promote products derived from this - software without prior written permission. For written - permission, please contact apache@apache.org. - - 5. Products derived from this software may not be called "Apache", - nor may "Apache" appear in their name, without prior written - permission of the Apache Software Foundation. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - Test messages from the Perl-MIME-Tools project, - - The "Artistic License" - - Preamble - - The intent of this document is to state the conditions under which a - Package may be copied, such that the Copyright Holder maintains some - semblance of artistic control over the development of the package, - while giving the users of the package the right to use and distribute - the Package in a more-or-less customary fashion, plus the right to make - reasonable modifications. - - Definitions: - - "Package" refers to the collection of files distributed by the - Copyright Holder, and derivatives of that collection of files - created through textual modification. - - "Standard Version" refers to such a Package if it has not been - modified, or has been modified in accordance with the wishes - of the Copyright Holder as specified below. - - "Copyright Holder" is whoever is named in the copyright or - copyrights for the package. - - "You" is you, if you're thinking about copying or distributing - this Package. - - "Reasonable copying fee" is whatever you can justify on the - basis of media cost, duplication charges, time of people involved, - and so on. (You will not be required to justify it to the - Copyright Holder, but only to the computing community at large - as a market that must bear the fee.) - - "Freely Available" means that no fee is charged for the item - itself, though there may be fees involved in handling the item. - It also means that recipients of the item may redistribute it - under the same conditions they received it. - - 1. You may make and give away verbatim copies of the source form of the - Standard Version of this Package without restriction, provided that you - duplicate all of the original copyright notices and associated disclaimers. - - 2. You may apply bug fixes, portability fixes and other modifications - derived from the Public Domain or from the Copyright Holder. A Package - modified in such a way shall still be considered the Standard Version. - - 3. You may otherwise modify your copy of this Package in any way, provided - that you insert a prominent notice in each changed file stating how and - when you changed that file, and provided that you do at least ONE of the - following: - - a) place your modifications in the Public Domain or otherwise make them - Freely Available, such as by posting said modifications to Usenet or - an equivalent medium, or placing the modifications on a major archive - site such as uunet.uu.net, or by allowing the Copyright Holder to include - your modifications in the Standard Version of the Package. - - b) use the modified Package only within your corporation or organization. - - c) rename any non-standard executables so the names do not conflict - with standard executables, which must also be provided, and provide - a separate manual page for each non-standard executable that clearly - documents how it differs from the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - - 4. You may distribute the programs of this Package in object code or - executable form, provided that you do at least ONE of the following: - - a) distribute a Standard Version of the executables and library files, - together with instructions (in the manual page or equivalent) on where - to get the Standard Version. - - b) accompany the distribution with the machine-readable source of - the Package with your modifications. - - c) give non-standard executables non-standard names, and clearly - document the differences in manual pages (or equivalent), together - with instructions on where to get the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - - 5. You may charge a reasonable copying fee for any distribution of this - Package. You may charge any fee you choose for support of this - Package. You may not charge a fee for this Package itself. However, - you may distribute this Package in aggregate with other (possibly - commercial) programs as part of a larger (possibly commercial) software - distribution provided that you do not advertise this Package as a - product of your own. You may embed this Package's interpreter within - an executable of yours (by linking); this shall be construed as a mere - form of aggregation, provided that the complete Standard Version of the - interpreter is so embedded. - - 6. The scripts and library files supplied as input to or produced as - output from the programs of this Package do not automatically fall - under the copyright of this Package, but belong to whoever generated - them, and may be sold commercially, and may be aggregated with this - Package. If such scripts or library files are aggregated with this - Package via the so-called "undump" or "unexec" methods of producing a - binary executable image, then distribution of such an image shall - neither be construed as a distribution of this Package nor shall it - fall under the restrictions of Paragraphs 3 and 4, provided that you do - not represent such an executable image as a Standard Version of this - Package. - - 7. C subroutines (or comparably compiled subroutines in other - languages) supplied by you and linked into this Package in order to - emulate subroutines and variables of the language defined by this - Package shall not be considered part of this Package, but are the - equivalent of input as in Paragraph 6, provided these subroutines do - not change the language in any way that would cause it to fail the - regression tests for the language. - - 8. Aggregation of this Package with a commercial distribution is always - permitted provided that the use of this Package is embedded; that is, - when no overt attempt is made to make this Package's interfaces visible - to the end user of the commercial distribution. Such use shall not be - construed as a distribution of this Package. - - 9. The name of the Copyright Holder may not be used to endorse or promote - products derived from this software without specific prior written permission. - - 10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - The End + Copyright [yyyy] [name of copyright owner] - - + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + -Google Auto: + +J2ObjC: Apache License @@ -4494,7 +4165,7 @@ Google Auto: limitations under the License. -Dagger: +JSR 250: Apache License @@ -4700,8 +4371,9 @@ Dagger: limitations under the License. -Error Prone: +JSR 330: +JSR-330 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4905,7 +4577,7 @@ Error Prone: limitations under the License. -J2ObjC: +Material Components for Android: Apache License @@ -5111,7 +4783,7 @@ J2ObjC: limitations under the License. -Apache Commons IO: +OkHttp: Apache License @@ -5317,8 +4989,7 @@ Apache Commons IO: limitations under the License. - -JSR 250: +Okio: Apache License @@ -5524,46 +5195,14 @@ JSR 250: limitations under the License. -JSR 305: +Volley: -Copyright (c) 2007-2009, JSR305 expert group -All rights reserved. -http://www.opensource.org/licenses/bsd-license.php + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the JSR305 expert group nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - - -JSR 330: - -JSR-330 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. @@ -5762,7 +5401,7 @@ JSR-330 limitations under the License. -carrierservices, rcsclientlib: +carrierservices: These components com.google.android.rcs.core, @@ -6001,19 +5640,18 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -material_components, lib: +gRPC: Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. @@ -6092,7 +5730,6 @@ material_components, lib: granted to You under this License for that Work shall terminate as of the date such litigation is filed. - 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: @@ -6110,7 +5747,6 @@ material_components, lib: the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one @@ -6128,9 +5764,7 @@ material_components, lib: You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, @@ -6181,24 +5815,13 @@ material_components, lib: END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] + Copyright 2015-2017 gRPC authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -6207,7 +5830,7 @@ material_components, lib: limitations under the License. -Guava JDK7: +instrumentation: Apache License @@ -6411,4 +6034,1408 @@ Guava JDK7: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + + +jibercsclient: + +These components + com.google.android.rcs.core, + com.google.android.rcs.core.utils.CaseInsensitiveMap, + com.google.android.rcs.core.utils.DateTime, + com.google.android.rcs.core.utils.InetAddresses, + com.google.android.rcs.core.network.ConnectivityMonitor, + com.google.android.rcs.client.PrivateDataStorage, + com.google.android.rcs.client.utils.FastXmlSerializer, + com.google.android.rcs.client.utils.XmlUtils, + com.google.android.rcs.client.utils.QueuedWork +are licensed under Apache v2. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +=============================================================================== + +These components + com.google.android.rcs.core.utils.FastBase64, + com.google.android.rcs.core.utils.LibraryLoaderHelper +are licensed under BSD. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +libphonenumber: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + +mime4j: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + + + + THIS PRODUCT ALSO INCLUDES THIRD PARTY SOFTWARE REDISTRIBUTED UNDER THE + FOLLOWING LICENSES: + + Apache Commons Logging, + The Apache Software License, Version 1.1 (commons-logging-1.1.1.jar) + + The Apache Software License, Version 1.1 + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + 3. The end-user documentation included with the redistribution, + if any, must include the following acknowledgment: + "This product includes software developed by the + Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, + if and wherever such third-party acknowledgments normally appear. + + 4. The names "Apache" and "Apache Software Foundation" must + not be used to endorse or promote products derived from this + software without prior written permission. For written + permission, please contact apache@apache.org. + + 5. Products derived from this software may not be called "Apache", + nor may "Apache" appear in their name, without prior written + permission of the Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + + Test messages from the Perl-MIME-Tools project, + + The "Artistic License" + + Preamble + + The intent of this document is to state the conditions under which a + Package may be copied, such that the Copyright Holder maintains some + semblance of artistic control over the development of the package, + while giving the users of the package the right to use and distribute + the Package in a more-or-less customary fashion, plus the right to make + reasonable modifications. + + Definitions: + + "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes + of the Copyright Holder as specified below. + + "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + "You" is you, if you're thinking about copying or distributing + this Package. + + "Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people involved, + and so on. (You will not be required to justify it to the + Copyright Holder, but only to the computing community at large + as a market that must bear the fee.) + + "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. + It also means that recipients of the item may redistribute it + under the same conditions they received it. + + 1. You may make and give away verbatim copies of the source form of the + Standard Version of this Package without restriction, provided that you + duplicate all of the original copyright notices and associated disclaimers. + + 2. You may apply bug fixes, portability fixes and other modifications + derived from the Public Domain or from the Copyright Holder. A Package + modified in such a way shall still be considered the Standard Version. + + 3. You may otherwise modify your copy of this Package in any way, provided + that you insert a prominent notice in each changed file stating how and + when you changed that file, and provided that you do at least ONE of the + following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or + an equivalent medium, or placing the modifications on a major archive + site such as uunet.uu.net, or by allowing the Copyright Holder to include + your modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict + with standard executables, which must also be provided, and provide + a separate manual page for each non-standard executable that clearly + documents how it differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + + 4. You may distribute the programs of this Package in object code or + executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where + to get the Standard Version. + + b) accompany the distribution with the machine-readable source of + the Package with your modifications. + + c) give non-standard executables non-standard names, and clearly + document the differences in manual pages (or equivalent), together + with instructions on where to get the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + + 5. You may charge a reasonable copying fee for any distribution of this + Package. You may charge any fee you choose for support of this + Package. You may not charge a fee for this Package itself. However, + you may distribute this Package in aggregate with other (possibly + commercial) programs as part of a larger (possibly commercial) software + distribution provided that you do not advertise this Package as a + product of your own. You may embed this Package's interpreter within + an executable of yours (by linking); this shall be construed as a mere + form of aggregation, provided that the complete Standard Version of the + interpreter is so embedded. + + 6. The scripts and library files supplied as input to or produced as + output from the programs of this Package do not automatically fall + under the copyright of this Package, but belong to whoever generated + them, and may be sold commercially, and may be aggregated with this + Package. If such scripts or library files are aggregated with this + Package via the so-called "undump" or "unexec" methods of producing a + binary executable image, then distribution of such an image shall + neither be construed as a distribution of this Package nor shall it + fall under the restrictions of Paragraphs 3 and 4, provided that you do + not represent such an executable image as a Standard Version of this + Package. + + 7. C subroutines (or comparably compiled subroutines in other + languages) supplied by you and linked into this Package in order to + emulate subroutines and variables of the language defined by this + Package shall not be considered part of this Package, but are the + equivalent of input as in Paragraph 6, provided these subroutines do + not change the language in any way that would cause it to fail the + regression tests for the language. + + 8. Aggregation of this Package with a commercial distribution is always + permitted provided that the use of this Package is embedded; that is, + when no overt attempt is made to make this Package's interfaces visible + to the end user of the commercial distribution. Such use shall not be + construed as a distribution of this Package. + + 9. The name of the Copyright Holder may not be used to endorse or promote + products derived from this software without specific prior written permission. + + 10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End + + + + +shortcutbadger: + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + +Android SDK: + +ANDROID SOFTWARE DEVELOPMENT KIT + +Terms and Conditions + +This is the Android Software Development Kit License Agreement. + +1. Introduction + +1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and +specifically including the Android system files, packaged APIs, and Google APIs add-ons) is +licensed to you subject to the terms of this License Agreement. This License Agreement forms a +legally binding contract between you and Google in relation to your use of the SDK. + +1.2 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 +Amphitheatre Parkway, Mountain View, CA 94043, United States. + +2. Accepting this License Agreement + +2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use the +SDK if you do not accept this License Agreement. + +2.2 You can accept this License Agreement by: + +(A) clicking to accept or agree to this License Agreement, where this option is made available to +you; or + +(B) by actually using the SDK. In this case, you agree that use of the SDK constitutes acceptance of +the Licensing Agreement from that point onwards. + +2.3 You may not use the SDK and may not accept the Licensing Agreement if you are a person barred +from receiving the SDK under the laws of the United States or other countries including the country +in which you are resident or from which you use the SDK. + +2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or other +entity, you represent and warrant that you have full legal authority to bind your employer or such +entity to this License Agreement. If you do not have the requisite authority, you may not accept +the Licensing Agreement or use the SDK on behalf of your employer or other entity. + +3. SDK License from Google + +3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, +royalty-free, non- assignable and non-exclusive license to use the SDK solely to develop +applications to run on the Android platform. + +3.2 You agree that Google or third parties own all legal right, title and interest in and to the +SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property +Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, +and any and all other proprietary rights. Google reserves all rights not expressly granted to you. + +3.3 Except to the extent required by applicable third party licenses, you may not copy (except for +backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create +derivative works of the SDK or any part of the SDK. Except to the extent required by applicable +third party licenses, you may not load any part of the SDK onto a mobile handset or any other +hardware device except a personal computer, combine any part of the SDK with other software, or +distribute any software or device incorporating a part of the SDK. + +3.4 Use, reproduction and distribution of components of the SDK licensed under an open source +software license are governed solely by the terms of that open source software license and not +this License Agreement. + +3.5 You agree that the form and nature of the SDK that Google provides may change without prior +notice to you and that future versions of the SDK may be incompatible with applications developed +on previous versions of the SDK. You agree that Google may stop (permanently or temporarily) +providing the SDK (or any features within the SDK) to you or to users generally at Google's sole +discretion, without prior notice to you. + +3.6 Nothing in this License Agreement gives you a right to use any of Google's trade names, +trademarks, service marks, logos, domain names, or other distinctive brand features. + +3.7 You agree that you will not remove, obscure, or alter any proprietary rights notices (including +copyright and trademark notices) that may be affixed to or contained within the SDK. + +4. Use of the SDK by You + +4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under +this License Agreement in or to any software applications that you develop using the SDK, including +any intellectual property rights that subsist in those applications. + +4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) this +License Agreement and (b) any applicable law, regulation or generally accepted practices or +guidelines in the relevant jurisdictions (including any laws regarding the export of data or +software to and from the United States or other relevant countries). + +4.3 You agree that if you use the SDK to develop applications for general public users, you will +protect the privacy and legal rights of those users. If the users provide you with user names, +passwords, or other login information or personal information, your must make the users aware that +the information will be available to your application, and you must provide legally adequate privacy +notice and protection for those users. If your application stores personal or sensitive information +provided by users, it must do so securely. If the user provides your application with Google Account +information, your application may only use that information to access the user's Google Account +when, and for the limited purposes for which, the user has given you permission to do so. + +4.4 You agree that you will not engage in any activity with the SDK, including the development or +distribution of an application, that interferes with, disrupts, damages, or accesses in an +unauthorized manner the servers, networks, or other properties or services of any third party +including, but not limited to, Google or any mobile communications carrier. + +4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or +to any third party for) any data, content, or resources that you create, transmit or display through +the Android platform and/or applications for the Android platform, and for the consequences of your +actions (including any loss or damage which Google may suffer) by doing so. + +4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or +to any third party for) any breach of your obligations under this License Agreement, any applicable +third party contract or Terms of Service, or any applicable law or regulation, and for the +consequences (including any loss or damage which Google or any third party may suffer) of any such +breach. + +5. Your Developer Credentials + +5.1 You agree that you are responsible for maintaining the confidentiality of any developer +credentials that may be issued to you by Google or which you may choose yourself and that you will +be solely responsible for all applications that are developed under your developer credentials. + +6. Privacy and Information + +6.1 In order to continually innovate and improve the SDK, Google may collect certain usage +statistics from the software including but not limited to a unique identifier, associated IP +address, version number of the software, and information on which tools and/or services in the SDK +are being used and how they are being used. Before any of this information is collected, the SDK +will notify you and seek your consent. If you withhold consent, the information will not be +collected. + +6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in +accordance with Google's Privacy Policy. + +7. Third Party Applications for the Android Platform + +7.1 If you use the SDK to run applications developed by a third party or that access data, content +or resources provided by a third party, you agree that Google is not responsible for those +applications, data, content, or resources. You understand that all data, content or resources which +you may access through such third party applications are the sole responsibility of the person from +which they originated and that Google is not liable for any loss or damage that you may experience +as a result of the use or access of any of those third party applications, data, content, or +resources. + +7.2 You should be aware the data, content, and resources presented to you through such a third party +application may be protected by intellectual property rights which are owned by the providers (or by +other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute +or create derivative works based on these data, content, or resources (either in whole or in part) +unless you have been specifically given permission to do so by the relevant owners. + +7.3 You acknowledge that your use of such third party applications, data, content, or resources may +be subject to separate terms between you and the relevant third party. In that case, this License +Agreement does not affect your legal relationship with these third parties. + +8. Using Android APIs + +8.1 Google Data APIs + +8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be +protected by intellectual property rights which are owned by Google or those parties that provide +the data (or by other persons or companies on their behalf). Your use of any such API may be subject +to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create +derivative works based on this data (either in whole or in part) unless allowed by the relevant +Terms of Service. + +8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you +shall retrieve data only with the user's explicit consent and only when, and for the limited +purposes for which, the user has given you permission to do so. + +9. Terminating this License Agreement + +9.1 This License Agreement will continue to apply until terminated by either you or Google as set +out below. + +9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of the SDK +and any relevant developer credentials. + +9.3 Google may at any time, terminate this License Agreement with you if: + +(A) you have breached any provision of this License Agreement; or + +(B) Google is required to do so by law; or + +(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated +its relationship with Google or ceased to offer certain parts of the SDK to you; or + +(D) Google decides to no longer providing the SDK or certain parts of the SDK to users in the +country in which you are resident or from which you use the service, or the provision of the SDK or +certain SDK services to you by Google is, in Google's sole discretion, no longer commercially +viable. + +9.4 When this License Agreement comes to an end, all of the legal rights, obligations and +liabilities that you and Google have benefited from, been subject to (or which have accrued over +time whilst this License Agreement has been in force) or which are expressed to continue +indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall +continue to apply to such rights, obligations and liabilities indefinitely. + +10. DISCLAIMER OF WARRANTIES + +10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE +SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE. + +10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE +SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR +COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE. + +10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +11. LIMITATION OF LIABILITY + +11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS +LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY +LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN +AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING. + +12. Indemnification + +12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless +Google, its affiliates and their respective directors, officers, employees and agents from and +against any and all claims, actions, suits or proceedings, as well as any and all losses, +liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or +accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any +copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any +person or defames any person or violates their rights of publicity or privacy, and (c) any +non-compliance by you with this License Agreement. + +13. Changes to the License Agreement + +13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. +When these changes are made, Google will make a new version of the License Agreement available on +the website where the SDK is made available. + +14. General Legal Terms + +14.1 This License Agreement constitute the whole legal agreement between you and Google and govern +your use of the SDK (excluding any services which Google may provide to you under a separate written +agreement), and completely replace any prior agreements between you and Google in relation to the +SDK. + +14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is +contained in this License Agreement (or which Google has the benefit of under any applicable law), +this will not be taken to be a formal waiver of Google's rights and that those rights or remedies +will still be available to Google. + +14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision +of this License Agreement is invalid, then that provision will be removed from this License +Agreement without affecting the rest of this License Agreement. The remaining provisions of this +License Agreement will continue to be valid and enforceable. + +14.4 You acknowledge and agree that each member of the group of companies of which Google is the +parent shall be third party beneficiaries to this License Agreement and that such other companies +shall be entitled to directly enforce, and rely upon, any provision of this License Agreement that +confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall +be third party beneficiaries to this License Agreement. + +14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST +COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE +LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE. + +14.6 The rights granted in this License Agreement may not be assigned or transferred by either you +or Google without the prior written approval of the other party. Neither you nor Google shall be +permitted to delegate their responsibilities or obligations under this License Agreement without the +prior written approval of the other party. + +14.7 This License Agreement, and your relationship with Google under this License Agreement, shall +be governed by the laws of the State of California without regard to its conflict of laws +provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located +within the county of Santa Clara, California to resolve any legal matter arising from this License +Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for +injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction. + +April 10, 2009 + + +Animal Sniffer: + +The MIT License + +Copyright (c) 2008 Kohsuke Kawaguchi and codehaus.org. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +Glide: + +Covers library/ + +Copyright 2014 Google, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE, INC. OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those of the +authors and should not be interpreted as representing official policies, either expressed +or implied, of Google, Inc. + +-------------------------------------------------------------------------- +Covers third_party/gif_decoder + +Copyright (c) 2013 Xcellent Creations, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------- +Covers third_party/disklrucache + +Copyright 2012 Jake Wharton +Copyright 2011 The Android Open Source Project + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +-------------------------------------------------------------------------- +Covers third_party/gif_encoder/AnimatedGifEncoder.java and +third_party/gif_encoder/LZWEncoder.java: + +No copyright asserted on the source code of this class. May be used for any +purpose, however, refer to the Unisys LZW patent for restrictions on use of +the associated LZWEncoder class. Please forward any corrections to +kweiner@fmsware.com. + +----------------------------------------------------------------------------- +Covers third_party/gif_encoder/NeuQuant.java + +Copyright (c) 1994 Anthony Dekker + +NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. See +"Kohonen neural networks for optimal colour quantization" in "Network: +Computation in Neural Systems" Vol. 5 (1994) pp 351-367. for a discussion of +the algorithm. + +Any party obtaining a copy of these files from the author, directly or +indirectly, is granted, free of charge, a full and unrestricted irrevocable, +world-wide, paid up, royalty-free, nonexclusive right and license to deal in +this software and documentation files (the "Software"), including without +limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons who +receive copies from any such party to do so, with the only requirement being +that this copyright notice remain intact. + + +JSR 305: + +Copyright (c) 2007-2009, JSR305 expert group +All rights reserved. + +http://www.opensource.org/licenses/bsd-license.php + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the JSR305 expert group nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java index f4c8c90f8..e0cd1706d 100644 --- a/java/com/android/dialer/app/calllog/CallLogAdapter.java +++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java @@ -368,18 +368,30 @@ public class CallLogAdapter extends GroupingListAdapter } expandViewHolderActions(viewHolder); - if (viewHolder.videoCallButtonView.getVisibility() == View.VISIBLE - && LightbringerComponent.get(mActivity) - .getLightbringer() - .getPackageName() - .equals( - ((IntentProvider) viewHolder.videoCallButtonView.getTag()) - .getIntent(mActivity) - .getPackage())) { + if (isLightbringerCallButtonVisible(viewHolder.videoCallButtonView)) { CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount(); } } } + + private boolean isLightbringerCallButtonVisible(View videoCallButtonView) { + if (videoCallButtonView == null) { + return false; + } + if (videoCallButtonView.getVisibility() != View.VISIBLE) { + return false; + } + IntentProvider intentProvider = (IntentProvider) videoCallButtonView.getTag(); + if (intentProvider == null) { + return false; + } + String packageName = + LightbringerComponent.get(mActivity).getLightbringer().getPackageName(); + if (packageName == null) { + return false; + } + return packageName.equals(intentProvider.getIntent(mActivity).getPackage()); + } }; private void checkMarkCallLogEntry(CallLogListItemViewHolder viewHolder) { diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java index aa765d90e..6d4aea91f 100644 --- a/java/com/android/dialer/app/calllog/CallLogFragment.java +++ b/java/com/android/dialer/app/calllog/CallLogFragment.java @@ -20,7 +20,6 @@ import static android.Manifest.permission.READ_CALL_LOG; import android.app.Activity; import android.app.Fragment; -import android.app.KeyguardManager; import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageManager; @@ -114,7 +113,6 @@ public class CallLogFragment extends Fragment private CallLogQueryHandler mCallLogQueryHandler; private boolean mScrollToTop; private EmptyContentView mEmptyListView; - private KeyguardManager mKeyguardManager; private ContactInfoCache mContactInfoCache; private final OnContactInfoChangedListener mOnContactInfoChangedListener = new OnContactInfoChangedListener() { @@ -219,7 +217,6 @@ public class CallLogFragment extends Fragment final Activity activity = getActivity(); final ContentResolver resolver = activity.getContentResolver(); mCallLogQueryHandler = new CallLogQueryHandler(activity, resolver, this, mLogLimit); - mKeyguardManager = (KeyguardManager) activity.getSystemService(Context.KEYGUARD_SERVICE); if (PermissionsUtil.hasCallLogReadPermissions(getContext())) { resolver.registerContentObserver(CallLog.CONTENT_URI, true, mCallLogObserver); @@ -349,7 +346,7 @@ public class CallLogFragment extends Fragment activityType == CallLogAdapter.ACTIVITY_TYPE_DIALTACTS ? (CallLogAdapter.OnActionModeStateChangedListener) getActivity() : null, - CallLogCache.getCallLogCache(getActivity()), + new CallLogCache(getActivity()), mContactInfoCache, getVoicemailPlaybackPresenter(), new FilteredNumberAsyncQueryHandler(getActivity()), @@ -432,8 +429,6 @@ public class CallLogFragment extends Fragment @Override public void onStop() { - updateOnTransition(); - super.onStop(); mAdapter.onStop(); mContactInfoCache.stop(); @@ -516,9 +511,7 @@ public class CallLogFragment extends Fragment super.setMenuVisibility(menuVisible); if (mMenuVisible != menuVisible) { mMenuVisible = menuVisible; - if (!menuVisible) { - updateOnTransition(); - } else if (isResumed()) { + if (menuVisible && isResumed()) { refreshData(); } } @@ -536,7 +529,6 @@ public class CallLogFragment extends Fragment fetchCalls(); mCallLogQueryHandler.fetchVoicemailStatus(); mCallLogQueryHandler.fetchMissedCallsUnreadCount(); - updateOnTransition(); mRefreshDataRequired = false; } else { // Refresh the display of the existing data to update the timestamp text descriptions. @@ -544,23 +536,6 @@ public class CallLogFragment extends Fragment } } - /** - * Updates the voicemail notification state. - * - *

TODO: Move to CallLogActivity - */ - private void updateOnTransition() { - // We don't want to update any call data when keyguard is on because the user has likely not - // seen the new calls yet. - // This might be called before onCreate() and thus we need to check null explicitly. - if (mKeyguardManager != null - && !mKeyguardManager.inKeyguardRestrictedInputMode() - && mCallTypeFilter == Calls.VOICEMAIL_TYPE) { - LogUtil.i("CallLogFragment.updateOnTransition", "clearing all new voicemails"); - CallLogNotificationsService.markAllNewVoicemailsAsOld(getActivity()); - } - } - @Override public void onEmptyViewActionButtonClicked() { final Activity activity = getActivity(); diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java index 27aa82577..884d07d50 100644 --- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java +++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java @@ -353,7 +353,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder View.OnClickListener expandCollapseListener, VoicemailPlaybackPresenter voicemailPlaybackPresenter) { Resources resources = context.getResources(); - CallLogCache callLogCache = CallLogCache.getCallLogCache(context); + CallLogCache callLogCache = new CallLogCache(context); PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(context, resources, callLogCache); diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java index 893d6bed9..17018b38d 100644 --- a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java +++ b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java @@ -16,6 +16,7 @@ package com.android.dialer.app.calllog; +import android.app.KeyguardManager; import android.content.Intent; import android.database.ContentObserver; import android.media.AudioManager; @@ -132,7 +133,7 @@ public class VisualVoicemailCallLogFragment extends CallLogFragment { @Override public void onVisible() { - LogUtil.enterBlock("VisualVoicemailCallLogFragment.onPageSelected"); + LogUtil.enterBlock("VisualVoicemailCallLogFragment.onVisible"); super.onVisible(); if (getActivity() != null) { Intent intent = new Intent(VoicemailContract.ACTION_SYNC_VOICEMAIL); @@ -145,10 +146,15 @@ public class VisualVoicemailCallLogFragment extends CallLogFragment { @Override public void onNotVisible() { - LogUtil.enterBlock("VisualVoicemailCallLogFragment.onPageUnselected"); + LogUtil.enterBlock("VisualVoicemailCallLogFragment.onNotVisible"); super.onNotVisible(); if (getActivity() != null) { getActivity().setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE); + // onNotVisible will be called in the lock screen when the call ends + if (!getActivity().getSystemService(KeyguardManager.class).inKeyguardRestrictedInputMode()) { + LogUtil.i("VisualVoicemailCallLogFragment.onNotVisible", "clearing all new voicemails"); + CallLogNotificationsService.markAllNewVoicemailsAsOld(getActivity()); + } } } } diff --git a/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java b/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java index 2e7c9339a..15de14318 100644 --- a/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java +++ b/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java @@ -19,8 +19,14 @@ package com.android.dialer.app.calllog.calllogcache; import android.content.Context; import android.support.annotation.Nullable; import android.telecom.PhoneAccountHandle; +import android.text.TextUtils; +import android.util.ArrayMap; import com.android.dialer.app.calllog.CallLogAdapter; +import com.android.dialer.calllogutils.PhoneAccountUtils; +import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.util.CallUtil; +import java.util.Map; +import javax.annotation.concurrent.ThreadSafe; /** * This is the base class for the CallLogCaches. @@ -31,7 +37,8 @@ import com.android.dialer.util.CallUtil; * *

This is designed with the specific use case of the {@link CallLogAdapter} in mind. */ -public abstract class CallLogCache { +@ThreadSafe +public class CallLogCache { // TODO: Dialer should be fixed so as not to check isVoicemail() so often but at the time of // this writing, that was a much larger undertaking than creating this cache. @@ -39,17 +46,18 @@ public abstract class CallLogCache { private boolean mHasCheckedForVideoAvailability; private int mVideoAvailability; + private final Map mPhoneAccountLabelCache = new ArrayMap<>(); + private final Map mPhoneAccountColorCache = new ArrayMap<>(); + private final Map mPhoneAccountCallWithNoteCache = new ArrayMap<>(); public CallLogCache(Context context) { mContext = context; } - /** Return the most compatible version of the TelecomCallLogCache. */ - public static CallLogCache getCallLogCache(Context context) { - return new CallLogCacheLollipopMr1(context); - } - - public void reset() { + public synchronized void reset() { + mPhoneAccountLabelCache.clear(); + mPhoneAccountColorCache.clear(); + mPhoneAccountCallWithNoteCache.clear(); mHasCheckedForVideoAvailability = false; mVideoAvailability = 0; } @@ -58,8 +66,13 @@ public abstract class CallLogCache { * Returns true if the given number is the number of the configured voicemail. To be able to * mock-out this, it is not a static method. */ - public abstract boolean isVoicemailNumber( - PhoneAccountHandle accountHandle, @Nullable CharSequence number); + public synchronized boolean isVoicemailNumber( + PhoneAccountHandle accountHandle, @Nullable CharSequence number) { + if (TextUtils.isEmpty(number)) { + return false; + } + return TelecomUtil.isVoicemailNumber(mContext, accountHandle, number.toString()); + } /** * Returns {@code true} when the current sim supports checking video calling capabilities via the @@ -74,10 +87,26 @@ public abstract class CallLogCache { } /** Extract account label from PhoneAccount object. */ - public abstract String getAccountLabel(PhoneAccountHandle accountHandle); + public synchronized String getAccountLabel(PhoneAccountHandle accountHandle) { + if (mPhoneAccountLabelCache.containsKey(accountHandle)) { + return mPhoneAccountLabelCache.get(accountHandle); + } else { + String label = PhoneAccountUtils.getAccountLabel(mContext, accountHandle); + mPhoneAccountLabelCache.put(accountHandle, label); + return label; + } + } /** Extract account color from PhoneAccount object. */ - public abstract int getAccountColor(PhoneAccountHandle accountHandle); + public synchronized int getAccountColor(PhoneAccountHandle accountHandle) { + if (mPhoneAccountColorCache.containsKey(accountHandle)) { + return mPhoneAccountColorCache.get(accountHandle); + } else { + Integer color = PhoneAccountUtils.getAccountColor(mContext, accountHandle); + mPhoneAccountColorCache.put(accountHandle, color); + return color; + } + } /** * Determines if the PhoneAccount supports specifying a call subject (i.e. calling with a note) @@ -86,5 +115,14 @@ public abstract class CallLogCache { * @param accountHandle The PhoneAccount handle. * @return {@code true} if calling with a note is supported, {@code false} otherwise. */ - public abstract boolean doesAccountSupportCallSubject(PhoneAccountHandle accountHandle); + public synchronized boolean doesAccountSupportCallSubject(PhoneAccountHandle accountHandle) { + if (mPhoneAccountCallWithNoteCache.containsKey(accountHandle)) { + return mPhoneAccountCallWithNoteCache.get(accountHandle); + } else { + Boolean supportsCallWithNote = + PhoneAccountUtils.getAccountSupportsCallSubject(mContext, accountHandle); + mPhoneAccountCallWithNoteCache.put(accountHandle, supportsCallWithNote); + return supportsCallWithNote; + } + } } diff --git a/java/com/android/dialer/app/list/PhoneFavoriteTileView.java b/java/com/android/dialer/app/list/PhoneFavoriteTileView.java index eb4f8e967..30870eb39 100644 --- a/java/com/android/dialer/app/list/PhoneFavoriteTileView.java +++ b/java/com/android/dialer/app/list/PhoneFavoriteTileView.java @@ -62,6 +62,7 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { private String mPhoneNumberString; private boolean isPinned; private boolean isStarred; + private int position = -1; public PhoneFavoriteTileView(Context context, AttributeSet attrs) { super(context, attrs); @@ -126,8 +127,7 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { CallSpecificAppData.Builder callSpecificAppData = CallSpecificAppData.newBuilder() .setCallInitiationType(CallInitiationType.Type.SPEED_DIAL) - .setSpeedDialContactPosition( - ((PhoneFavoriteListView) v.getParent()).getPositionForView(v)); + .setSpeedDialContactPosition(position); if (isStarred) { callSpecificAppData.addSpeedDialContactType(SpeedDialContactType.Type.STARRED_CONTACT); } else { @@ -182,4 +182,8 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { // Unlike Contacts' tiles, the Dialer's favorites tiles are square. return false; } + + public void setPosition(int position) { + this.position = position; + } } diff --git a/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java b/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java index 876fbf146..dbd601a7d 100644 --- a/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java +++ b/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java @@ -440,6 +440,7 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDrop tileView.setPhotoManager(mPhotoManager); tileView.setListener(mListener); tileView.loadFromContact(getItem(position)); + tileView.setPosition(position); return tileView; } diff --git a/java/com/android/dialer/app/res/values-bs/strings.xml b/java/com/android/dialer/app/res/values-bs/strings.xml index 9d8914c4f..fb00ce4dc 100644 --- a/java/com/android/dialer/app/res/values-bs/strings.xml +++ b/java/com/android/dialer/app/res/values-bs/strings.xml @@ -100,7 +100,7 @@ "Videopoziv." "Pošalji SMS kontaktu %1$s" "Nepreslušana govorna pošta" - "Pokreni glasovnu pretragu" + "Pokreni glasovno pretraživanje" "Pozovi %s" "Govorna pošta" "%s sek." @@ -127,7 +127,7 @@ "MEID" "Učitavanje sa SIM kartice…" "Kontakti sa SIM kartice" - "Glasovna pretraga nije dostupna" + "Glasovno pretraživanje nije dostupno" "Nije moguće uputiti poziv jer je aplikacija Telefon onemogućena." "Traži kontakte" "Dodajte broj ili tražite kontakte" @@ -157,7 +157,7 @@ "Dodaj u favorite" "Dodirnite sliku da vidite sve brojeve ili dodirnite i držite da promijenite raspored." "Ukloni" - "Izaberi sve" + "Odaberi sve" "Videopoziv" "Pošalji poruku" "Detalji o pozivu" diff --git a/java/com/android/dialer/app/res/values-da/strings.xml b/java/com/android/dialer/app/res/values-da/strings.xml index 81fd5ddb5..aabe678d6 100644 --- a/java/com/android/dialer/app/res/values-da/strings.xml +++ b/java/com/android/dialer/app/res/values-da/strings.xml @@ -88,7 +88,7 @@ "Indgående opkald" "Massehandlingstilstanden startes" "Massehandlingstilstanden blev afsluttet" - "Vælg %1$s" + "Valgt %1$s" "Fravalgt %1$s" "Afspil telefonsvarerbesked" "Vis kontaktpersonen %1$s" diff --git a/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java b/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java index b86ce8229..4100521ab 100644 --- a/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java +++ b/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java @@ -21,6 +21,7 @@ import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Build.VERSION_CODES; import android.preference.PreferenceManager; import android.support.v4.os.BuildCompat; @@ -56,7 +57,17 @@ public class LegacyVoicemailNotificationReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { LogUtil.i( "LegacyVoicemailNotificationReceiver.onReceive", "received legacy voicemail notification"); - Assert.checkArgument(BuildCompat.isAtLeastO()); + if (!BuildCompat.isAtLeastO()) { + LogUtil.e( + "LegacyVoicemailNotificationReceiver.onReceive", + "SDK not finalized: SDK_INT=" + + Build.VERSION.SDK_INT + + ", PREVIEW_SDK_INT=" + + Build.VERSION.PREVIEW_SDK_INT + + ", RELEASE=" + + Build.VERSION.RELEASE); + return; + } PhoneAccountHandle phoneAccountHandle = Assert.isNotNull(intent.getParcelableExtra(TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE)); diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java b/java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java index f2cdaf644..e3dc0b0b7 100644 --- a/java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java +++ b/java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java @@ -33,8 +33,8 @@ import android.view.View; import android.view.View.OnClickListener; import com.android.contacts.common.compat.TelephonyManagerCompat; import com.android.dialer.app.voicemail.error.VoicemailErrorMessage.Action; -import com.android.dialer.buildtype.BuildType; import com.android.dialer.common.LogUtil; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.voicemail.VisualVoicemailTypeExtensions; @@ -79,13 +79,11 @@ public class VoicemailTosMessageCreator { if (hasAcceptedTos()) { return null; } - // TODO: temporarily skip the terms of service for dogfood builds - if (BuildType.get() == BuildType.DOGFOOD) { - LogUtil.i( - "VoicemailTosMessageCreator.maybeCreateTosMessage", - "Skipping voicemail ToS for dogfood build"); + + if (!shouldShowTos()) { return null; } + logTosCreatedImpression(); return new VoicemailTosMessage( @@ -121,6 +119,25 @@ public class VoicemailTosMessageCreator { .setImageResourceId(getTosImageId()); } + private boolean shouldShowTos() { + if (isVvm3()) { + LogUtil.i("VoicemailTosMessageCreator.shouldShowTos", "showing TOS for verizon"); + return true; + } + + if (isVoicemailTranscriptionEnabled()) { + LogUtil.i( + "VoicemailTosMessageCreator.shouldShowTos", "showing TOS for Google transcription users"); + return true; + } + + return false; + } + + private boolean isVoicemailTranscriptionEnabled() { + return ConfigProviderBindings.get(context).getBoolean("voicemail_transcription_enabled", false); + } + private void showDeclineTosDialog(final PhoneAccountHandle handle) { if (isVvm3() && Vvm3VoicemailMessageCreator.PIN_NOT_SET == status.configurationState) { LogUtil.i( @@ -249,6 +266,10 @@ public class VoicemailTosMessageCreator { } private CharSequence getDialerTos() { + if (!isVoicemailTranscriptionEnabled()) { + return ""; + } + return useSpanish() ? context.getString(R.string.dialer_terms_and_conditions_1_0_spanish) : context.getString(R.string.dialer_terms_and_conditions_1_0_english); diff --git a/java/com/android/dialer/backup/DialerBackupAgent.java b/java/com/android/dialer/backup/DialerBackupAgent.java index 40de8e2a4..a0baf39f7 100644 --- a/java/com/android/dialer/backup/DialerBackupAgent.java +++ b/java/com/android/dialer/backup/DialerBackupAgent.java @@ -35,7 +35,6 @@ import android.telecom.PhoneAccountHandle; import android.util.Pair; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.dialer.telecom.TelecomUtil; @@ -96,76 +95,68 @@ public class DialerBackupAgent extends BackupAgent { public void onFullBackup(FullBackupDataOutput data) throws IOException { Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_FULL_BACKUP); LogUtil.i("DialerBackupAgent.onFullBackup", "performing dialer backup"); - boolean autoBackupEnabled = - ConfigProviderBindings.get(this).getBoolean("enable_autobackup", true); - boolean vmBackupEnabled = ConfigProviderBindings.get(this).getBoolean("enable_vm_backup", true); + List phoneAccountsToArchive = DialerBackupUtils.getPhoneAccountsToArchive(this); - if (autoBackupEnabled) { - if (!maxVoicemailBackupReached && vmBackupEnabled && !phoneAccountsToArchive.isEmpty()) { - voicemailsBackedupSoFar = 0; - sizeOfVoicemailsBackedupSoFar = 0; + if (!maxVoicemailBackupReached && !phoneAccountsToArchive.isEmpty()) { + voicemailsBackedupSoFar = 0; + sizeOfVoicemailsBackedupSoFar = 0; - LogUtil.i("DialerBackupAgent.onFullBackup", "autoBackup is enabled"); - ContentResolver contentResolver = getContentResolver(); - int limit = 1000; + LogUtil.i("DialerBackupAgent.onFullBackup", "autoBackup is enabled"); + ContentResolver contentResolver = getContentResolver(); + int limit = 1000; - Uri uri = - TelecomUtil.getCallLogUri(this) - .buildUpon() - .appendQueryParameter(Calls.LIMIT_PARAM_KEY, Integer.toString(limit)) - .build(); + Uri uri = + TelecomUtil.getCallLogUri(this) + .buildUpon() + .appendQueryParameter(Calls.LIMIT_PARAM_KEY, Integer.toString(limit)) + .build(); - LogUtil.i("DialerBackupAgent.onFullBackup", "backing up from: " + uri); + LogUtil.i("DialerBackupAgent.onFullBackup", "backing up from: " + uri); - try (Cursor cursor = - contentResolver.query( - uri, - null, - String.format( - "(%s = ? AND deleted = 0 AND %s = ? AND ?)", - Calls.TYPE, Voicemails.SOURCE_PACKAGE), - new String[] { - Integer.toString(CallLog.Calls.VOICEMAIL_TYPE), - VOICEMAIL_SOURCE_PACKAGE, - DialerBackupUtils.getPhoneAccountClause(phoneAccountsToArchive) - }, - ORDER_BY_DATE, - null)) { + try (Cursor cursor = + contentResolver.query( + uri, + null, + String.format( + "(%s = ? AND deleted = 0 AND %s = ? AND ?)", + Calls.TYPE, Voicemails.SOURCE_PACKAGE), + new String[] { + Integer.toString(CallLog.Calls.VOICEMAIL_TYPE), + VOICEMAIL_SOURCE_PACKAGE, + DialerBackupUtils.getPhoneAccountClause(phoneAccountsToArchive) + }, + ORDER_BY_DATE, + null)) { - if (cursor == null) { - LogUtil.i("DialerBackupAgent.onFullBackup", "cursor was null"); - return; - } + if (cursor == null) { + LogUtil.i("DialerBackupAgent.onFullBackup", "cursor was null"); + return; + } - LogUtil.i("DialerBackupAgent.onFullBackup", "cursor count: " + cursor.getCount()); - if (cursor.moveToFirst()) { - int fileNum = 0; - do { - backupRow( - data, cursor, String.format(Locale.US, VOICEMAIL_BACKUP_FILE_FORMAT, fileNum++)); - } while (cursor.moveToNext() && !maxVoicemailBackupReached); - } else { - LogUtil.i("DialerBackupAgent.onFullBackup", "cursor.moveToFirst failed"); - } + LogUtil.i("DialerBackupAgent.onFullBackup", "cursor count: " + cursor.getCount()); + if (cursor.moveToFirst()) { + int fileNum = 0; + do { + backupRow( + data, cursor, String.format(Locale.US, VOICEMAIL_BACKUP_FILE_FORMAT, fileNum++)); + } while (cursor.moveToNext() && !maxVoicemailBackupReached); + } else { + LogUtil.i("DialerBackupAgent.onFullBackup", "cursor.moveToFirst failed"); } } - LogUtil.i( - "DialerBackupAgent.onFullBackup", - "vm files backed up: %d, vm size backed up:%d, " - + "max vm backup reached:%b, vm backup enabled:%b phone accounts to archive: %d", - voicemailsBackedupSoFar, - sizeOfVoicemailsBackedupSoFar, - maxVoicemailBackupReached, - vmBackupEnabled, - phoneAccountsToArchive.size()); - super.onFullBackup(data); - Logger.get(this).logImpression(DialerImpression.Type.BACKUP_FULL_BACKED_UP); - } else { - Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_BACKUP_DISABLED); - LogUtil.i("DialerBackupAgent.onFullBackup", "autoBackup is disabled"); } + LogUtil.i( + "DialerBackupAgent.onFullBackup", + "vm files backed up: %d, vm size backed up:%d, " + + "max vm backup reached:%b, phone accounts to archive: %d", + voicemailsBackedupSoFar, + sizeOfVoicemailsBackedupSoFar, + maxVoicemailBackupReached, + phoneAccountsToArchive.size()); + super.onFullBackup(data); + Logger.get(this).logImpression(DialerImpression.Type.BACKUP_FULL_BACKED_UP); } private void backupRow(FullBackupDataOutput data, Cursor cursor, String fileName) @@ -218,34 +209,25 @@ public class DialerBackupAgent extends BackupAgent { String fileName = destination.getName(); LogUtil.i("DialerBackupAgent.onRestoreFile", "file name: " + fileName); - if (ConfigProviderBindings.get(this).getBoolean("enable_autobackup", true)) { - if (fileName.endsWith(VOICEMAIL_BACKUP_FILE_SUFFIX) - && ConfigProviderBindings.get(this).getBoolean("enable_vm_restore", true)) { - if (DialerBackupUtils.canRestoreVoicemails(getContentResolver(), this)) { - try { - super.onRestoreFile(data, size, destination, type, mode, mtime); - restoreVoicemail(destination); - destination.delete(); - } catch (IOException e) { - Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_IO_EXCEPTION); - LogUtil.e( - "DialerBackupAgent.onRestoreFile", - "could not restore voicemail - IOException: ", - e); - } - } else { - LogUtil.i( - "DialerBackupAgent.onRestoreFile", "build does not support restoring voicemails"); + if (fileName.endsWith(VOICEMAIL_BACKUP_FILE_SUFFIX)) { + if (DialerBackupUtils.canRestoreVoicemails(getContentResolver(), this)) { + try { + super.onRestoreFile(data, size, destination, type, mode, mtime); + restoreVoicemail(destination); + destination.delete(); + } catch (IOException e) { + Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_IO_EXCEPTION); + LogUtil.e( + "DialerBackupAgent.onRestoreFile", "could not restore voicemail - IOException: ", e); } - } else { - super.onRestoreFile(data, size, destination, type, mode, mtime); - LogUtil.i("DialerBackupAgent.onRestoreFile", "restored: " + fileName); - Logger.get(this).logImpression(DialerImpression.Type.BACKUP_RESTORED_FILE); + LogUtil.i("DialerBackupAgent.onRestoreFile", "build does not support restoring voicemails"); } + } else { - Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_DISABLED); - LogUtil.i("DialerBackupAgent.onRestoreFile", "autoBackup is disabled"); + super.onRestoreFile(data, size, destination, type, mode, mtime); + LogUtil.i("DialerBackupAgent.onRestoreFile", "restored: " + fileName); + Logger.get(this).logImpression(DialerImpression.Type.BACKUP_RESTORED_FILE); } } diff --git a/java/com/android/dialer/callcomposer/CameraComposerFragment.java b/java/com/android/dialer/callcomposer/CameraComposerFragment.java index 1002b27b1..7ec6611d9 100644 --- a/java/com/android/dialer/callcomposer/CameraComposerFragment.java +++ b/java/com/android/dialer/callcomposer/CameraComposerFragment.java @@ -18,13 +18,11 @@ package com.android.dialer.callcomposer; import android.Manifest; import android.content.Intent; -import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.graphics.drawable.Animatable; import android.hardware.Camera.CameraInfo; import android.net.Uri; import android.os.Bundle; -import android.preference.PreferenceManager; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -57,7 +55,6 @@ import com.android.dialer.util.PermissionsUtil; public class CameraComposerFragment extends CallComposerFragment implements CameraManagerListener, OnClickListener, CameraManager.MediaCallback { - private static final String CAMERA_PRIVACY_PREF = "camera_privacy_permission"; private static final String CAMERA_DIRECTION_KEY = "camera_direction"; private static final String CAMERA_URI_KEY = "camera_key"; @@ -134,11 +131,8 @@ public class CameraComposerFragment extends CallComposerFragment } private void setupCamera() { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext()); - if (!preferences.getBoolean(CAMERA_PRIVACY_PREF, false)) { - Toast.makeText(getContext(), getString(R.string.camera_privacy_text), Toast.LENGTH_LONG) - .show(); - preferences.edit().putBoolean(CAMERA_PRIVACY_PREF, true).apply(); + if (!PermissionsUtil.hasCameraPrivacyToastShown(getContext())) { + PermissionsUtil.showCameraPermissionToast(getContext()); } CameraManager.get().setListener(this); preview.setShown(); @@ -399,6 +393,7 @@ public class CameraComposerFragment extends CallComposerFragment Logger.get(getContext()).logImpression(DialerImpression.Type.CAMERA_PERMISSION_GRANTED); LogUtil.i("CameraComposerFragment.onRequestPermissionsResult", "Permission granted."); permissionView.setVisibility(View.GONE); + PermissionsUtil.setCameraPrivacyToastShown(getContext()); setupCamera(); } else if (requestCode == CAMERA_PERMISSION) { Logger.get(getContext()).logImpression(DialerImpression.Type.CAMERA_PERMISSION_DENIED); diff --git a/java/com/android/dialer/callcomposer/res/values-bs/strings.xml b/java/com/android/dialer/callcomposer/res/values-bs/strings.xml index a5ecb0c87..8ba9e72e8 100644 --- a/java/com/android/dialer/callcomposer/res/values-bs/strings.xml +++ b/java/com/android/dialer/callcomposer/res/values-bs/strings.xml @@ -31,7 +31,7 @@ "Da snimite fotografiju, dajte pristup Kameri" "Da podijelite sliku, dozvolite pristup Medijima" "Uslikaj" - "Izaberi fotografiju" + "Odaberi fotografiju" "Pošalji poruku" "Fotografija je poslana putem aplikacije Messages" "Poruka je poslana putem aplikacije Messages" diff --git a/java/com/android/dialer/calldetails/AndroidManifest.xml b/java/com/android/dialer/calldetails/AndroidManifest.xml index fd887c4b5..9cf656e42 100644 --- a/java/com/android/dialer/calldetails/AndroidManifest.xml +++ b/java/com/android/dialer/calldetails/AndroidManifest.xml @@ -19,13 +19,9 @@ - - - - - diff --git a/java/com/android/dialer/callintent/CallIntentBuilder.java b/java/com/android/dialer/callintent/CallIntentBuilder.java index e5449c804..36ea907ff 100644 --- a/java/com/android/dialer/callintent/CallIntentBuilder.java +++ b/java/com/android/dialer/callintent/CallIntentBuilder.java @@ -160,4 +160,11 @@ public class CallIntentBuilder { public static int getLightbringerButtonAppearInSearchCount() { return lightbringerButtonAppearInSearchCount; } + + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public static void clearLightbringerCounts() { + lightbringerButtonAppearInCollapsedCallLogItemCount = 0; + lightbringerButtonAppearInExpandedCallLogItemCount = 0; + lightbringerButtonAppearInSearchCount = 0; + } } diff --git a/java/com/android/dialer/callintent/CallIntentParser.java b/java/com/android/dialer/callintent/CallIntentParser.java index 01afce06d..336adb66b 100644 --- a/java/com/android/dialer/callintent/CallIntentParser.java +++ b/java/com/android/dialer/callintent/CallIntentParser.java @@ -19,12 +19,13 @@ package com.android.dialer.callintent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import com.android.dialer.common.LogUtil; import com.android.dialer.protos.ProtoParsers; /** Parses data for a call extra to get any dialer specific app data. */ public class CallIntentParser { - static final String EXTRA_CALL_SPECIFIC_APP_DATA_WRAPPER = - "com.android.dialer.callintent.CALL_SPECIFIC_APP_DATA_WRAPPER"; + + @Nullable public static CallSpecificAppData getCallSpecificAppData(@Nullable Bundle extras) { if (extras == null) { @@ -35,19 +36,20 @@ public class CallIntentParser { return null; } + if (extras.getByteArray(Constants.EXTRA_CALL_SPECIFIC_APP_DATA) == null) { + LogUtil.i( + "CallIntentParser.getCallSpecificAppData", + "unexpected null byte array for call specific app data proto"); + return null; + } + return ProtoParsers.getTrusted( - extras.getBundle(Constants.EXTRA_CALL_SPECIFIC_APP_DATA), - EXTRA_CALL_SPECIFIC_APP_DATA_WRAPPER, - CallSpecificAppData.getDefaultInstance()); + extras, Constants.EXTRA_CALL_SPECIFIC_APP_DATA, CallSpecificAppData.getDefaultInstance()); } public static void putCallSpecificAppData( @NonNull Bundle extras, @NonNull CallSpecificAppData callSpecificAppData) { - // We wrap our bundle for consumers that may not have access to ProtoParsers in their class - // loader. This is necessary to prevent ClassNotFoundException's - Bundle wrapperBundle = new Bundle(); - ProtoParsers.put(wrapperBundle, EXTRA_CALL_SPECIFIC_APP_DATA_WRAPPER, callSpecificAppData); - extras.putBundle(Constants.EXTRA_CALL_SPECIFIC_APP_DATA, wrapperBundle); + ProtoParsers.put(extras, Constants.EXTRA_CALL_SPECIFIC_APP_DATA, callSpecificAppData); } private CallIntentParser() {} diff --git a/java/com/android/dialer/calllogutils/CallEntryFormatter.java b/java/com/android/dialer/calllogutils/CallEntryFormatter.java index 6aa93af52..c5ec15748 100644 --- a/java/com/android/dialer/calllogutils/CallEntryFormatter.java +++ b/java/com/android/dialer/calllogutils/CallEntryFormatter.java @@ -95,9 +95,29 @@ public class CallEntryFormatter { // example output: "1s" formatPattern = context.getString(R.string.call_duration_short_format_pattern, "s", secondsString); + + // Temporary work around for a broken Hebrew(iw) translation. + if (formatPattern.endsWith("\'\'")) { + formatPattern = formatPattern.substring(0, formatPattern.length() - 1); + } + } + + // If new translation issues arise, we should catch them here to prevent crashes. + try { + Date date = new Date(TimeUnit.SECONDS.toMillis(elapsedSeconds)); + SimpleDateFormat format = new SimpleDateFormat(formatPattern); + String duration = format.format(date); + + // SimpleDateFormat cannot display more than 59 minutes, instead it displays MINUTES % 60. + // Here we check for that value and replace it with the correct value. + if (elapsedSeconds >= TimeUnit.MINUTES.toSeconds(60)) { + int minutes = (int) (elapsedSeconds / 60); + duration = duration.replaceFirst(Integer.toString(minutes % 60), Integer.toString(minutes)); + } + return duration; + } catch (Exception e) { + return ""; } - SimpleDateFormat format = new SimpleDateFormat(formatPattern); - return format.format(new Date(TimeUnit.SECONDS.toMillis(elapsedSeconds))); } private static CharSequence formatDurationA11y(Context context, long elapsedSeconds) { diff --git a/java/com/android/dialer/contactsfragment/ContactsFragment.java b/java/com/android/dialer/contactsfragment/ContactsFragment.java index e62771837..41fa8f9c5 100644 --- a/java/com/android/dialer/contactsfragment/ContactsFragment.java +++ b/java/com/android/dialer/contactsfragment/ContactsFragment.java @@ -170,6 +170,10 @@ public class ContactsFragment extends Fragment fastScroller.updateContainerAndScrollBarPosition(recyclerView); int firstVisibleItem = manager.findFirstVisibleItemPosition(); int firstCompletelyVisible = manager.findFirstCompletelyVisibleItemPosition(); + if (firstCompletelyVisible == RecyclerView.NO_POSITION) { + // No items are visible, so there are no headers to update. + return; + } String anchoredHeaderString = adapter.getHeaderString(firstCompletelyVisible); // If the user swipes to the top of the list very quickly, there is some strange behavior diff --git a/java/com/android/dialer/database/CallLogQueryHandler.java b/java/com/android/dialer/database/CallLogQueryHandler.java index 35f7854ac..4867d9dce 100644 --- a/java/com/android/dialer/database/CallLogQueryHandler.java +++ b/java/com/android/dialer/database/CallLogQueryHandler.java @@ -188,6 +188,20 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler { VoicemailComponent.get(mContext) .getVoicemailClient() .appendOmtpVoicemailSelectionClause(mContext, where, selectionArgs); + } else { + // Filter out all Duo entries other than video calls + where + .append(" AND (") + .append(Calls.PHONE_ACCOUNT_COMPONENT_NAME) + .append(" IS NULL OR ") + .append(Calls.PHONE_ACCOUNT_COMPONENT_NAME) + .append(" NOT LIKE 'com.google.android.apps.tachyon%' OR ") + .append(Calls.FEATURES) + .append(" & ") + .append(Calls.FEATURES_VIDEO) + .append(" == ") + .append(Calls.FEATURES_VIDEO) + .append(")"); } final int limit = (mLogLimit == -1) ? NUM_LOGS_TO_DISPLAY : mLogLimit; diff --git a/java/com/android/dialer/interactions/res/values-bs/strings.xml b/java/com/android/dialer/interactions/res/values-bs/strings.xml index d7434f898..24601b51a 100644 --- a/java/com/android/dialer/interactions/res/values-bs/strings.xml +++ b/java/com/android/dialer/interactions/res/values-bs/strings.xml @@ -17,7 +17,7 @@ - "Izaberite broj" - "Izaberite broj" + "Odaberite broj" + "Odaberite broj" "Zapamti ovaj izbor" diff --git a/java/com/android/dialer/postcall/PostCall.java b/java/com/android/dialer/postcall/PostCall.java index b17a9b66d..6d9ad01a8 100644 --- a/java/com/android/dialer/postcall/PostCall.java +++ b/java/com/android/dialer/postcall/PostCall.java @@ -26,6 +26,7 @@ import android.support.design.widget.Snackbar; import android.telephony.TelephonyManager; import android.view.View; import android.view.View.OnClickListener; +import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.configprovider.ConfigProvider; import com.android.dialer.configprovider.ConfigProviderBindings; @@ -84,12 +85,12 @@ public class PostCall { ? activity.getString(R.string.post_call_add_message) : activity.getString(R.string.post_call_send_message); + String number = Assert.isNotNull(getPhoneNumber(activity)); OnClickListener onClickListener = v -> { Logger.get(activity) .logImpression(DialerImpression.Type.POST_CALL_PROMPT_USER_TO_SEND_MESSAGE_CLICKED); - activity.startActivity( - PostCallActivity.newIntent(activity, getPhoneNumber(activity), isRcsPostCall)); + activity.startActivity(PostCallActivity.newIntent(activity, number, isRcsPostCall)); }; int durationMs = @@ -113,12 +114,13 @@ public class PostCall { "returned from sending a post call message, message sent."); String message = activity.getString(R.string.post_call_message_sent); String addMessage = activity.getString(R.string.view); + String number = Assert.isNotNull(getPhoneNumber(activity)); OnClickListener onClickListener = v -> { Logger.get(activity) .logImpression( DialerImpression.Type.POST_CALL_PROMPT_USER_TO_VIEW_SENT_MESSAGE_CLICKED); - Intent intent = IntentUtil.getSendSmsIntent(getPhoneNumber(activity)); + Intent intent = IntentUtil.getSendSmsIntent(number); DialerUtils.startActivityWithErrorToast(activity, intent); }; diff --git a/java/com/android/dialer/protos/ProtoParsers.java b/java/com/android/dialer/protos/ProtoParsers.java index 5a60799bc..e5292061b 100644 --- a/java/com/android/dialer/protos/ProtoParsers.java +++ b/java/com/android/dialer/protos/ProtoParsers.java @@ -30,8 +30,14 @@ public final class ProtoParsers { /** Retrieve a proto from a Bundle which was not created within the current executable/version. */ @SuppressWarnings("unchecked") // We want to eventually optimize away parser classes, so cast - public static T get(Bundle bundle, String key, T defaultInstance) + public static T get( + @NonNull Bundle bundle, @NonNull String key, @NonNull T defaultInstance) throws InvalidProtocolBufferException { + + Assert.isNotNull(bundle); + Assert.isNotNull(key); + Assert.isNotNull(defaultInstance); + byte[] bytes = bundle.getByteArray(key); return (T) mergeFrom(bytes, defaultInstance.getDefaultInstanceForType()); } @@ -41,7 +47,8 @@ public final class ProtoParsers { * * @throws RuntimeException if the proto cannot be parsed */ - public static T getTrusted(Bundle bundle, String key, T defaultInstance) { + public static T getTrusted( + @NonNull Bundle bundle, @NonNull String key, @NonNull T defaultInstance) { try { return get(bundle, key, defaultInstance); } catch (InvalidProtocolBufferException e) { @@ -54,7 +61,9 @@ public final class ProtoParsers { * * @throws RuntimeException if the proto cannot be parsed */ - public static T getTrusted(Intent intent, String key, T defaultInstance) { + public static T getTrusted( + @NonNull Intent intent, @NonNull String key, @NonNull T defaultInstance) { + Assert.isNotNull(intent); return getTrusted(intent.getExtras(), key, defaultInstance); } @@ -64,7 +73,9 @@ public final class ProtoParsers { */ public static void put( @NonNull Bundle bundle, @NonNull String key, @NonNull MessageLite message) { - Assert.checkState(message != null); + Assert.isNotNull(message); + Assert.isNotNull(bundle); + Assert.isNotNull(key); bundle.putByteArray(key, message.toByteArray()); } @@ -72,8 +83,11 @@ public final class ProtoParsers { * Stores a proto in an Intent, for later retrieval by {@link #get(Bundle, String, MessageLite)}. * Needs separate method because Intent has similar to but different API than Bundle. */ - public static void put(@NonNull Intent intent, @NonNull String key, MessageLite message) { - Assert.checkState(message != null); + public static void put( + @NonNull Intent intent, @NonNull String key, @NonNull MessageLite message) { + Assert.isNotNull(message); + Assert.isNotNull(intent); + Assert.isNotNull(key); intent.putExtra(key, message.toByteArray()); } diff --git a/java/com/android/dialer/theme/res/values-af/strings.xml b/java/com/android/dialer/theme/res/values-af/strings.xml index 17e6ceac4..9681aee94 100644 --- a/java/com/android/dialer/theme/res/values-af/strings.xml +++ b/java/com/android/dialer/theme/res/values-af/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefoonhokkie" "Foon" - "Kameratoestemming is geaktiveer" "Video-oproep" "Bel" diff --git a/java/com/android/dialer/theme/res/values-am/strings.xml b/java/com/android/dialer/theme/res/values-am/strings.xml index 5b0b2fd1f..0bbcc02b7 100644 --- a/java/com/android/dialer/theme/res/values-am/strings.xml +++ b/java/com/android/dialer/theme/res/values-am/strings.xml @@ -21,7 +21,6 @@ "%s %d" "የሕዝብ ስልክ" "ስልክ" - "የካሜራ ፈቃድ ነቅቷል" "የቪዲዮ ጥሪ" "ደውል" diff --git a/java/com/android/dialer/theme/res/values-ar/strings.xml b/java/com/android/dialer/theme/res/values-ar/strings.xml index ea3468e61..c474c6e44 100644 --- a/java/com/android/dialer/theme/res/values-ar/strings.xml +++ b/java/com/android/dialer/theme/res/values-ar/strings.xml @@ -21,7 +21,6 @@ "%s %d" "هاتف يعمل بالعملة" "الهاتف" - "تم تمكين إذن الكاميرا" "مكالمة فيديو" "اتصال" diff --git a/java/com/android/dialer/theme/res/values-az/strings.xml b/java/com/android/dialer/theme/res/values-az/strings.xml index 91ead1b68..f3e7a014d 100644 --- a/java/com/android/dialer/theme/res/values-az/strings.xml +++ b/java/com/android/dialer/theme/res/values-az/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Taksofon" "Telefon" - "Kamera icazəsi aktiv edildi" "Video zəng" "Zəng edin" diff --git a/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml index a1e59654f..e1a26fa90 100644 --- a/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml +++ b/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefonska govornica" "Telefon" - "Omogućena je dozvola za kameru" "Uputi video poziv" "Pozovi" diff --git a/java/com/android/dialer/theme/res/values-be/strings.xml b/java/com/android/dialer/theme/res/values-be/strings.xml index 881aa7f20..305f608f0 100644 --- a/java/com/android/dialer/theme/res/values-be/strings.xml +++ b/java/com/android/dialer/theme/res/values-be/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Таксафон" "Тэлефон" - "Уключаны дазвол на выкарыстанне камеры" "Відэавыклік" "Выклікаць" diff --git a/java/com/android/dialer/theme/res/values-bg/strings.xml b/java/com/android/dialer/theme/res/values-bg/strings.xml index debc23803..77c80863b 100644 --- a/java/com/android/dialer/theme/res/values-bg/strings.xml +++ b/java/com/android/dialer/theme/res/values-bg/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Обществен телефон" "Телефон" - "Активирано бе разрешението за камерата" "Видеообаждане" "Обаждане" diff --git a/java/com/android/dialer/theme/res/values-bn/strings.xml b/java/com/android/dialer/theme/res/values-bn/strings.xml index 806ee8e02..1e13496ed 100644 --- a/java/com/android/dialer/theme/res/values-bn/strings.xml +++ b/java/com/android/dialer/theme/res/values-bn/strings.xml @@ -21,7 +21,6 @@ "%s %d" "পে ফোন" "ফোন" - "ক্যামেরার অনুমতি সক্ষম করা হয়েছে" "ভিডিও কল" "কল করুন" diff --git a/java/com/android/dialer/theme/res/values-bs/strings.xml b/java/com/android/dialer/theme/res/values-bs/strings.xml index bed71a230..051e4e947 100644 --- a/java/com/android/dialer/theme/res/values-bs/strings.xml +++ b/java/com/android/dialer/theme/res/values-bs/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefonska govornica" "Telefon" - "Dozvola za kameru je omogućena" "Videopoziv" "Pozovi" diff --git a/java/com/android/dialer/theme/res/values-ca/strings.xml b/java/com/android/dialer/theme/res/values-ca/strings.xml index 5140ca574..ce3bd4316 100644 --- a/java/com/android/dialer/theme/res/values-ca/strings.xml +++ b/java/com/android/dialer/theme/res/values-ca/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telèfon públic" "Telèfon" - "S\'ha activat el permís d\'accés a la càmera" "Videotrucada" "Truca" diff --git a/java/com/android/dialer/theme/res/values-cs/strings.xml b/java/com/android/dialer/theme/res/values-cs/strings.xml index a951fe7a8..235260fb1 100644 --- a/java/com/android/dialer/theme/res/values-cs/strings.xml +++ b/java/com/android/dialer/theme/res/values-cs/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefonní automat" "Telefon" - "Byl povolen přístup k fotoaparátu" "Zahájit videohovor" "Volat" diff --git a/java/com/android/dialer/theme/res/values-da/strings.xml b/java/com/android/dialer/theme/res/values-da/strings.xml index 54f185041..552574486 100644 --- a/java/com/android/dialer/theme/res/values-da/strings.xml +++ b/java/com/android/dialer/theme/res/values-da/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Mønttelefon" "Opkald" - "Kameratilladelse er aktiveret" "Videoopkald" "Ring op" diff --git a/java/com/android/dialer/theme/res/values-de/strings.xml b/java/com/android/dialer/theme/res/values-de/strings.xml index 0c97581cb..b1555773d 100644 --- a/java/com/android/dialer/theme/res/values-de/strings.xml +++ b/java/com/android/dialer/theme/res/values-de/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Münztelefon" "Telefon" - "Berechtigung für Kamera aktiviert" "Videoanruf" "Anrufen" diff --git a/java/com/android/dialer/theme/res/values-el/strings.xml b/java/com/android/dialer/theme/res/values-el/strings.xml index 1c34a69c7..156b7cdbe 100644 --- a/java/com/android/dialer/theme/res/values-el/strings.xml +++ b/java/com/android/dialer/theme/res/values-el/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Τηλέφωνο με χρέωση" "Τηλέφωνο" - "Το δικαίωμα χρήσης της κάμερας έχει ενεργοποιηθεί" "Βιντεοκλήση" "Κλήση" diff --git a/java/com/android/dialer/theme/res/values-en-rAU/strings.xml b/java/com/android/dialer/theme/res/values-en-rAU/strings.xml index 136d7df33..36de9e5ae 100644 --- a/java/com/android/dialer/theme/res/values-en-rAU/strings.xml +++ b/java/com/android/dialer/theme/res/values-en-rAU/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Payphone" "Phone" - "Camera permission enabled" "Video call" "Call" diff --git a/java/com/android/dialer/theme/res/values-en-rGB/strings.xml b/java/com/android/dialer/theme/res/values-en-rGB/strings.xml index 136d7df33..36de9e5ae 100644 --- a/java/com/android/dialer/theme/res/values-en-rGB/strings.xml +++ b/java/com/android/dialer/theme/res/values-en-rGB/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Payphone" "Phone" - "Camera permission enabled" "Video call" "Call" diff --git a/java/com/android/dialer/theme/res/values-en-rIN/strings.xml b/java/com/android/dialer/theme/res/values-en-rIN/strings.xml index 136d7df33..36de9e5ae 100644 --- a/java/com/android/dialer/theme/res/values-en-rIN/strings.xml +++ b/java/com/android/dialer/theme/res/values-en-rIN/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Payphone" "Phone" - "Camera permission enabled" "Video call" "Call" diff --git a/java/com/android/dialer/theme/res/values-es-rUS/strings.xml b/java/com/android/dialer/theme/res/values-es-rUS/strings.xml index 90837b76a..be2eac8fc 100644 --- a/java/com/android/dialer/theme/res/values-es-rUS/strings.xml +++ b/java/com/android/dialer/theme/res/values-es-rUS/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Teléfono público" "Teléfono" - "Se activó el permiso de la cámara" "Videollamada" "Llamar" diff --git a/java/com/android/dialer/theme/res/values-es/strings.xml b/java/com/android/dialer/theme/res/values-es/strings.xml index c2d3ee3d4..c63374c24 100644 --- a/java/com/android/dialer/theme/res/values-es/strings.xml +++ b/java/com/android/dialer/theme/res/values-es/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Teléfono público" "Teléfono" - "Se ha habilitado el acceso a la cámara" "Videollamada" "Llamar" diff --git a/java/com/android/dialer/theme/res/values-et/strings.xml b/java/com/android/dialer/theme/res/values-et/strings.xml index 269fa6403..1f76a4b20 100644 --- a/java/com/android/dialer/theme/res/values-et/strings.xml +++ b/java/com/android/dialer/theme/res/values-et/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefoniautomaat" "Telefon" - "Kaameraluba on antud" "Videokõne" "Helista" diff --git a/java/com/android/dialer/theme/res/values-eu/strings.xml b/java/com/android/dialer/theme/res/values-eu/strings.xml index 14345f05f..8b284671a 100644 --- a/java/com/android/dialer/theme/res/values-eu/strings.xml +++ b/java/com/android/dialer/theme/res/values-eu/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefono publikoa" "Telefonoa" - "Kamera atzitzeko baimena eman da" "Bideo-deia" "Deitu" diff --git a/java/com/android/dialer/theme/res/values-fa/strings.xml b/java/com/android/dialer/theme/res/values-fa/strings.xml index f751f3404..340adb156 100644 --- a/java/com/android/dialer/theme/res/values-fa/strings.xml +++ b/java/com/android/dialer/theme/res/values-fa/strings.xml @@ -21,7 +21,6 @@ "%d %s" "تلفن عمومی" "تلفن" - "مجوز دوربین فعال شد" "تماس ویدیویی" "تماس" diff --git a/java/com/android/dialer/theme/res/values-fi/strings.xml b/java/com/android/dialer/theme/res/values-fi/strings.xml index 0c09d7f43..52cab8a83 100644 --- a/java/com/android/dialer/theme/res/values-fi/strings.xml +++ b/java/com/android/dialer/theme/res/values-fi/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Maksupuhelin" "Puhelin" - "Kameran käyttöoikeus myönnettiin" "Videopuhelu" "Soita" diff --git a/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml b/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml index 7d901ca39..b1d0ff12d 100644 --- a/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml +++ b/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Cabine téléphonique" "Téléphone" - "Autorisation d\'accès à l\'appareil photo activée" "Appel vidéo" "Appeler" diff --git a/java/com/android/dialer/theme/res/values-fr/strings.xml b/java/com/android/dialer/theme/res/values-fr/strings.xml index 1c30ef1e7..b1d0ff12d 100644 --- a/java/com/android/dialer/theme/res/values-fr/strings.xml +++ b/java/com/android/dialer/theme/res/values-fr/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Cabine téléphonique" "Téléphone" - "Autorisation d\'accès à l\'appareil photo accordée" "Appel vidéo" "Appeler" diff --git a/java/com/android/dialer/theme/res/values-gl/strings.xml b/java/com/android/dialer/theme/res/values-gl/strings.xml index 083d395ad..1788843f2 100644 --- a/java/com/android/dialer/theme/res/values-gl/strings.xml +++ b/java/com/android/dialer/theme/res/values-gl/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Teléfono público" "Teléfono" - "Activouse o permiso de acceso á cámara" "Videochamada" "Chamar" diff --git a/java/com/android/dialer/theme/res/values-gu/strings.xml b/java/com/android/dialer/theme/res/values-gu/strings.xml index 4baba6971..8de6e2a4a 100644 --- a/java/com/android/dialer/theme/res/values-gu/strings.xml +++ b/java/com/android/dialer/theme/res/values-gu/strings.xml @@ -21,7 +21,6 @@ "%s %d" "પેફોન" "ફોન" - "કૅમેરાની પરવાનગી સક્ષમ કરી" "વિડિઓ કૉલ" "કૉલ કરો" diff --git a/java/com/android/dialer/theme/res/values-hi/strings.xml b/java/com/android/dialer/theme/res/values-hi/strings.xml index 758be5d22..fbc56e9c9 100644 --- a/java/com/android/dialer/theme/res/values-hi/strings.xml +++ b/java/com/android/dialer/theme/res/values-hi/strings.xml @@ -21,7 +21,6 @@ "%s %d" "पे-फ़ोन" "फ़ोन" - "कैमरे की अनुमति सक्षम की गई" "वीडियो कॉल" "कॉल करें" diff --git a/java/com/android/dialer/theme/res/values-hr/strings.xml b/java/com/android/dialer/theme/res/values-hr/strings.xml index 89a5aeec2..73c6542f9 100644 --- a/java/com/android/dialer/theme/res/values-hr/strings.xml +++ b/java/com/android/dialer/theme/res/values-hr/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Javna telefonska govornica" "Telefon" - "Omogućen je pristup kameri" "Videopoziv" "Pozovi" diff --git a/java/com/android/dialer/theme/res/values-hu/strings.xml b/java/com/android/dialer/theme/res/values-hu/strings.xml index 30051d430..d70977df4 100644 --- a/java/com/android/dialer/theme/res/values-hu/strings.xml +++ b/java/com/android/dialer/theme/res/values-hu/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Nyilvános telefon" "Telefon" - "Kameraengedély megadva" "Videohívás" "Hívás" diff --git a/java/com/android/dialer/theme/res/values-hy/strings.xml b/java/com/android/dialer/theme/res/values-hy/strings.xml index 6577dab16..5f53c9fea 100644 --- a/java/com/android/dialer/theme/res/values-hy/strings.xml +++ b/java/com/android/dialer/theme/res/values-hy/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Բջջային տերմինալ" "Հեռախոս" - "Տեսախցիկից օգտվելու թույլտվությունը տրամադրված է" "Տեսազանգ" "Զանգել" diff --git a/java/com/android/dialer/theme/res/values-in/strings.xml b/java/com/android/dialer/theme/res/values-in/strings.xml index d2d72b832..193c6e949 100644 --- a/java/com/android/dialer/theme/res/values-in/strings.xml +++ b/java/com/android/dialer/theme/res/values-in/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telepon Umum" "Telepon" - "Izin kamera diaktifkan" "Video call" "Telepon" diff --git a/java/com/android/dialer/theme/res/values-is/strings.xml b/java/com/android/dialer/theme/res/values-is/strings.xml index ff3faf836..6a67ad942 100644 --- a/java/com/android/dialer/theme/res/values-is/strings.xml +++ b/java/com/android/dialer/theme/res/values-is/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Símasjálfsali" "Sími" - "Myndavélarheimild virk" "Hringja myndsímtal" "Hringja" diff --git a/java/com/android/dialer/theme/res/values-it/strings.xml b/java/com/android/dialer/theme/res/values-it/strings.xml index 4b26288ac..46c6d56b8 100644 --- a/java/com/android/dialer/theme/res/values-it/strings.xml +++ b/java/com/android/dialer/theme/res/values-it/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Cabina telefonica" "Telefono" - "Autorizzazioni della fotocamera attivate" "Videochiamata" "Chiama" diff --git a/java/com/android/dialer/theme/res/values-iw/strings.xml b/java/com/android/dialer/theme/res/values-iw/strings.xml index 09abf2ed1..1bc8cbbaa 100644 --- a/java/com/android/dialer/theme/res/values-iw/strings.xml +++ b/java/com/android/dialer/theme/res/values-iw/strings.xml @@ -21,7 +21,6 @@ "%s %d" "טלפון ציבורי" "טלפון" - "הרשאת הגישה למצלמה הופעלה" "שיחת וידאו" "התקשר" diff --git a/java/com/android/dialer/theme/res/values-ja/strings.xml b/java/com/android/dialer/theme/res/values-ja/strings.xml index 551d67983..839495d5b 100644 --- a/java/com/android/dialer/theme/res/values-ja/strings.xml +++ b/java/com/android/dialer/theme/res/values-ja/strings.xml @@ -21,7 +21,6 @@ "%s%d)" "公衆電話" "電話" - "カメラへのアクセスを自動で許可しました" "ビデオハングアウト" "発信" diff --git a/java/com/android/dialer/theme/res/values-ka/strings.xml b/java/com/android/dialer/theme/res/values-ka/strings.xml index ab225954e..37fdabdb1 100644 --- a/java/com/android/dialer/theme/res/values-ka/strings.xml +++ b/java/com/android/dialer/theme/res/values-ka/strings.xml @@ -21,7 +21,6 @@ "%s %d" "გადახდის ტელეფონი" "ტელეფონი" - "კამერაზე წვდომის ნებართვა ჩართულია" "ვიდეოზარი" "დარეკვა" diff --git a/java/com/android/dialer/theme/res/values-kk/strings.xml b/java/com/android/dialer/theme/res/values-kk/strings.xml index d3a1b7bb9..1b6a516e6 100644 --- a/java/com/android/dialer/theme/res/values-kk/strings.xml +++ b/java/com/android/dialer/theme/res/values-kk/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Автомат-телефон" "Телефон" - "Камера рұқсаты қосылды" "Бейне қоңырау" "Қоңырау шалу" diff --git a/java/com/android/dialer/theme/res/values-km/strings.xml b/java/com/android/dialer/theme/res/values-km/strings.xml index 900f1d690..cfc20104d 100644 --- a/java/com/android/dialer/theme/res/values-km/strings.xml +++ b/java/com/android/dialer/theme/res/values-km/strings.xml @@ -21,7 +21,6 @@ "%s %d" "ទូរស័ព្ទសាធារណៈ" "ទូរស័ព្ទ" - "បានបើក​ការអនុញ្ញាត​កាមេរ៉ា" "ការ​ហៅវីដេអូ" "ហៅ​ទូរសព្ទ" diff --git a/java/com/android/dialer/theme/res/values-kn/strings.xml b/java/com/android/dialer/theme/res/values-kn/strings.xml index ab9f816db..dffa10e08 100644 --- a/java/com/android/dialer/theme/res/values-kn/strings.xml +++ b/java/com/android/dialer/theme/res/values-kn/strings.xml @@ -21,7 +21,6 @@ "%s %d" "ಪೇಫೋನ್" "ಫೋನ್" - "ಕ್ಯಾಮರಾ ಅನುಮತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" "ವೀಡಿಯೊ ಕರೆ" "ಕರೆಮಾಡಿ" diff --git a/java/com/android/dialer/theme/res/values-ko/strings.xml b/java/com/android/dialer/theme/res/values-ko/strings.xml index b5ac55695..ff6710c95 100644 --- a/java/com/android/dialer/theme/res/values-ko/strings.xml +++ b/java/com/android/dialer/theme/res/values-ko/strings.xml @@ -21,7 +21,6 @@ "%s %d" "공중전화" "휴대전화" - "카메라 권한 사용 가능" "화상 통화" "전화" diff --git a/java/com/android/dialer/theme/res/values-ky/strings.xml b/java/com/android/dialer/theme/res/values-ky/strings.xml index 0a9bec294..036c27096 100644 --- a/java/com/android/dialer/theme/res/values-ky/strings.xml +++ b/java/com/android/dialer/theme/res/values-ky/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Таксофон" "Телефон" - "Камеранын уруксаты иштетилди" "Видео чалуу" "Чалуу" diff --git a/java/com/android/dialer/theme/res/values-lo/strings.xml b/java/com/android/dialer/theme/res/values-lo/strings.xml index d33d43e5b..9204a022d 100644 --- a/java/com/android/dialer/theme/res/values-lo/strings.xml +++ b/java/com/android/dialer/theme/res/values-lo/strings.xml @@ -21,7 +21,6 @@ "%s %d" "ຕູ້​ໂທ​ລະ​ສັບ​ສາ​ທາ​ລະ​ນະ" "ໂທລະສັບ" - "ເປີດໃຊ້ສິດອະນຸຍາດກ້ອງຖ່າຍຮູບແລ້ວ" "ໂທວິດີໂອ" "ໂທ" diff --git a/java/com/android/dialer/theme/res/values-lt/strings.xml b/java/com/android/dialer/theme/res/values-lt/strings.xml index fdf31e227..be145363c 100644 --- a/java/com/android/dialer/theme/res/values-lt/strings.xml +++ b/java/com/android/dialer/theme/res/values-lt/strings.xml @@ -21,7 +21,6 @@ "%d %s" "Taksofonas" "Telefonas" - "Fotoaparato leidimas įgalintas" "Vaizdo skambutis" "Skambinti" diff --git a/java/com/android/dialer/theme/res/values-lv/strings.xml b/java/com/android/dialer/theme/res/values-lv/strings.xml index 031c5bdea..35b742f84 100644 --- a/java/com/android/dialer/theme/res/values-lv/strings.xml +++ b/java/com/android/dialer/theme/res/values-lv/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Maksas tālrunis" "Tālrunis" - "Kameras atļauja iespējota" "Videozvans" "Zvanīt" diff --git a/java/com/android/dialer/theme/res/values-mk/strings.xml b/java/com/android/dialer/theme/res/values-mk/strings.xml index d89d12e90..3975ae5ff 100644 --- a/java/com/android/dialer/theme/res/values-mk/strings.xml +++ b/java/com/android/dialer/theme/res/values-mk/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Говорница" "Телефон" - "Дозволата за камера е овозможена" "Воспоставете видеоповик" "Повикајте" diff --git a/java/com/android/dialer/theme/res/values-ml/strings.xml b/java/com/android/dialer/theme/res/values-ml/strings.xml index f02ceeb06..146bfdf60 100644 --- a/java/com/android/dialer/theme/res/values-ml/strings.xml +++ b/java/com/android/dialer/theme/res/values-ml/strings.xml @@ -21,7 +21,6 @@ "%s %d" "പണം നൽകി ഉപയോഗിക്കുന്ന ഫോൺ" "ഫോണ്‍" - "ക്യാമറ അനുമതി നൽകി" "വീഡിയോ കോള്‍" "വിളിക്കുക" diff --git a/java/com/android/dialer/theme/res/values-mn/strings.xml b/java/com/android/dialer/theme/res/values-mn/strings.xml index 7a07e5d4d..0e27e8db0 100644 --- a/java/com/android/dialer/theme/res/values-mn/strings.xml +++ b/java/com/android/dialer/theme/res/values-mn/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Payphone" "Утас" - "Камерын зөвшөөрөл идэвхжсэн" "Видео дуудлага" "Залгах" diff --git a/java/com/android/dialer/theme/res/values-mr/strings.xml b/java/com/android/dialer/theme/res/values-mr/strings.xml index eeb9afa1e..7fa6f26d9 100644 --- a/java/com/android/dialer/theme/res/values-mr/strings.xml +++ b/java/com/android/dialer/theme/res/values-mr/strings.xml @@ -21,7 +21,6 @@ "%s %d" "सार्वजनिक फोन" "फोन" - "कॅमेरा परवानगी सक्षम केली" "व्हिडिओ कॉल" "कॉल करा" diff --git a/java/com/android/dialer/theme/res/values-ms/strings.xml b/java/com/android/dialer/theme/res/values-ms/strings.xml index 2e424fdf7..18df9122d 100644 --- a/java/com/android/dialer/theme/res/values-ms/strings.xml +++ b/java/com/android/dialer/theme/res/values-ms/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefon Awam" "Telefon" - "Kebenaran kamera didayakan" "Panggilan video" "Panggil" diff --git a/java/com/android/dialer/theme/res/values-my/strings.xml b/java/com/android/dialer/theme/res/values-my/strings.xml index 97b871b30..67b9b28c7 100644 --- a/java/com/android/dialer/theme/res/values-my/strings.xml +++ b/java/com/android/dialer/theme/res/values-my/strings.xml @@ -21,7 +21,6 @@ "%s %d" "ငွေပေးရသည့်ဖုန်း" "ဖုန်း" - "ကင်မရာအသုံးပြုခွင့် ဖွင့်ထားပါသည်" "ဗီဒီယိုခေါ်ဆိုမှု" "ခေါ်ဆိုရန်" diff --git a/java/com/android/dialer/theme/res/values-nb/strings.xml b/java/com/android/dialer/theme/res/values-nb/strings.xml index 7587b7e30..1a6e593e5 100644 --- a/java/com/android/dialer/theme/res/values-nb/strings.xml +++ b/java/com/android/dialer/theme/res/values-nb/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefonkiosk" "Telefon" - "Kameratillatelsen er aktivert" "Videosamtale" "Ring" diff --git a/java/com/android/dialer/theme/res/values-ne/strings.xml b/java/com/android/dialer/theme/res/values-ne/strings.xml index af1ad5e24..eb73de90c 100644 --- a/java/com/android/dialer/theme/res/values-ne/strings.xml +++ b/java/com/android/dialer/theme/res/values-ne/strings.xml @@ -21,7 +21,6 @@ "%s %d" "पेफोन" "फोन" - "क्यामेरा सम्बन्धी अनुमतिहरूलाई सक्षम पारियो" "भिडियो कल" "कल गर्नुहोस्" diff --git a/java/com/android/dialer/theme/res/values-nl/strings.xml b/java/com/android/dialer/theme/res/values-nl/strings.xml index ab51c97ae..36e904cc2 100644 --- a/java/com/android/dialer/theme/res/values-nl/strings.xml +++ b/java/com/android/dialer/theme/res/values-nl/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefooncel" "Telefoon" - "Camerarechten ingeschakeld" "Videogesprek" "Bellen" diff --git a/java/com/android/dialer/theme/res/values-no/strings.xml b/java/com/android/dialer/theme/res/values-no/strings.xml index 7587b7e30..1a6e593e5 100644 --- a/java/com/android/dialer/theme/res/values-no/strings.xml +++ b/java/com/android/dialer/theme/res/values-no/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefonkiosk" "Telefon" - "Kameratillatelsen er aktivert" "Videosamtale" "Ring" diff --git a/java/com/android/dialer/theme/res/values-pa/strings.xml b/java/com/android/dialer/theme/res/values-pa/strings.xml index 8784bcae1..af263c82c 100644 --- a/java/com/android/dialer/theme/res/values-pa/strings.xml +++ b/java/com/android/dialer/theme/res/values-pa/strings.xml @@ -21,7 +21,6 @@ "%s %d" "ਪੇਫੋਨ" "ਫੋਨ" - "ਕੈਮਰਾ ਇਜਾਜ਼ਤ ਨੂੰ ਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ" "ਵੀਡੀਓ ਕਾਲ" "ਕਾਲ ਕਰੋ" diff --git a/java/com/android/dialer/theme/res/values-pl/strings.xml b/java/com/android/dialer/theme/res/values-pl/strings.xml index 246261e97..a25df0a2a 100644 --- a/java/com/android/dialer/theme/res/values-pl/strings.xml +++ b/java/com/android/dialer/theme/res/values-pl/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Automat telefoniczny" "Telefon" - "Uprawnienia do korzystania z aparatu zostały włączone" "Rozmowa wideo" "Zadzwoń" diff --git a/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml b/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml index c1356d9b3..9f44269aa 100644 --- a/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml +++ b/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefone público" "Telefone" - "Permissão de câmera ativada" "Videochamada" "Ligar" diff --git a/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml b/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml index 2b46e44a1..1b77257e8 100644 --- a/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml +++ b/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefone público" "Telefone" - "Autorização da câmara ativada" "Videochamada" "Telefonar" diff --git a/java/com/android/dialer/theme/res/values-pt/strings.xml b/java/com/android/dialer/theme/res/values-pt/strings.xml index c1356d9b3..9f44269aa 100644 --- a/java/com/android/dialer/theme/res/values-pt/strings.xml +++ b/java/com/android/dialer/theme/res/values-pt/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefone público" "Telefone" - "Permissão de câmera ativada" "Videochamada" "Ligar" diff --git a/java/com/android/dialer/theme/res/values-ro/strings.xml b/java/com/android/dialer/theme/res/values-ro/strings.xml index 8978e9240..1cf8c8ca0 100644 --- a/java/com/android/dialer/theme/res/values-ro/strings.xml +++ b/java/com/android/dialer/theme/res/values-ro/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefon public" "Telefon" - "Permisiunea pentru cameră a fost activată." "Apel video" "Apelați" diff --git a/java/com/android/dialer/theme/res/values-ru/strings.xml b/java/com/android/dialer/theme/res/values-ru/strings.xml index a155052be..8aa6e8fa0 100644 --- a/java/com/android/dialer/theme/res/values-ru/strings.xml +++ b/java/com/android/dialer/theme/res/values-ru/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Телефон-автомат" "Телефон" - "Доступ к камере разрешен" "Видеовызов" "Позвонить" diff --git a/java/com/android/dialer/theme/res/values-si/strings.xml b/java/com/android/dialer/theme/res/values-si/strings.xml index 424a11255..04d04687d 100644 --- a/java/com/android/dialer/theme/res/values-si/strings.xml +++ b/java/com/android/dialer/theme/res/values-si/strings.xml @@ -21,7 +21,6 @@ "%s %d" "පේෆෝනය" "දුරකථනය" - "කැමරා අවසර සබල කර ඇත" "වීඩියෝ ඇමතුම" "ඇමතුම" diff --git a/java/com/android/dialer/theme/res/values-sk/strings.xml b/java/com/android/dialer/theme/res/values-sk/strings.xml index 411b85edc..9e56e12ab 100644 --- a/java/com/android/dialer/theme/res/values-sk/strings.xml +++ b/java/com/android/dialer/theme/res/values-sk/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefónny automat" "Telefón" - "Povolenie pre fotoaparát je aktivované" "Videohovor" "Volať" diff --git a/java/com/android/dialer/theme/res/values-sl/strings.xml b/java/com/android/dialer/theme/res/values-sl/strings.xml index 85a3e2b8e..623653563 100644 --- a/java/com/android/dialer/theme/res/values-sl/strings.xml +++ b/java/com/android/dialer/theme/res/values-sl/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefonska govorilnica" "Telefon" - "Dovoljenje za dostop do fotoaparata je omogočeno" "Videoklic" "Pokliči" diff --git a/java/com/android/dialer/theme/res/values-sq/strings.xml b/java/com/android/dialer/theme/res/values-sq/strings.xml index 5cbd587d3..6fecf147a 100644 --- a/java/com/android/dialer/theme/res/values-sq/strings.xml +++ b/java/com/android/dialer/theme/res/values-sq/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefon me pagesë" "Telefoni" - "Leja e kamerës është aktivizuar" "Telefonatë me video" "Telefono" diff --git a/java/com/android/dialer/theme/res/values-sr/strings.xml b/java/com/android/dialer/theme/res/values-sr/strings.xml index 310da735d..8f910540b 100644 --- a/java/com/android/dialer/theme/res/values-sr/strings.xml +++ b/java/com/android/dialer/theme/res/values-sr/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Телефонска говорница" "Телефон" - "Омогућена је дозвола за камеру" "Упути видео позив" "Позови" diff --git a/java/com/android/dialer/theme/res/values-sv/strings.xml b/java/com/android/dialer/theme/res/values-sv/strings.xml index af8e5f7b1..f31a3788c 100644 --- a/java/com/android/dialer/theme/res/values-sv/strings.xml +++ b/java/com/android/dialer/theme/res/values-sv/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Telefonautomat" "Telefon" - "Kamerabehörighet har aktiverats" "Videosamtal" "Ring" diff --git a/java/com/android/dialer/theme/res/values-sw/strings.xml b/java/com/android/dialer/theme/res/values-sw/strings.xml index 31615febb..c35d56017 100644 --- a/java/com/android/dialer/theme/res/values-sw/strings.xml +++ b/java/com/android/dialer/theme/res/values-sw/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Simu ya kulipia" "Simu" - "Imewasha ruhusa ya kamera" "Simu ya video" "Piga simu" diff --git a/java/com/android/dialer/theme/res/values-ta/strings.xml b/java/com/android/dialer/theme/res/values-ta/strings.xml index ab15f0b0c..737e43edf 100644 --- a/java/com/android/dialer/theme/res/values-ta/strings.xml +++ b/java/com/android/dialer/theme/res/values-ta/strings.xml @@ -21,7 +21,6 @@ "%s %d" "கட்டணத் தொலைபேசி" "மொபைல்" - "கேமராவிற்கான அனுமதி இயக்கப்பட்டது" "வீடியோ அழைப்பு" "அழை" diff --git a/java/com/android/dialer/theme/res/values-te/strings.xml b/java/com/android/dialer/theme/res/values-te/strings.xml index 4a6fca1fb..c1a02123c 100644 --- a/java/com/android/dialer/theme/res/values-te/strings.xml +++ b/java/com/android/dialer/theme/res/values-te/strings.xml @@ -21,7 +21,6 @@ "%s %d" "పే ఫోన్" "ఫోన్" - "కెమెరా అనుమతిని ప్రారంభించాము" "వీడియో కాల్" "కాల్ చేయి" diff --git a/java/com/android/dialer/theme/res/values-th/strings.xml b/java/com/android/dialer/theme/res/values-th/strings.xml index 51db053fa..0df98d9c4 100644 --- a/java/com/android/dialer/theme/res/values-th/strings.xml +++ b/java/com/android/dialer/theme/res/values-th/strings.xml @@ -21,7 +21,6 @@ "%s %d" "โทรศัพท์สาธารณะ" "โทรศัพท์" - "ให้สิทธิ์เข้าถึงกล้องถ่ายรูปแล้ว" "แฮงเอาท์วิดีโอ" "โทร" diff --git a/java/com/android/dialer/theme/res/values-tl/strings.xml b/java/com/android/dialer/theme/res/values-tl/strings.xml index 97f69ec1c..573b6b889 100644 --- a/java/com/android/dialer/theme/res/values-tl/strings.xml +++ b/java/com/android/dialer/theme/res/values-tl/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Payphone" "Telepono" - "Na-enable ang pahintulot sa camera" "Mag-video call" "Tawag" diff --git a/java/com/android/dialer/theme/res/values-tr/strings.xml b/java/com/android/dialer/theme/res/values-tr/strings.xml index b38f0674d..21e288964 100644 --- a/java/com/android/dialer/theme/res/values-tr/strings.xml +++ b/java/com/android/dialer/theme/res/values-tr/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Ankesörlü telefon" "Telefon" - "Kamera izni etkinleştirildi" "Görüntülü görüşme" "Telefon et" diff --git a/java/com/android/dialer/theme/res/values-uk/strings.xml b/java/com/android/dialer/theme/res/values-uk/strings.xml index f0702770a..dab89df98 100644 --- a/java/com/android/dialer/theme/res/values-uk/strings.xml +++ b/java/com/android/dialer/theme/res/values-uk/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Таксофон" "Телефон" - "Камері надано дозвіл" "Відеодзвінок" "Виклик" diff --git a/java/com/android/dialer/theme/res/values-ur/strings.xml b/java/com/android/dialer/theme/res/values-ur/strings.xml index e9a4b44bb..187eb22d2 100644 --- a/java/com/android/dialer/theme/res/values-ur/strings.xml +++ b/java/com/android/dialer/theme/res/values-ur/strings.xml @@ -21,7 +21,6 @@ "%s %d" "پے فون" "فون" - "کیمرا کی اجازت فعال ہے" "ویڈیو کال" "کال کریں" diff --git a/java/com/android/dialer/theme/res/values-uz/strings.xml b/java/com/android/dialer/theme/res/values-uz/strings.xml index 2bbaf2080..959ca779a 100644 --- a/java/com/android/dialer/theme/res/values-uz/strings.xml +++ b/java/com/android/dialer/theme/res/values-uz/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Taksofon" "Telefon" - "Kameraga kirishga ruxsat berildi" "Video suhbat" "Chaqirish" diff --git a/java/com/android/dialer/theme/res/values-vi/strings.xml b/java/com/android/dialer/theme/res/values-vi/strings.xml index fae318091..38bd8ec4f 100644 --- a/java/com/android/dialer/theme/res/values-vi/strings.xml +++ b/java/com/android/dialer/theme/res/values-vi/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Điện thoại công cộng" "Điện thoại" - "Đã bật quyền sử dụng máy ảnh" "Gọi điện video" "Gọi" diff --git a/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml b/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml index 2e6096296..c80f19748 100644 --- a/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml +++ b/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml @@ -21,7 +21,6 @@ "%s %d" "公用电话" "电话" - "已启用相机使用权限" "视频通话" "拨打电话" diff --git a/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml b/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml index 7b08024ac..605089bbb 100644 --- a/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml +++ b/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml @@ -21,7 +21,6 @@ "%s %d" "公共電話" "電話" - "已啟用相機權限" "視像通話" "通話" diff --git a/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml b/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml index 57d7fe2b1..7a5604c0a 100644 --- a/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml +++ b/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml @@ -21,7 +21,6 @@ "%s %d" "公用電話" "電話" - "已啟用相機權限" "視訊通話" "撥號" diff --git a/java/com/android/dialer/theme/res/values-zu/strings.xml b/java/com/android/dialer/theme/res/values-zu/strings.xml index d0dd7288b..ae07c45cc 100644 --- a/java/com/android/dialer/theme/res/values-zu/strings.xml +++ b/java/com/android/dialer/theme/res/values-zu/strings.xml @@ -21,7 +21,6 @@ "%s %d" "Ucingo olufakwa imali" "Ifoni" - "Imvume yekhamera inikwe amandla" "Ikholi yevidiyo" "Shaya" diff --git a/java/com/android/dialer/theme/res/values/strings.xml b/java/com/android/dialer/theme/res/values/strings.xml index af61d3596..74cabadf7 100644 --- a/java/com/android/dialer/theme/res/values/strings.xml +++ b/java/com/android/dialer/theme/res/values/strings.xml @@ -30,9 +30,6 @@ used in the Launcher icon. --> Phone - - Camera permission enabled - Video call diff --git a/java/com/android/dialer/util/PermissionsUtil.java b/java/com/android/dialer/util/PermissionsUtil.java index 34828317d..cb973680d 100644 --- a/java/com/android/dialer/util/PermissionsUtil.java +++ b/java/com/android/dialer/util/PermissionsUtil.java @@ -38,6 +38,7 @@ import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; +import android.widget.Toast; import com.android.dialer.common.LogUtil; import java.util.ArrayList; import java.util.Arrays; @@ -47,6 +48,7 @@ import java.util.List; /** Utility class to help with runtime permissions. */ public class PermissionsUtil { + private static final String PREFERENCE_CAMERA_ALLOWED_BY_USER = "camera_allowed_by_user"; private static final String PERMISSION_PREFERENCE = "dialer_permissions"; private static final String CEQUINT_PERMISSION = "com.cequint.ecid.CALLER_ID_LOOKUP"; @@ -207,4 +209,28 @@ public class PermissionsUtil { } return permissionsCurrentlyDenied.toArray(new String[permissionsCurrentlyDenied.size()]); } + + /** + * Since we are granted the camera permission automatically as a first-party app, we need to show + * a toast to let users know the permission was granted for privacy reasons. + * + * @return true if we've already shown the camera privacy toast. + */ + public static boolean hasCameraPrivacyToastShown(@NonNull Context context) { + return DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context) + .getBoolean(PREFERENCE_CAMERA_ALLOWED_BY_USER, false); + } + + public static void showCameraPermissionToast(@NonNull Context context) { + Toast.makeText(context, context.getString(R.string.camera_privacy_text), Toast.LENGTH_LONG) + .show(); + setCameraPrivacyToastShown(context); + } + + public static void setCameraPrivacyToastShown(@NonNull Context context) { + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context) + .edit() + .putBoolean(PREFERENCE_CAMERA_ALLOWED_BY_USER, true) + .apply(); + } } diff --git a/java/com/android/dialer/util/res/values-af/strings.xml b/java/com/android/dialer/util/res/values-af/strings.xml index 7457e9b30..3b6780703 100644 --- a/java/com/android/dialer/util/res/values-af/strings.xml +++ b/java/com/android/dialer/util/res/values-af/strings.xml @@ -23,4 +23,6 @@ "Geen program daarvoor op hierdie toestel nie" "As jy \'n WPS-oproep maak, sal dit jou huidige oproep afsny." "Gaan voort" + + diff --git a/java/com/android/dialer/util/res/values-am/strings.xml b/java/com/android/dialer/util/res/values-am/strings.xml index 18fcb56c1..d3418b417 100644 --- a/java/com/android/dialer/util/res/values-am/strings.xml +++ b/java/com/android/dialer/util/res/values-am/strings.xml @@ -23,4 +23,6 @@ "ለዚያ የሚሆን መተግበሪያ በዚህ መሣሪያ ላይ የለም" "የWPS ጥሪ ማድረግ አሁን ያለውን ጥሪዎን ያቋርጠዋል።" "ቀጥል" + + diff --git a/java/com/android/dialer/util/res/values-ar/strings.xml b/java/com/android/dialer/util/res/values-ar/strings.xml index 8f25fb517..13a5235c3 100644 --- a/java/com/android/dialer/util/res/values-ar/strings.xml +++ b/java/com/android/dialer/util/res/values-ar/strings.xml @@ -23,4 +23,6 @@ "لا يوجد تطبيق لإجراء ذلك على هذا الجهاز" "‏سيؤدي إجراء مكالمة WPS إلى قطع اتصال مكالماتك الحالية." "متابعة" + + diff --git a/java/com/android/dialer/util/res/values-az/strings.xml b/java/com/android/dialer/util/res/values-az/strings.xml index ffe8ec5a8..3b6674127 100644 --- a/java/com/android/dialer/util/res/values-az/strings.xml +++ b/java/com/android/dialer/util/res/values-az/strings.xml @@ -23,4 +23,6 @@ "Bu cihazda onun üçün heç bir proqram yoxdur" "WPS zənginin edilməsi mövcud zənginizi sonlandıracaq." "Davam edin" + + diff --git a/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml index 8f16f823a..803c954a1 100644 --- a/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml +++ b/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml @@ -23,4 +23,6 @@ "Na ovom uređaju nema aplikacija za to" "Ako uputite WPS poziv, prekinućete postojeći poziv." "Nastavi" + + diff --git a/java/com/android/dialer/util/res/values-be/strings.xml b/java/com/android/dialer/util/res/values-be/strings.xml index f88ca1932..120247f42 100644 --- a/java/com/android/dialer/util/res/values-be/strings.xml +++ b/java/com/android/dialer/util/res/values-be/strings.xml @@ -23,4 +23,6 @@ "На прыладзе няма праграмы для гэтага" "Выкананне выкліку WPS прывядзе да раз\'яднання бягучага выкліку." "Працягнуць" + + diff --git a/java/com/android/dialer/util/res/values-bg/strings.xml b/java/com/android/dialer/util/res/values-bg/strings.xml index 44bb00fe4..3a425abf1 100644 --- a/java/com/android/dialer/util/res/values-bg/strings.xml +++ b/java/com/android/dialer/util/res/values-bg/strings.xml @@ -23,4 +23,6 @@ "На устройството няма приложение за това действие" "Ако извършите обаждане през WPS, текущото ви обаждане ще бъде прекъснато." "Напред" + + diff --git a/java/com/android/dialer/util/res/values-bn/strings.xml b/java/com/android/dialer/util/res/values-bn/strings.xml index 769c3c2f2..186b34146 100644 --- a/java/com/android/dialer/util/res/values-bn/strings.xml +++ b/java/com/android/dialer/util/res/values-bn/strings.xml @@ -23,4 +23,6 @@ "এর জন্য এই ডিভাইসে কোনো অ্যাপ্লিকেশান নেই" "একটি WPS কল করা হলে তা আপনার বিদ্যমান কলটি কেটে দেবে৷" "চালিয়ে যান" + + diff --git a/java/com/android/dialer/util/res/values-bs/strings.xml b/java/com/android/dialer/util/res/values-bs/strings.xml index a36bd98d2..e000c5fe4 100644 --- a/java/com/android/dialer/util/res/values-bs/strings.xml +++ b/java/com/android/dialer/util/res/values-bs/strings.xml @@ -23,4 +23,6 @@ "Na ovom uređaju nema aplikacije za to" "Upućivanje WPS poziva prekinut će trenutni poziv." "Nastavi" + + diff --git a/java/com/android/dialer/util/res/values-ca/strings.xml b/java/com/android/dialer/util/res/values-ca/strings.xml index c2a661fc8..8b6b2da78 100644 --- a/java/com/android/dialer/util/res/values-ca/strings.xml +++ b/java/com/android/dialer/util/res/values-ca/strings.xml @@ -23,4 +23,6 @@ "No hi ha cap aplicació per a això en aquest dispositiu." "En fer una trucada WPS, es desconnectarà la trucada en curs." "Continua" + + diff --git a/java/com/android/dialer/util/res/values-cs/strings.xml b/java/com/android/dialer/util/res/values-cs/strings.xml index d7de840bd..0e74288b2 100644 --- a/java/com/android/dialer/util/res/values-cs/strings.xml +++ b/java/com/android/dialer/util/res/values-cs/strings.xml @@ -23,4 +23,6 @@ "Pro tuto akci v zařízení nemáte žádnou aplikaci." "Zahájením hovoru WPS odpojíte probíhající hovor." "Pokračovat" + + diff --git a/java/com/android/dialer/util/res/values-da/strings.xml b/java/com/android/dialer/util/res/values-da/strings.xml index 555bb69d1..d38292f2e 100644 --- a/java/com/android/dialer/util/res/values-da/strings.xml +++ b/java/com/android/dialer/util/res/values-da/strings.xml @@ -23,4 +23,6 @@ "Der findes Ingen app til det på denne enhed" "Hvis du foretager et WPS-opkald, afsluttes dit nuværende opkald." "Fortsæt" + + diff --git a/java/com/android/dialer/util/res/values-de/strings.xml b/java/com/android/dialer/util/res/values-de/strings.xml index 7d154b6a3..dc23b32ee 100644 --- a/java/com/android/dialer/util/res/values-de/strings.xml +++ b/java/com/android/dialer/util/res/values-de/strings.xml @@ -23,4 +23,6 @@ "Keine entsprechende App auf diesem Gerät" "Wenn du jetzt einen Anruf über WPS tätigst, wird deine bestehende Verbindung getrennt." "Weiter" + + diff --git a/java/com/android/dialer/util/res/values-el/strings.xml b/java/com/android/dialer/util/res/values-el/strings.xml index efbdc4e6d..996cb2ab2 100644 --- a/java/com/android/dialer/util/res/values-el/strings.xml +++ b/java/com/android/dialer/util/res/values-el/strings.xml @@ -23,4 +23,6 @@ "Δεν υπάρχει εφαρμογή γι\' αυτήν την ενέργεια σε αυτήν τη συσκευή" "Η διενέργεια κλήσης μέσω WPS θα αποσυνδέσει την υφιστάμενη κλήση." "Συνέχεια" + + diff --git a/java/com/android/dialer/util/res/values-en-rAU/strings.xml b/java/com/android/dialer/util/res/values-en-rAU/strings.xml index 545a2a884..3cdf170a2 100644 --- a/java/com/android/dialer/util/res/values-en-rAU/strings.xml +++ b/java/com/android/dialer/util/res/values-en-rAU/strings.xml @@ -23,4 +23,6 @@ "No app for that on this device" "Placing a WPS call will disconnect your existing call." "Continue" + + diff --git a/java/com/android/dialer/util/res/values-en-rGB/strings.xml b/java/com/android/dialer/util/res/values-en-rGB/strings.xml index 545a2a884..3cdf170a2 100644 --- a/java/com/android/dialer/util/res/values-en-rGB/strings.xml +++ b/java/com/android/dialer/util/res/values-en-rGB/strings.xml @@ -23,4 +23,6 @@ "No app for that on this device" "Placing a WPS call will disconnect your existing call." "Continue" + + diff --git a/java/com/android/dialer/util/res/values-en-rIN/strings.xml b/java/com/android/dialer/util/res/values-en-rIN/strings.xml index 545a2a884..3cdf170a2 100644 --- a/java/com/android/dialer/util/res/values-en-rIN/strings.xml +++ b/java/com/android/dialer/util/res/values-en-rIN/strings.xml @@ -23,4 +23,6 @@ "No app for that on this device" "Placing a WPS call will disconnect your existing call." "Continue" + + diff --git a/java/com/android/dialer/util/res/values-es-rUS/strings.xml b/java/com/android/dialer/util/res/values-es-rUS/strings.xml index 4aa072520..e9c86317c 100644 --- a/java/com/android/dialer/util/res/values-es-rUS/strings.xml +++ b/java/com/android/dialer/util/res/values-es-rUS/strings.xml @@ -23,4 +23,6 @@ "No hay una aplicación para esa acción en este dispositivo." "Realizar una llamada de WPS desconectará tu llamada existente." "Continuar" + + diff --git a/java/com/android/dialer/util/res/values-es/strings.xml b/java/com/android/dialer/util/res/values-es/strings.xml index 6c92947ff..0672f65f8 100644 --- a/java/com/android/dialer/util/res/values-es/strings.xml +++ b/java/com/android/dialer/util/res/values-es/strings.xml @@ -23,4 +23,6 @@ "No hay aplicaciones para esa acción en este dispositivo" "Al hacer una llamada WPS, se finalizará tu llamada actual." "Continuar" + + diff --git a/java/com/android/dialer/util/res/values-et/strings.xml b/java/com/android/dialer/util/res/values-et/strings.xml index 465d2b401..20429fbd2 100644 --- a/java/com/android/dialer/util/res/values-et/strings.xml +++ b/java/com/android/dialer/util/res/values-et/strings.xml @@ -23,4 +23,6 @@ "Seadmes pole selleks sobilikku rakendust" "WPS-kõne tegemisel katkestatakse teie praegune kõne." "Jätka" + + diff --git a/java/com/android/dialer/util/res/values-eu/strings.xml b/java/com/android/dialer/util/res/values-eu/strings.xml index ba434ce52..89b35c2c1 100644 --- a/java/com/android/dialer/util/res/values-eu/strings.xml +++ b/java/com/android/dialer/util/res/values-eu/strings.xml @@ -23,4 +23,6 @@ "Ez dago hori egin dezakeen aplikaziorik gailu honetan" "WPS dei bat egiten baduzu, eten egingo da uneko deia." "Jarraitu" + + diff --git a/java/com/android/dialer/util/res/values-fa/strings.xml b/java/com/android/dialer/util/res/values-fa/strings.xml index c22c38699..c98fdc9bb 100644 --- a/java/com/android/dialer/util/res/values-fa/strings.xml +++ b/java/com/android/dialer/util/res/values-fa/strings.xml @@ -23,4 +23,6 @@ "هیچ برنامه‌ای برای انجام این کار در این دستگاه نصب نیست" "‏اگر تماس WPS برقرار کنید، تماس فعلی‌تان قطع می‌شود." "ادامه" + + diff --git a/java/com/android/dialer/util/res/values-fi/strings.xml b/java/com/android/dialer/util/res/values-fi/strings.xml index 237232f5d..58494d10e 100644 --- a/java/com/android/dialer/util/res/values-fi/strings.xml +++ b/java/com/android/dialer/util/res/values-fi/strings.xml @@ -23,4 +23,6 @@ "Laitteessa ei ole kyseiseen toimintoon tarvittavaa sovellusta" "WPS-puhelun soittaminen katkaisee meneillään olevan puhelun." "Jatka" + + diff --git a/java/com/android/dialer/util/res/values-fr-rCA/strings.xml b/java/com/android/dialer/util/res/values-fr-rCA/strings.xml index 1d73fcfa7..e82fb5df0 100644 --- a/java/com/android/dialer/util/res/values-fr-rCA/strings.xml +++ b/java/com/android/dialer/util/res/values-fr-rCA/strings.xml @@ -23,4 +23,6 @@ "Cette action ne peut être effectuée par aucune application sur cet appareil." "Si vous faites un appel WPS, vous déconnecterez l\'appel en cours." "Continuer" + + diff --git a/java/com/android/dialer/util/res/values-fr/strings.xml b/java/com/android/dialer/util/res/values-fr/strings.xml index 48f1dbbef..3e411d33f 100644 --- a/java/com/android/dialer/util/res/values-fr/strings.xml +++ b/java/com/android/dialer/util/res/values-fr/strings.xml @@ -23,4 +23,6 @@ "Cette action ne peut être effectuée via aucune application sur cet appareil." "L\'émission d\'un appel WPS mettra fin à l\'appel en cours." "Continuer" + + diff --git a/java/com/android/dialer/util/res/values-gl/strings.xml b/java/com/android/dialer/util/res/values-gl/strings.xml index 8cdcffaf7..c5b544810 100644 --- a/java/com/android/dialer/util/res/values-gl/strings.xml +++ b/java/com/android/dialer/util/res/values-gl/strings.xml @@ -23,4 +23,6 @@ "Non hai ningunha aplicación para esa acción neste dispositivo" "Se realizas unha chamada WPS, desconectarase a túa chamada actual." "Continuar" + + diff --git a/java/com/android/dialer/util/res/values-gu/strings.xml b/java/com/android/dialer/util/res/values-gu/strings.xml index ee4b59242..e3342b100 100644 --- a/java/com/android/dialer/util/res/values-gu/strings.xml +++ b/java/com/android/dialer/util/res/values-gu/strings.xml @@ -23,4 +23,6 @@ "આ ઉપકરણ પર તે માટે કોઈ ઍપ્લિકેશન નથી" "WPS કૉલ કરવાનું તમારા અસ્તિત્વમાંના કૉલને ડિસ્કનેક્ટ કરશે." "ચાલુ રાખો" + + diff --git a/java/com/android/dialer/util/res/values-hi/strings.xml b/java/com/android/dialer/util/res/values-hi/strings.xml index 9a1bc3550..08d52c784 100644 --- a/java/com/android/dialer/util/res/values-hi/strings.xml +++ b/java/com/android/dialer/util/res/values-hi/strings.xml @@ -23,4 +23,6 @@ "उसके लिए इस डिवाइस पर कोई एेप नहीं है" "WPS कॉल करने से आपका मौजूदा कॉल डिसकनेक्ट हो जाएगा." "जारी रखें" + + diff --git a/java/com/android/dialer/util/res/values-hr/strings.xml b/java/com/android/dialer/util/res/values-hr/strings.xml index 1fc54dad7..16964ba48 100644 --- a/java/com/android/dialer/util/res/values-hr/strings.xml +++ b/java/com/android/dialer/util/res/values-hr/strings.xml @@ -23,4 +23,6 @@ "Na ovom uređaju nema aplikacije za to" "Uspostavljanje WPS poziva prekinut će postojeći poziv." "Nastavi" + + diff --git a/java/com/android/dialer/util/res/values-hu/strings.xml b/java/com/android/dialer/util/res/values-hu/strings.xml index ad5f29d8e..5c503823a 100644 --- a/java/com/android/dialer/util/res/values-hu/strings.xml +++ b/java/com/android/dialer/util/res/values-hu/strings.xml @@ -23,4 +23,6 @@ "Nincs megfelelő alkalmazás a művelethez ezen az eszközön" "WPS-hívás indításával megszakítja a folyamatban lévő hívást." "Folytatás" + + diff --git a/java/com/android/dialer/util/res/values-hy/strings.xml b/java/com/android/dialer/util/res/values-hy/strings.xml index 18f2001c9..8a2c75e14 100644 --- a/java/com/android/dialer/util/res/values-hy/strings.xml +++ b/java/com/android/dialer/util/res/values-hy/strings.xml @@ -23,4 +23,6 @@ "Սարքի վրա համապատասխան հավելված չկա" "Եթե WPS-ի միջոցով զանգ կատարեք, ձեր ընթացիկ զանգը կընդհատվի:" "Շարունակել" + + diff --git a/java/com/android/dialer/util/res/values-in/strings.xml b/java/com/android/dialer/util/res/values-in/strings.xml index 55a5e3eb9..8abd5fb1f 100644 --- a/java/com/android/dialer/util/res/values-in/strings.xml +++ b/java/com/android/dialer/util/res/values-in/strings.xml @@ -23,4 +23,6 @@ "Tidak ada aplikasi untuk tindakan tersebut di perangkat ini" "Melakukan panggilan WPS akan mengakhiri panggilan yang ada." "Lanjutkan" + + diff --git a/java/com/android/dialer/util/res/values-is/strings.xml b/java/com/android/dialer/util/res/values-is/strings.xml index e6615e349..8ba1a2dad 100644 --- a/java/com/android/dialer/util/res/values-is/strings.xml +++ b/java/com/android/dialer/util/res/values-is/strings.xml @@ -23,4 +23,6 @@ "Ekkert forrit fyrir þetta er í tækinu" "Ef þú hringir WPS-símtal slitnar núverandi símtal." "Áfram" + + diff --git a/java/com/android/dialer/util/res/values-it/strings.xml b/java/com/android/dialer/util/res/values-it/strings.xml index 3ed55c650..3ef5f83f3 100644 --- a/java/com/android/dialer/util/res/values-it/strings.xml +++ b/java/com/android/dialer/util/res/values-it/strings.xml @@ -23,4 +23,6 @@ "Sul dispositivo non sono presenti app per tale azione" "Se effettui una chiamata WPS, la chiamata esistente verrà disconnessa." "Continua" + + diff --git a/java/com/android/dialer/util/res/values-iw/strings.xml b/java/com/android/dialer/util/res/values-iw/strings.xml index 5a1062dd8..8863eb60e 100644 --- a/java/com/android/dialer/util/res/values-iw/strings.xml +++ b/java/com/android/dialer/util/res/values-iw/strings.xml @@ -23,4 +23,6 @@ "אין אפליקציה עבור הפעולה הזו במכשיר הזה" "התקשרות באמצעות השירות האלחוטי המועדף תנתק את השיחה הנוכחית." "המשך" + + diff --git a/java/com/android/dialer/util/res/values-ja/strings.xml b/java/com/android/dialer/util/res/values-ja/strings.xml index 78986b1d6..a447ee9d4 100644 --- a/java/com/android/dialer/util/res/values-ja/strings.xml +++ b/java/com/android/dialer/util/res/values-ja/strings.xml @@ -23,4 +23,6 @@ "この操作を行うアプリが端末上にありません" "WPS で通話を発信すると現在の通話が切断されます。" "次へ" + + diff --git a/java/com/android/dialer/util/res/values-ka/strings.xml b/java/com/android/dialer/util/res/values-ka/strings.xml index 13e7ad0c9..379e3b3c5 100644 --- a/java/com/android/dialer/util/res/values-ka/strings.xml +++ b/java/com/android/dialer/util/res/values-ka/strings.xml @@ -23,4 +23,6 @@ "ამ მოწყობილობაზე არ არის შესაბამისი აპლიკაცია" "WPS ზარის განხორციელება თქვენს მიმდინარე ზარს გათიშავს." "გაგრძელება" + + diff --git a/java/com/android/dialer/util/res/values-kk/strings.xml b/java/com/android/dialer/util/res/values-kk/strings.xml index 49b60913b..8683b850a 100644 --- a/java/com/android/dialer/util/res/values-kk/strings.xml +++ b/java/com/android/dialer/util/res/values-kk/strings.xml @@ -23,4 +23,6 @@ "Бұл үшін осы құрылғыда қолданба жоқ" "WPS қоңырауын шалу қазіргі қоңырауды тоқтатады." "Жалғастыру" + + diff --git a/java/com/android/dialer/util/res/values-km/strings.xml b/java/com/android/dialer/util/res/values-km/strings.xml index f55fdf5e0..37cd04513 100644 --- a/java/com/android/dialer/util/res/values-km/strings.xml +++ b/java/com/android/dialer/util/res/values-km/strings.xml @@ -23,4 +23,6 @@ "មិនមានកម្មវិធីសម្រាប់សកម្មភាពនេះនៅលើឧបករណ៍នេះទេ" "ការ​ហៅ​ចេញ​​ដោយ​ប្រើ​សេវា WPS នឹង​ផ្ដាច់​ការ​ហៅ​ដែល​មាន​​របស់​អ្នក។" "បន្ត" + + diff --git a/java/com/android/dialer/util/res/values-kn/strings.xml b/java/com/android/dialer/util/res/values-kn/strings.xml index d6de0f84f..8fc851b5e 100644 --- a/java/com/android/dialer/util/res/values-kn/strings.xml +++ b/java/com/android/dialer/util/res/values-kn/strings.xml @@ -23,4 +23,6 @@ "ಈ ಸಾಧನದಲ್ಲಿ ಅದಕ್ಕಾಗಿ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಲ್ಲ" "WPS ಕರೆ ಅನ್ನು ಮಾಡುವುದರಿಂದ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ನಿಮ್ಮ ಕರೆ ಕಡಿತಗೊಳ್ಳುತ್ತದೆ." "ಮುಂದುವರಿಸಿ" + + diff --git a/java/com/android/dialer/util/res/values-ko/strings.xml b/java/com/android/dialer/util/res/values-ko/strings.xml index f7a0679b1..aa0c138e1 100644 --- a/java/com/android/dialer/util/res/values-ko/strings.xml +++ b/java/com/android/dialer/util/res/values-ko/strings.xml @@ -23,4 +23,6 @@ "이 기기에 작업을 처리할 수 있는 앱이 없습니다." "WPS 전화를 걸면 기존 전화 연결이 해제됩니다." "계속" + + diff --git a/java/com/android/dialer/util/res/values-ky/strings.xml b/java/com/android/dialer/util/res/values-ky/strings.xml index e37ace837..80dea0a1a 100644 --- a/java/com/android/dialer/util/res/values-ky/strings.xml +++ b/java/com/android/dialer/util/res/values-ky/strings.xml @@ -23,4 +23,6 @@ "Бул түзмөктө ал үчүн колдонмо жок" "Азыр WPS аркылуу чалсаңыз, учурдагы чалуу үзүлүп калат." "Улантуу" + + diff --git a/java/com/android/dialer/util/res/values-lo/strings.xml b/java/com/android/dialer/util/res/values-lo/strings.xml index d7c6764ca..a003183a5 100644 --- a/java/com/android/dialer/util/res/values-lo/strings.xml +++ b/java/com/android/dialer/util/res/values-lo/strings.xml @@ -23,4 +23,6 @@ "ບໍ່​ມີ​ແອັ​ບຯ​ສຳ​ລັບ​ສິ່ງນັ້ນ​ຢູ່​ໃນ​ອຸ​ປະ​ກອນ​ນີ້" "ການໂທ WPS ຈະຕັດສາຍທີ່ມີຢູ່ແລ້ວຂອງທ່ານ." "ດຳເນີນການຕໍ່" + + diff --git a/java/com/android/dialer/util/res/values-lt/strings.xml b/java/com/android/dialer/util/res/values-lt/strings.xml index bf77d5c05..00fd0c169 100644 --- a/java/com/android/dialer/util/res/values-lt/strings.xml +++ b/java/com/android/dialer/util/res/values-lt/strings.xml @@ -23,4 +23,6 @@ "Šiame įrenginyje nėra tam skirtos programos" "Pradėjus WPS skambutį bus atjungtas dabartinis skambutis." "Tęsti" + + diff --git a/java/com/android/dialer/util/res/values-lv/strings.xml b/java/com/android/dialer/util/res/values-lv/strings.xml index 7b462646a..d29c06a2f 100644 --- a/java/com/android/dialer/util/res/values-lv/strings.xml +++ b/java/com/android/dialer/util/res/values-lv/strings.xml @@ -23,4 +23,6 @@ "Šajā ierīcē nav nevienas šai darbībai piemērotas lietotnes." "Veicot WPS zvanu, tiks pārtraukts esošais zvans." "Turpināt" + + diff --git a/java/com/android/dialer/util/res/values-mk/strings.xml b/java/com/android/dialer/util/res/values-mk/strings.xml index 4451d707a..5f45fbf23 100644 --- a/java/com/android/dialer/util/res/values-mk/strings.xml +++ b/java/com/android/dialer/util/res/values-mk/strings.xml @@ -23,4 +23,6 @@ "Нема апликација за тоа на уредот" "Воспоставувањето повик преку WPS ќе го исклучи вашиот тековен повик." "Продолжи" + + diff --git a/java/com/android/dialer/util/res/values-ml/strings.xml b/java/com/android/dialer/util/res/values-ml/strings.xml index d861641dd..be9828973 100644 --- a/java/com/android/dialer/util/res/values-ml/strings.xml +++ b/java/com/android/dialer/util/res/values-ml/strings.xml @@ -23,4 +23,6 @@ "അതിനായി ഈ ഉപകരണത്തിൽ അപ്ലിക്കേഷനുകളൊന്നുമില്ല" "ഒരു WPS കോൾ ചെയ്യുന്നത് നിങ്ങളുടെ നിലവിലെ കോൾ വിച്ഛേദിക്കാനിടയാക്കും." "തുടരുക" + + diff --git a/java/com/android/dialer/util/res/values-mn/strings.xml b/java/com/android/dialer/util/res/values-mn/strings.xml index 51fe7ca3d..314db16cf 100644 --- a/java/com/android/dialer/util/res/values-mn/strings.xml +++ b/java/com/android/dialer/util/res/values-mn/strings.xml @@ -23,4 +23,6 @@ "Энэхүү төхөөрөмж дээр тухайн үйлдлийг гүйцэтгэх апликейшн байхгүй байна." "WPS дуудлага хийвэл одоо байгаа дуудлагыг таслах болно." "Үргэлжлүүлэх" + + diff --git a/java/com/android/dialer/util/res/values-mr/strings.xml b/java/com/android/dialer/util/res/values-mr/strings.xml index 4cb82304a..37bef2933 100644 --- a/java/com/android/dialer/util/res/values-mr/strings.xml +++ b/java/com/android/dialer/util/res/values-mr/strings.xml @@ -23,4 +23,6 @@ "या डिव्हाइसवर त्यासाठी कोणताही अॅप नाही" "WPS कॉल केल्याने आपला विद्यमान कॉल डिस्कनेक्ट केला जाईल." "सुरु ठेवा" + + diff --git a/java/com/android/dialer/util/res/values-ms/strings.xml b/java/com/android/dialer/util/res/values-ms/strings.xml index d149cc519..fbda09d42 100644 --- a/java/com/android/dialer/util/res/values-ms/strings.xml +++ b/java/com/android/dialer/util/res/values-ms/strings.xml @@ -23,4 +23,6 @@ "Tiada apl untuk tindakan itu pada peranti ini" "Membuat panggilan WPS akan memutuskan panggilan anda yang sedia ada." "Teruskan" + + diff --git a/java/com/android/dialer/util/res/values-my/strings.xml b/java/com/android/dialer/util/res/values-my/strings.xml index 7ec6501d4..3a5b79fc6 100644 --- a/java/com/android/dialer/util/res/values-my/strings.xml +++ b/java/com/android/dialer/util/res/values-my/strings.xml @@ -23,4 +23,6 @@ "ဒီကိရိယာထဲမှာ အဲဒါ့အတွက် app မရှိပါ" "WPS ခေါ်ဆိုပါက သင့်လက်ရှိခေါ်ဆိုမှု ပြတ်တောက်သွားပါမည်။" "ဆက်လုပ်ရန်" + + diff --git a/java/com/android/dialer/util/res/values-nb/strings.xml b/java/com/android/dialer/util/res/values-nb/strings.xml index 52ae935c8..c1c1b238b 100644 --- a/java/com/android/dialer/util/res/values-nb/strings.xml +++ b/java/com/android/dialer/util/res/values-nb/strings.xml @@ -23,4 +23,6 @@ "Det finnes ingen apper for det på denne enheten" "Den pågående samtalen brytes hvis du foretar et WPS-anrop (Wireless Priority Service)." "Fortsett" + + diff --git a/java/com/android/dialer/util/res/values-ne/strings.xml b/java/com/android/dialer/util/res/values-ne/strings.xml index aedc538af..b596a8510 100644 --- a/java/com/android/dialer/util/res/values-ne/strings.xml +++ b/java/com/android/dialer/util/res/values-ne/strings.xml @@ -23,4 +23,6 @@ "यस यन्त्रमा त्यसका लागि कुनै पनि अनुप्रयोग छैन" "WPS कल गर्नुले तपाईंको जारी कललाई विच्छेद गर्ने छ।" "जारी राख्नुहोस्" + + diff --git a/java/com/android/dialer/util/res/values-nl/strings.xml b/java/com/android/dialer/util/res/values-nl/strings.xml index a9fc32e70..d09054cc8 100644 --- a/java/com/android/dialer/util/res/values-nl/strings.xml +++ b/java/com/android/dialer/util/res/values-nl/strings.xml @@ -23,4 +23,6 @@ "Daarvoor is geen app beschikbaar op dit apparaat" "Als je een WPS-oproep plaatst, wordt je huidige gesprek afgebroken." "Doorgaan" + + diff --git a/java/com/android/dialer/util/res/values-no/strings.xml b/java/com/android/dialer/util/res/values-no/strings.xml index 52ae935c8..c1c1b238b 100644 --- a/java/com/android/dialer/util/res/values-no/strings.xml +++ b/java/com/android/dialer/util/res/values-no/strings.xml @@ -23,4 +23,6 @@ "Det finnes ingen apper for det på denne enheten" "Den pågående samtalen brytes hvis du foretar et WPS-anrop (Wireless Priority Service)." "Fortsett" + + diff --git a/java/com/android/dialer/util/res/values-pa/strings.xml b/java/com/android/dialer/util/res/values-pa/strings.xml index 4ad601fc3..dfb47c590 100644 --- a/java/com/android/dialer/util/res/values-pa/strings.xml +++ b/java/com/android/dialer/util/res/values-pa/strings.xml @@ -23,4 +23,6 @@ "ਉਸ ਲਈ ਇਸ ਡੀਵਾਈਸ ਤੇ ਕੋਈ ਐਪ ਨਹੀਂ" "ਇੱਕ WPS ਕਾਲ ਕਰਨਾ ਤੁਹਾਡੀ ਮੌਜੂਦਾ ਕਾਲ ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰ ਦੇਵੇਗਾ।" "ਜਾਰੀ ਰੱਖੋ" + + diff --git a/java/com/android/dialer/util/res/values-pl/strings.xml b/java/com/android/dialer/util/res/values-pl/strings.xml index c49c55ae8..4ea0d8b9c 100644 --- a/java/com/android/dialer/util/res/values-pl/strings.xml +++ b/java/com/android/dialer/util/res/values-pl/strings.xml @@ -23,4 +23,6 @@ "Na urządzeniu nie ma aplikacji, która mogłaby wykonać tę czynność" "Jeśli nawiążesz połączenie WPS, bieżące połączenie zostanie przerwane." "Dalej" + + diff --git a/java/com/android/dialer/util/res/values-pt-rBR/strings.xml b/java/com/android/dialer/util/res/values-pt-rBR/strings.xml index 04eb8c663..af5ec9343 100644 --- a/java/com/android/dialer/util/res/values-pt-rBR/strings.xml +++ b/java/com/android/dialer/util/res/values-pt-rBR/strings.xml @@ -23,4 +23,6 @@ "Nenhum app está disponível para essa ação neste dispositivo" "Fazer uma chamada usando o WPS desconectará a chamada atual." "Continuar" + + diff --git a/java/com/android/dialer/util/res/values-pt-rPT/strings.xml b/java/com/android/dialer/util/res/values-pt-rPT/strings.xml index b90230216..1626e9e3a 100644 --- a/java/com/android/dialer/util/res/values-pt-rPT/strings.xml +++ b/java/com/android/dialer/util/res/values-pt-rPT/strings.xml @@ -23,4 +23,6 @@ "Não existe nenhuma aplicação para isso neste dispositivo" "Efetuar uma chamada WPS irá desligar a sua chamada atual." "Continuar" + + diff --git a/java/com/android/dialer/util/res/values-pt/strings.xml b/java/com/android/dialer/util/res/values-pt/strings.xml index 04eb8c663..af5ec9343 100644 --- a/java/com/android/dialer/util/res/values-pt/strings.xml +++ b/java/com/android/dialer/util/res/values-pt/strings.xml @@ -23,4 +23,6 @@ "Nenhum app está disponível para essa ação neste dispositivo" "Fazer uma chamada usando o WPS desconectará a chamada atual." "Continuar" + + diff --git a/java/com/android/dialer/util/res/values-ro/strings.xml b/java/com/android/dialer/util/res/values-ro/strings.xml index 40cbc3623..c5d7d3f38 100644 --- a/java/com/android/dialer/util/res/values-ro/strings.xml +++ b/java/com/android/dialer/util/res/values-ro/strings.xml @@ -23,4 +23,6 @@ "Pe dispozitiv nu există nicio aplicație pentru această acțiune" "Dacă inițiați un apel WPS, apelul existent va fi deconectat." "Continuați" + + diff --git a/java/com/android/dialer/util/res/values-ru/strings.xml b/java/com/android/dialer/util/res/values-ru/strings.xml index c2908f9dc..837a07560 100644 --- a/java/com/android/dialer/util/res/values-ru/strings.xml +++ b/java/com/android/dialer/util/res/values-ru/strings.xml @@ -23,4 +23,6 @@ "На устройстве нет подходящего приложения" "Если вы начнете WPS-вызов, текущий вызов будет прекращен." "Продолжить" + + diff --git a/java/com/android/dialer/util/res/values-si/strings.xml b/java/com/android/dialer/util/res/values-si/strings.xml index f7404d7a1..f91ef87e7 100644 --- a/java/com/android/dialer/util/res/values-si/strings.xml +++ b/java/com/android/dialer/util/res/values-si/strings.xml @@ -23,4 +23,6 @@ "මෙම උපාංගයෙහි ඒ සඳහා යෙදුමක් නැත" "WPS ඇමතුමක් කිරීමෙන් ඔබේ දැනට පවතින ඇමතුම විසන්ධි කරනු ඇත." "දිගටම කරගෙන යන්න" + + diff --git a/java/com/android/dialer/util/res/values-sk/strings.xml b/java/com/android/dialer/util/res/values-sk/strings.xml index 4a1ed0230..731abb9fe 100644 --- a/java/com/android/dialer/util/res/values-sk/strings.xml +++ b/java/com/android/dialer/util/res/values-sk/strings.xml @@ -23,4 +23,6 @@ "Na tomto zariadení nie je aplikácia na vykonanie danej akcie" "Uskutočnením hovoru cez WPS prerušíte existujúci hovor." "Pokračovať" + + diff --git a/java/com/android/dialer/util/res/values-sl/strings.xml b/java/com/android/dialer/util/res/values-sl/strings.xml index e18514d0c..cde40ea70 100644 --- a/java/com/android/dialer/util/res/values-sl/strings.xml +++ b/java/com/android/dialer/util/res/values-sl/strings.xml @@ -23,4 +23,6 @@ "V tej napravi ni aplikacije za to" "Če začnete klic WPS, bo obstoječi klic prekinjen." "Nadaljuj" + + diff --git a/java/com/android/dialer/util/res/values-sq/strings.xml b/java/com/android/dialer/util/res/values-sq/strings.xml index 8046d926f..ab53f1e27 100644 --- a/java/com/android/dialer/util/res/values-sq/strings.xml +++ b/java/com/android/dialer/util/res/values-sq/strings.xml @@ -23,4 +23,6 @@ "Nuk ka aplikacion për atë në këtë pajisje" "Kryerja e një telefonate WPS do të shkëputë telefonatën tënde ekzistuese." "Vazhdo" + + diff --git a/java/com/android/dialer/util/res/values-sr/strings.xml b/java/com/android/dialer/util/res/values-sr/strings.xml index d7de55254..5193c6a0e 100644 --- a/java/com/android/dialer/util/res/values-sr/strings.xml +++ b/java/com/android/dialer/util/res/values-sr/strings.xml @@ -23,4 +23,6 @@ "На овом уређају нема апликација за то" "Ако упутите WPS позив, прекинућете постојећи позив." "Настави" + + diff --git a/java/com/android/dialer/util/res/values-sv/strings.xml b/java/com/android/dialer/util/res/values-sv/strings.xml index 5b17b0690..23c34f020 100644 --- a/java/com/android/dialer/util/res/values-sv/strings.xml +++ b/java/com/android/dialer/util/res/values-sv/strings.xml @@ -23,4 +23,6 @@ "Det finns ingen app för detta på enheten" "Ringer du ett WPS-samtal kopplas det nuvarande samtalet bort." "Fortsätt" + + diff --git a/java/com/android/dialer/util/res/values-sw/strings.xml b/java/com/android/dialer/util/res/values-sw/strings.xml index 8ee684311..6dabc8424 100644 --- a/java/com/android/dialer/util/res/values-sw/strings.xml +++ b/java/com/android/dialer/util/res/values-sw/strings.xml @@ -23,4 +23,6 @@ "Hakuna programu kwa ajili ya hiyo kwenye kifaa hiki" "Ukipiga simu ya WPS, simu inayoendelea sasa itakatwa." "Endelea" + + diff --git a/java/com/android/dialer/util/res/values-ta/strings.xml b/java/com/android/dialer/util/res/values-ta/strings.xml index ed63669e4..4f1b6919b 100644 --- a/java/com/android/dialer/util/res/values-ta/strings.xml +++ b/java/com/android/dialer/util/res/values-ta/strings.xml @@ -23,4 +23,6 @@ "சாதனத்தில் இந்தச் செயலைச் செய்வதற்கான பயன்பாடு எதுவும் இல்லை" "WPS அழைப்பை மேற்கொண்டால், தற்போது செயலில் உள்ள அழைப்புத் துண்டிக்கப்படும்." "தொடர்க" + + diff --git a/java/com/android/dialer/util/res/values-te/strings.xml b/java/com/android/dialer/util/res/values-te/strings.xml index 44c84f5bf..3e54163c8 100644 --- a/java/com/android/dialer/util/res/values-te/strings.xml +++ b/java/com/android/dialer/util/res/values-te/strings.xml @@ -23,4 +23,6 @@ "ఈ పరికరంలో దాని కోసం అనువర్తనం ఏదీ లేదు" "WPS కాల్ చేయడం వలన మీరు ప్రస్తుతం మాట్లాడుతున్న కాల్ డిస్‌కనెక్ట్ అవుతుంది." "కొనసాగించు" + + diff --git a/java/com/android/dialer/util/res/values-th/strings.xml b/java/com/android/dialer/util/res/values-th/strings.xml index f0055733a..59341c3b6 100644 --- a/java/com/android/dialer/util/res/values-th/strings.xml +++ b/java/com/android/dialer/util/res/values-th/strings.xml @@ -23,4 +23,6 @@ "ไม่มีแอปสำหรับการทำงานนั้นบนอุปกรณ์นี้" "หากคุณโทรผ่านบริการ WPS ตอนนี้ สายที่โทรอยู่จะตัดการเชื่อมต่อ" "ต่อไป" + + diff --git a/java/com/android/dialer/util/res/values-tl/strings.xml b/java/com/android/dialer/util/res/values-tl/strings.xml index 73de8b52a..e2a2ed062 100644 --- a/java/com/android/dialer/util/res/values-tl/strings.xml +++ b/java/com/android/dialer/util/res/values-tl/strings.xml @@ -23,4 +23,6 @@ "Walang app para doon sa device na ito" "Ang paggawa ng WPS na tawag ay puputulin sa koneksyon ang dati mo nang tawag." "Magpatuloy" + + diff --git a/java/com/android/dialer/util/res/values-tr/strings.xml b/java/com/android/dialer/util/res/values-tr/strings.xml index 108b20a0b..dcd3e83e0 100644 --- a/java/com/android/dialer/util/res/values-tr/strings.xml +++ b/java/com/android/dialer/util/res/values-tr/strings.xml @@ -23,4 +23,6 @@ "Bu cihazda bu işlem için uygun uygulama yok" "WPS çağrısı yaparsanız, devam eden çağrı sonlandırılır." "Devam" + + diff --git a/java/com/android/dialer/util/res/values-uk/strings.xml b/java/com/android/dialer/util/res/values-uk/strings.xml index d57b1de11..2b5bd38b8 100644 --- a/java/com/android/dialer/util/res/values-uk/strings.xml +++ b/java/com/android/dialer/util/res/values-uk/strings.xml @@ -23,4 +23,6 @@ "На цьому пристрої немає додатка, який може виконати цю дію" "Якщо здійснити виклик WPS, буде роз’єднано поточний виклик." "Продовжити" + + diff --git a/java/com/android/dialer/util/res/values-ur/strings.xml b/java/com/android/dialer/util/res/values-ur/strings.xml index 7c036d096..2e3f8a0cb 100644 --- a/java/com/android/dialer/util/res/values-ur/strings.xml +++ b/java/com/android/dialer/util/res/values-ur/strings.xml @@ -23,4 +23,6 @@ "اس آلہ پر اس کیلئے کوئی ایپ نہیں ہے" "‏WPS کال کرنے سے آپ کی موجودہ کال غیر منسلک ہو جائے گی۔" "جاری رکھیں" + + diff --git a/java/com/android/dialer/util/res/values-uz/strings.xml b/java/com/android/dialer/util/res/values-uz/strings.xml index 0e28bf7a0..ca7c8218f 100644 --- a/java/com/android/dialer/util/res/values-uz/strings.xml +++ b/java/com/android/dialer/util/res/values-uz/strings.xml @@ -23,4 +23,6 @@ "Qurilmada buni bajaradigan ilova yo‘q" "WPS-chaqiruv boshlab yuborilsa, hozirgi qo‘ng‘iroq tugatiladi." "Davom ettirish" + + diff --git a/java/com/android/dialer/util/res/values-vi/strings.xml b/java/com/android/dialer/util/res/values-vi/strings.xml index 925b91ecf..8a225a305 100644 --- a/java/com/android/dialer/util/res/values-vi/strings.xml +++ b/java/com/android/dialer/util/res/values-vi/strings.xml @@ -23,4 +23,6 @@ "Không có ứng dụng nào cho thao tác đó trên thiết bị này" "Việc thực hiện cuộc gọi WPS sẽ ngắt kết nối cuộc gọi hiện có của bạn." "Tiếp tục" + + diff --git a/java/com/android/dialer/util/res/values-zh-rCN/strings.xml b/java/com/android/dialer/util/res/values-zh-rCN/strings.xml index 6d3e8218f..0f2d65828 100644 --- a/java/com/android/dialer/util/res/values-zh-rCN/strings.xml +++ b/java/com/android/dialer/util/res/values-zh-rCN/strings.xml @@ -23,4 +23,6 @@ "此设备上没有可执行此操作的应用" "拨打 WPS 电话会中断现有通话。" "继续" + + diff --git a/java/com/android/dialer/util/res/values-zh-rHK/strings.xml b/java/com/android/dialer/util/res/values-zh-rHK/strings.xml index 2193cfa35..873de4dcf 100644 --- a/java/com/android/dialer/util/res/values-zh-rHK/strings.xml +++ b/java/com/android/dialer/util/res/values-zh-rHK/strings.xml @@ -23,4 +23,6 @@ "這部裝置上沒有可用的應用程式" "撥打 WPS 電話會掛斷現有通話。" "繼續" + + diff --git a/java/com/android/dialer/util/res/values-zh-rTW/strings.xml b/java/com/android/dialer/util/res/values-zh-rTW/strings.xml index 192631831..6af0cd176 100644 --- a/java/com/android/dialer/util/res/values-zh-rTW/strings.xml +++ b/java/com/android/dialer/util/res/values-zh-rTW/strings.xml @@ -23,4 +23,6 @@ "這個裝置未安裝可執行該操作的應用程式" "撥打 WPS 電話會中斷你正在進行的通話。" "繼續" + + diff --git a/java/com/android/dialer/util/res/values-zu/strings.xml b/java/com/android/dialer/util/res/values-zu/strings.xml index cdc7f892b..ea15b7d43 100644 --- a/java/com/android/dialer/util/res/values-zu/strings.xml +++ b/java/com/android/dialer/util/res/values-zu/strings.xml @@ -23,4 +23,6 @@ "Alukho uhlelo lokusebenza lalokho kule divayisi" "Ukwenza ikholi ye-WPS kuzonqamula ikholi yakho ekhona." "Qhubeka" + + diff --git a/java/com/android/dialer/util/res/values/strings.xml b/java/com/android/dialer/util/res/values/strings.xml index 43ea6e31a..a4d944c19 100644 --- a/java/com/android/dialer/util/res/values/strings.xml +++ b/java/com/android/dialer/util/res/values/strings.xml @@ -39,4 +39,6 @@ Continue + + Camera permission enabled diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java index e36d9cf9e..30877ffa5 100644 --- a/java/com/android/incallui/CallButtonPresenter.java +++ b/java/com/android/incallui/CallButtonPresenter.java @@ -414,7 +414,7 @@ public class CallButtonPresenter final boolean showMute = call.can(android.telecom.Call.Details.CAPABILITY_MUTE); final boolean hasCameraPermission = - isVideo && VideoUtils.hasCameraPermissionAndAllowedByUser(mContext); + isVideo && VideoUtils.hasCameraPermissionAndShownPrivacyToast(mContext); // Disabling local video doesn't seem to work when dialing. See b/30256571. final boolean showPauseVideo = isVideo diff --git a/java/com/android/incallui/ContactInfoCache.java b/java/com/android/incallui/ContactInfoCache.java index fdfba3b9f..d50a5c26d 100644 --- a/java/com/android/incallui/ContactInfoCache.java +++ b/java/com/android/incallui/ContactInfoCache.java @@ -266,6 +266,8 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { cce.userType = info.userType; cce.originalPhoneNumber = info.phoneNumber; cce.shouldShowLocation = info.shouldShowGeoDescription; + cce.isEmergencyNumber = info.isEmergencyNumber(); + cce.isVoicemailNumber = info.isVoiceMailNumber(); if (info.contactExists) { cce.contactLookupResult = ContactLookupResult.Type.LOCAL_CONTACT; @@ -428,6 +430,19 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { + "; didLocalLookup = " + didLocalLookup); + ContactCacheEntry existingCacheEntry = mInfoMap.get(callId); + Log.d(TAG, "Existing cacheEntry in hashMap " + existingCacheEntry); + + // Mark it as emergency/voicemail if the cache exists and was emergency/voicemail before the + // number changed. + if (existingCacheEntry != null) { + if (existingCacheEntry.isEmergencyNumber) { + callerInfo.markAsEmergency(mContext); + } else if (existingCacheEntry.isVoicemailNumber) { + callerInfo.markAsVoiceMail(mContext); + } + } + int presentationMode = numberPresentation; if (callerInfo.contactExists || callerInfo.isEmergencyNumber() @@ -439,9 +454,6 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { ContactCacheEntry cacheEntry = buildEntry(mContext, callerInfo, presentationMode); cacheEntry.queryId = queryToken.mQueryId; - ContactCacheEntry existingCacheEntry = mInfoMap.get(callId); - Log.d(TAG, "Existing cacheEntry in hashMap " + existingCacheEntry); - if (didLocalLookup) { if (cacheEntry.displayPhotoUri != null) { // When the difference between 2 numbers is only the prefix (e.g. + or IDD), @@ -704,6 +716,8 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { boolean shouldShowLocation; boolean isBusiness; + boolean isEmergencyNumber; + boolean isVoicemailNumber; @Override public String toString() { @@ -743,6 +757,10 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { + originalPhoneNumber + ", shouldShowLocation=" + shouldShowLocation + + ", isEmergencyNumber=" + + isEmergencyNumber + + ", isVoicemailNumber=" + + isVoicemailNumber + '}'; } } diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java index 458df5149..53017a10e 100644 --- a/java/com/android/incallui/StatusBarNotifier.java +++ b/java/com/android/incallui/StatusBarNotifier.java @@ -66,6 +66,7 @@ import com.android.contacts.common.preference.ContactsPreferences; import com.android.contacts.common.util.BitmapUtil; import com.android.contacts.common.util.ContactDisplayUtils; import com.android.dialer.common.LogUtil; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.enrichedcall.EnrichedCallManager; import com.android.dialer.enrichedcall.Session; import com.android.dialer.multimedia.MultimediaData; @@ -308,11 +309,19 @@ public class StatusBarNotifier if (callState == DialerCall.State.INCOMING || callState == DialerCall.State.CALL_WAITING || isVideoUpgradeRequest) { - boolean alreadyActive = - callList.getActiveOrBackgroundCall() != null - && InCallPresenter.getInstance().isShowingInCallUi(); - notificationType = - alreadyActive ? NOTIFICATION_INCOMING_CALL_QUIET : NOTIFICATION_INCOMING_CALL; + if (ConfigProviderBindings.get(mContext) + .getBoolean("quiet_incoming_call_if_ui_showing", true)) { + notificationType = + InCallPresenter.getInstance().isShowingInCallUi() + ? NOTIFICATION_INCOMING_CALL_QUIET + : NOTIFICATION_INCOMING_CALL; + } else { + boolean alreadyActive = + callList.getActiveOrBackgroundCall() != null + && InCallPresenter.getInstance().isShowingInCallUi(); + notificationType = + alreadyActive ? NOTIFICATION_INCOMING_CALL_QUIET : NOTIFICATION_INCOMING_CALL; + } } else { notificationType = NOTIFICATION_IN_CALL; } diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java index bd9837097..a10602227 100644 --- a/java/com/android/incallui/VideoCallPresenter.java +++ b/java/com/android/incallui/VideoCallPresenter.java @@ -30,6 +30,7 @@ import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.compat.CompatUtils; import com.android.dialer.configprovider.ConfigProviderBindings; +import com.android.dialer.util.PermissionsUtil; import com.android.incallui.InCallPresenter.InCallDetailsListener; import com.android.incallui.InCallPresenter.InCallOrientationListener; import com.android.incallui.InCallPresenter.InCallStateListener; @@ -186,7 +187,7 @@ public class VideoCallPresenter */ public static boolean showOutgoingVideo( Context context, int videoState, int sessionModificationState) { - if (!VideoUtils.hasCameraPermissionAndAllowedByUser(context)) { + if (!VideoUtils.hasCameraPermissionAndShownPrivacyToast(context)) { LogUtil.i("VideoCallPresenter.showOutgoingVideo", "Camera permission is disabled by user."); return false; } @@ -421,7 +422,7 @@ public class VideoCallPresenter @Override public void onCameraPermissionGranted() { LogUtil.i("VideoCallPresenter.onCameraPermissionGranted", ""); - VideoUtils.setCameraAllowedByUser(mContext); + PermissionsUtil.setCameraPrivacyToastShown(mContext); enableCamera(mPrimaryCall.getVideoCall(), isCameraRequired()); showVideoUi( mPrimaryCall.getVideoState(), @@ -839,7 +840,7 @@ public class VideoCallPresenter return; } - boolean hasCameraPermission = VideoUtils.hasCameraPermissionAndAllowedByUser(mContext); + boolean hasCameraPermission = VideoUtils.hasCameraPermissionAndShownPrivacyToast(mContext); if (!hasCameraPermission) { videoCall.setCamera(null); mPreviewSurfaceState = PreviewSurfaceState.NONE; @@ -1081,22 +1082,23 @@ public class VideoCallPresenter } @Override - public boolean shouldShowCameraPermissionDialog() { + public boolean shouldShowCameraPermissionToast() { if (mPrimaryCall == null) { - LogUtil.i("VideoCallPresenter.shouldShowCameraPermissionDialog", "null call"); + LogUtil.i("VideoCallPresenter.shouldShowCameraPermissionToast", "null call"); return false; } if (mPrimaryCall.didShowCameraPermission()) { LogUtil.i( - "VideoCallPresenter.shouldShowCameraPermissionDialog", "already shown for this call"); + "VideoCallPresenter.shouldShowCameraPermissionToast", "already shown for this call"); return false; } if (!ConfigProviderBindings.get(mContext) .getBoolean("camera_permission_dialog_allowed", true)) { - LogUtil.i("VideoCallPresenter.shouldShowCameraPermissionDialog", "disabled by config"); + LogUtil.i("VideoCallPresenter.shouldShowCameraPermissionToast", "disabled by config"); return false; } - return !VideoUtils.hasCameraPermission(mContext) || !VideoUtils.isCameraAllowedByUser(mContext); + return !VideoUtils.hasCameraPermission(mContext) + || !PermissionsUtil.hasCameraPrivacyToastShown(mContext); } @Override diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java index 44310536d..b5dd1175b 100644 --- a/java/com/android/incallui/answer/impl/AnswerFragment.java +++ b/java/com/android/incallui/answer/impl/AnswerFragment.java @@ -718,7 +718,7 @@ public class AnswerFragment extends Fragment } view.setSystemUiVisibility(flags); if (isVideoCall() || isVideoUpgradeRequest()) { - if (VideoUtils.hasCameraPermissionAndAllowedByUser(getContext())) { + if (VideoUtils.hasCameraPermissionAndShownPrivacyToast(getContext())) { if (isSelfManagedCamera()) { answerVideoCallScreen = new SelfManagedAnswerVideoCallScreen(getCallId(), this, view); } else { diff --git a/java/com/android/incallui/call/TelecomAdapter.java b/java/com/android/incallui/call/TelecomAdapter.java index 4fc9f81eb..005278bff 100644 --- a/java/com/android/incallui/call/TelecomAdapter.java +++ b/java/com/android/incallui/call/TelecomAdapter.java @@ -88,9 +88,13 @@ public class TelecomAdapter implements InCallServiceListener { List conferenceable = call.getConferenceableCalls(); if (!conferenceable.isEmpty()) { call.conference(conferenceable.get(0)); + // It's safe to clear restrict count for merge action. + DialerCall.clearRestrictedCount(); } else { if (call.getDetails().can(android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE)) { call.mergeConference(); + // It's safe to clear restrict count for merge action. + DialerCall.clearRestrictedCount(); } } } else { diff --git a/java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java b/java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java index da0c9d6be..a0ca8cd04 100644 --- a/java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java +++ b/java/com/android/incallui/disconnectdialog/EnableWifiCallingPrompt.java @@ -41,7 +41,7 @@ public class EnableWifiCallingPrompt implements DisconnectDialog { @Override public boolean shouldShow(DisconnectCause disconnectCause) { String reason = disconnectCause.getReason(); - if (reason.startsWith(REASON_WIFI_ON_BUT_WFC_OFF)) { + if (reason != null && reason.startsWith(REASON_WIFI_ON_BUT_WFC_OFF)) { LogUtil.i( "EnableWifiCallingPrompt.shouldShowPrompt", "showing prompt for disconnect cause: %s", diff --git a/java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java b/java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java index 34db976b2..526d45ed7 100644 --- a/java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java +++ b/java/com/android/incallui/disconnectdialog/VideoCallNotAvailablePrompt.java @@ -24,6 +24,7 @@ import android.support.annotation.NonNull; import android.telecom.DisconnectCause; import android.telecom.PhoneAccountHandle; import android.util.Pair; +import com.android.contacts.common.compat.telecom.TelecomManagerCompat; import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.callintent.CallIntentBuilder; import com.android.dialer.common.LogUtil; @@ -33,12 +34,10 @@ import com.android.incallui.call.DialerCall; /** Prompt user to make voice call if video call is not currently available. */ public class VideoCallNotAvailablePrompt implements DisconnectDialog { - private static final String REASON_IMS_ACCESS_BLOCKED = "IMS_ACCESS_BLOCKED"; - @Override public boolean shouldShow(DisconnectCause disconnectCause) { if (disconnectCause.getCode() == DisconnectCause.ERROR - && REASON_IMS_ACCESS_BLOCKED.equals(disconnectCause.getReason())) { + && TelecomManagerCompat.REASON_IMS_ACCESS_BLOCKED.equals(disconnectCause.getReason())) { LogUtil.i( "VideoCallNotAvailablePrompt.shouldShowPrompt", "showing prompt for disconnect cause: %s", diff --git a/java/com/android/incallui/disconnectdialog/res/values-af/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-af/strings.xml index dae242699..5f07dfc1c 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-af/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-af/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Aktiveer" + "Video-oproepe is nie nou beskikbaar nie" + "Probeer weer later bel of gaan voort met die oproep as \'n stemoproep." + "Stemoproep" diff --git a/java/com/android/incallui/disconnectdialog/res/values-am/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-am/strings.xml index dae242699..62a77e482 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-am/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-am/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "አንቃ" + "የቪዲዮ ጥሪ ለጊዜው አይገኝም" + "በኋላ እንደገና ለመደወል ይሞክሩ ወይም ጥሪውን እንደ የድምጽ ጥሪ ይቀጥሉ።" + "የድምጽ ጥሪ" diff --git a/java/com/android/incallui/disconnectdialog/res/values-ar/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ar/strings.xml index dae242699..e29ee2f96 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-ar/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-ar/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "تمكين" + "اتصال الفيديو غير متوفر حاليًا" + "حاول الاتصال مرة أخرى لاحقًا أو أكمل المكالمة كمكالمة صوتية." + "مكالمة صوتية" diff --git a/java/com/android/incallui/disconnectdialog/res/values-be/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-be/strings.xml index dae242699..d4cab2640 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-be/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-be/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Уключыць" + "Відэавыклікі зараз недаступныя" + "Паспрабуйце зрабіць выклік пазней або працягніце выклік як галасавы." + "Галасавы выклік" diff --git a/java/com/android/incallui/disconnectdialog/res/values-bg/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-bg/strings.xml index dae242699..e9211abee 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-bg/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-bg/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Активиране" + "В момента не е възможно видеообаждане" + "Опитайте да се обадите отново по-късно или продължете обаждането като гласово." + "Гласово обаждане" diff --git a/java/com/android/incallui/disconnectdialog/res/values-cs/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-cs/strings.xml index dae242699..502434ae3 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-cs/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-cs/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Zapnout" + "Videohovory momentálně nejsou dostupné" + "Zkuste zavolat později nebo v hovoru pokračujte bez videa." + "Hlasový hovor" diff --git a/java/com/android/incallui/disconnectdialog/res/values-da/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-da/strings.xml index dae242699..817226eeb 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-da/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-da/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Aktivér" + "Det er ikke muligt at foretage videoopkald i øjeblikket" + "Prøv at ringe igen senere, eller fortsæt med et taleopkald." + "Taleopkald" diff --git a/java/com/android/incallui/disconnectdialog/res/values-de/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-de/strings.xml index dae242699..8ebc527fc 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-de/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-de/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Aktivieren" + "Videoanrufe sind momentan nicht verfügbar" + "Versuche es später noch einmal oder setze den Anruf als Sprachanruf fort." + "Sprachanruf" diff --git a/java/com/android/incallui/disconnectdialog/res/values-es-rUS/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-es-rUS/strings.xml index dae242699..98afb12bb 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-es-rUS/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-es-rUS/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Habilitar" + "La videollamada no está disponible en este momento" + "Prueba llamando de nuevo más tarde o continúa la llamada como una llamada de voz." + "Llamada de voz" diff --git a/java/com/android/incallui/disconnectdialog/res/values-es/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-es/strings.xml index dae242699..580ac8b11 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-es/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-es/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Habilitar" + "No se pueden hacer videollamadas en estos momentos" + "Prueba a llamar de nuevo más tarde o haz una llamada de voz." + "Llamada de voz" diff --git a/java/com/android/incallui/disconnectdialog/res/values-eu/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-eu/strings.xml index dae242699..c207d39d5 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-eu/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-eu/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Gaitu" + "Une honetan, bideo-deiak ez daude erabilgarri" + "Saiatu geroago berriro deitzen, edo aldatu ahots-deira." + "Ahots-deia" diff --git a/java/com/android/incallui/disconnectdialog/res/values-fa/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-fa/strings.xml index dae242699..73c2a8693 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-fa/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-fa/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "فعال کردن" + "تماس ویدیویی درحال حاضر امکان‌پذیر نیست" + "بعداً دوباره تماس بگیرید یا با تماس صوتی ادامه دهید." + "تماس صوتی" diff --git a/java/com/android/incallui/disconnectdialog/res/values-fi/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-fi/strings.xml index dae242699..93d4cc7ca 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-fi/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-fi/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Ota käyttöön" + "Videopuhelut ei ole tällä hetkellä saatavilla" + "Yritä soittaa myöhemmin uudelleen tai jatka puhelua äänipuheluna." + "Puhelu" diff --git a/java/com/android/incallui/disconnectdialog/res/values-fr/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-fr/strings.xml index dae242699..f9dfdfad4 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-fr/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-fr/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Activer" + "La fonction d\'appel vidéo est momentanément indisponible" + "Réessayez plus tard ou reprenez l\'appel en mode vocal." + "Appel vocal" diff --git a/java/com/android/incallui/disconnectdialog/res/values-gl/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-gl/strings.xml index dae242699..3313c4436 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-gl/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-gl/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Activar" + "As videochamadas non están dispoñibles actualmente" + "Proba a chamar de novo máis tarde ou continuar a chamada como unha chamada de voz." + "Chamada de voz" diff --git a/java/com/android/incallui/disconnectdialog/res/values-hi/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-hi/strings.xml index dae242699..820153922 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-hi/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-hi/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "सक्षम करें" + "इस समय वीडियो कॉलिंग की सुविधा उपलब्ध नहीं है" + "बाद में दोबारा कॉल करने की कोशिश करें या कॉल को वॉइस कॉल के रूप में जारी रखें." + "वॉइस कॉल" diff --git a/java/com/android/incallui/disconnectdialog/res/values-hr/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-hr/strings.xml index dae242699..c1b56b7f7 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-hr/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-hr/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Omogući" + "Videopozivanje trenutačno nije dostupno" + "Pokušajte ponovno nazvati kasnije ili nastavite poziv kao glasovni." + "Glasovni poziv" diff --git a/java/com/android/incallui/disconnectdialog/res/values-hu/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-hu/strings.xml index dae242699..e1f9bd9d1 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-hu/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-hu/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Engedélyezés" + "A videohívás jelenleg nem érhető el" + "Indítson hívást később, vagy folytassa hanghívásként." + "Hanghívás" diff --git a/java/com/android/incallui/disconnectdialog/res/values-hy/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-hy/strings.xml index dae242699..d2c10be1f 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-hy/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-hy/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Միացնել" + "Տեսազանգը ներկայումս հասանելի չէ" + "Ավելի ուշ նորից փորձեք զանգել կամ շարունակեք զանգն առանց տեսապատկերի:" + "Զանգ" diff --git a/java/com/android/incallui/disconnectdialog/res/values-in/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-in/strings.xml index dae242699..8b895bc2a 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-in/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-in/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Aktifkan" + "Video call saat ini tidak tersedia" + "Coba lagi nanti atau lanjutkan sebagai panggilan suara." + "Panggilan suara" diff --git a/java/com/android/incallui/disconnectdialog/res/values-it/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-it/strings.xml index dae242699..1b862f766 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-it/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-it/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Abilita" + "Le videochiamate non sono disponibili in questo momento" + "Prova a chiamare di nuovo più tardi o continua la chiamata come chiamata vocale." + "Chiamata vocale" diff --git a/java/com/android/incallui/disconnectdialog/res/values-iw/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-iw/strings.xml index dae242699..91af8a9e5 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-iw/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-iw/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "הפעלה" + "לא ניתן לשוחח בשיחת וידאו כרגע" + "מומלץ לנסות להתקשר מאוחר יותר או להמשיך לשוחח בשיחה קולית." + "שיחה קולית" diff --git a/java/com/android/incallui/disconnectdialog/res/values-ka/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ka/strings.xml index dae242699..804597972 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-ka/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-ka/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "ჩართვა" + "ვიდეოზარი ამჟამად მიუწვდომელია" + "სცადეთ, დარეკოთ მოგვიანებით ან გააგრძელოთ ხმოვანი ზარით." + "ხმოვანი ზარი" diff --git a/java/com/android/incallui/disconnectdialog/res/values-kk/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-kk/strings.xml index dae242699..47294f9ff 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-kk/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-kk/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Қосу" + "Бейне қоңырау қазір қолжетімді емес" + "Кейінірек қайталап көріңіз немесе дасуыстық қоңырау ретінде жалғастырыңыз." + "Дауыстық қоңырау" diff --git a/java/com/android/incallui/disconnectdialog/res/values-km/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-km/strings.xml index dae242699..6e1c0fea1 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-km/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-km/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "បើក" + "ការហៅ​វីដេអូ​មិន​អាច​ធ្វើ​បាន​ទេ​នៅពេល​នេះ" + "សាកល្បងហៅ​ម្ដងទៀត​នៅពេលក្រោយ ឬ​បន្ត​ការហៅ​ជា​សំឡេង។" + "ការ​ហៅ​ជា​សំឡេង" diff --git a/java/com/android/incallui/disconnectdialog/res/values-ky/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ky/strings.xml index dae242699..15531690a 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-ky/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-ky/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Иштетүү" + "Видео режиминде чалуу учурда жеткиликсиз" + "Кийинчерээк кайра чалыңыз же үн режиминде чалып көрүңүз." + "Үн чалуусу" diff --git a/java/com/android/incallui/disconnectdialog/res/values-mk/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-mk/strings.xml index dae242699..3c061df22 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-mk/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-mk/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Овозможи" + "Видеоповикувањето е недостапно во моментов." + "Обидете се да повикате повторно подоцна или продолжете со гласовен повик." + "Гласовен повик" diff --git a/java/com/android/incallui/disconnectdialog/res/values-ms/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ms/strings.xml index dae242699..efe87996e 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-ms/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-ms/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Dayakan" + "Panggilan video tidak tersedia pada masa ini" + "Cuba hubungi semula kemudian atau teruskan panggilan sebagai panggilan suara." + "Panggilan suara" diff --git a/java/com/android/incallui/disconnectdialog/res/values-my/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-my/strings.xml index dae242699..04a4f3a26 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-my/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-my/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "ဖွင့်ရန်" + "ဗီဒီယိုခေါ်ဆိုမှုကို လက်ရှိတွင် မရရှိနိုင်ပါ" + "နောက်မှ ထပ်မံခေါ်ဆိုကြည့်ပါ (သို့) အသံခေါ်ဆိုမှု ဆက်လုပ်ကြည့်ပါ။" + "အသံခေါ်ဆိုမှု" diff --git a/java/com/android/incallui/disconnectdialog/res/values-pt-rPT/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-pt-rPT/strings.xml index 7d11ede5f..fb6980a88 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-pt-rPT/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-pt-rPT/strings.xml @@ -18,7 +18,7 @@ "Ativar" - "Neste momento, as videochamadas não estão disponíveis" + "Neste momento, não é possível efetuar videochamadas" "Experimente efetuar a videochamada mais tarde ou continue a chamada como uma chamada de voz." "Chamada de voz" diff --git a/java/com/android/incallui/disconnectdialog/res/values-ro/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ro/strings.xml index dae242699..783619256 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-ro/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-ro/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Activați" + "Apelarea video este indisponibilă momentan" + "Încercați să apelați din nou mai târziu sau continuați ca apel vocal." + "Apel vocal" diff --git a/java/com/android/incallui/disconnectdialog/res/values-ru/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ru/strings.xml index dae242699..ffc3f613b 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-ru/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-ru/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Включить" + "В настоящее время видеовызовы недоступны" + "Повторите попытку позже или продолжайте выполнять вызов как голосовой." + "Голосовой вызов" diff --git a/java/com/android/incallui/disconnectdialog/res/values-si/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-si/strings.xml index dae242699..694887700 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-si/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-si/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "සබල කරන්න" + "වීඩියෝ ඇමතීම දැනට ලබා ගැනීමට නොහැකිය" + "පසුව නැවත ඇමතීම උත්සාහ කරන්න නැතහොත් ඇමතුම හඬ ඇමතුමක් ලෙස දිගටම කරගෙන යන්න." + "හඬ ඇමතීම" diff --git a/java/com/android/incallui/disconnectdialog/res/values-sk/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sk/strings.xml index dae242699..8f4b059b0 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-sk/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-sk/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Povoliť" + "Videohovor momentálne nie je k dispozícii" + "Skúste zavolať znova neskôr alebo pokračujte v hovore bez videa." + "Hlasový hovor" diff --git a/java/com/android/incallui/disconnectdialog/res/values-sq/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sq/strings.xml index dae242699..cccc83f93 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-sq/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-sq/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Aktivizo" + "Telefonatat me video nuk ofrohen aktualisht" + "Provo të telefonosh përsëri më vonë ose vazhdoje telefonatën si një telefonatë zanore." + "Telefonatë me video" diff --git a/java/com/android/incallui/disconnectdialog/res/values-sv/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sv/strings.xml index dae242699..e6be38418 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-sv/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-sv/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Aktivera" + "Det går inte att ringa videosamtal just nu" + "Försök ringa upp igen senare eller fortsätt samtalet som ett röstsamtal" + "Röstsamtal" diff --git a/java/com/android/incallui/disconnectdialog/res/values-sw/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sw/strings.xml index dae242699..6d6a6a06d 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-sw/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-sw/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Washa" + "Kipengele cha kupiga simu za video hakipatikani kwa sasa" + "Jaribu kupiga simu ya video tena hapo baadaye au uendelee na mazungumzo kama simu ya sauti." + "Simu ya sauti" diff --git a/java/com/android/incallui/disconnectdialog/res/values-tl/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-tl/strings.xml index dae242699..17f29af56 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-tl/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-tl/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "I-enable" + "Kasalukuyang hindi available ang pakikipag-video call" + "Subukang tumawag muli sa ibang pagkakataon o ipagpatuloy ang tawag bilang isang voice call." + "Voice call" diff --git a/java/com/android/incallui/disconnectdialog/res/values-tr/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-tr/strings.xml index dae242699..a0ba4fa8a 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-tr/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-tr/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Etkinleştir" + "Görüntülü görüşme şu anda kullanılamıyor" + "Görüntülü görüşme yapmayı daha sonra tekrar deneyin veya görüşmeye sesli arama olarak devam edin." + "Sesli arama" diff --git a/java/com/android/incallui/disconnectdialog/res/values-ur/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ur/strings.xml index dae242699..4fa8b50d4 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-ur/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-ur/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "فعال کریں" + "ویڈیو کالنگ فی الحال دستیاب نہیں ہے" + "بعد میں دوبارہ کال کرنے کی کوشش کریں یا کال کو بطور صوتی کال جاری رکھیں۔" + "صوتی کال" diff --git a/java/com/android/incallui/disconnectdialog/res/values-uz/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-uz/strings.xml index dae242699..229e6e798 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-uz/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-uz/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Yoqish" + "Video muloqot funksiyasidan hozirgi vaqtda foydalanib bo‘lmaydi." + "Keyinroq qayta urinib ko‘ring yoki ovozli muloqot rejimida o‘ting." + "Ovozli muloqot" diff --git a/java/com/android/incallui/disconnectdialog/res/values-vi/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-vi/strings.xml index dae242699..3e49451b4 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-vi/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-vi/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "Bật" + "Hiện không sử dụng được tính năng gọi điện video" + "Hãy thử gọi lại sau hoặc tiếp tục gọi dưới dạng cuộc gọi thoại." + "Cuộc gọi thoại" diff --git a/java/com/android/incallui/disconnectdialog/res/values-zh-rCN/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-zh-rCN/strings.xml index dae242699..3f8cd6d62 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-zh-rCN/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-zh-rCN/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "启用" + "当前无法使用视频通话功能" + "请稍后再试,或者改用语音通话。" + "语音通话" diff --git a/java/com/android/incallui/disconnectdialog/res/values-zh-rTW/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-zh-rTW/strings.xml index dae242699..5201a341d 100644 --- a/java/com/android/incallui/disconnectdialog/res/values-zh-rTW/strings.xml +++ b/java/com/android/incallui/disconnectdialog/res/values-zh-rTW/strings.xml @@ -17,12 +17,8 @@ - - - - - - - - + "啟用" + "目前無法使用視訊通話功能" + "請稍後再嘗試撥打電話,或以語音方式繼續進行通話。" + "語音通話" diff --git a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java index 489f72b7d..95bdd6b78 100644 --- a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java +++ b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java @@ -50,6 +50,7 @@ import com.android.dialer.common.Assert; import com.android.dialer.common.FragmentUtils; import com.android.dialer.common.LogUtil; import com.android.dialer.compat.ActivityCompat; +import com.android.dialer.util.PermissionsUtil; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter; import com.android.incallui.contactgrid.ContactGridManager; @@ -65,7 +66,6 @@ import com.android.incallui.incall.protocol.InCallScreenDelegateFactory; import com.android.incallui.incall.protocol.PrimaryCallState; import com.android.incallui.incall.protocol.PrimaryInfo; import com.android.incallui.incall.protocol.SecondaryInfo; -import com.android.incallui.video.impl.CameraPermissionDialogFragment.CameraPermissionDialogCallback; import com.android.incallui.video.impl.CheckableImageButton.OnCheckedChangeListener; import com.android.incallui.video.protocol.VideoCallScreen; import com.android.incallui.video.protocol.VideoCallScreenDelegate; @@ -85,15 +85,12 @@ public class SurfaceViewVideoCallFragment extends Fragment OnClickListener, OnCheckedChangeListener, AudioRouteSelectorPresenter, - OnSystemUiVisibilityChangeListener, - CameraPermissionDialogCallback { + OnSystemUiVisibilityChangeListener { @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) static final String ARG_CALL_ID = "call_id"; private static final int CAMERA_PERMISSION_REQUEST_CODE = 1; - private static final String CAMERA_PERMISSION_DIALOG_FRAMENT_TAG = - "CameraPermissionDialogFragment"; private static final long CAMERA_PERMISSION_DIALOG_DELAY_IN_MILLIS = 2000L; private static final long VIDEO_OFF_VIEW_FADE_OUT_DELAY_IN_MILLIS = 2000L; @@ -131,7 +128,7 @@ public class SurfaceViewVideoCallFragment extends Fragment new Runnable() { @Override public void run() { - if (videoCallScreenDelegate.shouldShowCameraPermissionDialog()) { + if (videoCallScreenDelegate.shouldShowCameraPermissionToast()) { LogUtil.i( "SurfaceViewVideoCallFragment.cameraPermissionDialogRunnable", "showing dialog"); checkCameraPermission(); @@ -612,7 +609,7 @@ public class SurfaceViewVideoCallFragment extends Fragment @Override public void onCheckedChanged(CheckableImageButton button, boolean isChecked) { if (button == cameraOffButton) { - if (!isChecked && !VideoUtils.hasCameraPermissionAndAllowedByUser(getContext())) { + if (!isChecked && !VideoUtils.hasCameraPermissionAndShownPrivacyToast(getContext())) { LogUtil.i("SurfaceViewVideoCallFragment.onCheckedChanged", "show camera permission dialog"); checkCameraPermission(); } else { @@ -1048,24 +1045,19 @@ public class SurfaceViewVideoCallFragment extends Fragment } } - @Override - public void onCameraPermissionGranted() { - videoCallScreenDelegate.onCameraPermissionGranted(); - } - private void checkCameraPermission() { // Checks if user has consent of camera permission and the permission is granted. // If camera permission is revoked, shows system permission dialog. // If camera permission is granted but user doesn't have consent of camera permission // (which means it's first time making video call), shows custom dialog instead. This // will only be shown to user once. - if (!VideoUtils.hasCameraPermissionAndAllowedByUser(getContext())) { + if (!VideoUtils.hasCameraPermissionAndShownPrivacyToast(getContext())) { videoCallScreenDelegate.onCameraPermissionDialogShown(); if (!VideoUtils.hasCameraPermission(getContext())) { requestPermissions(new String[] {permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE); } else { - CameraPermissionDialogFragment.newInstance() - .show(getChildFragmentManager(), CAMERA_PERMISSION_DIALOG_FRAMENT_TAG); + PermissionsUtil.showCameraPermissionToast(getContext()); + videoCallScreenDelegate.onCameraPermissionGranted(); } } } diff --git a/java/com/android/incallui/video/impl/VideoCallFragment.java b/java/com/android/incallui/video/impl/VideoCallFragment.java index f9b5d45fa..203710e5f 100644 --- a/java/com/android/incallui/video/impl/VideoCallFragment.java +++ b/java/com/android/incallui/video/impl/VideoCallFragment.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.Matrix; import android.graphics.Outline; import android.graphics.Point; import android.graphics.drawable.Animatable; @@ -44,11 +45,11 @@ import android.view.Surface; import android.view.TextureView; import android.view.View; import android.view.View.OnClickListener; +import android.view.View.OnLayoutChangeListener; import android.view.View.OnSystemUiVisibilityChangeListener; import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; import android.view.ViewOutlineProvider; -import android.view.ViewTreeObserver; import android.view.accessibility.AccessibilityEvent; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.Interpolator; @@ -59,8 +60,8 @@ import android.widget.TextView; import com.android.dialer.common.Assert; import com.android.dialer.common.FragmentUtils; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.ThreadUtil; import com.android.dialer.compat.ActivityCompat; +import com.android.dialer.util.PermissionsUtil; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter; import com.android.incallui.contactgrid.ContactGridManager; @@ -76,7 +77,6 @@ import com.android.incallui.incall.protocol.InCallScreenDelegateFactory; import com.android.incallui.incall.protocol.PrimaryCallState; import com.android.incallui.incall.protocol.PrimaryInfo; import com.android.incallui.incall.protocol.SecondaryInfo; -import com.android.incallui.video.impl.CameraPermissionDialogFragment.CameraPermissionDialogCallback; import com.android.incallui.video.impl.CheckableImageButton.OnCheckedChangeListener; import com.android.incallui.video.protocol.VideoCallScreen; import com.android.incallui.video.protocol.VideoCallScreenDelegate; @@ -94,8 +94,7 @@ public class VideoCallFragment extends Fragment OnClickListener, OnCheckedChangeListener, AudioRouteSelectorPresenter, - OnSystemUiVisibilityChangeListener, - CameraPermissionDialogCallback { + OnSystemUiVisibilityChangeListener { @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) static final String ARG_CALL_ID = "call_id"; @@ -107,8 +106,6 @@ public class VideoCallFragment extends Fragment private static final float ASPECT_RATIO_MATCH_THRESHOLD = 0.2f; private static final int CAMERA_PERMISSION_REQUEST_CODE = 1; - private static final String CAMERA_PERMISSION_DIALOG_FRAMENT_TAG = - "CameraPermissionDialogFragment"; private static final long CAMERA_PERMISSION_DIALOG_DELAY_IN_MILLIS = 2000L; private static final long VIDEO_OFF_VIEW_FADE_OUT_DELAY_IN_MILLIS = 2000L; @@ -123,9 +120,6 @@ public class VideoCallFragment extends Fragment } }; - // Must use a named method reference as otherwise they do not match. - // https://stackoverflow.com/questions/28190304/two-exact-method-references-are-not-equal - private final Runnable updatePreviewVideoIfSafe = this::updatePreviewVideoScaling; private InCallScreenDelegate inCallScreenDelegate; private VideoCallScreenDelegate videoCallScreenDelegate; private InCallButtonUiDelegate inCallButtonUiDelegate; @@ -161,7 +155,7 @@ public class VideoCallFragment extends Fragment new Runnable() { @Override public void run() { - if (videoCallScreenDelegate.shouldShowCameraPermissionDialog()) { + if (videoCallScreenDelegate.shouldShowCameraPermissionToast()) { LogUtil.i("VideoCallFragment.cameraPermissionDialogRunnable", "showing dialog"); checkCameraPermission(); } @@ -257,25 +251,43 @@ public class VideoCallFragment extends Fragment greenScreenBackgroundView = view.findViewById(R.id.videocall_green_screen_background); fullscreenBackgroundView = view.findViewById(R.id.videocall_fullscreen_background); - // We need the texture view size to be able to scale the remote video. At this point the view - // layout won't be complete so add a layout listener. - ViewTreeObserver observer = remoteTextureView.getViewTreeObserver(); - observer.addOnGlobalLayoutListener( - new ViewTreeObserver.OnGlobalLayoutListener() { + remoteTextureView.addOnLayoutChangeListener( + new OnLayoutChangeListener() { @Override - public void onGlobalLayout() { - LogUtil.i("VideoCallFragment.onGlobalLayout", null); + public void onLayoutChange( + View v, + int left, + int top, + int right, + int bottom, + int oldLeft, + int oldTop, + int oldRight, + int oldBottom) { + LogUtil.i("VideoCallFragment.onLayoutChange", "remoteTextureView layout changed"); updateRemoteVideoScaling(); - updatePreviewVideoScaling(); - updateVideoOffViews(); - // Remove the listener so we don't continually re-layout. - ViewTreeObserver observer = remoteTextureView.getViewTreeObserver(); - if (observer.isAlive()) { - observer.removeOnGlobalLayoutListener(this); - } + updateRemoteOffView(); } }); + previewTextureView.addOnLayoutChangeListener( + new OnLayoutChangeListener() { + @Override + public void onLayoutChange( + View v, + int left, + int top, + int right, + int bottom, + int oldLeft, + int oldTop, + int oldRight, + int oldBottom) { + LogUtil.i("VideoCallFragment.onLayoutChange", "previewTextureView layout changed"); + fixPreviewRotation(); + updatePreviewOffView(); + } + }); return view; } @@ -354,9 +366,6 @@ public class VideoCallFragment extends Fragment super.onPause(); LogUtil.i("VideoCallFragment.onPause", null); inCallScreenDelegate.onInCallScreenPaused(); - - // If this is scheduled we should remove it - ThreadUtil.getUiThreadHandler().removeCallbacks(updatePreviewVideoIfSafe); } @Override @@ -461,7 +470,7 @@ public class VideoCallFragment extends Fragment View view = getView(); if (view != null) { // Code is more expressive with all flags present, even though some may be combined - //noinspection PointlessBitwiseExpression + // noinspection PointlessBitwiseExpression view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); } } @@ -641,7 +650,7 @@ public class VideoCallFragment extends Fragment @Override public void onCheckedChanged(CheckableImageButton button, boolean isChecked) { if (button == cameraOffButton) { - if (!isChecked && !VideoUtils.hasCameraPermissionAndAllowedByUser(getContext())) { + if (!isChecked && !VideoUtils.hasCameraPermissionAndShownPrivacyToast(getContext())) { LogUtil.i("VideoCallFragment.onCheckedChanged", "show camera permission dialog"); checkCameraPermission(); } else { @@ -662,15 +671,19 @@ public class VideoCallFragment extends Fragment "showPreview: %b, shouldShowRemote: %b", shouldShowPreview, shouldShowRemote); - this.shouldShowPreview = shouldShowPreview; - this.shouldShowRemote = shouldShowRemote; - this.isRemotelyHeld = isRemotelyHeld; videoCallScreenDelegate.getLocalVideoSurfaceTexture().attachToTextureView(previewTextureView); videoCallScreenDelegate.getRemoteVideoSurfaceTexture().attachToTextureView(remoteTextureView); - updateVideoOffViews(); - updateRemoteVideoScaling(); + this.isRemotelyHeld = isRemotelyHeld; + if (this.shouldShowRemote != shouldShowRemote) { + this.shouldShowRemote = shouldShowRemote; + updateRemoteOffView(); + } + if (this.shouldShowPreview != shouldShowPreview) { + this.shouldShowPreview = shouldShowPreview; + updatePreviewOffView(); + } } @Override @@ -732,7 +745,6 @@ public class VideoCallFragment extends Fragment } else { exitFullscreenMode(); } - updateVideoOffViews(); OnHoldFragment onHoldFragment = ((OnHoldFragment) @@ -949,31 +961,15 @@ public class VideoCallFragment extends Fragment // Do nothing } - private void updatePreviewVideoScaling() { - if (previewTextureView.getWidth() == 0 || previewTextureView.getHeight() == 0) { - LogUtil.i("VideoCallFragment.updatePreviewVideoScaling", "view layout hasn't finished yet"); - return; - } - VideoSurfaceTexture localVideoSurfaceTexture = - videoCallScreenDelegate.getLocalVideoSurfaceTexture(); - Point cameraDimensions = localVideoSurfaceTexture.getSurfaceDimensions(); - if (cameraDimensions == null) { - LogUtil.i( - "VideoCallFragment.updatePreviewVideoScaling", "camera dimensions haven't been set"); - return; - } - if (isLandscape()) { - VideoSurfaceBindings.scaleVideoAndFillView( - previewTextureView, - cameraDimensions.x, - cameraDimensions.y, - videoCallScreenDelegate.getDeviceOrientation()); - } else { - VideoSurfaceBindings.scaleVideoAndFillView( - previewTextureView, - cameraDimensions.y, - cameraDimensions.x, - videoCallScreenDelegate.getDeviceOrientation()); + private void fixPreviewRotation() { + int rotationDegrees = getRotationDegrees(); + if (rotationDegrees == 90 || rotationDegrees == 270) { + int viewWidth = previewTextureView.getWidth(); + int viewHeight = previewTextureView.getHeight(); + Matrix transform = new Matrix(); + // Multiplying by -1 prevents the image from being upside down in landscape mode. + transform.postRotate(rotationDegrees * -1.0f, viewWidth / 2.0f, viewHeight / 2.0f); + previewTextureView.setTransform(transform); } } @@ -1010,6 +1006,22 @@ public class VideoCallFragment extends Fragment return rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270; } + private int getRotationDegrees() { + int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation(); + switch (rotation) { + case Surface.ROTATION_0: + return 0; + case Surface.ROTATION_90: + return 90; + case Surface.ROTATION_180: + return 180; + case Surface.ROTATION_270: + return 270; + default: + throw Assert.createAssertionFailException("unsupported rotation: " + rotation); + } + } + private void enterGreenScreenMode() { LogUtil.i("VideoCallFragment.enterGreenScreenMode", null); RelativeLayout.LayoutParams params = @@ -1019,7 +1031,6 @@ public class VideoCallFragment extends Fragment params.addRule(RelativeLayout.ALIGN_PARENT_TOP); previewTextureView.setLayoutParams(params); previewTextureView.setOutlineProvider(null); - updatePreviewVideoScaling(); updateOverlayBackground(); contactGridManager.setIsMiddleRowVisible(true); updateMutePreviewOverlayVisibility(); @@ -1055,12 +1066,11 @@ public class VideoCallFragment extends Fragment previewOffBlurredImageView.setLayoutParams(params); previewOffBlurredImageView.setOutlineProvider(circleOutlineProvider); previewOffBlurredImageView.setClipToOutline(true); - - // Wait until the layout pass has finished before updating the scaling - ThreadUtil.postOnUiThread(updatePreviewVideoIfSafe); } - private void updateVideoOffViews() { + private void updatePreviewOffView() { + LogUtil.enterBlock("VideoCallFragment.updatePreviewOffView"); + // Always hide the preview off and remote off views in green screen mode. boolean previewEnabled = isInGreenScreenMode || shouldShowPreview; previewOffOverlay.setVisibility(previewEnabled ? View.GONE : View.VISIBLE); @@ -1070,7 +1080,10 @@ public class VideoCallFragment extends Fragment shouldShowPreview, BLUR_PREVIEW_RADIUS, BLUR_PREVIEW_SCALE_FACTOR); + } + private void updateRemoteOffView() { + LogUtil.enterBlock("VideoCallFragment.updateRemoteOffView"); boolean remoteEnabled = isInGreenScreenMode || shouldShowRemote; boolean isResumed = remoteEnabled && !isRemotelyHeld; if (isResumed) { @@ -1097,7 +1110,6 @@ public class VideoCallFragment extends Fragment isRemotelyHeld ? R.string.videocall_remotely_held : R.string.videocall_remote_video_off); remoteVideoOff.setVisibility(View.VISIBLE); } - LogUtil.i("VideoCallFragment.updateVideoOffViews", "calling updateBlurredImageView"); updateBlurredImageView( remoteTextureView, remoteOffBlurredImageView, @@ -1125,6 +1137,8 @@ public class VideoCallFragment extends Fragment int width = Math.round(textureView.getWidth() * scaleFactor); int height = Math.round(textureView.getHeight() * scaleFactor); + LogUtil.i("VideoCallFragment.updateBlurredImageView", "width: %d, height: %d", width, height); + // This call takes less than 10 milliseconds. Bitmap bitmap = textureView.getBitmap(width, height); @@ -1239,26 +1253,21 @@ public class VideoCallFragment extends Fragment videoCallScreenDelegate.onSystemUiVisibilityChange(navBarVisible); } - @Override - public void onCameraPermissionGranted() { - videoCallScreenDelegate.onCameraPermissionGranted(); - } - private void checkCameraPermission() { // Checks if user has consent of camera permission and the permission is granted. // If camera permission is revoked, shows system permission dialog. // If camera permission is granted but user doesn't have consent of camera permission // (which means it's first time making video call), shows custom dialog instead. This // will only be shown to user once. - if (!VideoUtils.hasCameraPermissionAndAllowedByUser(getContext())) { + if (!VideoUtils.hasCameraPermissionAndShownPrivacyToast(getContext())) { videoCallScreenDelegate.onCameraPermissionDialogShown(); if (!VideoUtils.hasCameraPermission(getContext())) { requestPermissions(new String[] {permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE); } else { - CameraPermissionDialogFragment.newInstance() - .show(getChildFragmentManager(), CAMERA_PERMISSION_DIALOG_FRAMENT_TAG); + PermissionsUtil.showCameraPermissionToast(getContext()); + videoCallScreenDelegate.onCameraPermissionGranted(); } } } } -//LINT.ThenChange(//depot/google3/third_party/java_src/android_app/dialer/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java) +// LINT.ThenChange(//depot/google3/third_party/java_src/android_app/dialer/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java) diff --git a/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java b/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java index e7e69df2f..55ea23f5e 100644 --- a/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java +++ b/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java @@ -37,7 +37,7 @@ public interface VideoCallScreenDelegate { void onCameraPermissionGranted(); - boolean shouldShowCameraPermissionDialog(); + boolean shouldShowCameraPermissionToast(); void onCameraPermissionDialogShown(); diff --git a/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java b/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java index 8cac40229..1af7dff4f 100644 --- a/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java +++ b/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java @@ -67,9 +67,6 @@ public class VideoSurfaceTextureImpl implements VideoSurfaceTexture { "VideoSurfaceTextureImpl.setSurfaceDimensions", "surfaceDimensions: " + surfaceDimensions + " " + toString()); this.surfaceDimensions = surfaceDimensions; - if (surfaceDimensions != null && savedSurfaceTexture != null) { - savedSurfaceTexture.setDefaultBufferSize(surfaceDimensions.x, surfaceDimensions.y); - } } @Override diff --git a/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java b/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java index 55ee2db21..961de9e9a 100644 --- a/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java +++ b/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java @@ -91,7 +91,9 @@ public class LightbringerTech implements VideoTech, LightbringerListener { } @Override - public void onRemovedFromCallList() {} + public void onRemovedFromCallList() { + lightbringer.unregisterListener(this); + } @Override public int getSessionModificationState() { diff --git a/java/com/android/incallui/videotech/utils/VideoUtils.java b/java/com/android/incallui/videotech/utils/VideoUtils.java index 527654030..9dfc68728 100644 --- a/java/com/android/incallui/videotech/utils/VideoUtils.java +++ b/java/com/android/incallui/videotech/utils/VideoUtils.java @@ -20,12 +20,10 @@ import android.content.Context; import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; -import com.android.dialer.util.DialerUtils; +import com.android.dialer.util.PermissionsUtil; public class VideoUtils { - private static final String PREFERENCE_CAMERA_ALLOWED_BY_USER = "camera_allowed_by_user"; - public static boolean hasSentVideoUpgradeRequest(@SessionModificationState int state) { return state == SessionModificationState.WAITING_FOR_UPGRADE_TO_VIDEO_RESPONSE || state == SessionModificationState.UPGRADE_TO_VIDEO_REQUEST_FAILED @@ -37,24 +35,12 @@ public class VideoUtils { return state == SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST; } - public static boolean hasCameraPermissionAndAllowedByUser(@NonNull Context context) { - return isCameraAllowedByUser(context) && hasCameraPermission(context); + public static boolean hasCameraPermissionAndShownPrivacyToast(@NonNull Context context) { + return PermissionsUtil.hasCameraPrivacyToastShown(context) && hasCameraPermission(context); } public static boolean hasCameraPermission(@NonNull Context context) { return ContextCompat.checkSelfPermission(context, android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED; } - - public static boolean isCameraAllowedByUser(@NonNull Context context) { - return DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context) - .getBoolean(PREFERENCE_CAMERA_ALLOWED_BY_USER, false); - } - - public static void setCameraAllowedByUser(@NonNull Context context) { - DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context) - .edit() - .putBoolean(PREFERENCE_CAMERA_ALLOWED_BY_USER, true) - .apply(); - } } diff --git a/java/com/android/voicemail/AndroidManifest.xml b/java/com/android/voicemail/AndroidManifest.xml index aedfd6fbf..817cf1b55 100644 --- a/java/com/android/voicemail/AndroidManifest.xml +++ b/java/com/android/voicemail/AndroidManifest.xml @@ -14,7 +14,7 @@ ~ limitations under the License --> + package="com.android.voicemail"> - + + + + + + + + + + + + + + + diff --git a/java/com/android/voicemail/VoicemailClient.java b/java/com/android/voicemail/VoicemailClient.java index 97b824b27..28d2bf0ff 100644 --- a/java/com/android/voicemail/VoicemailClient.java +++ b/java/com/android/voicemail/VoicemailClient.java @@ -18,7 +18,10 @@ package com.android.voicemail; import android.content.Context; import android.content.Intent; +import android.os.PersistableBundle; import android.provider.VoicemailContract.Voicemails; +import android.support.annotation.MainThread; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyManager; @@ -51,6 +54,12 @@ public interface VoicemailClient { String ACTION_SHOW_LEGACY_VOICEMAIL = "com.android.voicemail.VoicemailClient.ACTION_SHOW_LEGACY_VOICEMAIL"; + /** + * Secret code to launch the voicemail config activity intended for OEMs and Carriers. {@code + * *#*#VVMCONFIG#*#*} + */ + String VOICEMAIL_SECRET_CODE = "886266344"; + /** * Whether the visual voicemail service is enabled for the {@code phoneAccountHandle}. "Enable" * means the user "wants" to have this service on, and does not mean the service is actually @@ -122,4 +131,21 @@ public interface VoicemailClient { * provisioning. Being "activated" means all setup are completed, and VVM is expected to work. */ boolean isActivated(Context context, PhoneAccountHandle phoneAccountHandle); + + /** + * Called when {@link #VOICEMAIL_SECRET_CODE} is dialed. {@code context} will be a broadcast + * receiver context. + */ + @MainThread + void showConfigUi(@NonNull Context context); + + @NonNull + PersistableBundle getConfig( + @NonNull Context context, @Nullable PhoneAccountHandle phoneAccountHandle); + + @MainThread + void onBoot(@NonNull Context context); + + @MainThread + void onShutdown(@NonNull Context context); } diff --git a/java/com/android/voicemail/VoicemailPowerCycleReceiver.java b/java/com/android/voicemail/VoicemailPowerCycleReceiver.java new file mode 100644 index 000000000..e9362b42d --- /dev/null +++ b/java/com/android/voicemail/VoicemailPowerCycleReceiver.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.voicemail; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import com.android.dialer.common.Assert; + +/** Receives {@link Intent#ACTION_BOOT_COMPLETED} and {@link Intent#ACTION_SHUTDOWN} */ +public class VoicemailPowerCycleReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + VoicemailClient voicemailClient = VoicemailComponent.get(context).getVoicemailClient(); + if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { + voicemailClient.onBoot(context); + } else if (Intent.ACTION_SHUTDOWN.equals(intent.getAction())) { + voicemailClient.onShutdown(context); + } else { + throw Assert.createAssertionFailException("unexpected action: " + intent.getAction()); + } + } +} diff --git a/java/com/android/voicemail/VoicemailSecretCodeReceiver.java b/java/com/android/voicemail/VoicemailSecretCodeReceiver.java new file mode 100644 index 000000000..6d142410c --- /dev/null +++ b/java/com/android/voicemail/VoicemailSecretCodeReceiver.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.voicemail; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import com.android.dialer.common.LogUtil; + +/** Receives android.provider.Telephony.SECRET_CODE */ +public class VoicemailSecretCodeReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + String host = intent.getData().getHost(); + if (!VoicemailClient.VOICEMAIL_SECRET_CODE.equals(host)) { + return; + } + LogUtil.i("VoicemailSecretCodeReceiver.onReceive", "secret code received"); + VoicemailComponent.get(context).getVoicemailClient().showConfigUi(context); + } +} diff --git a/java/com/android/voicemail/impl/AndroidManifest.xml b/java/com/android/voicemail/impl/AndroidManifest.xml index be7dac10d..49d93f54e 100644 --- a/java/com/android/voicemail/impl/AndroidManifest.xml +++ b/java/com/android/voicemail/impl/AndroidManifest.xml @@ -15,7 +15,7 @@ --> + package="com.android.voicemail.impl"> - - - - - - diff --git a/java/com/android/voicemail/impl/OmtpService.java b/java/com/android/voicemail/impl/OmtpService.java index b82cc5f68..4db1aeb7e 100644 --- a/java/com/android/voicemail/impl/OmtpService.java +++ b/java/com/android/voicemail/impl/OmtpService.java @@ -17,9 +17,13 @@ package com.android.voicemail.impl; import android.annotation.TargetApi; +import android.content.Context; import android.content.Intent; import android.os.Build.VERSION_CODES; import android.os.UserManager; +import android.preference.PreferenceManager; +import android.support.annotation.MainThread; +import android.support.annotation.NonNull; import android.telecom.PhoneAccountHandle; import android.telephony.VisualVoicemailService; import android.telephony.VisualVoicemailSms; @@ -40,6 +44,8 @@ public class OmtpService extends VisualVoicemailService { public static final String EXTRA_VOICEMAIL_SMS = "extra_voicemail_sms"; + private static final String IS_SHUTTING_DOWN = "com.android.voicemail.impl.is_shutting_down"; + @Override public void onCellServiceConnected( VisualVoicemailTask task, final PhoneAccountHandle phoneAccountHandle) { @@ -50,7 +56,7 @@ public class OmtpService extends VisualVoicemailService { return; } - if (!isUserUnlocked()) { + if (!isUserUnlocked(this)) { VvmLog.i(TAG, "onCellServiceConnected: user locked"); task.finish(); return; @@ -75,7 +81,7 @@ public class OmtpService extends VisualVoicemailService { return; } - if (!isUserUnlocked()) { + if (!isUserUnlocked(this)) { LegacyModeSmsHandler.handle(this, sms); return; } @@ -105,12 +111,18 @@ public class OmtpService extends VisualVoicemailService { return; } - if (!isUserUnlocked()) { + if (!isUserUnlocked(this)) { VvmLog.i(TAG, "onSimRemoved: user locked"); task.finish(); return; } + if (isShuttingDown(this)) { + VvmLog.i(TAG, "onSimRemoved: system shutting down, ignoring"); + task.finish(); + return; + } + Logger.get(this).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED); VvmAccountManager.removeAccount(this, phoneAccountHandle); task.finish(); @@ -124,7 +136,7 @@ public class OmtpService extends VisualVoicemailService { task.finish(); return; } - if (!isUserUnlocked()) { + if (!isUserUnlocked(this)) { VvmLog.i(TAG, "onStopped: user locked"); task.finish(); return; @@ -132,6 +144,22 @@ public class OmtpService extends VisualVoicemailService { Logger.get(this).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED); } + @MainThread + static void onBoot(@NonNull Context context) { + VvmLog.i(TAG, "onBoot"); + Assert.isTrue(isUserUnlocked(context)); + Assert.isMainThread(); + setShuttingDown(context, false); + } + + @MainThread + static void onShutdown(@NonNull Context context) { + VvmLog.i(TAG, "onShutdown"); + Assert.isTrue(isUserUnlocked(context)); + Assert.isMainThread(); + setShuttingDown(context, true); + } + private boolean isModuleEnabled() { return VoicemailComponent.get(this).getVoicemailClient().isVoicemailModuleEnabled(); } @@ -150,8 +178,20 @@ public class OmtpService extends VisualVoicemailService { return true; } - private boolean isUserUnlocked() { - UserManager userManager = getSystemService(UserManager.class); + private static boolean isUserUnlocked(@NonNull Context context) { + UserManager userManager = context.getSystemService(UserManager.class); return userManager.isUserUnlocked(); } + + private static void setShuttingDown(Context context, boolean value) { + PreferenceManager.getDefaultSharedPreferences(context) + .edit() + .putBoolean(IS_SHUTTING_DOWN, value) + .apply(); + } + + private static boolean isShuttingDown(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(IS_SHUTTING_DOWN, false); + } } diff --git a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java index 4a9e43370..700e1cbca 100644 --- a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java +++ b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java @@ -15,9 +15,11 @@ */ package com.android.voicemail.impl; +import android.annotation.TargetApi; import android.app.PendingIntent; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.PersistableBundle; import android.support.annotation.NonNull; @@ -30,6 +32,7 @@ import android.telephony.VisualVoicemailSmsFilterSettings; import android.text.TextUtils; import android.util.ArraySet; import com.android.dialer.common.Assert; +import com.android.voicemail.impl.configui.ConfigOverrideFragment; import com.android.voicemail.impl.protocol.VisualVoicemailProtocol; import com.android.voicemail.impl.protocol.VisualVoicemailProtocolFactory; import com.android.voicemail.impl.sms.StatusMessage; @@ -48,27 +51,28 @@ import java.util.Set; * *

The current hidden configs are: {@link #getSslPort()} {@link #getDisabledCapabilities()} */ +@TargetApi(VERSION_CODES.O) public class OmtpVvmCarrierConfigHelper { private static final String TAG = "OmtpVvmCarrierCfgHlpr"; - static final String KEY_VVM_TYPE_STRING = CarrierConfigManager.KEY_VVM_TYPE_STRING; - static final String KEY_VVM_DESTINATION_NUMBER_STRING = + public static final String KEY_VVM_TYPE_STRING = CarrierConfigManager.KEY_VVM_TYPE_STRING; + public static final String KEY_VVM_DESTINATION_NUMBER_STRING = CarrierConfigManager.KEY_VVM_DESTINATION_NUMBER_STRING; - static final String KEY_VVM_PORT_NUMBER_INT = CarrierConfigManager.KEY_VVM_PORT_NUMBER_INT; - static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING = + public static final String KEY_VVM_PORT_NUMBER_INT = CarrierConfigManager.KEY_VVM_PORT_NUMBER_INT; + public static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING = CarrierConfigManager.KEY_CARRIER_VVM_PACKAGE_NAME_STRING; - static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING_ARRAY = + public static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING_ARRAY = "carrier_vvm_package_name_string_array"; - static final String KEY_VVM_PREFETCH_BOOL = CarrierConfigManager.KEY_VVM_PREFETCH_BOOL; - static final String KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL = + public static final String KEY_VVM_PREFETCH_BOOL = CarrierConfigManager.KEY_VVM_PREFETCH_BOOL; + public static final String KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL = CarrierConfigManager.KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL; /** @see #getSslPort() */ - static final String KEY_VVM_SSL_PORT_NUMBER_INT = "vvm_ssl_port_number_int"; + public static final String KEY_VVM_SSL_PORT_NUMBER_INT = "vvm_ssl_port_number_int"; /** @see #isLegacyModeEnabled() */ - static final String KEY_VVM_LEGACY_MODE_ENABLED_BOOL = "vvm_legacy_mode_enabled_bool"; + public static final String KEY_VVM_LEGACY_MODE_ENABLED_BOOL = "vvm_legacy_mode_enabled_bool"; /** * Ban a capability reported by the server from being used. The array of string should be a subset @@ -76,10 +80,10 @@ public class OmtpVvmCarrierConfigHelper { * * @see #getDisabledCapabilities() */ - static final String KEY_VVM_DISABLED_CAPABILITIES_STRING_ARRAY = + public static final String KEY_VVM_DISABLED_CAPABILITIES_STRING_ARRAY = "vvm_disabled_capabilities_string_array"; - static final String KEY_VVM_CLIENT_PREFIX_STRING = "vvm_client_prefix_string"; + public static final String KEY_VVM_CLIENT_PREFIX_STRING = "vvm_client_prefix_string"; private final Context mContext; private final PersistableBundle mCarrierConfig; @@ -87,6 +91,8 @@ public class OmtpVvmCarrierConfigHelper { private final VisualVoicemailProtocol mProtocol; private final PersistableBundle mTelephonyConfig; + @Nullable private final PersistableBundle mOverrideConfig; + private PhoneAccountHandle mPhoneAccountHandle; public OmtpVvmCarrierConfigHelper(Context context, @Nullable PhoneAccountHandle handle) { @@ -100,6 +106,7 @@ public class OmtpVvmCarrierConfigHelper { VvmLog.e(TAG, "PhoneAccountHandle is invalid"); mCarrierConfig = null; mTelephonyConfig = null; + mOverrideConfig = null; mVvmType = null; mProtocol = null; return; @@ -111,6 +118,13 @@ public class OmtpVvmCarrierConfigHelper { mVvmType = getVvmType(); mProtocol = VisualVoicemailProtocolFactory.create(mContext.getResources(), mVvmType); + + if (ConfigOverrideFragment.isOverridden(context)) { + mOverrideConfig = ConfigOverrideFragment.getConfig(context); + VvmLog.w(TAG, "Config override is activated: " + mOverrideConfig); + } else { + mOverrideConfig = null; + } } @VisibleForTesting @@ -119,10 +133,23 @@ public class OmtpVvmCarrierConfigHelper { mContext = context; mCarrierConfig = carrierConfig; mTelephonyConfig = telephonyConfig; + mOverrideConfig = null; mVvmType = getVvmType(); mProtocol = VisualVoicemailProtocolFactory.create(mContext.getResources(), mVvmType); } + public PersistableBundle getConfig() { + PersistableBundle result = new PersistableBundle(); + if (mTelephonyConfig != null) { + result.putAll(mTelephonyConfig); + } + if (mCarrierConfig != null) { + result.putAll(mCarrierConfig); + } + + return result; + } + public Context getContext() { return mContext; } @@ -426,6 +453,13 @@ public class OmtpVvmCarrierConfigHelper { @Nullable private Object getValue(String key, Object defaultValue) { Object result; + if (mOverrideConfig != null) { + result = mOverrideConfig.get(key); + if (result != null) { + return result; + } + } + if (mCarrierConfig != null) { result = mCarrierConfig.get(key); if (result != null) { diff --git a/java/com/android/voicemail/impl/VoicemailClientImpl.java b/java/com/android/voicemail/impl/VoicemailClientImpl.java index 83ce6c588..1b9890381 100644 --- a/java/com/android/voicemail/impl/VoicemailClientImpl.java +++ b/java/com/android/voicemail/impl/VoicemailClientImpl.java @@ -17,8 +17,11 @@ import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.os.Build.VERSION_CODES; +import android.os.PersistableBundle; import android.provider.VoicemailContract.Status; import android.provider.VoicemailContract.Voicemails; +import android.support.annotation.MainThread; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.os.BuildCompat; import android.telecom.PhoneAccountHandle; @@ -28,6 +31,7 @@ import com.android.dialer.common.LogUtil; import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.voicemail.VisualVoicemailTypeExtensions; import com.android.voicemail.VoicemailClient; +import com.android.voicemail.impl.configui.VoicemailSecretCodeActivity; import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil; import com.android.voicemail.impl.settings.VoicemailChangePinActivity; import com.android.voicemail.impl.settings.VoicemailSettingsFragment; @@ -126,6 +130,31 @@ public class VoicemailClientImpl implements VoicemailClient { return VvmAccountManager.isAccountActivated(context, phoneAccountHandle); } + @Override + public void showConfigUi(@NonNull Context context) { + Intent intent = new Intent(context, VoicemailSecretCodeActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + + @Override + public PersistableBundle getConfig(Context context, PhoneAccountHandle phoneAccountHandle) { + return new OmtpVvmCarrierConfigHelper(context, phoneAccountHandle).getConfig(); + } + + @Override + @MainThread + public void onBoot(@NonNull Context context) { + OmtpService.onBoot(context); + StatusCheckJobService.schedule(context); + } + + @Override + @MainThread + public void onShutdown(@NonNull Context context) { + OmtpService.onShutdown(context); + } + @TargetApi(VERSION_CODES.O) @Override public void appendOmtpVoicemailSelectionClause( diff --git a/java/com/android/voicemail/impl/VoicemailClientReceiver.java b/java/com/android/voicemail/impl/VoicemailClientReceiver.java index 49a55a41b..688636e6c 100644 --- a/java/com/android/voicemail/impl/VoicemailClientReceiver.java +++ b/java/com/android/voicemail/impl/VoicemailClientReceiver.java @@ -23,6 +23,7 @@ import android.telecom.PhoneAccountHandle; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.voicemail.VoicemailClient; +import com.android.voicemail.VoicemailComponent; import com.android.voicemail.impl.sync.UploadTask; import com.android.voicemail.impl.sync.VvmAccountManager; @@ -31,6 +32,11 @@ public class VoicemailClientReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { + if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) { + LogUtil.i( + "VoicemailClientReceiver.onReceive", "module disabled, ignoring " + intent.getAction()); + return; + } switch (intent.getAction()) { case VoicemailClient.ACTION_UPLOAD: doUpload(context); diff --git a/java/com/android/voicemail/impl/configui/AndroidManifest.xml b/java/com/android/voicemail/impl/configui/AndroidManifest.xml new file mode 100644 index 000000000..95796f978 --- /dev/null +++ b/java/com/android/voicemail/impl/configui/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java new file mode 100644 index 000000000..18b2b9274 --- /dev/null +++ b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.voicemail.impl.configui; + +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.PersistableBundle; +import android.preference.EditTextPreference; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; +import android.preference.PreferenceFragment; +import android.preference.PreferenceManager; +import android.preference.PreferenceScreen; +import android.preference.SwitchPreference; +import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; +import android.telecom.PhoneAccount; +import android.telecom.PhoneAccountHandle; +import android.telecom.TelecomManager; +import android.text.TextUtils; +import com.android.dialer.common.Assert; +import com.android.dialer.common.concurrent.ThreadUtil; +import com.android.voicemail.VoicemailComponent; + +/** + * Fragment to edit the override values for the {@link import + * com.android.voicemail.impl.OmtpVvmCarrierConfigHelper} + */ +public class ConfigOverrideFragment extends PreferenceFragment + implements OnPreferenceChangeListener { + + /** + * Any preference with key that starts with this prefix will be written to the dialer carrier + * config. + */ + @VisibleForTesting static final String CONFIG_OVERRIDE_KEY_PREFIX = "vvm_config_override_key_"; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + PreferenceManager.setDefaultValues(getActivity(), R.xml.vvm_config_override, false); + addPreferencesFromResource(R.xml.vvm_config_override); + + // add listener so the value of a EditTextPreference will be updated to the summary. + for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { + Preference preference = getPreferenceScreen().getPreference(i); + preference.setOnPreferenceChangeListener(this); + updatePreference(preference); + } + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + Assert.isMainThread(); + ThreadUtil.postOnUiThread(() -> updatePreference(preference)); + return true; + } + + private void updatePreference(Preference preference) { + if (preference instanceof EditTextPreference) { + EditTextPreference editTextPreference = (EditTextPreference) preference; + editTextPreference.setSummary(editTextPreference.getText()); + } + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (TextUtils.equals( + preference.getKey(), getString(R.string.vvm_config_override_load_current_key))) { + loadCurrentConfig(); + } + return super.onPreferenceTreeClick(preferenceScreen, preference); + } + + /** + * Loads the config for the currently carrier into the override values, from the dialer or the + * carrier config app. This is a "reset" button to load the defaults. + */ + private void loadCurrentConfig() { + Context context = getActivity(); + PhoneAccountHandle phoneAccountHandle = + context + .getSystemService(TelecomManager.class) + .getDefaultOutgoingPhoneAccount(PhoneAccount.SCHEME_VOICEMAIL); + + PersistableBundle config = + VoicemailComponent.get(context).getVoicemailClient().getConfig(context, phoneAccountHandle); + + for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { + Preference preference = getPreferenceScreen().getPreference(i); + String key = preference.getKey(); + if (!key.startsWith(CONFIG_OVERRIDE_KEY_PREFIX)) { + continue; + } + + String configKey = key.substring(CONFIG_OVERRIDE_KEY_PREFIX.length()); + + if (configKey.endsWith("bool")) { + ((SwitchPreference) preference).setChecked(config.getBoolean(configKey)); + } else if (configKey.endsWith("int")) { + ((EditTextPreference) preference).setText(String.valueOf(config.getInt(configKey))); + } else if (configKey.endsWith("string")) { + ((EditTextPreference) preference).setText(config.getString(configKey)); + } else if (configKey.endsWith("string_array")) { + ((EditTextPreference) preference).setText(toCsv(config.getStringArray(configKey))); + } else { + throw Assert.createAssertionFailException("unknown type for key " + configKey); + } + updatePreference(preference); + } + } + + public static boolean isOverridden(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(context.getString(R.string.vvm_config_override_enabled_key), false); + } + + public static PersistableBundle getConfig(Context context) { + Assert.checkState(isOverridden(context)); + PersistableBundle result = new PersistableBundle(); + + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + for (String key : preferences.getAll().keySet()) { + if (!key.startsWith(CONFIG_OVERRIDE_KEY_PREFIX)) { + continue; + } + String configKey = key.substring(CONFIG_OVERRIDE_KEY_PREFIX.length()); + if (configKey.endsWith("bool")) { + result.putBoolean(configKey, preferences.getBoolean(key, false)); + } else if (configKey.endsWith("int")) { + result.putInt(configKey, Integer.valueOf(preferences.getString(key, null))); + } else if (configKey.endsWith("string")) { + result.putString(configKey, preferences.getString(key, null)); + } else if (configKey.endsWith("string_array")) { + result.putStringArray(configKey, fromCsv(preferences.getString(key, null))); + } else { + throw Assert.createAssertionFailException("unknown type for key " + configKey); + } + } + return result; + } + + private static String toCsv(String[] array) { + if (array == null) { + return ""; + } + StringBuilder result = new StringBuilder(); + for (String element : array) { + if (result.length() != 0) { + result.append(","); + } + result.append(element); + } + return result.toString(); + }; + + private static String[] fromCsv(String csv) { + return csv.split(","); + } +} diff --git a/java/com/android/voicemail/impl/configui/VoicemailSecretCodeActivity.java b/java/com/android/voicemail/impl/configui/VoicemailSecretCodeActivity.java new file mode 100644 index 000000000..beeb9564d --- /dev/null +++ b/java/com/android/voicemail/impl/configui/VoicemailSecretCodeActivity.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.voicemail.impl.configui; + +import android.content.Intent; +import android.preference.PreferenceActivity; +import android.provider.VoicemailContract; +import java.util.List; + +/** Activity launched by simulator->voicemail, provides debug features. */ +@SuppressWarnings("FragmentInjection") // not exported +public class VoicemailSecretCodeActivity extends PreferenceActivity { + + private Header syncHeader; + + @Override + public void onBuildHeaders(List

target) { + super.onBuildHeaders(target); + syncHeader = new Header(); + syncHeader.title = "Sync"; + target.add(syncHeader); + + Header configOverride = new Header(); + configOverride.fragment = ConfigOverrideFragment.class.getName(); + configOverride.title = "VVM config override"; + target.add(configOverride); + } + + @Override + public void onHeaderClick(Header header, int position) { + if (header == syncHeader) { + Intent intent = new Intent(VoicemailContract.ACTION_SYNC_VOICEMAIL); + intent.setPackage(getPackageName()); + sendBroadcast(intent); + return; + } + super.onHeaderClick(header, position); + } + + @Override + protected boolean isValidFragment(String fragmentName) { + return true; + } +} diff --git a/java/com/android/voicemail/impl/configui/res/values-af/strings.xml b/java/com/android/voicemail/impl/configui/res/values-af/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-af/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-am/strings.xml b/java/com/android/voicemail/impl/configui/res/values-am/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-am/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ar/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ar/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ar/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-az/strings.xml b/java/com/android/voicemail/impl/configui/res/values-az/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-az/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-b+sr+Latn/strings.xml b/java/com/android/voicemail/impl/configui/res/values-b+sr+Latn/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-be/strings.xml b/java/com/android/voicemail/impl/configui/res/values-be/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-be/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-bg/strings.xml b/java/com/android/voicemail/impl/configui/res/values-bg/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-bg/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-bn/strings.xml b/java/com/android/voicemail/impl/configui/res/values-bn/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-bn/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-bs/strings.xml b/java/com/android/voicemail/impl/configui/res/values-bs/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-bs/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ca/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ca/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ca/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-cs/strings.xml b/java/com/android/voicemail/impl/configui/res/values-cs/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-cs/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-da/strings.xml b/java/com/android/voicemail/impl/configui/res/values-da/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-da/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-de/strings.xml b/java/com/android/voicemail/impl/configui/res/values-de/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-de/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-el/strings.xml b/java/com/android/voicemail/impl/configui/res/values-el/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-el/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-en-rAU/strings.xml b/java/com/android/voicemail/impl/configui/res/values-en-rAU/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-en-rAU/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-en-rGB/strings.xml b/java/com/android/voicemail/impl/configui/res/values-en-rGB/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-en-rGB/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-en-rIN/strings.xml b/java/com/android/voicemail/impl/configui/res/values-en-rIN/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-en-rIN/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-es-rUS/strings.xml b/java/com/android/voicemail/impl/configui/res/values-es-rUS/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-es-rUS/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-es/strings.xml b/java/com/android/voicemail/impl/configui/res/values-es/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-es/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-et/strings.xml b/java/com/android/voicemail/impl/configui/res/values-et/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-et/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-eu/strings.xml b/java/com/android/voicemail/impl/configui/res/values-eu/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-eu/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-fa/strings.xml b/java/com/android/voicemail/impl/configui/res/values-fa/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-fa/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-fi/strings.xml b/java/com/android/voicemail/impl/configui/res/values-fi/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-fi/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-fr-rCA/strings.xml b/java/com/android/voicemail/impl/configui/res/values-fr-rCA/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-fr-rCA/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-fr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-fr/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-fr/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-gl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-gl/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-gl/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-gu/strings.xml b/java/com/android/voicemail/impl/configui/res/values-gu/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-gu/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-hi/strings.xml b/java/com/android/voicemail/impl/configui/res/values-hi/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-hi/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-hr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-hr/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-hr/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-hu/strings.xml b/java/com/android/voicemail/impl/configui/res/values-hu/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-hu/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-hy/strings.xml b/java/com/android/voicemail/impl/configui/res/values-hy/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-hy/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-in/strings.xml b/java/com/android/voicemail/impl/configui/res/values-in/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-in/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-is/strings.xml b/java/com/android/voicemail/impl/configui/res/values-is/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-is/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-it/strings.xml b/java/com/android/voicemail/impl/configui/res/values-it/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-it/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-iw/strings.xml b/java/com/android/voicemail/impl/configui/res/values-iw/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-iw/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ja/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ja/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ja/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ka/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ka/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ka/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-kk/strings.xml b/java/com/android/voicemail/impl/configui/res/values-kk/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-kk/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-km/strings.xml b/java/com/android/voicemail/impl/configui/res/values-km/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-km/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-kn/strings.xml b/java/com/android/voicemail/impl/configui/res/values-kn/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-kn/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ko/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ko/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ko/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ky/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ky/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ky/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-lo/strings.xml b/java/com/android/voicemail/impl/configui/res/values-lo/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-lo/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-lt/strings.xml b/java/com/android/voicemail/impl/configui/res/values-lt/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-lt/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-lv/strings.xml b/java/com/android/voicemail/impl/configui/res/values-lv/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-lv/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-mk/strings.xml b/java/com/android/voicemail/impl/configui/res/values-mk/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-mk/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ml/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ml/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ml/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-mn/strings.xml b/java/com/android/voicemail/impl/configui/res/values-mn/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-mn/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-mr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-mr/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-mr/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ms/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ms/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ms/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-my/strings.xml b/java/com/android/voicemail/impl/configui/res/values-my/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-my/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-nb/strings.xml b/java/com/android/voicemail/impl/configui/res/values-nb/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-nb/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ne/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ne/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ne/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-nl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-nl/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-nl/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-no/strings.xml b/java/com/android/voicemail/impl/configui/res/values-no/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-no/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-pa/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pa/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-pa/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-pl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pl/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-pl/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-pt-rBR/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pt-rBR/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-pt-rBR/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-pt-rPT/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pt-rPT/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-pt-rPT/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-pt/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pt/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-pt/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ro/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ro/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ro/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ru/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ru/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ru/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-si/strings.xml b/java/com/android/voicemail/impl/configui/res/values-si/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-si/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-sk/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sk/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-sk/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-sl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sl/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-sl/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-sq/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sq/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-sq/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-sr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sr/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-sr/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-sv/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sv/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-sv/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-sw/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sw/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-sw/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ta/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ta/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ta/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-te/strings.xml b/java/com/android/voicemail/impl/configui/res/values-te/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-te/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-th/strings.xml b/java/com/android/voicemail/impl/configui/res/values-th/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-th/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-tl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-tl/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-tl/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-tr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-tr/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-tr/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-uk/strings.xml b/java/com/android/voicemail/impl/configui/res/values-uk/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-uk/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-ur/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ur/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-ur/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-uz/strings.xml b/java/com/android/voicemail/impl/configui/res/values-uz/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-uz/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-vi/strings.xml b/java/com/android/voicemail/impl/configui/res/values-vi/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-vi/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-zh-rCN/strings.xml b/java/com/android/voicemail/impl/configui/res/values-zh-rCN/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-zh-rCN/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-zh-rHK/strings.xml b/java/com/android/voicemail/impl/configui/res/values-zh-rHK/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-zh-rHK/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-zh-rTW/strings.xml b/java/com/android/voicemail/impl/configui/res/values-zh-rTW/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-zh-rTW/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values-zu/strings.xml b/java/com/android/voicemail/impl/configui/res/values-zu/strings.xml new file mode 100644 index 000000000..826efd3cd --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values-zu/strings.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/java/com/android/voicemail/impl/configui/res/values/strings.xml b/java/com/android/voicemail/impl/configui/res/values/strings.xml new file mode 100644 index 000000000..fea76be02 --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/values/strings.xml @@ -0,0 +1,21 @@ + + + + + vvm_config_override_load_current + vvm_config_override_enabled + + diff --git a/java/com/android/voicemail/impl/configui/res/xml/vvm_config_override.xml b/java/com/android/voicemail/impl/configui/res/xml/vvm_config_override.xml new file mode 100644 index 000000000..c4a23c789 --- /dev/null +++ b/java/com/android/voicemail/impl/configui/res/xml/vvm_config_override.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/com/android/voicemail/impl/res/values/strings.xml b/java/com/android/voicemail/impl/res/values/strings.xml index 375a1e9ba..a846541ea 100644 --- a/java/com/android/voicemail/impl/res/values/strings.xml +++ b/java/com/android/voicemail/impl/res/values/strings.xml @@ -107,4 +107,8 @@ Voicemail PIN updated Unable to set PIN + + vvm_config_override_load_current + vvm_config_override_enabled + diff --git a/java/com/android/voicemail/stub/StubVoicemailClient.java b/java/com/android/voicemail/stub/StubVoicemailClient.java index e2b470799..e5d51455c 100644 --- a/java/com/android/voicemail/stub/StubVoicemailClient.java +++ b/java/com/android/voicemail/stub/StubVoicemailClient.java @@ -18,6 +18,9 @@ package com.android.voicemail.stub; import android.content.Context; import android.content.Intent; +import android.os.PersistableBundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyManager; import com.android.voicemail.VoicemailClient; @@ -81,4 +84,19 @@ public final class StubVoicemailClient implements VoicemailClient { public boolean isActivated(Context context, PhoneAccountHandle phoneAccountHandle) { return false; } + + @Override + public void showConfigUi(@NonNull Context context) {} + + @Override + public PersistableBundle getConfig( + @NonNull Context context, @Nullable PhoneAccountHandle phoneAccountHandle) { + return new PersistableBundle(); + } + + @Override + public void onBoot(@NonNull Context context) {} + + @Override + public void onShutdown(@NonNull Context context) {} } -- cgit v1.2.3