diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..0542767eff --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +**/snapshots/**/*.png filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fb8e3080ae..1816fe3a78 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,7 +8,7 @@ on: # Enrich gradle.properties for CI/CD env: GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false - CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon + CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 4 --no-daemon jobs: tests: @@ -24,12 +24,29 @@ jobs: steps: - uses: actions/checkout@v3 with: + lfs: true fetch-depth: 0 - uses: actions/setup-java@v3 with: distribution: 'adopt' java-version: '11' - uses: gradle/gradle-build-action@v2 + with: + cache-read-only: ${{ github.ref != 'refs/heads/develop' }} + gradle-home-cache-cleanup: ${{ github.ref == 'refs/heads/develop' }} + + - name: Run screenshot tests + run: ./gradlew verifyScreenshots $CI_GRADLE_ARG_PROPERTIES + + - name: Archive Screenshot Results on Error + if: failure() + uses: actions/upload-artifact@v3 + with: + name: screenshot-results + path: | + **/out/failures/ + **/build/reports/tests/*UnitTest/ + - uses: actions/setup-python@v4 with: python-version: 3.8 @@ -40,27 +57,6 @@ jobs: disableRateLimiting: true public_baseurl: "http://10.0.2.2:8080/" - - name: AVD cache - uses: actions/cache@v3 - id: avd-cache - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-${{ matrix.api-level }} - - - name: create AVD and generate snapshot for caching - if: steps.avd-cache.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: ${{ matrix.api-level }} - arch: x86 - profile: Nexus 5X - force-avd-creation: true # Is set to false in the doc https://github.com/ReactiveCircus/android-emulator-runner - emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: echo "Generated AVD snapshot for caching." - - name: Run all the codecoverage tests at once uses: reactivecircus/android-emulator-runner@v2 # continue-on-error: true @@ -68,6 +64,7 @@ jobs: api-level: ${{ matrix.api-level }} arch: x86 profile: Nexus 5X + target: playstore force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true diff --git a/.github/workflows/validate-lfs.yml b/.github/workflows/validate-lfs.yml new file mode 100644 index 0000000000..203ecb0481 --- /dev/null +++ b/.github/workflows/validate-lfs.yml @@ -0,0 +1,15 @@ +name: Validate Git LFS + +on: [pull_request] + +jobs: + build: + runs-on: ubuntu-latest + name: Validate + steps: + - uses: actions/checkout@v3 + with: + lfs: 'true' + + - run: | + ./tools/validate_lfs.sh diff --git a/.gitignore b/.gitignore index f1c0b99b58..aae906afc2 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ /package.json /yarn.lock /node_modules +**/out/failures diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 52ccf47e6a..6e3c784dac 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,10 +1,42 @@ -# Contributing code to Matrix +# Contributing to Element Android + + + +* [Contributing code to Matrix](#contributing-code-to-matrix) +* [Android Studio settings](#android-studio-settings) + * [Template](#template) +* [Compilation](#compilation) +* [I want to help translating Element](#i-want-to-help-translating-element) +* [I want to submit a PR to fix an issue](#i-want-to-submit-a-pr-to-fix-an-issue) + * [Kotlin](#kotlin) + * [Changelog](#changelog) + * [Code quality](#code-quality) + * [Internal tool](#internal-tool) + * [ktlint](#ktlint) + * [lint](#lint) + * [Unit tests](#unit-tests) + * [Tests](#tests) + * [Internationalisation](#internationalisation) + * [Adding new string](#adding-new-string) + * [Plurals](#plurals) + * [Editing existing strings](#editing-existing-strings) + * [Removing existing strings](#removing-existing-strings) + * [Renaming string ids](#renaming-string-ids) + * [Reordering strings](#reordering-strings) + * [Accessibility](#accessibility) + * [Layout](#layout) + * [Authors](#authors) +* [Thanks](#thanks) + + + +## Contributing code to Matrix Please read https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.md Element Android support can be found in this room: [![Element Android Matrix room #element-android:matrix.org](https://img.shields.io/matrix/element-android:matrix.org.svg?label=%23element-android:matrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#element-android:matrix.org). -# Specific rules for Matrix Android projects +The rest of the document contains specific rules for Matrix Android projects ## Android Studio settings @@ -120,17 +152,21 @@ You should consider adding Unit tests with your PR, and also integration tests ( Translations are handled using an external tool: [Weblate](https://translate.element.io/projects/element-android/) -As a general rule, please never edit or add or remove translations to the project in a Pull Request. It can lead to merge conflict if the translations are also modified in Weblate side. +**As a general rule, please never edit or add or remove translations to the project in a Pull Request**. It can lead to merge conflict if the translations are also modified in Weblate side. Pull Request containing change(s) on the translation files cannot be merged. #### Adding new string -When adding new string resources, please only add new entries in the file `value/strings.xml`. Translations will be added later by the community of translators using Weblate. +When adding new string resources, please only add new entries in the file `values/strings.xml` ([this file](./library/ui-strings/src/main/res/values/strings.xml)). Translations will be added later by the community of translators using Weblate. -The file `value/strings.xml` must only contain American English (U. S. English) values, as this is the default language of the Android operating system. So for instance, please use "color" instead of "colour". Element Android will still use the language set on the system by the user, like any other Android applications which provide translations. The system language can be any other English language variants, or any other languages. Note that this is also possible to override the system language using the Element Android in-app language settings. +The file `values/strings.xml` must only contain American English (U. S. English) values, as this is the default language of the Android operating system. So for instance, please use "color" instead of "colour". Element Android will still use the language set on the system by the user, like any other Android applications which provide translations. The system language can be any other English language variants, or any other languages. Note that this is also possible to override the system language using the Element Android in-app language settings. -New strings can be added anywhere in the file `value/strings.xml`, not necessarily at the end of the file. Generally, it's even better to add the new strings in some dedicated section per feature, and not at the end of the file, to avoid merge conflict between 2 PR adding strings at the end of the same file. +New strings can be added anywhere in the file `values/strings.xml`, not necessarily at the end of the file. Generally, it's even better to add the new strings in some dedicated section per feature, and not at the end of the file, to avoid merge conflict between 2 PR adding strings at the end of the same file. -Do not hesitate to use plurals when appropriate. +##### Plurals + +Please use `plurals` resources when appropriate, and note that some languages have specific rules for `plurals`, so even if the string will always be at the plural form for English, please always create a `plurals` resource. + +Specific plural forms can be found [here](https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_plural_rules.html). #### Editing existing strings @@ -150,6 +186,23 @@ And add `tools:ignore="UnusedResources"` to the string, to let lint ignore that The string will be removed during the next sync with Weblate. +#### Renaming string ids + +This is possible to rename ids of the String resources, but since translation files cannot be edited, add TODO in the main strings.xml file above the strings you want to rename. + +```xml + +Hello Matrix world! +``` + +The string id(s) will be renamed during the next Weblate sync. + +#### Reordering strings + +To group strings per feature, or for any other reasons, it is possible to reorder string resources, but only in the [main strings.xml file](./library/ui-strings/src/main/res/values/strings.xml). ). We do not mind about ordering in the translation files, and anyway this is forbidden to edit manually the translation files. + +It is also possible to add empty lines between string resources, and to add XML comments. Please note that the XML comment just above a String resource will also appear on Weblate and be visible to the translators. + ### Accessibility Please consider accessibility as an important point. As a minimum requirement, in layout XML files please use attributes such as `android:contentDescription` and `android:importantForAccessibility`, and test with a screen reader if it's working well. You can add new string resources, dedicated to accessibility, in this case, please prefix theirs id with `a11y_`. diff --git a/Gemfile.lock b/Gemfile.lock index 90e846860e..276f4ae66a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,29 +1,30 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.3) + CFPropertyList (3.0.5) + rexml addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) artifactory (3.0.15) atomos (0.1.3) - aws-eventstream (1.1.1) - aws-partitions (1.479.0) - aws-sdk-core (3.117.0) + aws-eventstream (1.2.0) + aws-partitions (1.619.0) + aws-sdk-core (3.132.0) aws-eventstream (~> 1, >= 1.0.2) - aws-partitions (~> 1, >= 1.239.0) + aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) - jmespath (~> 1.0) - aws-sdk-kms (1.44.0) - aws-sdk-core (~> 3, >= 3.112.0) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.58.0) + aws-sdk-core (~> 3, >= 3.127.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.96.1) - aws-sdk-core (~> 3, >= 3.112.0) + aws-sdk-s3 (1.114.0) + aws-sdk-core (~> 3, >= 3.127.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.1) - aws-sigv4 (1.2.4) + aws-sigv4 (~> 1.4) + aws-sigv4 (1.5.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) - claide (1.0.3) + claide (1.1.0) claide-plugins (0.9.2) cork nap @@ -48,22 +49,24 @@ GEM octokit (~> 4.7) terminal-table (>= 1, < 4) declarative (0.0.20) - digest-crc (0.6.3) + digest-crc (0.6.4) rake (>= 12.0.0, < 14.0.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.6) - emoji_regex (3.2.2) - excon (0.85.0) - faraday (1.5.1) + dotenv (2.8.1) + emoji_regex (3.2.3) + excon (0.92.4) + faraday (1.10.1) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.1) + faraday-net_http_persistent (~> 1.0) faraday-patron (~> 1.0) - multipart-post (>= 1.2, < 3) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) ruby2_keywords (>= 0.0.4) faraday-cookie_jar (0.0.7) faraday (>= 0.8.0) @@ -71,18 +74,22 @@ GEM faraday-em_http (1.0.0) faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) - faraday-http-cache (2.4.0) + faraday-http-cache (2.4.1) faraday (>= 0.8) faraday-httpclient (1.0.1) + faraday-multipart (1.0.4) + multipart-post (~> 2) faraday-net_http (1.0.1) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) - faraday_middleware (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + faraday_middleware (1.2.0) faraday (~> 1.0) - fastimage (2.2.4) - fastlane (2.187.0) + fastimage (2.2.6) + fastlane (2.209.0) CFPropertyList (>= 2.3, < 4.0.0) - addressable (>= 2.3, < 3.0.0) + addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) aws-sdk-s3 (~> 1.0) babosa (>= 1.0.3, < 2.0.0) @@ -97,7 +104,7 @@ GEM faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) - google-apis-androidpublisher_v3 (~> 0.1) + google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) google-cloud-storage (~> 1.31) highline (~> 2.0) @@ -106,6 +113,7 @@ GEM mini_magick (>= 4.9.4, < 5.0.0) multipart-post (~> 2.0.0) naturally (~> 2.2) + optparse (~> 0.1.1) plist (>= 3.1.0, < 4.0.0) rubyzip (>= 2.0.0, < 3.0.0) security (= 0.1.3) @@ -121,9 +129,9 @@ GEM gh_inspector (1.1.3) git (1.11.0) rchardet (~> 1.8) - google-apis-androidpublisher_v3 (0.8.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-core (0.4.0) + google-apis-androidpublisher_v3 (0.25.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-core (0.7.0) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -132,47 +140,47 @@ GEM retriable (>= 2.0, < 4.a) rexml webrick - google-apis-iamcredentials_v1 (0.6.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-playcustomapp_v1 (0.5.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-storage_v1 (0.6.0) - google-apis-core (>= 0.4, < 2.a) + google-apis-iamcredentials_v1 (0.13.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-playcustomapp_v1 (0.10.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-storage_v1 (0.17.0) + google-apis-core (>= 0.7, < 2.a) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) - google-cloud-env (1.5.0) - faraday (>= 0.17.3, < 2.0) - google-cloud-errors (1.1.0) - google-cloud-storage (1.34.1) - addressable (~> 2.5) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) + google-cloud-errors (1.2.0) + google-cloud-storage (1.38.0) + addressable (~> 2.8) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.17.0) google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (0.16.2) - faraday (>= 0.17.3, < 2.0) + googleauth (1.2.0) + faraday (>= 0.17.3, < 3.a) jwt (>= 1.4, < 3.0) memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) - signet (~> 0.14) + signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.4) + http-cookie (1.0.5) domain_name (~> 0.5) httpclient (2.8.3) - jmespath (1.4.0) - json (2.5.1) - jwt (2.2.3) + jmespath (1.6.1) + json (2.6.2) + jwt (2.4.1) kramdown (2.4.0) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) memoist (0.16.2) mini_magick (4.11.0) - mini_mime (1.1.0) + mini_mime (1.1.2) multi_json (1.15.0) multipart-post (2.0.0) nanaimo (0.3.0) @@ -183,12 +191,13 @@ GEM faraday (>= 1, < 3) sawyer (~> 0.9) open4 (1.3.4) - os (1.1.1) + optparse (0.1.1) + os (1.1.4) plist (3.6.0) - public_suffix (4.0.6) + public_suffix (4.0.7) rake (13.0.6) rchardet (1.8.0) - representable (3.1.1) + representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) @@ -201,9 +210,9 @@ GEM addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) security (0.1.3) - signet (0.15.0) - addressable (~> 2.3) - faraday (>= 0.17.3, < 2.0) + signet (0.17.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) simctl (1.6.8) @@ -212,7 +221,7 @@ GEM terminal-notifier (2.0.0) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) - trailblazer-option (0.1.1) + trailblazer-option (0.1.2) tty-cursor (0.7.1) tty-screen (0.8.1) tty-spinner (0.9.3) @@ -220,11 +229,11 @@ GEM uber (0.1.0) unf (0.1.4) unf_ext - unf_ext (0.0.7.7) - unicode-display_width (1.7.0) + unf_ext (0.0.8.2) + unicode-display_width (1.8.0) webrick (1.7.0) word_wrap (1.0.0) - xcodeproj (1.20.0) + xcodeproj (1.22.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -239,6 +248,7 @@ GEM PLATFORMS universal-darwin-21 x86_64-darwin-20 + x86_64-linux DEPENDENCIES danger diff --git a/README.md b/README.md index 7acb5aa638..e351b64927 100644 --- a/README.md +++ b/README.md @@ -44,10 +44,12 @@ If you would like to receive releases more quickly (bearing in mind that they ma ## Contributing -Please refer to [CONTRIBUTING.md](https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md) if you want to contribute on Matrix Android projects! +Please refer to [CONTRIBUTING.md](./CONTRIBUTING.md) if you want to contribute on Matrix Android projects! Come chat with the community in the dedicated Matrix [room](https://matrix.to/#/#element-android:matrix.org). +Also [this documentation](./docs/_developer_onboarding.md) can hopefully help developers to start working on the project. + ## Triaging issues Issues are triaged by community members and the Android App Team, following the [triage process](https://github.com/vector-im/element-meta/wiki/Triage-process). diff --git a/build.gradle b/build.gradle index 49dc1e7fb4..e7f7d00159 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ buildscript { classpath libs.gradle.kotlinPlugin classpath libs.gradle.hiltPlugin classpath 'com.google.firebase:firebase-appdistribution-gradle:3.0.3' - classpath 'com.google.gms:google-services:4.3.13' + classpath 'com.google.gms:google-services:4.3.14' classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.4.0.2513' classpath 'com.google.android.gms:oss-licenses-plugin:0.10.5' classpath "com.likethesalad.android:stem-plugin:2.2.2" @@ -33,6 +33,7 @@ buildscript { classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.7.10" classpath "org.jetbrains.kotlinx:kotlinx-knit:0.4.0" classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.3' + classpath 'app.cash.paparazzi:paparazzi-gradle-plugin:1.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -46,6 +47,8 @@ plugins { // Dependency Analysis id 'com.autonomousapps.dependency-analysis' version "1.13.1" + // Gradle doctor + id "com.osacky.doctor" version "0.8.1" } // https://github.com/jeremylong/DependencyCheck @@ -58,6 +61,9 @@ dependencyCheck { ] } +// Gradle doctor configuration +apply from: './tools/gradle/doctor.gradle' + allprojects { apply plugin: "org.jlleitschuh.gradle.ktlint" apply plugin: "io.gitlab.arturbosch.detekt" @@ -71,6 +77,14 @@ allprojects { groups.mavenCentral.group.each { includeGroup it } } } + // snapshots repository + maven { + url "https://oss.sonatype.org/content/repositories/snapshots" + content { + groups.snapshot.regex.each { includeGroupByRegex it } + groups.snapshot.group.each { includeGroup it } + } + } maven { url 'https://jitpack.io' content { @@ -216,7 +230,7 @@ project(":vector") { } } -project(":library:diff-match-patch") { +project(":library:external:diff-match-patch") { sonarqube { skipProject = true } @@ -287,3 +301,29 @@ dependencyAnalysis { } } } + +tasks.register("recordScreenshots", GradleBuild) { + startParameter.projectProperties.screenshot = "" + tasks = [':vector:recordPaparazziDebug'] +} + +tasks.register("verifyScreenshots", GradleBuild) { + startParameter.projectProperties.screenshot = "" + tasks = [':vector:verifyPaparazziDebug'] +} + +ext.initScreenshotTests = { project -> + def hasScreenshots = project.hasProperty("screenshot") + if (hasScreenshots) { + project.apply plugin: 'app.cash.paparazzi' + } + project.dependencies { testCompileOnly "app.cash.paparazzi:paparazzi:1.0.0" } + project.android.testOptions.unitTests.all { + def screenshotTestCapture = "**/*ScreenshotTest*" + if (hasScreenshots) { + include screenshotTestCapture + } else { + exclude screenshotTestCapture + } + } +} diff --git a/changelog.d/12.misc b/changelog.d/12.misc new file mode 100644 index 0000000000..392d7b1122 --- /dev/null +++ b/changelog.d/12.misc @@ -0,0 +1 @@ +Add support for `/tableflip` command \ No newline at end of file diff --git a/changelog.d/5798.misc b/changelog.d/5798.misc new file mode 100644 index 0000000000..40185eac0d --- /dev/null +++ b/changelog.d/5798.misc @@ -0,0 +1 @@ +Adds screenshot testing tooling diff --git a/changelog.d/6929.misc b/changelog.d/6929.misc new file mode 100644 index 0000000000..d12167cfea --- /dev/null +++ b/changelog.d/6929.misc @@ -0,0 +1 @@ +Target API 12 and compile with Android SDK 32. diff --git a/changelog.d/7114.wip b/changelog.d/7114.wip new file mode 100644 index 0000000000..79ad705132 --- /dev/null +++ b/changelog.d/7114.wip @@ -0,0 +1 @@ +[Device management] Verify current session diff --git a/changelog.d/7126.doc b/changelog.d/7126.doc new file mode 100644 index 0000000000..9c69350a11 --- /dev/null +++ b/changelog.d/7126.doc @@ -0,0 +1 @@ +Draft onboarding documentation of the project at `./docs/_developer_onboarding.md` diff --git a/changelog.d/7126.misc b/changelog.d/7126.misc new file mode 100644 index 0000000000..a79d61f819 --- /dev/null +++ b/changelog.d/7126.misc @@ -0,0 +1 @@ +Add support to `/devtools` command. diff --git a/changelog.d/7143.wip b/changelog.d/7143.wip new file mode 100644 index 0000000000..588f7fb255 --- /dev/null +++ b/changelog.d/7143.wip @@ -0,0 +1 @@ +[Device management] Verify another session diff --git a/changelog.d/7158.wip b/changelog.d/7158.wip new file mode 100644 index 0000000000..6c303281d8 --- /dev/null +++ b/changelog.d/7158.wip @@ -0,0 +1 @@ +[Device management] Rename a session diff --git a/changelog.d/7159.misc b/changelog.d/7159.misc new file mode 100644 index 0000000000..76f5f45c40 --- /dev/null +++ b/changelog.d/7159.misc @@ -0,0 +1 @@ +Fix lint warning, and cleanup the code diff --git a/changelog.d/7166.misc b/changelog.d/7166.misc new file mode 100644 index 0000000000..d223208853 --- /dev/null +++ b/changelog.d/7166.misc @@ -0,0 +1 @@ +New App Layout is now enabled by default! Go to the Settings > Labs to toggle this diff --git a/changelog.d/7170.wip b/changelog.d/7170.wip new file mode 100644 index 0000000000..f5b71a14f8 --- /dev/null +++ b/changelog.d/7170.wip @@ -0,0 +1 @@ +[Device Manager] Unverified and inactive sessions list diff --git a/changelog.d/7190.wip b/changelog.d/7190.wip new file mode 100644 index 0000000000..3c70666d91 --- /dev/null +++ b/changelog.d/7190.wip @@ -0,0 +1 @@ +[Device management] Sign out a session diff --git a/changelog.d/7193.misc b/changelog.d/7193.misc new file mode 100644 index 0000000000..efa0f594ae --- /dev/null +++ b/changelog.d/7193.misc @@ -0,0 +1 @@ +Mutualize the pending auth handling diff --git a/changelog.d/7198.sdk b/changelog.d/7198.sdk new file mode 100644 index 0000000000..115b8d6113 --- /dev/null +++ b/changelog.d/7198.sdk @@ -0,0 +1 @@ +Allow the sync timeout to be configured (mainly useful for testing) diff --git a/changelog.d/7207.sdk b/changelog.d/7207.sdk new file mode 100644 index 0000000000..0bc221e9f7 --- /dev/null +++ b/changelog.d/7207.sdk @@ -0,0 +1 @@ +Ports SDK instrumentation tests to use suspending functions instead of countdown latches diff --git a/changelog.d/7209.sdk b/changelog.d/7209.sdk new file mode 100644 index 0000000000..6375f5e495 --- /dev/null +++ b/changelog.d/7209.sdk @@ -0,0 +1 @@ +[Device Manager] Extend user agent to include device information diff --git a/changelog.d/7211.misc b/changelog.d/7211.misc new file mode 100644 index 0000000000..44abd3d59d --- /dev/null +++ b/changelog.d/7211.misc @@ -0,0 +1 @@ + CI: Prevent modification of translations by developer. diff --git a/dependencies.gradle b/dependencies.gradle index 9641a63f26..f4165ad692 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,25 +1,22 @@ ext.versions = [ 'minSdk' : 21, - 'compileSdk' : 31, - 'targetSdk' : 31, + 'compileSdk' : 32, + 'targetSdk' : 32, 'sourceCompat' : JavaVersion.VERSION_11, 'targetCompat' : JavaVersion.VERSION_11, ] - -// Pinned to 7.1.3 because of https://github.com/vector-im/element-android/issues/6142 -// Please test carefully before upgrading again. -def gradle = "7.1.3" +def gradle = "7.2.2" // Ref: https://kotlinlang.org/releases.html -def kotlin = "1.6.21" +def kotlin = "1.7.10" def kotlinCoroutines = "1.6.4" -def dagger = "2.42" +def dagger = "2.43.2" def appDistribution = "16.0.0-beta04" def retrofit = "2.9.0" def arrow = "0.8.2" def markwon = "4.6.2" -def moshi = "1.13.0" +def moshi = "1.14.0" def lifecycle = "2.5.1" def flowBinding = "1.2.0" def flipper = "0.164.0" @@ -28,9 +25,11 @@ def mavericks = "2.7.0" def glide = "4.13.2" def bigImageViewer = "1.8.1" def jjwt = "0.11.5" -def vanniktechEmoji = "0.15.0" +// Temporary version to unblock #6929. Once 0.16.0 is released we should use it, and revert +// the whole commit which set version 0.16.0-SNAPSHOT +def vanniktechEmoji = "0.16.0-SNAPSHOT" -def fragment = "1.5.2" +def fragment = "1.5.3" // Testing def mockk = "1.12.3" // We need to use 1.12.3 to have mocking in androidTest until a new version is released: https://github.com/mockk/mockk/issues/819 @@ -51,7 +50,7 @@ ext.libs = [ ], androidx : [ 'activity' : "androidx.activity:activity:1.5.1", - 'appCompat' : "androidx.appcompat:appcompat:1.4.2", + 'appCompat' : "androidx.appcompat:appcompat:1.5.1", 'biometric' : "androidx.biometric:biometric:1.1.0", 'core' : "androidx.core:core-ktx:1.8.0", 'recyclerview' : "androidx.recyclerview:recyclerview:1.2.1", @@ -86,7 +85,7 @@ ext.libs = [ 'appdistributionApi' : "com.google.firebase:firebase-appdistribution-api-ktx:$appDistribution", 'appdistribution' : "com.google.firebase:firebase-appdistribution:$appDistribution", // Phone number https://github.com/google/libphonenumber - 'phonenumber' : "com.googlecode.libphonenumber:libphonenumber:8.12.55" + 'phonenumber' : "com.googlecode.libphonenumber:libphonenumber:8.12.56" ], dagger : [ 'dagger' : "com.google.dagger:dagger:$dagger", @@ -100,7 +99,7 @@ ext.libs = [ 'flipperNetworkPlugin' : "com.facebook.flipper:flipper-network-plugin:$flipper", ], element : [ - 'opusencoder' : "io.element.android:opusencoder:1.0.4", + 'opusencoder' : "io.element.android:opusencoder:1.1.0", ], squareup : [ 'moshi' : "com.squareup.moshi:moshi:$moshi", diff --git a/dependencies_groups.gradle b/dependencies_groups.gradle index 433bc53568..a97d80bc7f 100644 --- a/dependencies_groups.gradle +++ b/dependencies_groups.gradle @@ -38,10 +38,18 @@ ext.groups = [ 'com.google.testing.platform', ] ], + snapshot: [ + regex: [ + ], + group: [ + 'com.vanniktech', + ] + ], mavenCentral: [ regex: [ ], group: [ + 'app.cash.paparazzi', 'ch.qos.logback', 'com.adevinta.android', 'com.airbnb.android', @@ -118,7 +126,7 @@ ext.groups = [ 'com.sun.xml.bind.mvn', 'com.sun.xml.fastinfoset', 'com.thoughtworks.qdox', - 'com.vanniktech', + // 'com.vanniktech', 'commons-cli', 'commons-codec', 'commons-io', @@ -143,11 +151,14 @@ ext.groups = [ 'it.unimi.dsi', 'jakarta.activation', 'jakarta.xml.bind', + 'javax.activation', 'javax.annotation', 'javax.inject', + 'javax.xml.bind', 'jline', 'jp.wasabeef', 'junit', + 'kxml2', 'me.saket', 'net.bytebuddy', 'net.java', @@ -176,11 +187,13 @@ ext.groups = [ 'org.hamcrest', 'org.jacoco', 'org.java-websocket', + 'org.jcodec', 'org.jetbrains', 'org.jetbrains.dokka', 'org.jetbrains.intellij.deps', 'org.jetbrains.kotlin', 'org.jetbrains.kotlinx', + 'org.jetbrains.trove4j', 'org.json', 'org.jsoup', 'org.junit', diff --git a/docs/_developer_onboarding.md b/docs/_developer_onboarding.md new file mode 100644 index 0000000000..2f414063e3 --- /dev/null +++ b/docs/_developer_onboarding.md @@ -0,0 +1,259 @@ +# Developer on boarding + + + +* [Introduction](#introduction) + * [Quick introduction to Matrix](#quick-introduction-to-matrix) + * [Matrix data](#matrix-data) + * [Room](#room) + * [Event](#event) + * [Sync](#sync) + * [Glossary about syncs](#glossary-about-syncs) + * [The Android project](#the-android-project) + * [Matrix SDK](#matrix-sdk) + * [Application](#application) + * [MvRx](#mvrx) + * [Behavior](#behavior) + * [Epoxy](#epoxy) + * [Other frameworks](#other-frameworks) + * [Push](#push) + * [Dependencies management](#dependencies-management) + * [Test](#test) + * [Other points](#other-points) + * [Logging](#logging) + * [Rageshake](#rageshake) + * [Tips](#tips) +* [Happy coding!](#happy-coding) + + + +## Introduction + +This doc is a quick introduction about the project and its architecture. + +It's aim is to help new developers to understand the overall project and where to start developing. + +Other useful documentation: +- all the docs in this folder! +- the [contributing doc](../CONTRIBUTING.md), that you should also read carefully. + +### Quick introduction to Matrix + +Matrix website: [matrix.org](https://matrix.org), [discover page](https://matrix.org/discover). +*Note*: Matrix.org is also hosting a homeserver ([.well-known file](https://matrix.org/.well-known/matrix/client)). +The reference homeserver (this is how Matrix servers are called) implementation is [Synapse](https://github.com/matrix-org/synapse/). But other implementations exist. The Matrix specification is here to ensure that any Matrix client, such as Element Android and its SDK can talk to any Matrix server. + +Have a quick look to the client-server API documentation: [Client-server documentation](https://spec.matrix.org/v1.3/client-server-api/). Other network API exist, the list is here: (https://spec.matrix.org/latest/) + +Matrix is an open source protocol. Change are possible and are tracked using [this GitHub repository](https://github.com/matrix-org/matrix-doc/). Changes to the protocol are called MSC: Matrix Spec Change. These are PullRequest to this project. + +Matrix object are Json data. Unstable prefixes must be used for Json keys when the MSC is not merged (i.e. accepted). + +#### Matrix data + +There are many object and data in the Matrix worlds. Let's focus on the most important and used, `Room` and `Event` + +##### Room + +`Room` is a place which contains ordered `Event`s. They are identified with their `room_id`. Nearly all the data are stored in rooms, and shared using homeserver to all the Room Member. + +*Note*: Spaces are also Rooms with a different `type`. + +##### Event + +`Events` are items of a Room, where data is embedded. + +There are 2 types of Room Event: + +- Regular Events: contain useful content for the user (message, image, etc.), but are not necessarily displayed as this in the timeline (reaction, message edition, call signaling). +- State Events: contain the state of the Room (name, topic, etc.). They have a non null value for the key `state_key`. + +Also all the Room Member details are in State Events: one State Event per member. In this case, the `state_key` is the matrixId (= userId). + +Important Fields of an Event: +- `event_id`: unique across the Matrix universe; +- `room_id`: the room the Event belongs to; +- `type`: describe what the Event contain, especially in the `content` section, and how the SDK should handle this Event; +- `content`: dynamic Event data; depends on the `type`. + +So we have a triple `event_id`, `type`, `state_key` which uniquely defines an Event. + +#### Sync + +The `Sync` is a way for the Matrix client to be up to date regarding the user data hosted by the server. All the Events are coming through the sync response. More details can be found here: [spec.matrix.org/v1.3/client-server-api/#syncing](https://spec.matrix.org/v1.3/client-server-api/#syncing) +When the application is in foreground, this is a looping request. We are using Https requests, which offer the advantage to be compatible with any homeserver. A sync token is used as request parameter, to let the server know what the client knows. +The `SyncThread` is responsible to manage the sync request loop. + +When the application is in background, a Push will trigger a sync request. + +##### Glossary about syncs + +- **initial sync**: a sync request without a token. This is the first request a client perform after login or after a clear cache. The server will include in the response all your rooms with the full state (all the room membership Event will not be present), with the latest messages for each room. We are in the process to replace this by version 3: sliding sync. All data are inserted to the Database (currently [Realm](https://www.mongodb.com/docs/realm/sdk/java/)). +- **incremental sync**: sync request with a token. +- **gappy sync**: sync request where all the new Events are not returned for one or several Rooms. Also called `limited sync`. It can be limited per Room. To get all the missing Events, a Room pagination API has to be called. +- **sync token**: `next_batch` value in the previous sync response. Will be provided as the `since` parameter for the next sync request. + +### The Android project + +The project should compile out of the box. + +The project is split into several modules. The main ones are: +For the app +- `vector-app`: application entry point; +- `vector`: legacy application, but now a library. In the process of being split into several modules; +- `vector-config`: this is where all the configuration of the application should occurs. Should because we are in the process of migrating all the configuration here; +- `library/ui-strings`: this is where all the string resources are stored. Please refer to [contributing doc](../CONTRIBUTING.md) to know how to make change on this module; +- `library/ui-styles`: this is where the Android styles are defined. + +For the SDK +- `matrix-sdk-android`: the main SDK module. The sources are in this project, but are also exported to [its own project](https://github.com/matrix-org/matrix-android-sdk2). All the PRs and issues related to the SDK take place in the Element Android project; +- `matrix-sdk-android-flow`: contains some wrapper to expose `Flow` to the application. + +### Matrix SDK + +SDK exposes `Services` to the client application. `Services` are public interface, and are defined in this parent package: `org.matrix.android.sdk.api`. Default implementation are internal to the SDK, in this parent package: `org.matrix.android.sdk.internal`. Note that you also have to declare the classes as `internal` when adding classes to the `org.matrix.android.sdk.internal` package. + +Interface allows us to replace the implementation for testing purpose. + +A generated documentation of the SDK is available [here](https://matrix-org.github.io/matrix-android-sdk2/). Updated after each release. Please ensure that the documentation (KDoc) of all the SDK Services is up to date, and is clear for a SDK user. +The SDK generated documentation also contains information about the entry points of the SDK. + +[Dagger](https://dagger.dev/) is used to inject all the dependencies to the SDK classes. + +SDK is exposing data as `LiveData`, but we are progressively migrating to `Flow`. Database is the source of truth. + +Example: +- Client send an Event using the `SendService`; +- At the end a `SendEvent` task is used; +- Retrofit API is used to send data to the server; +- Goes to the server, which returns only the `event_id`; +- The `Event` is coming back from the `sync` response with eventually extra added data. + +### Application + +This is the UI part of the project. + +There are two variants of the application: `Gplay` and `Fdroid`. + +The main difference is about using Firebase on `Gplay` variant, to have Push from Google Services. `FDroid` variant cannot contain closed source dependency. + +`Fdroid` is using background polling to lack the missing of Pushed. Now a solution using UnifiedPush has ben added to the project. See refer to [the dedicated documentation](./unifiedpush.md) for more details. + +#### MvRx + +[Maverick](https://airbnb.io/mavericks/#/README) (or MvRx) is an Android MVI framework that helps to develop Reactive application on Android. + +- Activity: holder for Fragment. See the parent [VectorBaseActivity](../vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt); +- Fragment: manage screen of the application. See the parent [VectorBaseFragment](../vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt); +- BottomSheet: see the parent [VectorBaseBottomSheetDialogFragment](../vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt); +- ViewModel: this is where the logic is placed. All our ViewModel has a `handle()` which takes action as parameter. See the parent [VectorViewModel](../vector/src/main/java/im/vector/app/core/platform/VectorViewModel.kt); +- VectorSharedActionViewModel: Specific ViewModel that can be used to communicate between Fragment(s) and the host Activity. See the parent [VectorSharedActionViewModel](../vector/src/main/java/im/vector/app/core/platform/VectorSharedActionViewModel.kt); +- ViewState: this are `data class`, and this represent the state of the View. Has to be copied and set to be updated. Fragment will update the UI regarding the current state (`invalidate()` method). `Async` class from MvRx can be used in the ViewState, especially for asynchronous data loading. Nullability can also be used for optional data. ViewStates have to implement `MavericksState`; +- ViewEvents: useful when the ViewModel asks the View to trigger a specific action: navigation, show dialog, etc. See the parent [VectorViewEvents](../vector/src/main/java/im/vector/app/core/platform/VectorViewEvents.kt); +- ViewAction (`VectorViewModelAction`): useful when the UI (generally the Fragment) asks the ViewModel to do something. See the parent [VectorViewModelAction](../vector/src/main/java/im/vector/app/core/platform/VectorViewModelAction.kt); +- Controller: see the `Epoxy` section just below. + +##### Behavior + +Fragment asks the ViewModel to perform an action (coming from the user, but not necessarily. ViewModel can then talk to the SDK, updates the state once or several times. Fragment update the UI regarding the new state. + +When ViewModel is instantiated, it can subscribe using the SDK Services to get live state of the data. + +`invalidate()` has to be used by default, but it's possible to listen to specific member(s) of the `ViewState` using `onEach`. TODO Add an example. +`awaitState()` method + +#### Epoxy + +[Epoxy](https://github.com/airbnb/epoxy) is an Android library for building complex screens in a RecyclerView. Please read [the introduction](https://github.com/airbnb/epoxy#epoxy). + +- Controller declares items of the RecyclerView. Controller is injected in the Fragment. Controller extends `EpoxyController`, or one of its subclass, especially `TypedEpoxyController`; +- Fragment gives the state to the controller using `setData`; +- `buildModels` will be called by the framework; +- Controller will create ordered Items. + +Epoxy does the diffing, and handle many other thing for us, like handling item type, etc. + +See for instance the controller [AccountDataEpoxyController](../vector/src/main/java/im/vector/app/features/settings/devtools/AccountDataEpoxyController.kt)) for a simple example. + +Warning: do not use twice the same item `id` or it will crash. + +#### Other frameworks + +- Dependency injection is managed by [Dagger](https://dagger.dev/) (SDK) and [Hilt](https://developer.android.com/training/dependency-injection/hilt-android) (App); +- [Retrofit](https://square.github.io/retrofit/) and [OkHttp3](https://square.github.io/okhttp/): network requests; +- [Moshi](https://github.com/square/moshi) is used to parse and serialize Json object; + +### Push + +Please see the dedicated documentation for more details. + +This is the classical scenario: + +- App receives a Push. Note: Push is ignored if app is in foreground; +- App asks the SDK to load Event data (fastlane mode). We have a change to get the data faster and display the notification faster; +- App asks the SDK to perform a sync request. + +### Dependencies management + +All the dependencies are declared in `build.gradle` files. But some versions are declared in [this dedicated file](../dependencies.gradle). + +When adding a new dependency, you will have to update the file [dependencies_groups.gradle](../dependencies_groups.gradle) to allow the dependency to be downloaded from the artifact repository. Sometimes sub-dependencies need to be added too, until the project can compile. + +[Dependabot](https://github.com/dependabot) is set up on the project. This tool will automatically create Pull Request to upgrade our dependencies one by one. +dependencies_group, gradle files, Dependabot, etc. + +### Test + +Please refer to [this dedicated document](./ui-tests.md). + +TODO add link to the dedicated screenshot test documentation + +### Other points + +#### Logging + +**Important warning: ** NEVER log private user data, or use the flag `LOG_PRIVATE_DATA`. Be very careful when logging `data class`, all the content will be output! + +[Timber](https://github.com/JakeWharton/timber) is used to log data to logcat. We do not use directly the `Log` class. If possible please use a tag, as per + +````kotlin +Timber.tag(loggerTag.value).d("my log") +```` + +because automatic tag (= class name) will not be available on the release version. + +Also generally it is recommended to provide the `Throwable` to the Timber log functions. + +Last point, not that `Timber.v` function may have no effect on some devices. Prefer using `Timber.d` and up. + +#### Rageshake + +Rageshake is a feature to send bug report directly from the application. Just shake your phone and you will be prompted to send a bug report. + +Bug report can contain: +- a screenshot of the current application state +- the application logs from up to 15 application starts +- the logcat logs +- the key share history (crypto data) + +The data will be sent to an internal server, which is not publicly accessible. A GitHub issue will also be created to a private GitHub repository. + +Rageshake can be very useful to get logs from a release version of the application. + +### Tips + +- Element Android has a `developer mode` in the `Settings/Advanced settings`. Other useful options are available here; +- Show hidden Events can also help to debug feature. When developer mode is enabled, it is possible to view the source (= the Json content) of any Events; +- Type `/devtools` in a Room composer to access a developer menu. There are some other entry points. Developer mode has to be enabled; +- Hidden debug menu: when developer mode is enabled and on debug build, there are some extra screens that can be accessible using the green wheel. In those screens, it will be possible to toggle some feature flags; +- Using logcat, filtering with `onResume` can help you to understand what screen are currently displayed on your device. Searching for string displayed on the screen can also help to find the running code in the codebase. +- When this is possible, prefer using `sealed interface` instead of `sealed class`; +- When writing temporary code, using the string "DO NOT COMMIT" in a comment can help to avoid committing things by mistake. If committed and pushed, the CI will detect this String and will warn the user about it. + +## Happy coding! + +The team is here to support you, feel free to ask anything to other developers. + +Also please feel to update this documentation, if incomplete/wrong/obsolete/etc. + +**Thanks!** diff --git a/docs/danger.md b/docs/danger.md index afa3555469..34baa62e9e 100644 --- a/docs/danger.md +++ b/docs/danger.md @@ -28,6 +28,7 @@ Here are the checks that Danger does so far: - PR with change on layout should include screenshot in the description - PR which adds png file warn about the usage of vector drawables - non draft PR should have a reviewer +- files containing translations are not modified by developers ### Quality check diff --git a/docs/screenshot_testing.md b/docs/screenshot_testing.md new file mode 100644 index 0000000000..93b91cdf67 --- /dev/null +++ b/docs/screenshot_testing.md @@ -0,0 +1,72 @@ +# Screenshot testing + + + +* [Overview](#overview) +* [Setup](#setup) +* [Recording](#recording) +* [Verifying](#verifying) +* [Contributing](#contributing) +* [Example](#example) + + + +## Overview + +- Screenshot tests are tests which record the content of a rendered screen and verify subsequent runs to check if the screen renders differently. +- Element uses [Paparazzi](https://github.com/cashapp/paparazzi) to render, record and verify android layouts. +- The screenshot verification occurs on every pull request as part of the `tests.yml` workflow. + +## Setup + +- Install Git LFS through your package manager of choice (`brew install git-lfs` | `yay -S git-lfs`). +- Install the Git LFS hooks into the project. + +```bash +# with element-android as the current working directory +git lfs install --local +``` + +- If installed correctly, `git push` and `git pull` will now include LFS content. + +## Recording + +- `./gradlew recordScreenshots` +- Paparazzi will generate images in `${module}/src/test/snapshots`, which will need to be committed to the repository using Git LFS. + +## Verifying + +- `./gradlew verifyScreenshots` +- In the case of failure, Paparazzi will generate images in `${module}/out/failure`. The images will show the expected and actual screenshots along with a delta of the two images. + +## Contributing + +- When creating a test, the file (and class) name names must include `ScreenshotTest`, eg `ItemScreenshotTest`. +- After creating the new test, record and commit the newly rendered screens. +- `./tools/validate_lfs` can be ran to ensure everything is working correctly with Git LFS, the CI also runs this check. + +## Example + +```kotlin +class PaparazziExampleScreenshotTest { + + @get:Rule + val paparazzi = Paparazzi( + deviceConfig = PIXEL_3, + theme = "Theme.Vector.Light", + ) + + @Test + fun `example paparazzi test`() { + // Inflate the layout + val view = paparazzi.inflate(R.layout.item_radio) + + // Bind data to the view + view.findViewById(R.id.actionTitle).text = paparazzi.resources.getString(R.string.room_settings_all_messages) + view.findViewById(R.id.radioIcon).setImageResource(R.drawable.ic_radio_on) + + // Record the bound view + paparazzi.snapshot(view) + } +} +``` diff --git a/docs/unit_testing.md b/docs/unit_testing.md new file mode 100644 index 0000000000..f786c9a160 --- /dev/null +++ b/docs/unit_testing.md @@ -0,0 +1,351 @@ +# Table of Contents + + + +* [Overview](#overview) + * [Best Practices](#best-practices) +* [Project Conventions](#project-conventions) + * [Setup](#setup) + * [Naming](#naming) + * [Format](#format) + * [Assertions](#assertions) + * [Constants](#constants) + * [Mocking](#mocking) + * [Fakes](#fakes) + * [Fixtures](#fixtures) + * [Examples](#examples) + * [Extensions used to streamline the test setup](#extensions-used-to-streamline-the-test-setup) + * [Fakes and Fixtures](#fakes-and-fixtures) + + + +## Overview + +Unit tests are a mechanism to validate our code executes the way we expect. They help to inform the design of our systems by requiring testability and +understanding, they describe the inner workings without relying on inline comments and protect from unexpected regressions. + +However, unit tests are not a magical solution to solve all our problems and come at a cost. Unreliable and hard to maintain tests often end up ignored, deleted +or worse, provide a false sense of security. + +### Best Practices + +Tests can be written in many ways, the main rule is to keep them simple and maintainable. Some ways to help achieve this are... + +- Break out logic into single units (following the Single Responsibility Principle) to reduce test complexity. +- Favour pure functions, avoiding mutable state. +- Prefer dependency injection to static calls to allow for simpler test setup. +- Write concise tests with a single function under test, clearly showing the inputs and expected output. +- Create separate test cases instead of changing parameters and grouping multiple assertions within a single test to help trace back failure causes (with the + exception of parameterised tests). +- Assert against entire models instead of subsets of properties to capture any possible changes within the test scope. +- Avoid invoking logic from production instances other than the class under test to guard from unrelated changes. +- Always inject `Dispatchers` and `Clock` instances and provide fake implementations for tests to avoid non deterministic results. + +## Project Conventions + +#### Setup + +- Test file and class name should be the class under test with the Test suffix, created in a `test` sourceset, with the same package name as the class under + test. +- Dependencies of the class are instantiated inline, junit will recreate the test class for each test run. +- A line break between the dependencies and class under test helps clarify the instance being tested. + +```kotlin + +class MyClassTest { + + private val fakeUppercaser = FakeUppercaser() + + // line break between the class under test and its dependencies + private val myClass = MyClass(fakeUppercaser.instance) +} + +``` + +#### Naming + +- Test names use the `Gherkin` format, `given, when, then` mapping to the input, logic under test and expected result. + - `given` - Uniqueness about the environment or dependencies in which the test case is running. _"given device is android 12 and supports dark mode"_ + - `when` - The action/function under test. _"when reading dark mode status"_ + - `then` - The expected result from the combination of _given_ and _when_. _"then returns dark mode enabled"_ +- Test names are written using kotlin back ticks to enable sentences _ish_. + +```kotlin +@Test +fun `given a lowercase label, when uppercasing, then returns label uppercased` +``` + +When the input is given directly to the _when_, this can also be represented as... + +```kotlin +@Test +fun `when uppercasing a lowercase label, then returns label uppercased` +``` + +Multiple given or returns statements can be used in the name although it could be a sign that the logic being tested does too much. + +--- + +#### Format + +- Test bodies are broken into sections through the use of blank lines where the sections correspond to the test name. +- Sections can span multiple lines. + +```kotlin +// comments are for illustrative purposes +/* given */ val lowercaseLabel = "hello world" + +/* when */ val result = textUppercaser.uppercase(lowercaseLabel) + +/* then */ result shouldBeEqualTo "HELLO WORLD" +``` + +- Functions extracted from test bodies are placed beneath all the unit tests. + +--- + +#### Assertions + +- Assertions against test results are made using [Kluent's](https://github.com/MarkusAmshove/Kluent) _fluent_ api. +- Typically `shouldBeEqualTo`is the main assertion to use for asserting function return values as by project convention we assert against entire objects or + lists. + +```kotlin +val result = listOf("hello", "world") + +// Fail +result shouldBeEqualTo listOf("hello") +``` + +```kotlin +data class Person(val age: Int, val name: String) + +val result = Person(age = 100, name = "Gandalf") + +// Avoid +result.age shouldBeEqualTo 100 + +// Prefer +result shouldBeEqualTo Person(age = 100, "Gandalf") +``` + +- Exception throwing can be asserted against using `assertFailsWith`. +- When asserting reusable exceptions, include the message to distinguish between them. + +```kotlin +assertFailsWith(message = "Details about error") { + // when section of the test + codeUnderTest() +} +``` + +--- + +#### Constants + +- Reusable values are extracted to file level immutable properties or constants. +- These can be parameters or expected results. +- The naming convention is to prefix with `A` or `AN` for better matching with the test name. + +```kotlin +private const val A_LOWERCASE_LABEL = "hello" + +class MyTest { + @Test + fun `when uppercasing a lowercase label, then returns label uppercased`() { + val result = TextUppercaser().uppercase(A_LOWERCASE_LABEL) + ... + } +} +``` + +--- + +#### Mocking + +- In order to provide different behaviour for dependencies within tests our main method is through mocking, using [Mockk](https://mockk.io/). +- We avoid using relaxed mocks in favour of explicitly declaring mock behaviour through the _Fake_ convention. There are exceptions when mocking framework + classes which would require a lot of boilerplate. +- Using `Spy` is discouraged as it inherently requires real instances, which we are avoiding in our tests. There are exceptions such as `VectorFeatures` which + acts like a `Fixture` in release builds. + +--- + +#### Fakes + +- Fakes are reusable instances of classes purely for testing purposes. They provide functions to replace the functions of the interface/class they're faking + with test specific values. +- When faking an interface, the _Fake_ can be written using delegation or by stubbing +- All Fakes currently reside in the same package `${package}.test.fakes` + +```kotlin +// Delegating to a mock +class FakeClock : Clock by mockk() { + fun givenEpoch(epoch: Long) { + every { epochMillis() } returns epoch + } +} + +// Stubbing the interface +class FakeClock(private val epoch: Long) : Clock { + override fun epochMillis() = epoch +} +``` + +It's currently more common for fakes to fake class behaviour, we achieve this by wrapping and exposing a mock instance. + +```kotlin +class FakeCursor { + val instance = mockk() + fun givenEmpty() { + every { instance.count } returns 0 + every { instance.moveToFirst() } returns false + } +} + +val fakeCursor = FakeCursor().apply { givenEmpty() } +``` + +#### Fixtures + +- Fixtures are a reusable wrappers around data models. They provide default values to make creating instances as easy as possible, with the option to override + specific parameters when needed. +- Are namespaced within an `object`. +- Reduces the _find usages_ noise when searching for usages of the origin class construction. +- All Fixtures currently reside in the same package `${package}.test.fixtures`. + +```kotlin +object ContentAttachmentDataFixture { + fun aContentAttachmentData( + type: ContentAttachmentData.Type.TEXT, + mimeType: String? = null + ) = ContentAttachmentData(type, mimeType) +} +``` + +- Fixtures can also be used to manage specific combinations of parameters + +```kotlin +fun aContentAttachmentAudioData() = aContentAttachmentData( + type = ContentAttachmentData.Type.AUDIO, + mimeType = "audio/mp3", +) +``` + +--- + +### Examples + +##### Extensions used to streamline the test setup + +```kotlin +class CircularCacheTest { + + @Test + fun `when putting more than cache size then cache is limited to cache size`() { + val (cache, internalData) = createIntCache(cacheSize = 3) + + cache.putInOrder(1, 1, 1, 1, 1, 1) + + internalData shouldBeEqualTo arrayOf(1, 1, 1) + } +} + +private fun createIntCache(cacheSize: Int): Pair, Array> { + var internalData: Array? = null + val factory: (Int) -> Array = { + Array(it) { null }.also { array -> internalData = array } + } + return CircularCache(cacheSize, factory) to internalData!! +} + +private fun CircularCache.putInOrder(vararg values: Int) { + values.forEach { put(it) } +} +``` + +##### Fakes and Fixtures + +```kotlin +class LateInitUserPropertiesFactoryTest { + + private val fakeActiveSessionDataSource = FakeActiveSessionDataSource() + private val fakeVectorStore = FakeVectorStore() + private val fakeContext = FakeContext() + private val fakeSession = FakeSession().also { + it.givenVectorStore(fakeVectorStore.instance) + } + + private val lateInitUserProperties = LateInitUserPropertiesFactory( + fakeActiveSessionDataSource.instance, + fakeContext.instance + ) + + @Test + fun `given no active session, when creating properties, then returns null`() { + val result = lateInitUserProperties.createUserProperties() + + result shouldBeEqualTo null + } + + @Test + fun `given a teams use case set on an active session, when creating properties, then includes the remapped WorkMessaging selection`() { + fakeVectorStore.givenUseCase(FtueUseCase.TEAMS) + fakeActiveSessionDataSource.setActiveSession(fakeSession) + + val result = lateInitUserProperties.createUserProperties() + + result shouldBeEqualTo UserProperties( + ftueUseCaseSelection = UserProperties.FtueUseCaseSelection.WorkMessaging + ) + } +} + ``` + +##### ViewModel + +- `ViewModels` tend to be one of the most complex areas to unit test due to their position as a coordinator of data flows and bridge between domains. +- As the project uses a slightly tweaked`MvRx`, our API for the `ViewModel` is simplified down to `input - ViewModel.handle(Action)` + and `output Flows - ViewModel.viewEvents & ViewModel.stateFlow`. A `ViewModel` test asserter has been created to further simplify the process. + +```kotlin +class ViewModelTest { + + private var initialState = ViewState.Empty + + @get:Rule + val mvrxTestRule = MvRxTestRule(testDispatcher = UnconfinedTestDispatcher()) + + @Test + fun `when handling MyAction, then emits Loading and Content states`() { + val viewModel = ViewModel(initialState) + val test = viewModel.test() // must be invoked before interacting with the VM + + viewModel.handle(MyAction) + + test + .assertViewStates(initialState, State.Loading, State.Content()) + .assertNoEvents() + .finish() + } +} +``` + +- `ViewModels` often emit multiple states which are copies of the previous state, the `test` extension `assertStatesChanges` allows only the difference to be + supplied. + +```kotlin +data class ViewState(val name: String? = null, val age: Int? = null) +val initialState = ViewState() +val viewModel = ViewModel(initialState) +val test = viewModel.test() + +viewModel.handle(ChangeNameAction("Gandalf")) + +test + .assertStatesChanges( + initialState, + { copy(name = "Gandalf") }, + ) + .finish() +``` diff --git a/fastlane/metadata/android/en-US/changelogs/40105000.txt b/fastlane/metadata/android/en-US/changelogs/40105000.txt index 1bfa2b3dea..e86519e6e9 100644 --- a/fastlane/metadata/android/en-US/changelogs/40105000.txt +++ b/fastlane/metadata/android/en-US/changelogs/40105000.txt @@ -1,2 +1,2 @@ -Main changes in this version: New App Layout and Deferred DM enabled by default. -Full changelog: https://github.com/vector-im/element-android/releases \ No newline at end of file +Main changes in this version: Deferred DM enabled by default. +Full changelog: https://github.com/vector-im/element-android/releases diff --git a/gradle.properties b/gradle.properties index 0e561faa8d..ded5a43e28 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ org.gradle.vfs.watch=true org.gradle.caching=true # Android Settings -android.enableJetifier=true +android.enableJetifier=false android.useAndroidX=true #Project Settings diff --git a/library/attachment-viewer/src/main/java/im/vector/lib/attachmentviewer/AttachmentViewerActivity.kt b/library/attachment-viewer/src/main/java/im/vector/lib/attachmentviewer/AttachmentViewerActivity.kt index 764cf8419a..98398760d1 100644 --- a/library/attachment-viewer/src/main/java/im/vector/lib/attachmentviewer/AttachmentViewerActivity.kt +++ b/library/attachment-viewer/src/main/java/im/vector/lib/attachmentviewer/AttachmentViewerActivity.kt @@ -17,7 +17,6 @@ package im.vector.lib.attachmentviewer -import android.annotation.SuppressLint import android.graphics.Color import android.os.Build import android.os.Bundle @@ -136,7 +135,6 @@ abstract class AttachmentViewerActivity : AppCompatActivity(), AttachmentEventLi } } - @Suppress("DEPRECATION") private fun setDecorViewFullScreen() { // This is important for the dispatchTouchEvent, if not we must correct // the touch coordinates @@ -144,22 +142,20 @@ abstract class AttachmentViewerActivity : AppCompatActivity(), AttachmentEventLi // New API instead of SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN and SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION window.setDecorFitsSystemWindows(false) // New API instead of SYSTEM_UI_FLAG_IMMERSIVE - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - window.decorView.windowInsetsController?.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE - } else { - @SuppressLint("WrongConstant") - window.decorView.windowInsetsController?.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE - } + window.decorView.windowInsetsController?.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE // New API instead of FLAG_TRANSLUCENT_STATUS window.statusBarColor = ContextCompat.getColor(this, R.color.half_transparent_status_bar) // new API instead of FLAG_TRANSLUCENT_NAVIGATION window.navigationBarColor = ContextCompat.getColor(this, R.color.half_transparent_status_bar) } else { + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = ( View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE) + @Suppress("DEPRECATION") window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + @Suppress("DEPRECATION") window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) } } @@ -344,7 +340,6 @@ abstract class AttachmentViewerActivity : AppCompatActivity(), AttachmentEventLi ?.handleCommand(commands) } - @Suppress("DEPRECATION") private fun hideSystemUI() { systemUiVisibility = false // Enables regular immersive mode. @@ -356,17 +351,13 @@ abstract class AttachmentViewerActivity : AppCompatActivity(), AttachmentEventLi // new API instead of SYSTEM_UI_FLAG_HIDE_NAVIGATION window.decorView.windowInsetsController?.hide(WindowInsets.Type.navigationBars()) // New API instead of SYSTEM_UI_FLAG_IMMERSIVE - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - window.decorView.windowInsetsController?.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE - } else { - @SuppressLint("WrongConstant") - window.decorView.windowInsetsController?.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE - } + window.decorView.windowInsetsController?.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE // New API instead of FLAG_TRANSLUCENT_STATUS window.statusBarColor = ContextCompat.getColor(this, R.color.half_transparent_status_bar) // New API instead of FLAG_TRANSLUCENT_NAVIGATION window.navigationBarColor = ContextCompat.getColor(this, R.color.half_transparent_status_bar) } else { + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE // Set the content to appear under the system bars so that the // content doesn't resize when the system bars hide and show. @@ -381,13 +372,13 @@ abstract class AttachmentViewerActivity : AppCompatActivity(), AttachmentEventLi // Shows the system bars by removing all the flags // except for the ones that make the content appear under the system bars. - @Suppress("DEPRECATION") private fun showSystemUI() { systemUiVisibility = true if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // New API instead of SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN and SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION window.setDecorFitsSystemWindows(false) } else { + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) diff --git a/library/external/dialpad/build.gradle b/library/external/dialpad/build.gradle new file mode 100644 index 0000000000..fade8ddf30 --- /dev/null +++ b/library/external/dialpad/build.gradle @@ -0,0 +1,30 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + compileSdk versions.compileSdk + + defaultConfig { + minSdk versions.minSdk + targetSdk versions.targetSdk + } + + compileOptions { + sourceCompatibility versions.sourceCompat + targetCompatibility versions.targetCompat + } + + kotlinOptions { + jvmTarget = "11" + } +} + +dependencies { + implementation libs.androidx.appCompat +} + +afterEvaluate { + tasks.findAll { it.name.startsWith("lint") }.each { + it.enabled = false + } +} diff --git a/library/external/dialpad/src/main/AndroidManifest.xml b/library/external/dialpad/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..1d412d0ae5 --- /dev/null +++ b/library/external/dialpad/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/library/external/dialpad/src/main/java/com/android/dialer/animation/AnimUtils.java b/library/external/dialpad/src/main/java/com/android/dialer/animation/AnimUtils.java new file mode 100644 index 0000000000..b6a32c587c --- /dev/null +++ b/library/external/dialpad/src/main/java/com/android/dialer/animation/AnimUtils.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2014 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.dialer.animation; + +import android.view.animation.Interpolator; + +import com.android.dialer.compat.PathInterpolatorCompat; + +public class AnimUtils { + public static final Interpolator EASE_OUT_EASE_IN = + PathInterpolatorCompat.create(0.4f, 0, 0.2f, 1); +} diff --git a/library/external/dialpad/src/main/java/com/android/dialer/compat/PathInterpolatorCompat.java b/library/external/dialpad/src/main/java/com/android/dialer/compat/PathInterpolatorCompat.java new file mode 100644 index 0000000000..7139bc4af1 --- /dev/null +++ b/library/external/dialpad/src/main/java/com/android/dialer/compat/PathInterpolatorCompat.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2015 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.dialer.compat; + +import android.graphics.Path; +import android.graphics.PathMeasure; +import android.os.Build; +import android.view.animation.Interpolator; +import android.view.animation.PathInterpolator; + +public class PathInterpolatorCompat { + + public static Interpolator create( + float controlX1, float controlY1, float controlX2, float controlY2) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + return new PathInterpolator(controlX1, controlY1, controlX2, controlY2); + } + return new PathInterpolatorBase(controlX1, controlY1, controlX2, controlY2); + } + + private static class PathInterpolatorBase implements Interpolator { + + /** Governs the accuracy of the approximation of the {@link Path}. */ + private static final float PRECISION = 0.002f; + + private final float[] mX; + private final float[] mY; + + public PathInterpolatorBase(Path path) { + final PathMeasure pathMeasure = new PathMeasure(path, false /* forceClosed */); + + final float pathLength = pathMeasure.getLength(); + final int numPoints = (int) (pathLength / PRECISION) + 1; + + mX = new float[numPoints]; + mY = new float[numPoints]; + + final float[] position = new float[2]; + for (int i = 0; i < numPoints; ++i) { + final float distance = (i * pathLength) / (numPoints - 1); + pathMeasure.getPosTan(distance, position, null /* tangent */); + + mX[i] = position[0]; + mY[i] = position[1]; + } + } + + public PathInterpolatorBase(float controlX, float controlY) { + this(createQuad(controlX, controlY)); + } + + public PathInterpolatorBase( + float controlX1, float controlY1, float controlX2, float controlY2) { + this(createCubic(controlX1, controlY1, controlX2, controlY2)); + } + + private static Path createQuad(float controlX, float controlY) { + final Path path = new Path(); + path.moveTo(0.0f, 0.0f); + path.quadTo(controlX, controlY, 1.0f, 1.0f); + return path; + } + + private static Path createCubic( + float controlX1, float controlY1, float controlX2, float controlY2) { + final Path path = new Path(); + path.moveTo(0.0f, 0.0f); + path.cubicTo(controlX1, controlY1, controlX2, controlY2, 1.0f, 1.0f); + return path; + } + + @Override + public float getInterpolation(float t) { + if (t <= 0.0f) { + return 0.0f; + } else if (t >= 1.0f) { + return 1.0f; + } + + // Do a binary search for the correct x to interpolate between. + int startIndex = 0; + int endIndex = mX.length - 1; + while (endIndex - startIndex > 1) { + int midIndex = (startIndex + endIndex) / 2; + if (t < mX[midIndex]) { + endIndex = midIndex; + } else { + startIndex = midIndex; + } + } + + final float xRange = mX[endIndex] - mX[startIndex]; + if (xRange == 0) { + return mY[startIndex]; + } + + final float tInRange = t - mX[startIndex]; + final float fraction = tInRange / xRange; + + final float startY = mY[startIndex]; + final float endY = mY[endIndex]; + + return startY + (fraction * (endY - startY)); + } + } +} diff --git a/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadKeyButton.java b/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadKeyButton.java new file mode 100644 index 0000000000..de6d2c6282 --- /dev/null +++ b/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadKeyButton.java @@ -0,0 +1,231 @@ +/* + * Copyright (C) 2012 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.dialer.dialpadview; + +import android.content.Context; +import android.graphics.RectF; +import android.os.Bundle; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityNodeInfo; +import android.widget.FrameLayout; + +/** + * Custom class for dialpad buttons. + * + *

When touch exploration mode is enabled for accessibility, this class implements the + * lift-to-type interaction model: + * + *

    + *
  • Hovering over the button will cause it to gain accessibility focus + *
  • Removing the hover pointer while inside the bounds of the button will perform a click action + *
  • If long-click is supported, hovering over the button for a longer period of time will switch + * to the long-click action + *
  • Moving the hover pointer outside of the bounds of the button will restore to the normal click + * action + *
+ */ +public class DialpadKeyButton extends FrameLayout { + + /** Timeout before switching to long-click accessibility mode. */ + private static final int LONG_HOVER_TIMEOUT = ViewConfiguration.getLongPressTimeout() * 2; + + /** Accessibility manager instance used to check touch exploration state. */ + private AccessibilityManager mAccessibilityManager; + + /** Bounds used to filter HOVER_EXIT events. */ + private RectF mHoverBounds = new RectF(); + + /** Whether this view is currently in the long-hover state. */ + private boolean mLongHovered; + + /** Alternate content description for long-hover state. */ + private CharSequence mLongHoverContentDesc; + + /** Backup of standard content description. Used for accessibility. */ + private CharSequence mBackupContentDesc; + + /** Backup of clickable property. Used for accessibility. */ + private boolean mWasClickable; + + /** Backup of long-clickable property. Used for accessibility. */ + private boolean mWasLongClickable; + + /** Runnable used to trigger long-click mode for accessibility. */ + private Runnable mLongHoverRunnable; + + private OnPressedListener mOnPressedListener; + + public DialpadKeyButton(Context context, AttributeSet attrs) { + super(context, attrs); + initForAccessibility(context); + } + + public DialpadKeyButton(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initForAccessibility(context); + } + + public void setOnPressedListener(OnPressedListener onPressedListener) { + mOnPressedListener = onPressedListener; + } + + private void initForAccessibility(Context context) { + mAccessibilityManager = + (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE); + } + + public void setLongHoverContentDescription(CharSequence contentDescription) { + mLongHoverContentDesc = contentDescription; + + if (mLongHovered) { + super.setContentDescription(mLongHoverContentDesc); + } + } + + @Override + public void setContentDescription(CharSequence contentDescription) { + if (mLongHovered) { + mBackupContentDesc = contentDescription; + } else { + super.setContentDescription(contentDescription); + } + } + + @Override + public void setPressed(boolean pressed) { + super.setPressed(pressed); + if (mOnPressedListener != null) { + mOnPressedListener.onPressed(this, pressed); + } + } + + @Override + public void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + mHoverBounds.left = getPaddingLeft(); + mHoverBounds.right = w - getPaddingRight(); + mHoverBounds.top = getPaddingTop(); + mHoverBounds.bottom = h - getPaddingBottom(); + } + + @Override + public boolean performAccessibilityAction(int action, Bundle arguments) { + if (action == AccessibilityNodeInfo.ACTION_CLICK) { + simulateClickForAccessibility(); + return true; + } + + return super.performAccessibilityAction(action, arguments); + } + + @Override + public boolean onHoverEvent(MotionEvent event) { + // When touch exploration is turned on, lifting a finger while inside + // the button's hover target bounds should perform a click action. + if (mAccessibilityManager.isEnabled() && mAccessibilityManager.isTouchExplorationEnabled()) { + switch (event.getActionMasked()) { + case MotionEvent.ACTION_HOVER_ENTER: + // Lift-to-type temporarily disables double-tap activation. + mWasClickable = isClickable(); + mWasLongClickable = isLongClickable(); + if (mWasLongClickable && mLongHoverContentDesc != null) { + if (mLongHoverRunnable == null) { + mLongHoverRunnable = + new Runnable() { + @Override + public void run() { + setLongHovered(true); + announceForAccessibility(mLongHoverContentDesc); + } + }; + } + postDelayed(mLongHoverRunnable, LONG_HOVER_TIMEOUT); + } + + setClickable(false); + setLongClickable(false); + break; + case MotionEvent.ACTION_HOVER_EXIT: + if (mHoverBounds.contains(event.getX(), event.getY())) { + if (mLongHovered) { + performLongClick(); + } else { + simulateClickForAccessibility(); + } + } + + cancelLongHover(); + setClickable(mWasClickable); + setLongClickable(mWasLongClickable); + break; + } + } + + return super.onHoverEvent(event); + } + + /** + * When accessibility is on, simulate press and release to preserve the semantic meaning of + * performClick(). Required for Braille support. + */ + private void simulateClickForAccessibility() { + // Checking the press state prevents double activation. + if (isPressed()) { + return; + } + + setPressed(true); + + // Stay consistent with performClick() by sending the event after + // setting the pressed state but before performing the action. + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); + + setPressed(false); + } + + private void setLongHovered(boolean enabled) { + if (mLongHovered != enabled) { + mLongHovered = enabled; + + // Switch between normal and alternate description, if available. + if (enabled) { + mBackupContentDesc = getContentDescription(); + super.setContentDescription(mLongHoverContentDesc); + } else { + super.setContentDescription(mBackupContentDesc); + } + } + } + + private void cancelLongHover() { + if (mLongHoverRunnable != null) { + removeCallbacks(mLongHoverRunnable); + } + setLongHovered(false); + } + + public interface OnPressedListener { + + void onPressed(View view, boolean pressed); + } +} diff --git a/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadTextView.java b/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadTextView.java new file mode 100644 index 0000000000..5b1b7bb5dc --- /dev/null +++ b/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadTextView.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2014 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.dialer.dialpadview; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.widget.TextView; + +/** + * This is a custom text view intended only for rendering the numerals (and star and pound) on the + * dialpad. TextView has built in top/bottom padding to help account for ascenders/descenders. + * + *

Since vertical space is at a premium on the dialpad, particularly if the font size is scaled + * to a larger default, for the dialpad we use this class to more precisely render characters + * according to the precise amount of space they need. + */ +public class DialpadTextView extends TextView { + + private Rect mTextBounds = new Rect(); + private String mTextStr; + + public DialpadTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** Draw the text to fit within the height/width which have been specified during measurement. */ + @Override + public void draw(Canvas canvas) { + Paint paint = getPaint(); + + // Without this, the draw does not respect the style's specified text color. + paint.setColor(getCurrentTextColor()); + + // The text bounds values are relative and can be negative,, so rather than specifying a + // standard origin such as 0, 0, we need to use negative of the left/top bounds. + // For example, the bounds may be: Left: 11, Right: 37, Top: -77, Bottom: 0 + canvas.drawText(mTextStr, -mTextBounds.left, -mTextBounds.top, paint); + } + + /** + * Calculate the pixel-accurate bounds of the text when rendered, and use that to specify the + * height and width. + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + mTextStr = getText().toString(); + getPaint().getTextBounds(mTextStr, 0, mTextStr.length(), mTextBounds); + + int width = resolveSize(mTextBounds.width(), widthMeasureSpec); + int height = resolveSize(mTextBounds.height(), heightMeasureSpec); + setMeasuredDimension(width, height); + } +} diff --git a/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadView.java b/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadView.java new file mode 100644 index 0000000000..5c6ce46257 --- /dev/null +++ b/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DialpadView.java @@ -0,0 +1,455 @@ +/* + * Copyright (C) 2014 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.dialer.dialpadview; + +import android.animation.AnimatorListenerAdapter; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.text.Spannable; +import android.text.TextUtils; +import android.text.style.TtsSpan; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewPropertyAnimator; +import android.view.accessibility.AccessibilityManager; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.android.dialer.animation.AnimUtils; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.Locale; + +/** View that displays a twelve-key phone dialpad. */ +public class DialpadView extends LinearLayout { + + private static final String TAG = DialpadView.class.getSimpleName(); + + private static final double DELAY_MULTIPLIER = 0.66; + private static final double DURATION_MULTIPLIER = 0.8; + // For animation. + private static final int KEY_FRAME_DURATION = 33; + /** {@code True} if the dialpad is in landscape orientation. */ + private final boolean mIsLandscape; + /** {@code True} if the dialpad is showing in a right-to-left locale. */ + private final boolean mIsRtl; + + private final int[] mButtonIds = + new int[] { + R.id.zero, + R.id.one, + R.id.two, + R.id.three, + R.id.four, + R.id.five, + R.id.six, + R.id.seven, + R.id.eight, + R.id.nine, + R.id.star, + R.id.pound + }; + private EditText mDigits; + private ImageButton mDelete; + private View mOverflowMenuButton; + private ViewGroup mRateContainer; + private TextView mIldCountry; + private TextView mIldRate; + private boolean mCanDigitsBeEdited; + private int mTranslateDistance; + + public DialpadView(Context context) { + this(context, null); + } + + public DialpadView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public DialpadView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + mTranslateDistance = + getResources().getDimensionPixelSize(R.dimen.dialpad_key_button_translate_y); + + mIsLandscape = + getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; + mIsRtl = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && + TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL; + } + + @Override + protected void onFinishInflate() { + setupKeypad(); + mDigits = (EditText) findViewById(R.id.digits); + mDelete = (ImageButton) findViewById(R.id.deleteButton); + mOverflowMenuButton = findViewById(R.id.dialpad_overflow); + mRateContainer = (ViewGroup) findViewById(R.id.rate_container); + mIldCountry = (TextView) mRateContainer.findViewById(R.id.ild_country); + mIldRate = (TextView) mRateContainer.findViewById(R.id.ild_rate); + + AccessibilityManager accessibilityManager = + (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); + if (accessibilityManager.isEnabled()) { + // The text view must be selected to send accessibility events. + mDigits.setSelected(true); + } + } + + private void setupKeypad() { + final int[] letterIds = + new int[] { + R.string.dialpad_0_letters, + R.string.dialpad_1_letters, + R.string.dialpad_2_letters, + R.string.dialpad_3_letters, + R.string.dialpad_4_letters, + R.string.dialpad_5_letters, + R.string.dialpad_6_letters, + R.string.dialpad_7_letters, + R.string.dialpad_8_letters, + R.string.dialpad_9_letters, + R.string.dialpad_star_letters, + R.string.dialpad_pound_letters + }; + + final Resources resources = getContext().getResources(); + + DialpadKeyButton dialpadKey; + TextView numberView; + TextView lettersView; + + final Locale currentLocale = resources.getConfiguration().locale; + final NumberFormat nf; + // We translate dialpad numbers only for "fa" and not any other locale + // ("ar" anybody ?). + if ("fa".equals(currentLocale.getLanguage())) { + nf = DecimalFormat.getInstance(resources.getConfiguration().locale); + } else { + nf = DecimalFormat.getInstance(Locale.ENGLISH); + } + + for (int i = 0; i < mButtonIds.length; i++) { + dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]); + numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number); + lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters); + + final String numberString; + final CharSequence numberContentDescription; + if (mButtonIds[i] == R.id.pound) { + numberString = resources.getString(R.string.dialpad_pound_number); + numberContentDescription = numberString; + } else if (mButtonIds[i] == R.id.star) { + numberString = resources.getString(R.string.dialpad_star_number); + numberContentDescription = numberString; + } else { + numberString = nf.format(i); + // The content description is used for Talkback key presses. The number is + // separated by a "," to introduce a slight delay. Convert letters into a verbatim + // span so that they are read as letters instead of as one word. + String letters = resources.getString(letterIds[i]); + Spannable spannable = + Spannable.Factory.getInstance().newSpannable(numberString + "," + letters); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + spannable.setSpan( + (new TtsSpan.VerbatimBuilder(letters)).build(), + numberString.length() + 1, + numberString.length() + 1 + letters.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + numberContentDescription = spannable; + } + + numberView.setText(numberString); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + numberView.setElegantTextHeight(false); + } + dialpadKey.setContentDescription(numberContentDescription); + + if (lettersView != null) { + lettersView.setText(resources.getString(letterIds[i])); + } + } + + final DialpadKeyButton one = (DialpadKeyButton) findViewById(R.id.one); + one.setLongHoverContentDescription(resources.getText(R.string.description_voicemail_button)); + + final DialpadKeyButton zero = (DialpadKeyButton) findViewById(R.id.zero); + zero.setLongHoverContentDescription(resources.getText(R.string.description_image_button_plus)); + } + + private Drawable getDrawableCompat(Context context, int id) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + return context.getDrawable(id); + } else { + return context.getResources().getDrawable(id); + } + } + + public void setShowVoicemailButton(boolean show) { + View view = findViewById(R.id.dialpad_key_voicemail); + if (view != null) { + view.setVisibility(show ? View.VISIBLE : View.INVISIBLE); + } + } + + /** + * Whether or not the digits above the dialer can be edited. + * + * @param canBeEdited If true, the backspace button will be shown and the digits EditText will be + * configured to allow text manipulation. + */ + public void setCanDigitsBeEdited(boolean canBeEdited) { +// View deleteButton = findViewById(R.id.deleteButton); +// deleteButton.setVisibility(canBeEdited ? View.VISIBLE : View.INVISIBLE); +// View overflowMenuButton = findViewById(R.id.dialpad_overflow); +// overflowMenuButton.setVisibility(canBeEdited ? View.VISIBLE : View.GONE); + +// EditText digits = (EditText) findViewById(R.id.digits); +// digits.setClickable(canBeEdited); +// digits.setLongClickable(canBeEdited); +// digits.setFocusableInTouchMode(canBeEdited); +// digits.setCursorVisible(false); + + mCanDigitsBeEdited = canBeEdited; + } + + public void setCallRateInformation(String countryName, String displayRate) { + if (TextUtils.isEmpty(countryName) && TextUtils.isEmpty(displayRate)) { + mRateContainer.setVisibility(View.GONE); + return; + } + mRateContainer.setVisibility(View.VISIBLE); + mIldCountry.setText(countryName); + mIldRate.setText(displayRate); + } + + public boolean canDigitsBeEdited() { + return mCanDigitsBeEdited; + } + + /** + * Always returns true for onHoverEvent callbacks, to fix problems with accessibility due to the + * dialpad overlaying other fragments. + */ + @Override + public boolean onHoverEvent(MotionEvent event) { + return true; + } + + public void animateShow() { + // This is a hack; without this, the setTranslationY is delayed in being applied, and the + // numbers appear at their original position (0) momentarily before animating. + final AnimatorListenerAdapter showListener = new AnimatorListenerAdapter() {}; + + for (int i = 0; i < mButtonIds.length; i++) { + int delay = (int) (getKeyButtonAnimationDelay(mButtonIds[i]) * DELAY_MULTIPLIER); + int duration = (int) (getKeyButtonAnimationDuration(mButtonIds[i]) * DURATION_MULTIPLIER); + final DialpadKeyButton dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]); + + ViewPropertyAnimator animator = dialpadKey.animate(); + if (mIsLandscape) { + // Landscape orientation requires translation along the X axis. + // For RTL locales, ensure we translate negative on the X axis. + dialpadKey.setTranslationX((mIsRtl ? -1 : 1) * mTranslateDistance); + animator.translationX(0); + } else { + // Portrait orientation requires translation along the Y axis. + dialpadKey.setTranslationY(mTranslateDistance); + animator.translationY(0); + } + animator + .setInterpolator(AnimUtils.EASE_OUT_EASE_IN) + .setStartDelay(delay) + .setDuration(duration) + .setListener(showListener) + .start(); + } + } + + public EditText getDigits() { + return mDigits; + } + + public ImageButton getDeleteButton() { + return mDelete; + } + + public View getOverflowMenuButton() { + return mOverflowMenuButton; + } + + /** + * Get the animation delay for the buttons, taking into account whether the dialpad is in + * landscape left-to-right, landscape right-to-left, or portrait. + * + * @param buttonId The button ID. + * @return The animation delay. + */ + private int getKeyButtonAnimationDelay(int buttonId) { + if (mIsLandscape) { + if (mIsRtl) { + if (buttonId == R.id.three) { + return KEY_FRAME_DURATION * 1; + } else if (buttonId == R.id.six) { + return KEY_FRAME_DURATION * 2; + } else if (buttonId == R.id.nine) { + return KEY_FRAME_DURATION * 3; + } else if (buttonId == R.id.pound) { + return KEY_FRAME_DURATION * 4; + } else if (buttonId == R.id.two) { + return KEY_FRAME_DURATION * 5; + } else if (buttonId == R.id.five) { + return KEY_FRAME_DURATION * 6; + } else if (buttonId == R.id.eight) { + return KEY_FRAME_DURATION * 7; + } else if (buttonId == R.id.zero) { + return KEY_FRAME_DURATION * 8; + } else if (buttonId == R.id.one) { + return KEY_FRAME_DURATION * 9; + } else if (buttonId == R.id.four) { + return KEY_FRAME_DURATION * 10; + } else if (buttonId == R.id.seven || buttonId == R.id.star) { + return KEY_FRAME_DURATION * 11; + } + } else { + if (buttonId == R.id.one) { + return KEY_FRAME_DURATION * 1; + } else if (buttonId == R.id.four) { + return KEY_FRAME_DURATION * 2; + } else if (buttonId == R.id.seven) { + return KEY_FRAME_DURATION * 3; + } else if (buttonId == R.id.star) { + return KEY_FRAME_DURATION * 4; + } else if (buttonId == R.id.two) { + return KEY_FRAME_DURATION * 5; + } else if (buttonId == R.id.five) { + return KEY_FRAME_DURATION * 6; + } else if (buttonId == R.id.eight) { + return KEY_FRAME_DURATION * 7; + } else if (buttonId == R.id.zero) { + return KEY_FRAME_DURATION * 8; + } else if (buttonId == R.id.three) { + return KEY_FRAME_DURATION * 9; + } else if (buttonId == R.id.six) { + return KEY_FRAME_DURATION * 10; + } else if (buttonId == R.id.nine || buttonId == R.id.pound) { + return KEY_FRAME_DURATION * 11; + } + } + } else { + if (buttonId == R.id.one) { + return KEY_FRAME_DURATION * 1; + } else if (buttonId == R.id.two) { + return KEY_FRAME_DURATION * 2; + } else if (buttonId == R.id.three) { + return KEY_FRAME_DURATION * 3; + } else if (buttonId == R.id.four) { + return KEY_FRAME_DURATION * 4; + } else if (buttonId == R.id.five) { + return KEY_FRAME_DURATION * 5; + } else if (buttonId == R.id.six) { + return KEY_FRAME_DURATION * 6; + } else if (buttonId == R.id.seven) { + return KEY_FRAME_DURATION * 7; + } else if (buttonId == R.id.eight) { + return KEY_FRAME_DURATION * 8; + } else if (buttonId == R.id.nine) { + return KEY_FRAME_DURATION * 9; + } else if (buttonId == R.id.star) { + return KEY_FRAME_DURATION * 10; + } else if (buttonId == R.id.zero || buttonId == R.id.pound) { + return KEY_FRAME_DURATION * 11; + } + } + + Log.wtf(TAG, "Attempted to get animation delay for invalid key button id."); + return 0; + } + + /** + * Get the button animation duration, taking into account whether the dialpad is in landscape + * left-to-right, landscape right-to-left, or portrait. + * + * @param buttonId The button ID. + * @return The animation duration. + */ + private int getKeyButtonAnimationDuration(int buttonId) { + if (mIsLandscape) { + if (mIsRtl) { + if (buttonId == R.id.one + || buttonId == R.id.four + || buttonId == R.id.seven + || buttonId == R.id.star) { + return KEY_FRAME_DURATION * 8; + } else if (buttonId == R.id.two + || buttonId == R.id.five + || buttonId == R.id.eight + || buttonId == R.id.zero) { + return KEY_FRAME_DURATION * 9; + } else if (buttonId == R.id.three + || buttonId == R.id.six + || buttonId == R.id.nine + || buttonId == R.id.pound) { + return KEY_FRAME_DURATION * 10; + } + } else { + if (buttonId == R.id.one + || buttonId == R.id.four + || buttonId == R.id.seven + || buttonId == R.id.star) { + return KEY_FRAME_DURATION * 10; + } else if (buttonId == R.id.two + || buttonId == R.id.five + || buttonId == R.id.eight + || buttonId == R.id.zero) { + return KEY_FRAME_DURATION * 9; + } else if (buttonId == R.id.three + || buttonId == R.id.six + || buttonId == R.id.nine + || buttonId == R.id.pound) { + return KEY_FRAME_DURATION * 8; + } + } + } else { + if (buttonId == R.id.one + || buttonId == R.id.two + || buttonId == R.id.three + || buttonId == R.id.four + || buttonId == R.id.five + || buttonId == R.id.six) { + return KEY_FRAME_DURATION * 10; + } else if (buttonId == R.id.seven || buttonId == R.id.eight || buttonId == R.id.nine) { + return KEY_FRAME_DURATION * 9; + } else if (buttonId == R.id.star || buttonId == R.id.zero || buttonId == R.id.pound) { + return KEY_FRAME_DURATION * 8; + } + } + + Log.wtf(TAG, "Attempted to get animation duration for invalid key button id."); + return 0; + } +} diff --git a/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DigitsEditText.java b/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DigitsEditText.java new file mode 100644 index 0000000000..053b301eed --- /dev/null +++ b/library/external/dialpad/src/main/java/com/android/dialer/dialpadview/DigitsEditText.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 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. + */ + +package com.android.dialer.dialpadview; + +import android.content.Context; +import android.graphics.Rect; +import android.text.InputType; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.inputmethod.InputMethodManager; + +import com.android.dialer.widget.ResizingTextEditText; + +/** EditText which suppresses IME show up. */ +public class DigitsEditText extends ResizingTextEditText { + private OnTextContextMenuClickListener mOnTextContextMenuClickListener; + + public DigitsEditText(Context context, AttributeSet attrs) { + super(context, attrs); + setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); + setShowSoftInputOnFocus(false); + } + + @Override + protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { + super.onFocusChanged(focused, direction, previouslyFocusedRect); + final InputMethodManager imm = + ((InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE)); + if (imm != null && imm.isActive(this)) { + imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0); + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + final boolean ret = super.onTouchEvent(event); + // Must be done after super.onTouchEvent() + final InputMethodManager imm = + ((InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE)); + if (imm != null && imm.isActive(this)) { + imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0); + } + return ret; + } + + @Override + protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { + super.onTextChanged(text, start, lengthBefore, lengthAfter); + if (isCursorVisible()) { + setSelection(getText().length()); + } + } + + @Override + public boolean onTextContextMenuItem(int id) { + boolean value = super.onTextContextMenuItem(id); + if (mOnTextContextMenuClickListener != null) { + mOnTextContextMenuClickListener.onTextContextMenuClickListener(id); + } + return value; + } + + public interface OnTextContextMenuClickListener { + void onTextContextMenuClickListener(int id); + } + + public void setOnTextContextMenuClickListener(OnTextContextMenuClickListener listener) { + this.mOnTextContextMenuClickListener = listener; + } +} diff --git a/library/external/dialpad/src/main/java/com/android/dialer/util/ViewUtil.java b/library/external/dialpad/src/main/java/com/android/dialer/util/ViewUtil.java new file mode 100644 index 0000000000..4f6d1dd47c --- /dev/null +++ b/library/external/dialpad/src/main/java/com/android/dialer/util/ViewUtil.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2012 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.dialer.util; + +import android.graphics.Paint; +import android.util.TypedValue; +import android.widget.TextView; + +/** Provides static functions to work with views */ +public class ViewUtil { + + private ViewUtil() {} + + public static void resizeText(TextView textView, int originalTextSize, int minTextSize) { + final Paint paint = textView.getPaint(); + final int width = textView.getWidth(); + if (width == 0) { + return; + } + textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, originalTextSize); + float ratio = width / paint.measureText(textView.getText().toString()); + if (ratio <= 1.0f) { + textView.setTextSize( + TypedValue.COMPLEX_UNIT_PX, Math.max(minTextSize, originalTextSize * ratio)); + } + } +} diff --git a/library/external/dialpad/src/main/java/com/android/dialer/widget/ResizingTextEditText.java b/library/external/dialpad/src/main/java/com/android/dialer/widget/ResizingTextEditText.java new file mode 100644 index 0000000000..216175981b --- /dev/null +++ b/library/external/dialpad/src/main/java/com/android/dialer/widget/ResizingTextEditText.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2014 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.dialer.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.widget.EditText; +import com.android.dialer.dialpadview.R; +import com.android.dialer.util.ViewUtil; + +/** EditText which resizes dynamically with respect to text length. */ +public class ResizingTextEditText extends EditText { + + private final int mOriginalTextSize; + private final int mMinTextSize; + + public ResizingTextEditText(Context context, AttributeSet attrs) { + super(context, attrs); + mOriginalTextSize = (int) getTextSize(); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ResizingText); + mMinTextSize = + (int) a.getDimension(R.styleable.ResizingText_resizing_text_min_size, mOriginalTextSize); + a.recycle(); + } + + @Override + protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { + super.onTextChanged(text, start, lengthBefore, lengthAfter); + ViewUtil.resizeText(this, mOriginalTextSize, mMinTextSize); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + ViewUtil.resizeText(this, mOriginalTextSize, mMinTextSize); + } +} diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..cd19726776 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_arrow_drop_down_white_18.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_arrow_drop_down_white_18.png new file mode 100644 index 0000000000..41541bb0d0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_arrow_drop_down_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_backspace_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_backspace_white_24.png new file mode 100644 index 0000000000..136e8b8c1a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_backspace_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_block_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_block_white_24.png new file mode 100644 index 0000000000..2ccc89d246 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_block_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png new file mode 100644 index 0000000000..ec2349ca83 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_bluetooth_audio_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_bluetooth_audio_white_36.png new file mode 100644 index 0000000000..398f0a938c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_bluetooth_audio_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_end_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_end_white_24.png new file mode 100644 index 0000000000..625b827c44 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_end_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_end_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_end_white_36.png new file mode 100644 index 0000000000..51456d3d5d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_end_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_made_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_made_white_24.png new file mode 100644 index 0000000000..ea6a8ab5f2 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_made_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_merge_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_merge_white_36.png new file mode 100644 index 0000000000..b7aba8072e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_merge_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_missed_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_missed_white_24.png new file mode 100644 index 0000000000..f188eb9aa5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_missed_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_received_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_received_white_24.png new file mode 100644 index 0000000000..ca2ae411a8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_received_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_white_18.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_white_18.png new file mode 100644 index 0000000000..0bdc56be6f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_white_24.png new file mode 100644 index 0000000000..4dc5065155 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_call_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_camera_alt_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_camera_alt_white_24.png new file mode 100644 index 0000000000..497c88ca82 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_camera_alt_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_camera_alt_white_48.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_camera_alt_white_48.png new file mode 100644 index 0000000000..c8e69dcebb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_camera_alt_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_check_black_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_check_black_24.png new file mode 100644 index 0000000000..e802d90aeb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_check_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_check_circle_googblue_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_check_circle_googblue_24.png new file mode 100644 index 0000000000..52ff857ba8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_check_circle_googblue_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_close_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_close_white_24.png new file mode 100644 index 0000000000..ceb1a1eebf Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_close_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..6acef1745d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_delete_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_delete_white_24.png new file mode 100644 index 0000000000..8444f31384 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_delete_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_dialpad_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_dialpad_white_24.png new file mode 100644 index 0000000000..9037f94e84 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_dialpad_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_dialpad_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_dialpad_white_36.png new file mode 100644 index 0000000000..82710e72a5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_dialpad_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_edit_grey600_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_edit_grey600_24.png new file mode 100644 index 0000000000..4a27b46968 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_edit_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_forward_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_forward_white_24.png new file mode 100644 index 0000000000..a0711d377e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_forward_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_fullscreen_exit_white_48.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_fullscreen_exit_white_48.png new file mode 100644 index 0000000000..159bea7fd8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_fullscreen_exit_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_fullscreen_white_48.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_fullscreen_white_48.png new file mode 100644 index 0000000000..9b8131124d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_fullscreen_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_grade_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_grade_white_24.png new file mode 100644 index 0000000000..86eecdd4a0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_grade_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_group_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_group_white_36.png new file mode 100644 index 0000000000..f98a074ac1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_group_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_hd_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_hd_white_24.png new file mode 100644 index 0000000000..35bf51a4f1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_hd_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_headset_grey600_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_headset_grey600_24.png new file mode 100644 index 0000000000..e859c2f31a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_headset_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_headset_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_headset_white_36.png new file mode 100644 index 0000000000..f77f24767c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_headset_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_history_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_history_white_24.png new file mode 100644 index 0000000000..485c826fdf Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_history_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_image_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_image_white_24.png new file mode 100644 index 0000000000..b414cf5b68 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_image_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_info_outline_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_info_outline_white_24.png new file mode 100644 index 0000000000..c7b1113cfe Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_info_outline_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_message_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_message_white_24.png new file mode 100644 index 0000000000..57177b7c6f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_message_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_mic_off_black_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_mic_off_black_24.png new file mode 100644 index 0000000000..1755dbf3fa Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_mic_off_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_mic_off_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_mic_off_white_36.png new file mode 100644 index 0000000000..203cb8a9ff Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_mic_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_more_vert_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_more_vert_white_24.png new file mode 100644 index 0000000000..58e092b8af Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_more_vert_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_network_wifi_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_network_wifi_white_24.png new file mode 100644 index 0000000000..8df91f2367 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_network_wifi_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_pause_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_pause_white_24.png new file mode 100644 index 0000000000..4d2ea05c46 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_pause_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_pause_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_pause_white_36.png new file mode 100644 index 0000000000..1d024393aa Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_pause_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_people_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_people_white_24.png new file mode 100644 index 0000000000..25e443424e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_people_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_person_add_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_person_add_white_24.png new file mode 100644 index 0000000000..10ae5a70c4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_person_add_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_person_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_person_white_24.png new file mode 100644 index 0000000000..56708b0bad Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_person_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_library_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_library_white_24.png new file mode 100644 index 0000000000..c4a2229e94 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_library_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_white_24.png new file mode 100644 index 0000000000..b414cf5b68 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_white_48.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_white_48.png new file mode 100644 index 0000000000..f9f1defa6d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_photo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_play_arrow_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_play_arrow_white_24.png new file mode 100644 index 0000000000..57c9fa5460 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_play_arrow_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_18.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_18.png new file mode 100644 index 0000000000..f0bb6f5beb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_24.png new file mode 100644 index 0000000000..ff7d95706a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_36.png new file mode 100644 index 0000000000..057d9c757c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_report_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_schedule_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_schedule_white_24.png new file mode 100644 index 0000000000..4b7caa097c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_schedule_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_search_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_search_white_24.png new file mode 100644 index 0000000000..bbfbc96cbc Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_search_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..5d4ad4b020 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png new file mode 100644 index 0000000000..5a53192125 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_swap_calls_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_swap_calls_white_36.png new file mode 100644 index 0000000000..8c3a0edaa3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_swap_calls_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..4366bb0827 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_off_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_off_white_24.png new file mode 100644 index 0000000000..aaf5ac2085 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_off_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_off_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_off_white_36.png new file mode 100644 index 0000000000..f2e461a9f1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_18.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_18.png new file mode 100644 index 0000000000..abf478adaa Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_24.png new file mode 100644 index 0000000000..d83e0d50c3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_36.png new file mode 100644 index 0000000000..49562a6408 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_videocam_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_voicemail_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_voicemail_white_24.png new file mode 100644 index 0000000000..03a62e15f9 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_voicemail_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_down_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_down_white_24.png new file mode 100644 index 0000000000..e22e92c857 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_down_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_grey600_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_grey600_24.png new file mode 100644 index 0000000000..49eb8fcc34 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_white_24.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_white_24.png new file mode 100644 index 0000000000..57d787163e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_white_36.png b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_white_36.png new file mode 100644 index 0000000000..62d22bec87 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-hdpi-v4/quantum_ic_volume_up_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..f517557627 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..90bf872ac8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..b8d4ce444b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..6c8174f3af Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-hdpi-v17/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..22a1140ae2 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..01b869a608 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..7933f42f0a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..b47cef666e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-mdpi-v17/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..d858f18e6c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..831b5249cb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..4735a7d711 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..6a984c4f16 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xhdpi-v17/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..614ad49a3e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..71f3bd6838 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..4a9e2c24aa Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..907911055b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xxhdpi-v17/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..d409b544b7 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..3b2aed29b5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..0167ac8291 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..aa7a919430 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-ldrtl-xxxhdpi-v17/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..4ef72eec99 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_arrow_drop_down_white_18.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_arrow_drop_down_white_18.png new file mode 100644 index 0000000000..7c1fc3d7ca Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_arrow_drop_down_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_backspace_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_backspace_white_24.png new file mode 100644 index 0000000000..48863dcdd7 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_backspace_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_block_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_block_white_24.png new file mode 100644 index 0000000000..ec1b33f0ea Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_block_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png new file mode 100644 index 0000000000..de635e034d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_bluetooth_audio_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_bluetooth_audio_white_36.png new file mode 100644 index 0000000000..046372d0df Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_bluetooth_audio_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_end_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_end_white_24.png new file mode 100644 index 0000000000..378272ffc1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_end_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_end_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_end_white_36.png new file mode 100644 index 0000000000..625b827c44 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_end_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_made_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_made_white_24.png new file mode 100644 index 0000000000..9b3cd43803 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_made_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_merge_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_merge_white_36.png new file mode 100644 index 0000000000..a2eb54bab1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_merge_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_missed_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_missed_white_24.png new file mode 100644 index 0000000000..42c360b8a2 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_missed_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_received_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_received_white_24.png new file mode 100644 index 0000000000..fbc1e86e24 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_received_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_white_18.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_white_18.png new file mode 100644 index 0000000000..bd5748575f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_white_24.png new file mode 100644 index 0000000000..77f9de5e3c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_call_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_camera_alt_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_camera_alt_white_24.png new file mode 100644 index 0000000000..e830522008 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_camera_alt_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_camera_alt_white_48.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_camera_alt_white_48.png new file mode 100644 index 0000000000..be9fb226a5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_camera_alt_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_check_black_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_check_black_24.png new file mode 100644 index 0000000000..1c14c9c445 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_check_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_check_circle_googblue_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_check_circle_googblue_24.png new file mode 100644 index 0000000000..eff5627225 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_check_circle_googblue_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_close_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_close_white_24.png new file mode 100644 index 0000000000..af7f8288da Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_close_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..8ac80b083f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_delete_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_delete_white_24.png new file mode 100644 index 0000000000..e2268c9bed Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_delete_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_dialpad_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_dialpad_white_24.png new file mode 100644 index 0000000000..6c405f9ba9 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_dialpad_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_dialpad_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_dialpad_white_36.png new file mode 100644 index 0000000000..9037f94e84 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_dialpad_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_edit_grey600_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_edit_grey600_24.png new file mode 100644 index 0000000000..f003bc9d33 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_edit_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_forward_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_forward_white_24.png new file mode 100644 index 0000000000..65f73299f9 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_forward_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_fullscreen_exit_white_48.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_fullscreen_exit_white_48.png new file mode 100644 index 0000000000..364bad0b84 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_fullscreen_exit_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_fullscreen_white_48.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_fullscreen_white_48.png new file mode 100644 index 0000000000..4423c7ce99 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_fullscreen_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_grade_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_grade_white_24.png new file mode 100644 index 0000000000..d2cbe4c92b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_grade_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_group_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_group_white_36.png new file mode 100644 index 0000000000..25e443424e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_group_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_hd_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_hd_white_24.png new file mode 100644 index 0000000000..30938fe4d4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_hd_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_headset_grey600_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_headset_grey600_24.png new file mode 100644 index 0000000000..371efd3822 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_headset_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_headset_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_headset_white_36.png new file mode 100644 index 0000000000..d25d3888e1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_headset_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_history_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_history_white_24.png new file mode 100644 index 0000000000..d67647c560 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_history_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_image_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_image_white_24.png new file mode 100644 index 0000000000..d474bd577d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_image_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_info_outline_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_info_outline_white_24.png new file mode 100644 index 0000000000..353e064951 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_info_outline_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_message_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_message_white_24.png new file mode 100644 index 0000000000..3072b75699 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_message_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_mic_off_black_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_mic_off_black_24.png new file mode 100644 index 0000000000..da605a5a19 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_mic_off_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_mic_off_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_mic_off_white_36.png new file mode 100644 index 0000000000..6fccf5d09f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_mic_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_more_vert_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_more_vert_white_24.png new file mode 100644 index 0000000000..5ec0116f05 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_more_vert_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_network_wifi_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_network_wifi_white_24.png new file mode 100644 index 0000000000..1c3e8b9879 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_network_wifi_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_pause_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_pause_white_24.png new file mode 100644 index 0000000000..2272d478c3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_pause_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_pause_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_pause_white_36.png new file mode 100644 index 0000000000..4d2ea05c46 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_pause_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_people_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_people_white_24.png new file mode 100644 index 0000000000..3f20e75533 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_people_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_person_add_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_person_add_white_24.png new file mode 100644 index 0000000000..38e0a2882a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_person_add_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_person_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_person_white_24.png new file mode 100644 index 0000000000..f0b1c725da Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_person_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_library_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_library_white_24.png new file mode 100644 index 0000000000..02ef4cdb00 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_library_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_white_24.png new file mode 100644 index 0000000000..d474bd577d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_white_48.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_white_48.png new file mode 100644 index 0000000000..2642b9e09e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_photo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_play_arrow_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_play_arrow_white_24.png new file mode 100644 index 0000000000..c61e948bbf Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_play_arrow_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_18.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_18.png new file mode 100644 index 0000000000..63ef736834 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_24.png new file mode 100644 index 0000000000..ac0f3948db Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_36.png new file mode 100644 index 0000000000..ff7d95706a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_report_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_schedule_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_schedule_white_24.png new file mode 100644 index 0000000000..f69736faa6 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_schedule_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_search_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_search_white_24.png new file mode 100644 index 0000000000..faefc59c8e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_search_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..b58afb0b49 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png new file mode 100644 index 0000000000..dd5a42f55c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_swap_calls_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_swap_calls_white_36.png new file mode 100644 index 0000000000..9491f2d1af Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_swap_calls_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..b67f6a9116 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_off_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_off_white_24.png new file mode 100644 index 0000000000..d1cca6f0a0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_off_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_off_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_off_white_36.png new file mode 100644 index 0000000000..aaf5ac2085 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_18.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_18.png new file mode 100644 index 0000000000..1dafd49276 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_24.png new file mode 100644 index 0000000000..d146209a51 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_36.png new file mode 100644 index 0000000000..d83e0d50c3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_videocam_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_voicemail_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_voicemail_white_24.png new file mode 100644 index 0000000000..e5aa7db055 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_voicemail_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_down_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_down_white_24.png new file mode 100644 index 0000000000..10992ed70c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_down_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_grey600_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_grey600_24.png new file mode 100644 index 0000000000..d6cea3667a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_white_24.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_white_24.png new file mode 100644 index 0000000000..7cfd4c7b88 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_white_36.png b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_white_36.png new file mode 100644 index 0000000000..57d787163e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-mdpi-v4/quantum_ic_volume_up_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-v21/btn_dialpad_key.xml b/library/external/dialpad/src/main/res/drawable-v21/btn_dialpad_key.xml new file mode 100644 index 0000000000..50614f9bed --- /dev/null +++ b/library/external/dialpad/src/main/res/drawable-v21/btn_dialpad_key.xml @@ -0,0 +1,18 @@ + + + + diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..832f5a3617 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_arrow_drop_down_white_18.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_arrow_drop_down_white_18.png new file mode 100644 index 0000000000..4c6076df77 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_arrow_drop_down_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_backspace_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_backspace_white_24.png new file mode 100644 index 0000000000..ec5412bd8a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_backspace_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_block_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_block_white_24.png new file mode 100644 index 0000000000..7aba97b659 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_block_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png new file mode 100644 index 0000000000..eea1bbf04b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_bluetooth_audio_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_bluetooth_audio_white_36.png new file mode 100644 index 0000000000..d5022d063e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_bluetooth_audio_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_end_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_end_white_24.png new file mode 100644 index 0000000000..a4fe6889d1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_end_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_end_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_end_white_36.png new file mode 100644 index 0000000000..e1831d7afd Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_end_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_made_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_made_white_24.png new file mode 100644 index 0000000000..7fe6941051 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_made_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_merge_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_merge_white_36.png new file mode 100644 index 0000000000..01daecf656 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_merge_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_missed_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_missed_white_24.png new file mode 100644 index 0000000000..dd64489aae Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_missed_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_received_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_received_white_24.png new file mode 100644 index 0000000000..807308d9de Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_received_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_white_18.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_white_18.png new file mode 100644 index 0000000000..4dc5065155 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_white_24.png new file mode 100644 index 0000000000..ef45e933a9 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_call_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_camera_alt_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_camera_alt_white_24.png new file mode 100644 index 0000000000..be9fb226a5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_camera_alt_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_camera_alt_white_48.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_camera_alt_white_48.png new file mode 100644 index 0000000000..777658e955 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_camera_alt_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_check_black_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_check_black_24.png new file mode 100644 index 0000000000..64a4944f75 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_check_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_check_circle_googblue_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_check_circle_googblue_24.png new file mode 100644 index 0000000000..e31fcf3507 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_check_circle_googblue_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_close_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_close_white_24.png new file mode 100644 index 0000000000..b7c7ffd0e7 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_close_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..ca62598599 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_delete_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_delete_white_24.png new file mode 100644 index 0000000000..484260a971 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_delete_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_dialpad_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_dialpad_white_24.png new file mode 100644 index 0000000000..0e89f6c74b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_dialpad_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_dialpad_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_dialpad_white_36.png new file mode 100644 index 0000000000..175000510d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_dialpad_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_edit_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_edit_grey600_24.png new file mode 100644 index 0000000000..b5b3a243c7 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_edit_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_forward_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_forward_white_24.png new file mode 100644 index 0000000000..7a5df52bf0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_forward_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_fullscreen_exit_white_48.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_fullscreen_exit_white_48.png new file mode 100644 index 0000000000..ef360fe40c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_fullscreen_exit_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_fullscreen_white_48.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_fullscreen_white_48.png new file mode 100644 index 0000000000..c1dcfb2902 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_fullscreen_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_grade_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_grade_white_24.png new file mode 100644 index 0000000000..d65f39d7cc Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_grade_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_group_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_group_white_36.png new file mode 100644 index 0000000000..7f0b7e903b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_group_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_hd_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_hd_white_24.png new file mode 100644 index 0000000000..4c954d86f8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_hd_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_headset_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_headset_grey600_24.png new file mode 100644 index 0000000000..f7dbee156b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_headset_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_headset_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_headset_white_36.png new file mode 100644 index 0000000000..82db5427b7 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_headset_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_history_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_history_white_24.png new file mode 100644 index 0000000000..3e73b49ee5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_history_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_image_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_image_white_24.png new file mode 100644 index 0000000000..2642b9e09e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_image_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_info_outline_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_info_outline_white_24.png new file mode 100644 index 0000000000..c571b2e3e7 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_info_outline_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_message_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_message_white_24.png new file mode 100644 index 0000000000..763767b4f6 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_message_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_mic_off_black_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_mic_off_black_24.png new file mode 100644 index 0000000000..fa741be1c0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_mic_off_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_mic_off_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_mic_off_white_36.png new file mode 100644 index 0000000000..7a15a9ea9e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_mic_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_more_vert_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_more_vert_white_24.png new file mode 100644 index 0000000000..96e5d4321c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_more_vert_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_network_wifi_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_network_wifi_white_24.png new file mode 100644 index 0000000000..ca927f3de5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_network_wifi_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_pause_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_pause_white_24.png new file mode 100644 index 0000000000..f49aed7571 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_pause_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_pause_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_pause_white_36.png new file mode 100644 index 0000000000..7192ad487e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_pause_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_people_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_people_white_24.png new file mode 100644 index 0000000000..715b49a3c8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_people_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_person_add_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_person_add_white_24.png new file mode 100644 index 0000000000..7e7c289d49 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_person_add_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_person_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_person_white_24.png new file mode 100644 index 0000000000..aea15f0be5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_person_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_library_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_library_white_24.png new file mode 100644 index 0000000000..4bd2898a83 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_library_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_white_24.png new file mode 100644 index 0000000000..2642b9e09e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_white_48.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_white_48.png new file mode 100644 index 0000000000..2ffdb55f26 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_photo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_play_arrow_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_play_arrow_white_24.png new file mode 100644 index 0000000000..a3c80e73da Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_play_arrow_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_18.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_18.png new file mode 100644 index 0000000000..dc0c995c17 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_24.png new file mode 100644 index 0000000000..74fc594aab Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_36.png new file mode 100644 index 0000000000..26b9172e8f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_report_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_schedule_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_schedule_white_24.png new file mode 100644 index 0000000000..1749ea2758 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_schedule_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_search_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_search_white_24.png new file mode 100644 index 0000000000..bfc3e39394 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_search_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..ef59e77678 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png new file mode 100644 index 0000000000..28b5afa9d4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_swap_calls_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_swap_calls_white_36.png new file mode 100644 index 0000000000..698cd5d756 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_swap_calls_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..a5e719cdfb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_off_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_off_white_24.png new file mode 100644 index 0000000000..5d540589b4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_off_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_off_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_off_white_36.png new file mode 100644 index 0000000000..69565f2c75 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_18.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_18.png new file mode 100644 index 0000000000..d83e0d50c3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_24.png new file mode 100644 index 0000000000..1b2583d34e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_36.png new file mode 100644 index 0000000000..44c28e2f28 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_videocam_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_voicemail_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_voicemail_white_24.png new file mode 100644 index 0000000000..59126d7066 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_voicemail_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_down_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_down_white_24.png new file mode 100644 index 0000000000..2621bc15d3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_down_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_grey600_24.png new file mode 100644 index 0000000000..a45093ff79 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_white_24.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_white_24.png new file mode 100644 index 0000000000..2ed00343b8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_white_36.png b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_white_36.png new file mode 100644 index 0000000000..2e751a40f5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xhdpi-v4/quantum_ic_volume_up_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..32a6d91ce8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_arrow_drop_down_white_18.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_arrow_drop_down_white_18.png new file mode 100644 index 0000000000..2609ae1341 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_arrow_drop_down_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_backspace_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_backspace_white_24.png new file mode 100644 index 0000000000..f6a90accff Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_backspace_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_block_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_block_white_24.png new file mode 100644 index 0000000000..fddfa54b85 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_block_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png new file mode 100644 index 0000000000..99f57c12a8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_bluetooth_audio_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_bluetooth_audio_white_36.png new file mode 100644 index 0000000000..6842da6d0a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_bluetooth_audio_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_end_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_end_white_24.png new file mode 100644 index 0000000000..e1831d7afd Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_end_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_end_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_end_white_36.png new file mode 100644 index 0000000000..13ffc2ad75 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_end_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_made_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_made_white_24.png new file mode 100644 index 0000000000..ae471c9fc5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_made_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_merge_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_merge_white_36.png new file mode 100644 index 0000000000..cefef6551b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_merge_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_missed_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_missed_white_24.png new file mode 100644 index 0000000000..2374dc5a11 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_missed_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_received_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_received_white_24.png new file mode 100644 index 0000000000..58421114fd Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_received_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_white_18.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_white_18.png new file mode 100644 index 0000000000..6f4dcea1f3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_white_24.png new file mode 100644 index 0000000000..90ead2e455 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_call_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_camera_alt_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_camera_alt_white_24.png new file mode 100644 index 0000000000..c8e69dcebb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_camera_alt_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_camera_alt_white_48.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_camera_alt_white_48.png new file mode 100644 index 0000000000..a4e7aea72d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_camera_alt_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_check_black_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_check_black_24.png new file mode 100644 index 0000000000..b26a2c05e3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_check_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_check_circle_googblue_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_check_circle_googblue_24.png new file mode 100644 index 0000000000..a8eb2a45ec Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_check_circle_googblue_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_close_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_close_white_24.png new file mode 100644 index 0000000000..6b717e0dda Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_close_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..c480ba78fe Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_delete_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_delete_white_24.png new file mode 100644 index 0000000000..603f28cbd1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_delete_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_dialpad_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_dialpad_white_24.png new file mode 100644 index 0000000000..175000510d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_dialpad_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_dialpad_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_dialpad_white_36.png new file mode 100644 index 0000000000..54ebbafaeb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_dialpad_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_edit_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_edit_grey600_24.png new file mode 100644 index 0000000000..f1f9ffce89 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_edit_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_forward_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_forward_white_24.png new file mode 100644 index 0000000000..7bd5b1635b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_forward_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_fullscreen_exit_white_48.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_fullscreen_exit_white_48.png new file mode 100644 index 0000000000..b7f4133fd9 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_fullscreen_exit_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_fullscreen_white_48.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_fullscreen_white_48.png new file mode 100644 index 0000000000..a0a1b4d4f3 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_fullscreen_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_grade_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_grade_white_24.png new file mode 100644 index 0000000000..aa5879215e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_grade_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_group_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_group_white_36.png new file mode 100644 index 0000000000..952e15fa69 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_group_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_hd_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_hd_white_24.png new file mode 100644 index 0000000000..dd08bbbecc Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_hd_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_headset_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_headset_grey600_24.png new file mode 100644 index 0000000000..de1739bf4f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_headset_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_headset_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_headset_white_36.png new file mode 100644 index 0000000000..a0d8b14c04 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_headset_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_history_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_history_white_24.png new file mode 100644 index 0000000000..1358a129cf Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_history_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_image_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_image_white_24.png new file mode 100644 index 0000000000..f9f1defa6d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_image_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_info_outline_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_info_outline_white_24.png new file mode 100644 index 0000000000..c41a5fcffa Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_info_outline_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_message_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_message_white_24.png new file mode 100644 index 0000000000..0a79824b8f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_message_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_mic_off_black_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_mic_off_black_24.png new file mode 100644 index 0000000000..084bf3c9f4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_mic_off_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_mic_off_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_mic_off_white_36.png new file mode 100644 index 0000000000..585d38326c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_mic_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_more_vert_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_more_vert_white_24.png new file mode 100644 index 0000000000..801ad89095 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_more_vert_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_network_wifi_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_network_wifi_white_24.png new file mode 100644 index 0000000000..75469cd852 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_network_wifi_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_pause_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_pause_white_24.png new file mode 100644 index 0000000000..7192ad487e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_pause_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_pause_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_pause_white_36.png new file mode 100644 index 0000000000..a03bad27ed Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_pause_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_people_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_people_white_24.png new file mode 100644 index 0000000000..7f0b7e903b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_people_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_person_add_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_person_add_white_24.png new file mode 100644 index 0000000000..8f744f0391 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_person_add_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_person_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_person_white_24.png new file mode 100644 index 0000000000..184f7418d5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_person_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_library_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_library_white_24.png new file mode 100644 index 0000000000..497479291e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_library_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_white_24.png new file mode 100644 index 0000000000..f9f1defa6d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_white_48.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_white_48.png new file mode 100644 index 0000000000..3fe5c5ceb6 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_photo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_play_arrow_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_play_arrow_white_24.png new file mode 100644 index 0000000000..547ef30aac Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_play_arrow_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_18.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_18.png new file mode 100644 index 0000000000..919a872e0e Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_24.png new file mode 100644 index 0000000000..26b9172e8f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_36.png new file mode 100644 index 0000000000..2040c36d57 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_report_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_schedule_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_schedule_white_24.png new file mode 100644 index 0000000000..96df1fbac0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_schedule_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_search_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_search_white_24.png new file mode 100644 index 0000000000..abbb989510 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_search_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..0c5256413c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png new file mode 100644 index 0000000000..f4105ec8d1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_swap_calls_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_swap_calls_white_36.png new file mode 100644 index 0000000000..140da28a8c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_swap_calls_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..8745f69ffc Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_off_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_off_white_24.png new file mode 100644 index 0000000000..69565f2c75 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_off_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_off_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_off_white_36.png new file mode 100644 index 0000000000..ff84832956 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_18.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_18.png new file mode 100644 index 0000000000..49562a6408 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_24.png new file mode 100644 index 0000000000..44c28e2f28 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_36.png new file mode 100644 index 0000000000..839af26f82 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_videocam_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_voicemail_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_voicemail_white_24.png new file mode 100644 index 0000000000..28b8e936a0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_voicemail_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_down_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_down_white_24.png new file mode 100644 index 0000000000..5eb8b671f2 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_down_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_grey600_24.png new file mode 100644 index 0000000000..413b386524 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_white_24.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_white_24.png new file mode 100644 index 0000000000..2e751a40f5 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_white_36.png b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_white_36.png new file mode 100644 index 0000000000..96c1f982fb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxhdpi-v4/quantum_ic_volume_up_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_arrow_back_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_arrow_back_white_24.png new file mode 100644 index 0000000000..e27034d678 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_arrow_back_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_arrow_drop_down_white_18.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_arrow_drop_down_white_18.png new file mode 100644 index 0000000000..c19c19d2bd Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_arrow_drop_down_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_backspace_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_backspace_white_24.png new file mode 100644 index 0000000000..88131b9aff Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_backspace_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_block_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_block_white_24.png new file mode 100644 index 0000000000..0378d1bedc Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_block_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png new file mode 100644 index 0000000000..1595be1697 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_bluetooth_audio_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_bluetooth_audio_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_bluetooth_audio_white_36.png new file mode 100644 index 0000000000..3fe7c23502 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_bluetooth_audio_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_end_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_end_white_24.png new file mode 100644 index 0000000000..8801d0ded4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_end_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_end_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_end_white_36.png new file mode 100644 index 0000000000..c8099a1a15 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_end_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_made_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_made_white_24.png new file mode 100644 index 0000000000..844ef86a07 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_made_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_merge_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_merge_white_36.png new file mode 100644 index 0000000000..9419ffbbc9 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_merge_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_missed_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_missed_white_24.png new file mode 100644 index 0000000000..b1321a9aed Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_missed_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_received_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_received_white_24.png new file mode 100644 index 0000000000..417999c85a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_received_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_white_18.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_white_18.png new file mode 100644 index 0000000000..90ead2e455 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_white_24.png new file mode 100644 index 0000000000..b0e020573d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_call_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_camera_alt_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_camera_alt_white_24.png new file mode 100644 index 0000000000..777658e955 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_camera_alt_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_camera_alt_white_48.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_camera_alt_white_48.png new file mode 100644 index 0000000000..f2fe54bd51 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_camera_alt_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_check_black_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_check_black_24.png new file mode 100644 index 0000000000..2f6d6386de Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_check_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_check_circle_googblue_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_check_circle_googblue_24.png new file mode 100644 index 0000000000..7e08f61086 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_check_circle_googblue_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_close_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_close_white_24.png new file mode 100644 index 0000000000..3964192192 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_close_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_content_copy_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_content_copy_grey600_24.png new file mode 100644 index 0000000000..f0ea085c90 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_content_copy_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_delete_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_delete_white_24.png new file mode 100644 index 0000000000..c582dc2a49 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_delete_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_dialpad_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_dialpad_white_24.png new file mode 100644 index 0000000000..eb4307aeb2 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_dialpad_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_dialpad_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_dialpad_white_36.png new file mode 100644 index 0000000000..a53aeb1d33 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_dialpad_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_edit_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_edit_grey600_24.png new file mode 100644 index 0000000000..a61298dbe6 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_edit_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_forward_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_forward_white_24.png new file mode 100644 index 0000000000..428009cfef Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_forward_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_fullscreen_exit_white_48.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_fullscreen_exit_white_48.png new file mode 100644 index 0000000000..b47b3f8bdb Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_fullscreen_exit_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_fullscreen_white_48.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_fullscreen_white_48.png new file mode 100644 index 0000000000..ea9f18ae63 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_fullscreen_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_grade_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_grade_white_24.png new file mode 100644 index 0000000000..7f38d09639 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_grade_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_group_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_group_white_36.png new file mode 100644 index 0000000000..dacf299327 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_group_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_hd_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_hd_white_24.png new file mode 100644 index 0000000000..3f87b882ee Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_hd_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_headset_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_headset_grey600_24.png new file mode 100644 index 0000000000..e968fa7d12 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_headset_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_headset_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_headset_white_36.png new file mode 100644 index 0000000000..89b9910476 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_headset_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_history_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_history_white_24.png new file mode 100644 index 0000000000..5b99ef6550 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_history_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_image_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_image_white_24.png new file mode 100644 index 0000000000..2ffdb55f26 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_image_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_info_outline_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_info_outline_white_24.png new file mode 100644 index 0000000000..3a82cab3b4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_info_outline_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_message_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_message_white_24.png new file mode 100644 index 0000000000..fa7c17ac45 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_message_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_mic_off_black_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_mic_off_black_24.png new file mode 100644 index 0000000000..90d0606a45 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_mic_off_black_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_mic_off_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_mic_off_white_36.png new file mode 100644 index 0000000000..b0a10fbf67 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_mic_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_more_vert_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_more_vert_white_24.png new file mode 100644 index 0000000000..7a97f4cb70 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_more_vert_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_network_wifi_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_network_wifi_white_24.png new file mode 100644 index 0000000000..eb284e3838 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_network_wifi_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_pause_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_pause_white_24.png new file mode 100644 index 0000000000..660ac65858 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_pause_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_pause_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_pause_white_36.png new file mode 100644 index 0000000000..3ea7e03e5d Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_pause_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_people_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_people_white_24.png new file mode 100644 index 0000000000..f52bd1ae59 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_people_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_person_add_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_person_add_white_24.png new file mode 100644 index 0000000000..2fa2cca80c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_person_add_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_person_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_person_white_24.png new file mode 100644 index 0000000000..33d40d8b62 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_person_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_library_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_library_white_24.png new file mode 100644 index 0000000000..8627f42767 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_library_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_white_24.png new file mode 100644 index 0000000000..2ffdb55f26 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_white_48.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_white_48.png new file mode 100644 index 0000000000..7d5091ded8 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_photo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_play_arrow_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_play_arrow_white_24.png new file mode 100644 index 0000000000..be5c062b5f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_play_arrow_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_18.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_18.png new file mode 100644 index 0000000000..aed7668042 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_24.png new file mode 100644 index 0000000000..023a56e76a Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_36.png new file mode 100644 index 0000000000..1912789d2f Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_report_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_schedule_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_schedule_white_24.png new file mode 100644 index 0000000000..19390a8bd2 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_schedule_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_search_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_search_white_24.png new file mode 100644 index 0000000000..dd5adfc7f9 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_search_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_send_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_send_white_24.png new file mode 100644 index 0000000000..9dfa888c15 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_send_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png new file mode 100644 index 0000000000..58a4f9c945 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_signal_wifi_4_bar_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_swap_calls_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_swap_calls_white_36.png new file mode 100644 index 0000000000..f8470b5dc0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_swap_calls_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_undo_white_48.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_undo_white_48.png new file mode 100644 index 0000000000..6d703c6ae2 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_undo_white_48.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_off_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_off_white_24.png new file mode 100644 index 0000000000..bf37b57f9c Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_off_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_off_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_off_white_36.png new file mode 100644 index 0000000000..7a915c30db Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_off_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_18.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_18.png new file mode 100644 index 0000000000..44c28e2f28 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_18.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_24.png new file mode 100644 index 0000000000..ed20c07062 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_36.png new file mode 100644 index 0000000000..eff5923da4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_videocam_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_voicemail_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_voicemail_white_24.png new file mode 100644 index 0000000000..820ff5066b Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_voicemail_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_down_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_down_white_24.png new file mode 100644 index 0000000000..4ab55abbd1 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_down_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_grey600_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_grey600_24.png new file mode 100644 index 0000000000..429dc02df0 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_grey600_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_white_24.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_white_24.png new file mode 100644 index 0000000000..82972b4e59 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_white_24.png differ diff --git a/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_white_36.png b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_white_36.png new file mode 100644 index 0000000000..fd633b6cb4 Binary files /dev/null and b/library/external/dialpad/src/main/res/drawable-xxxhdpi-v4/quantum_ic_volume_up_white_36.png differ diff --git a/library/external/dialpad/src/main/res/drawable/btn_dialpad_key.xml b/library/external/dialpad/src/main/res/drawable/btn_dialpad_key.xml new file mode 100644 index 0000000000..10099df046 --- /dev/null +++ b/library/external/dialpad/src/main/res/drawable/btn_dialpad_key.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad.xml b/library/external/dialpad/src/main/res/layout/dialpad.xml new file mode 100644 index 0000000000..ec8450c7b5 --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad_fragment.xml b/library/external/dialpad/src/main/res/layout/dialpad_fragment.xml new file mode 100644 index 0000000000..4e9a5f330c --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad_fragment.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad_key.xml b/library/external/dialpad/src/main/res/layout/dialpad_key.xml new file mode 100644 index 0000000000..77e4fc53a6 --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad_key.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad_key_one.xml b/library/external/dialpad/src/main/res/layout/dialpad_key_one.xml new file mode 100644 index 0000000000..2ef0baa1de --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad_key_one.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad_key_pound.xml b/library/external/dialpad/src/main/res/layout/dialpad_key_pound.xml new file mode 100644 index 0000000000..d37a6aa788 --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad_key_pound.xml @@ -0,0 +1,26 @@ + + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad_key_star.xml b/library/external/dialpad/src/main/res/layout/dialpad_key_star.xml new file mode 100644 index 0000000000..d288475d01 --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad_key_star.xml @@ -0,0 +1,26 @@ + + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad_key_zero.xml b/library/external/dialpad/src/main/res/layout/dialpad_key_zero.xml new file mode 100644 index 0000000000..943ae48dd2 --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad_key_zero.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad_view.xml b/library/external/dialpad/src/main/res/layout/dialpad_view.xml new file mode 100644 index 0000000000..fb14ad0989 --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad_view.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/library/external/dialpad/src/main/res/layout/dialpad_view_unthemed.xml b/library/external/dialpad/src/main/res/layout/dialpad_view_unthemed.xml new file mode 100644 index 0000000000..1b7b78f907 --- /dev/null +++ b/library/external/dialpad/src/main/res/layout/dialpad_view_unthemed.xml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/external/dialpad/src/main/res/values-af/values-af.xml b/library/external/dialpad/src/main/res/values-af/values-af.xml new file mode 100644 index 0000000000..6a93515ac0 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-af/values-af.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Gaan terug" + "Meer opsies" + "plus" + "stemboodskap" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-am/values-am.xml b/library/external/dialpad/src/main/res/values-am/values-am.xml new file mode 100644 index 0000000000..08955ffeec --- /dev/null +++ b/library/external/dialpad/src/main/res/values-am/values-am.xml @@ -0,0 +1,8 @@ + + + "የኋሊት ደምሳሽ" + "ወደኋላ ያስሱ" + "ተጨማሪ አማራጮች" + "የመደመር ምልክት" + "የድምፅ መልዕክት" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ar/values-ar.xml b/library/external/dialpad/src/main/res/values-ar/values-ar.xml new file mode 100644 index 0000000000..e791d1e5f2 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ar/values-ar.xml @@ -0,0 +1,8 @@ + + + "مسافة للخلف" + "الرجوع" + "مزيد من الخيارات" + "علامة الجمع" + "بريد صوتي" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-az/values-az.xml b/library/external/dialpad/src/main/res/values-az/values-az.xml new file mode 100644 index 0000000000..152fdea46e --- /dev/null +++ b/library/external/dialpad/src/main/res/values-az/values-az.xml @@ -0,0 +1,8 @@ + + + "geri düyməsi" + "Geri naviqasiya edin" + "Daha çox seçim" + "plus" + "səsli məktub" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-b+sr+Latn/values-b+sr+Latn.xml b/library/external/dialpad/src/main/res/values-b+sr+Latn/values-b+sr+Latn.xml new file mode 100644 index 0000000000..4925383c9c --- /dev/null +++ b/library/external/dialpad/src/main/res/values-b+sr+Latn/values-b+sr+Latn.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Idite nazad" + "Još opcija" + "plus" + "govorna pošta" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-be/values-be.xml b/library/external/dialpad/src/main/res/values-be/values-be.xml new file mode 100644 index 0000000000..3b795ba0f6 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-be/values-be.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Перайсці назад" + "Дадатковыя параметры" + "плюс" + "галасавая пошта" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-bg/values-bg.xml b/library/external/dialpad/src/main/res/values-bg/values-bg.xml new file mode 100644 index 0000000000..aa464b870b --- /dev/null +++ b/library/external/dialpad/src/main/res/values-bg/values-bg.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Преминаване назад" + "Още опции" + "плюс" + "гласова поща" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-bn/values-bn.xml b/library/external/dialpad/src/main/res/values-bn/values-bn.xml new file mode 100644 index 0000000000..78efb7eb12 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-bn/values-bn.xml @@ -0,0 +1,8 @@ + + + "ব্যাক-স্পেস" + "পিছনে যান" + "আরো বিকল্প" + "যোগ চিহ্ন" + "ভয়েসমেল" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-bs/values-bs.xml b/library/external/dialpad/src/main/res/values-bs/values-bs.xml new file mode 100644 index 0000000000..6782138188 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-bs/values-bs.xml @@ -0,0 +1,8 @@ + + + "tipka za brisanje" + "Vrati se nazad" + "Više opcija" + "plus" + "govorna pošta" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ca/values-ca.xml b/library/external/dialpad/src/main/res/values-ca/values-ca.xml new file mode 100644 index 0000000000..b4c70bdc49 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ca/values-ca.xml @@ -0,0 +1,8 @@ + + + "retrocés" + "Torna enrere" + "Més opcions" + "més" + "missatge de veu" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-cs/values-cs.xml b/library/external/dialpad/src/main/res/values-cs/values-cs.xml new file mode 100644 index 0000000000..b9f770215c --- /dev/null +++ b/library/external/dialpad/src/main/res/values-cs/values-cs.xml @@ -0,0 +1,8 @@ + + + "Backspace" + "Přejít zpět" + "Více možností" + "plus" + "hlasová zpráva" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-da/values-da.xml b/library/external/dialpad/src/main/res/values-da/values-da.xml new file mode 100644 index 0000000000..b842e27303 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-da/values-da.xml @@ -0,0 +1,8 @@ + + + "tilbagetast" + "Naviger tilbage" + "Flere valgmuligheder" + "plus" + "telefonsvarer" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-de/values-de.xml b/library/external/dialpad/src/main/res/values-de/values-de.xml new file mode 100644 index 0000000000..7d3f7b9a77 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-de/values-de.xml @@ -0,0 +1,8 @@ + + + "Rücktaste" + "Zurück" + "Mehr Optionen" + "Plus" + "Mailboxnachricht" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-el/values-el.xml b/library/external/dialpad/src/main/res/values-el/values-el.xml new file mode 100644 index 0000000000..1998e9e464 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-el/values-el.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Μετάβαση πίσω" + "Περισσότερες επιλογές" + "συν" + "αυτόματος τηλεφωνητής" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-en-rAU/values-en-rAU.xml b/library/external/dialpad/src/main/res/values-en-rAU/values-en-rAU.xml new file mode 100644 index 0000000000..5281387a9d --- /dev/null +++ b/library/external/dialpad/src/main/res/values-en-rAU/values-en-rAU.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Navigate back" + "More options" + "plus" + "voicemail" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-en-rGB/values-en-rGB.xml b/library/external/dialpad/src/main/res/values-en-rGB/values-en-rGB.xml new file mode 100644 index 0000000000..5281387a9d --- /dev/null +++ b/library/external/dialpad/src/main/res/values-en-rGB/values-en-rGB.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Navigate back" + "More options" + "plus" + "voicemail" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-en-rIN/values-en-rIN.xml b/library/external/dialpad/src/main/res/values-en-rIN/values-en-rIN.xml new file mode 100644 index 0000000000..5281387a9d --- /dev/null +++ b/library/external/dialpad/src/main/res/values-en-rIN/values-en-rIN.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Navigate back" + "More options" + "plus" + "voicemail" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-es-rUS/values-es-rUS.xml b/library/external/dialpad/src/main/res/values-es-rUS/values-es-rUS.xml new file mode 100644 index 0000000000..0eda697d16 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-es-rUS/values-es-rUS.xml @@ -0,0 +1,8 @@ + + + "retroceso" + "Volver" + "Más opciones" + "más" + "buzón de voz" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-es/values-es.xml b/library/external/dialpad/src/main/res/values-es/values-es.xml new file mode 100644 index 0000000000..3386a4e7e9 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-es/values-es.xml @@ -0,0 +1,8 @@ + + + "retroceso" + "Volver" + "Más opciones" + "más" + "mensaje de voz" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-et/values-et.xml b/library/external/dialpad/src/main/res/values-et/values-et.xml new file mode 100644 index 0000000000..05499ef49f --- /dev/null +++ b/library/external/dialpad/src/main/res/values-et/values-et.xml @@ -0,0 +1,8 @@ + + + "tagasilüke" + "Tagasi navigeerimine" + "Rohkem valikuid" + "pluss" + "kõnepostisõnum" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-eu/values-eu.xml b/library/external/dialpad/src/main/res/values-eu/values-eu.xml new file mode 100644 index 0000000000..788a168eb6 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-eu/values-eu.xml @@ -0,0 +1,8 @@ + + + "atzera tekla" + "Egin atzera" + "Aukera gehiago" + "gehi" + "erantzungailua" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-fa/values-fa.xml b/library/external/dialpad/src/main/res/values-fa/values-fa.xml new file mode 100644 index 0000000000..e28807f063 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-fa/values-fa.xml @@ -0,0 +1,8 @@ + + + "برگشت به عقب" + "پیمایش به عقب" + "گزینه‌های بیشتر" + "به‌علاوه" + "پست صوتی" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-fi/values-fi.xml b/library/external/dialpad/src/main/res/values-fi/values-fi.xml new file mode 100644 index 0000000000..30ec4d5c8c --- /dev/null +++ b/library/external/dialpad/src/main/res/values-fi/values-fi.xml @@ -0,0 +1,8 @@ + + + "askelpalautin" + "Siirry takaisin" + "Lisää vaihtoehtoja" + "plus" + "ääniviesti" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-fr-rCA/values-fr-rCA.xml b/library/external/dialpad/src/main/res/values-fr-rCA/values-fr-rCA.xml new file mode 100644 index 0000000000..e2dc9e4527 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-fr-rCA/values-fr-rCA.xml @@ -0,0 +1,8 @@ + + + "retour arrière" + "Naviguer vers l\'arrière" + "Plus d\'options" + "plus" + "messagerie vocale" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-fr/values-fr.xml b/library/external/dialpad/src/main/res/values-fr/values-fr.xml new file mode 100644 index 0000000000..265b089baf --- /dev/null +++ b/library/external/dialpad/src/main/res/values-fr/values-fr.xml @@ -0,0 +1,8 @@ + + + "retour arrière" + "Revenir en arrière" + "Plus d\'options" + "plus" + "message vocal" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-gl/values-gl.xml b/library/external/dialpad/src/main/res/values-gl/values-gl.xml new file mode 100644 index 0000000000..932feba9df --- /dev/null +++ b/library/external/dialpad/src/main/res/values-gl/values-gl.xml @@ -0,0 +1,8 @@ + + + "retroceso" + "Volver á vista anterior" + "Máis opcións" + "máis" + "correo de voz" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-gu/values-gu.xml b/library/external/dialpad/src/main/res/values-gu/values-gu.xml new file mode 100644 index 0000000000..78997a8be6 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-gu/values-gu.xml @@ -0,0 +1,8 @@ + + + "backspace" + "પાછળ નૅવિગેટ કરો" + "વધુ વિકલ્પો" + "પ્લસ" + "વૉઇસમેઇલ" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-hi/values-hi.xml b/library/external/dialpad/src/main/res/values-hi/values-hi.xml new file mode 100644 index 0000000000..cc10b134ee --- /dev/null +++ b/library/external/dialpad/src/main/res/values-hi/values-hi.xml @@ -0,0 +1,8 @@ + + + "backspace" + "वापस नेविगेट करें" + "अधिक विकल्प" + "धन का चिह्न" + "वॉइसमेल" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-hr/values-hr.xml b/library/external/dialpad/src/main/res/values-hr/values-hr.xml new file mode 100644 index 0000000000..19f1922c5f --- /dev/null +++ b/library/external/dialpad/src/main/res/values-hr/values-hr.xml @@ -0,0 +1,8 @@ + + + "povratna tipka" + "Kretanje natrag" + "Više opcija" + "plus" + "govorna pošta" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-hu/values-hu.xml b/library/external/dialpad/src/main/res/values-hu/values-hu.xml new file mode 100644 index 0000000000..4aa7a3943d --- /dev/null +++ b/library/external/dialpad/src/main/res/values-hu/values-hu.xml @@ -0,0 +1,8 @@ + + + "Backspace" + "Vissza" + "További beállítások" + "plusz" + "hangposta" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-hy/values-hy.xml b/library/external/dialpad/src/main/res/values-hy/values-hy.xml new file mode 100644 index 0000000000..0c13c0e156 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-hy/values-hy.xml @@ -0,0 +1,8 @@ + + + "հետշարժ" + "Հետ գնալ" + "Այլ ընտրանքներ" + "գումարում" + "ձայնային փոստ" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-in/values-in.xml b/library/external/dialpad/src/main/res/values-in/values-in.xml new file mode 100644 index 0000000000..9384f9c220 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-in/values-in.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Tombol kembali" + "Opsi lainnya" + "tambah" + "pesan suara" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-is/values-is.xml b/library/external/dialpad/src/main/res/values-is/values-is.xml new file mode 100644 index 0000000000..bbf02c8e91 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-is/values-is.xml @@ -0,0 +1,8 @@ + + + "bakklykill" + "Fara til baka" + "Fleiri valkostir" + "plús" + "talhólfsskilaboð" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-it/values-it.xml b/library/external/dialpad/src/main/res/values-it/values-it.xml new file mode 100644 index 0000000000..563975ce15 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-it/values-it.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Torna indietro" + "Altre opzioni" + "più" + "messaggio vocale" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-iw/values-iw.xml b/library/external/dialpad/src/main/res/values-iw/values-iw.xml new file mode 100644 index 0000000000..34493a8ac6 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-iw/values-iw.xml @@ -0,0 +1,8 @@ + + + "Backspace" + "ניווט חזרה" + "אפשרויות נוספות" + "פלוס" + "דואר קולי" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ja/values-ja.xml b/library/external/dialpad/src/main/res/values-ja/values-ja.xml new file mode 100644 index 0000000000..b8c17100c2 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ja/values-ja.xml @@ -0,0 +1,8 @@ + + + "Backspace" + "戻る" + "その他のオプション" + "足す" + "ボイスメール" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ka/values-ka.xml b/library/external/dialpad/src/main/res/values-ka/values-ka.xml new file mode 100644 index 0000000000..2613d048a4 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ka/values-ka.xml @@ -0,0 +1,8 @@ + + + "უკუშლა" + "უკან დაბრუნება" + "სხვა პარამეტრები" + "პლუსი" + "ხმოვანი ფოსტა" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-kk/values-kk.xml b/library/external/dialpad/src/main/res/values-kk/values-kk.xml new file mode 100644 index 0000000000..65015a6e66 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-kk/values-kk.xml @@ -0,0 +1,8 @@ + + + "Backspace пернесі" + "Артқа қайту" + "Басқа опциялар" + "қосу" + "дауыстық пошта" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-km/values-km.xml b/library/external/dialpad/src/main/res/values-km/values-km.xml new file mode 100644 index 0000000000..bb4754c842 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-km/values-km.xml @@ -0,0 +1,8 @@ + + + "លុប​ថយក្រោយ" + "រក​មើលថយ​ក្រោយ​វិញ" + "ជម្រើស​បន្ថែម" + "plus" + "សារ​ជា​សំឡេង" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-kn/values-kn.xml b/library/external/dialpad/src/main/res/values-kn/values-kn.xml new file mode 100644 index 0000000000..e49a0633bc --- /dev/null +++ b/library/external/dialpad/src/main/res/values-kn/values-kn.xml @@ -0,0 +1,8 @@ + + + "backspace" + "ಹಿಂದಕ್ಕೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡು" + "ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು" + "ಸಂಕಲನ" + "ಧ್ವನಿಮೇಲ್" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ko/values-ko.xml b/library/external/dialpad/src/main/res/values-ko/values-ko.xml new file mode 100644 index 0000000000..f9ebed349a --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ko/values-ko.xml @@ -0,0 +1,8 @@ + + + "백스페이스" + "뒤로 이동" + "옵션 더보기" + "더하기" + "음성사서함" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ky/values-ky.xml b/library/external/dialpad/src/main/res/values-ky/values-ky.xml new file mode 100644 index 0000000000..a894cd7cf2 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ky/values-ky.xml @@ -0,0 +1,8 @@ + + + "артка карай өчүрүү" + "Артка кайтуу" + "Көбүрөөк мүмкүнчүлүктөр" + "кошуу" + "үн почтасы" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-land/values-land.xml b/library/external/dialpad/src/main/res/values-land/values-land.xml new file mode 100644 index 0000000000..364bf95f05 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-land/values-land.xml @@ -0,0 +1,25 @@ + + + 65dp + 5dp + 20sp + 3dp + 35dp + 0dp + + + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-lo/values-lo.xml b/library/external/dialpad/src/main/res/values-lo/values-lo.xml new file mode 100644 index 0000000000..e73d68cc95 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-lo/values-lo.xml @@ -0,0 +1,8 @@ + + + "ປຸ່ມ backspace" + "ນຳທາງກັບຄືນ" + "ໂຕເລືອກເພີ່ມເຕີມ" + "ບວກ" + "ຂໍ້ຄວາມສຽງ" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-lt/values-lt.xml b/library/external/dialpad/src/main/res/values-lt/values-lt.xml new file mode 100644 index 0000000000..858ca29dc9 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-lt/values-lt.xml @@ -0,0 +1,8 @@ + + + "naikinimo klavišas" + "Eiti atgal" + "Daugiau parinkčių" + "sudėties ženklas" + "balso pašto pranešimas" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-lv/values-lv.xml b/library/external/dialpad/src/main/res/values-lv/values-lv.xml new file mode 100644 index 0000000000..70a59dc3b5 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-lv/values-lv.xml @@ -0,0 +1,8 @@ + + + "atpakaļatkāpe" + "Pāriet atpakaļ" + "Vairāk opciju" + "pluszīme" + "balss pasts" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-mk/values-mk.xml b/library/external/dialpad/src/main/res/values-mk/values-mk.xml new file mode 100644 index 0000000000..0f958f19a0 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-mk/values-mk.xml @@ -0,0 +1,8 @@ + + + "избриши" + "Оди назад" + "Повеќе опции" + "плус" + "говорна пошта" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ml/values-ml.xml b/library/external/dialpad/src/main/res/values-ml/values-ml.xml new file mode 100644 index 0000000000..43dbec3911 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ml/values-ml.xml @@ -0,0 +1,8 @@ + + + "ബാക്ക്‌സ്‌പെയ്‌സ്" + "തിരികെ പോകുക" + "കൂടുതൽ‍ ഓപ്‌ഷനുകള്‍" + "പ്ലസ്" + "വോയ്‌സ്‌മെയിൽ" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-mn/values-mn.xml b/library/external/dialpad/src/main/res/values-mn/values-mn.xml new file mode 100644 index 0000000000..86e965baf5 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-mn/values-mn.xml @@ -0,0 +1,8 @@ + + + "ухраах" + "Буцах" + "Нэмэлт сонголтууд" + "нэмэх" + "дуут шуудан" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-mr/values-mr.xml b/library/external/dialpad/src/main/res/values-mr/values-mr.xml new file mode 100644 index 0000000000..385a98df01 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-mr/values-mr.xml @@ -0,0 +1,8 @@ + + + "backspace" + "मागे नेव्हिगेट करा" + "अधिक पर्याय" + "अधिक" + "व्हॉइसमेल" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ms/values-ms.xml b/library/external/dialpad/src/main/res/values-ms/values-ms.xml new file mode 100644 index 0000000000..a41274606d --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ms/values-ms.xml @@ -0,0 +1,8 @@ + + + "undur ruang" + "Navigasi kembali" + "Lagi pilihan" + "tambah" + "mel suara" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-my/values-my.xml b/library/external/dialpad/src/main/res/values-my/values-my.xml new file mode 100644 index 0000000000..7e1ff4231c --- /dev/null +++ b/library/external/dialpad/src/main/res/values-my/values-my.xml @@ -0,0 +1,8 @@ + + + "နောက်ပြန်ဖျက်ခလုတ်" + "အနောက်သို့ ပြန်သွားပါ" + "ပိုမိုရွေးချယ်စရာများ" + "အပေါင်း လက္ခဏာ" + "အသံမေးလ်" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-nb/values-nb.xml b/library/external/dialpad/src/main/res/values-nb/values-nb.xml new file mode 100644 index 0000000000..cd08c3b339 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-nb/values-nb.xml @@ -0,0 +1,8 @@ + + + "tilbaketast" + "Gå tilbake" + "Flere alternativer" + "pluss" + "talepost" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ne/values-ne.xml b/library/external/dialpad/src/main/res/values-ne/values-ne.xml new file mode 100644 index 0000000000..28ec947b80 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ne/values-ne.xml @@ -0,0 +1,8 @@ + + + "ब्याकस्पेस" + "पछाडि नेभिगेट गर्नुहोस्" + "थप विकल्पहरू" + "जोड" + "भ्वाइसमेल" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-nl/values-nl.xml b/library/external/dialpad/src/main/res/values-nl/values-nl.xml new file mode 100644 index 0000000000..6e3badad9d --- /dev/null +++ b/library/external/dialpad/src/main/res/values-nl/values-nl.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Terug navigeren" + "Meer opties" + "plus" + "voicemail" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-no/values-no.xml b/library/external/dialpad/src/main/res/values-no/values-no.xml new file mode 100644 index 0000000000..cd08c3b339 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-no/values-no.xml @@ -0,0 +1,8 @@ + + + "tilbaketast" + "Gå tilbake" + "Flere alternativer" + "pluss" + "talepost" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-pa/values-pa.xml b/library/external/dialpad/src/main/res/values-pa/values-pa.xml new file mode 100644 index 0000000000..add9e7a3bd --- /dev/null +++ b/library/external/dialpad/src/main/res/values-pa/values-pa.xml @@ -0,0 +1,8 @@ + + + "ਬੈਕਸਪੇਸ" + "ਪਿੱਛੇ ਆਵਾਗੌਣ ਕਰੋ" + "ਹੋਰ ਚੋਣਾਂ" + "ਪਲਸ" + "ਵੌਇਸਮੇਲ" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-pl/values-pl.xml b/library/external/dialpad/src/main/res/values-pl/values-pl.xml new file mode 100644 index 0000000000..94c00bb06a --- /dev/null +++ b/library/external/dialpad/src/main/res/values-pl/values-pl.xml @@ -0,0 +1,8 @@ + + + "usuń" + "Wstecz" + "Więcej opcji" + "plus" + "poczta głosowa" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-pt-rBR/values-pt-rBR.xml b/library/external/dialpad/src/main/res/values-pt-rBR/values-pt-rBR.xml new file mode 100644 index 0000000000..49ae0d6428 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-pt-rBR/values-pt-rBR.xml @@ -0,0 +1,8 @@ + + + "voltar" + "Voltar" + "Mais opções" + "mais" + "correio de voz" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-pt-rPT/values-pt-rPT.xml b/library/external/dialpad/src/main/res/values-pt-rPT/values-pt-rPT.xml new file mode 100644 index 0000000000..5d42ca8b61 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-pt-rPT/values-pt-rPT.xml @@ -0,0 +1,8 @@ + + + "retrocesso" + "Navegar para trás" + "Mais opções" + "mais" + "mensagem de correio de voz" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-pt/values-pt.xml b/library/external/dialpad/src/main/res/values-pt/values-pt.xml new file mode 100644 index 0000000000..49ae0d6428 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-pt/values-pt.xml @@ -0,0 +1,8 @@ + + + "voltar" + "Voltar" + "Mais opções" + "mais" + "correio de voz" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ro/values-ro.xml b/library/external/dialpad/src/main/res/values-ro/values-ro.xml new file mode 100644 index 0000000000..34f7e9fe03 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ro/values-ro.xml @@ -0,0 +1,8 @@ + + + "tasta backspace" + "Navigați înapoi" + "Mai multe opțiuni" + "plus" + "mesaj vocal" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ru/values-ru.xml b/library/external/dialpad/src/main/res/values-ru/values-ru.xml new file mode 100644 index 0000000000..261fdf0ee6 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ru/values-ru.xml @@ -0,0 +1,8 @@ + + + "клавиша Backspace" + "Вернуться" + "Ещё" + "плюс" + "голосовая почта" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-si/values-si.xml b/library/external/dialpad/src/main/res/values-si/values-si.xml new file mode 100644 index 0000000000..09a999100f --- /dev/null +++ b/library/external/dialpad/src/main/res/values-si/values-si.xml @@ -0,0 +1,8 @@ + + + "backspace බොත්තම" + "ආපසු සංචාලනය කරන්න" + "තවත් විකල්ප" + "ධන" + "හඬ තැපෑල" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-sk/values-sk.xml b/library/external/dialpad/src/main/res/values-sk/values-sk.xml new file mode 100644 index 0000000000..6b8990a941 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-sk/values-sk.xml @@ -0,0 +1,8 @@ + + + "spätné mazanie" + "Prejsť späť" + "Ďalšie možnosti" + "plus" + "hlasová správa" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-sl/values-sl.xml b/library/external/dialpad/src/main/res/values-sl/values-sl.xml new file mode 100644 index 0000000000..2abde10f12 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-sl/values-sl.xml @@ -0,0 +1,8 @@ + + + "vračalka" + "Pomik nazaj" + "Več možnosti" + "plus" + "sporočilo v odzivniku" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-sq/values-sq.xml b/library/external/dialpad/src/main/res/values-sq/values-sq.xml new file mode 100644 index 0000000000..22400298fb --- /dev/null +++ b/library/external/dialpad/src/main/res/values-sq/values-sq.xml @@ -0,0 +1,8 @@ + + + "kthim prapa" + "Kthehu prapa" + "Opsione të tjera" + "plus" + "postë zanore" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-sr/values-sr.xml b/library/external/dialpad/src/main/res/values-sr/values-sr.xml new file mode 100644 index 0000000000..6f1beb2900 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-sr/values-sr.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Идите назад" + "Још опција" + "плус" + "говорна пошта" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-sv/values-sv.xml b/library/external/dialpad/src/main/res/values-sv/values-sv.xml new file mode 100644 index 0000000000..25de9491a7 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-sv/values-sv.xml @@ -0,0 +1,8 @@ + + + "backsteg" + "Tillbaka" + "Fler alternativ" + "plus" + "röstbrevlåda" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-sw/values-sw.xml b/library/external/dialpad/src/main/res/values-sw/values-sw.xml new file mode 100644 index 0000000000..e4273eca9a --- /dev/null +++ b/library/external/dialpad/src/main/res/values-sw/values-sw.xml @@ -0,0 +1,8 @@ + + + "nafasi ya nyuma" + "Rudi nyuma" + "Chaguo zaidi" + "jumlisha" + "ujumbe wa sauti" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ta/values-ta.xml b/library/external/dialpad/src/main/res/values-ta/values-ta.xml new file mode 100644 index 0000000000..1412f6ae92 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ta/values-ta.xml @@ -0,0 +1,8 @@ + + + "பேக்ஸ்பேஸ்" + "பின் செல்லும்" + "மேலும் விருப்பங்கள்" + "பிளஸ்" + "குரலஞ்சல்" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-te/values-te.xml b/library/external/dialpad/src/main/res/values-te/values-te.xml new file mode 100644 index 0000000000..ad60e2fd31 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-te/values-te.xml @@ -0,0 +1,8 @@ + + + "బ్యాక్‌స్పేస్" + "వెనుకకు నావిగేట్ చేస్తుంది" + "మరిన్ని ఎంపికలు" + "కూడిక" + "వాయిస్ మెయిల్" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-th/values-th.xml b/library/external/dialpad/src/main/res/values-th/values-th.xml new file mode 100644 index 0000000000..a9240af28a --- /dev/null +++ b/library/external/dialpad/src/main/res/values-th/values-th.xml @@ -0,0 +1,8 @@ + + + "ลบถอยหลัง" + "ย้อนกลับ" + "ตัวเลือกเพิ่มเติม" + "บวก" + "ข้อความเสียง" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-tl/values-tl.xml b/library/external/dialpad/src/main/res/values-tl/values-tl.xml new file mode 100644 index 0000000000..f5ec293cc3 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-tl/values-tl.xml @@ -0,0 +1,8 @@ + + + "backspace" + "Nagna-navigate pabalik" + "Higit pang mga pagpipilian" + "plus" + "voicemail" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-tr/values-tr.xml b/library/external/dialpad/src/main/res/values-tr/values-tr.xml new file mode 100644 index 0000000000..6006ed5857 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-tr/values-tr.xml @@ -0,0 +1,8 @@ + + + "geri tuşu" + "Geri dön" + "Diğer seçenekler" + "artı" + "sesli mesaj" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-uk/values-uk.xml b/library/external/dialpad/src/main/res/values-uk/values-uk.xml new file mode 100644 index 0000000000..0d235facdf --- /dev/null +++ b/library/external/dialpad/src/main/res/values-uk/values-uk.xml @@ -0,0 +1,8 @@ + + + "видалення символів перед курсором" + "Назад" + "Інші варіанти" + "плюс" + "голосова пошта" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-ur/values-ur.xml b/library/external/dialpad/src/main/res/values-ur/values-ur.xml new file mode 100644 index 0000000000..721322d66d --- /dev/null +++ b/library/external/dialpad/src/main/res/values-ur/values-ur.xml @@ -0,0 +1,8 @@ + + + "بیک اسپیس" + "پیچھے کو نیویگیٹ کریں" + "مزید اختیارات" + "جمع" + "صوتی میل" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-uz/values-uz.xml b/library/external/dialpad/src/main/res/values-uz/values-uz.xml new file mode 100644 index 0000000000..74e39230ef --- /dev/null +++ b/library/external/dialpad/src/main/res/values-uz/values-uz.xml @@ -0,0 +1,8 @@ + + + "orqaga" + "Orqaga qaytish" + "Boshqa parametrlar" + "qo‘shuv belgisi" + "ovozli pochta" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-vi/values-vi.xml b/library/external/dialpad/src/main/res/values-vi/values-vi.xml new file mode 100644 index 0000000000..cc83289497 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-vi/values-vi.xml @@ -0,0 +1,8 @@ + + + "phím lùi" + "Điều hướng trở lại" + "Tùy chọn khác" + "cộng" + "thư thoại" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-zh-rCN/values-zh-rCN.xml b/library/external/dialpad/src/main/res/values-zh-rCN/values-zh-rCN.xml new file mode 100644 index 0000000000..95bc2d1160 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-zh-rCN/values-zh-rCN.xml @@ -0,0 +1,8 @@ + + + "删除" + "返回" + "更多选项" + "加号" + "语音邮件" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-zh-rHK/values-zh-rHK.xml b/library/external/dialpad/src/main/res/values-zh-rHK/values-zh-rHK.xml new file mode 100644 index 0000000000..6631ffe940 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-zh-rHK/values-zh-rHK.xml @@ -0,0 +1,8 @@ + + + "退格鍵" + "返回" + "更多選項" + "加號" + "留言" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-zh-rTW/values-zh-rTW.xml b/library/external/dialpad/src/main/res/values-zh-rTW/values-zh-rTW.xml new file mode 100644 index 0000000000..bb486569a0 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-zh-rTW/values-zh-rTW.xml @@ -0,0 +1,8 @@ + + + "Backspace 鍵" + "返回" + "更多選項" + "加號" + "語音留言" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values-zu/values-zu.xml b/library/external/dialpad/src/main/res/values-zu/values-zu.xml new file mode 100644 index 0000000000..023f3aec62 --- /dev/null +++ b/library/external/dialpad/src/main/res/values-zu/values-zu.xml @@ -0,0 +1,8 @@ + + + "i-backspace" + "Zulazula uye emuva" + "Izinketho eziningi" + "hlanganisa" + "ivoyisimeyili" + \ No newline at end of file diff --git a/library/external/dialpad/src/main/res/values/values.xml b/library/external/dialpad/src/main/res/values/values.xml new file mode 100644 index 0000000000..71d9b27cef --- /dev/null +++ b/library/external/dialpad/src/main/res/values/values.xml @@ -0,0 +1,121 @@ + + + + #fcfcfc + #ececec + #333 + #89000000 + #10000000 + #737373 + #dadada + #919191 + + 80dp + 2dp + 3dp + 60dp + 8dp + 10dp + 16dp + 24sp + 34sp + 5dp + 100dp + 64dp + 12sp + 3dp + 36sp + 18sp + 23sp + 36sp + 8dp + 14dp + 8dp + 13dp + 2dp + 1dp + 10dp + 400 + 400 + backspace + Navigate back + More options + plus + voicemail + + + + ABC + DEF + GHI + JKL + MNO + PQRS + TUV + WXYZ + + # + + * + + + + + + + + + \ No newline at end of file diff --git a/library/diff-match-patch/.gitignore b/library/external/diff-match-patch/.gitignore similarity index 100% rename from library/diff-match-patch/.gitignore rename to library/external/diff-match-patch/.gitignore diff --git a/library/diff-match-patch/build.gradle b/library/external/diff-match-patch/build.gradle similarity index 100% rename from library/diff-match-patch/build.gradle rename to library/external/diff-match-patch/build.gradle diff --git a/library/diff-match-patch/src/main/java/name/fraser/neil/plaintext/diff_match_patch.java b/library/external/diff-match-patch/src/main/java/name/fraser/neil/plaintext/diff_match_patch.java similarity index 100% rename from library/diff-match-patch/src/main/java/name/fraser/neil/plaintext/diff_match_patch.java rename to library/external/diff-match-patch/src/main/java/name/fraser/neil/plaintext/diff_match_patch.java diff --git a/library/jsonviewer/.gitignore b/library/external/jsonviewer/.gitignore similarity index 100% rename from library/jsonviewer/.gitignore rename to library/external/jsonviewer/.gitignore diff --git a/library/jsonviewer/build.gradle b/library/external/jsonviewer/build.gradle similarity index 97% rename from library/jsonviewer/build.gradle rename to library/external/jsonviewer/build.gradle index fcad3f1087..4e8dc99654 100644 --- a/library/jsonviewer/build.gradle +++ b/library/external/jsonviewer/build.gradle @@ -62,7 +62,7 @@ dependencies { implementation libs.jetbrains.coroutinesCore implementation libs.jetbrains.coroutinesAndroid - testImplementation 'org.json:json:20220320' + testImplementation 'org.json:json:20220924' testImplementation libs.tests.junit androidTestImplementation libs.androidx.junit androidTestImplementation libs.androidx.espressoCore diff --git a/library/jsonviewer/src/main/AndroidManifest.xml b/library/external/jsonviewer/src/main/AndroidManifest.xml similarity index 100% rename from library/jsonviewer/src/main/AndroidManifest.xml rename to library/external/jsonviewer/src/main/AndroidManifest.xml diff --git a/library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerDialog.kt b/library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerDialog.kt similarity index 100% rename from library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerDialog.kt rename to library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerDialog.kt diff --git a/library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerEpoxyController.kt b/library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerEpoxyController.kt similarity index 100% rename from library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerEpoxyController.kt rename to library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerEpoxyController.kt diff --git a/library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerFragment.kt b/library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerFragment.kt similarity index 100% rename from library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerFragment.kt rename to library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerFragment.kt diff --git a/library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerModel.kt b/library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerModel.kt similarity index 100% rename from library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerModel.kt rename to library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerModel.kt diff --git a/library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerStyleProvider.kt b/library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerStyleProvider.kt similarity index 100% rename from library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerStyleProvider.kt rename to library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerStyleProvider.kt diff --git a/library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerViewModel.kt b/library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerViewModel.kt similarity index 100% rename from library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerViewModel.kt rename to library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/JSonViewerViewModel.kt diff --git a/library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/Utils.kt b/library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/Utils.kt similarity index 100% rename from library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/Utils.kt rename to library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/Utils.kt diff --git a/library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/ValueItem.kt b/library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/ValueItem.kt similarity index 100% rename from library/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/ValueItem.kt rename to library/external/jsonviewer/src/main/java/org/billcarsonfr/jsonviewer/ValueItem.kt diff --git a/library/jsonviewer/src/main/res/layout/fragment_dialog_jv.xml b/library/external/jsonviewer/src/main/res/layout/fragment_dialog_jv.xml similarity index 100% rename from library/jsonviewer/src/main/res/layout/fragment_dialog_jv.xml rename to library/external/jsonviewer/src/main/res/layout/fragment_dialog_jv.xml diff --git a/library/jsonviewer/src/main/res/layout/fragment_jv_recycler_view.xml b/library/external/jsonviewer/src/main/res/layout/fragment_jv_recycler_view.xml similarity index 100% rename from library/jsonviewer/src/main/res/layout/fragment_jv_recycler_view.xml rename to library/external/jsonviewer/src/main/res/layout/fragment_jv_recycler_view.xml diff --git a/library/jsonviewer/src/main/res/layout/fragment_jv_recycler_view_wrap.xml b/library/external/jsonviewer/src/main/res/layout/fragment_jv_recycler_view_wrap.xml similarity index 100% rename from library/jsonviewer/src/main/res/layout/fragment_jv_recycler_view_wrap.xml rename to library/external/jsonviewer/src/main/res/layout/fragment_jv_recycler_view_wrap.xml diff --git a/library/jsonviewer/src/main/res/layout/item_jv_base_value.xml b/library/external/jsonviewer/src/main/res/layout/item_jv_base_value.xml similarity index 100% rename from library/jsonviewer/src/main/res/layout/item_jv_base_value.xml rename to library/external/jsonviewer/src/main/res/layout/item_jv_base_value.xml diff --git a/library/jsonviewer/src/main/res/values/colors.xml b/library/external/jsonviewer/src/main/res/values/colors.xml similarity index 100% rename from library/jsonviewer/src/main/res/values/colors.xml rename to library/external/jsonviewer/src/main/res/values/colors.xml diff --git a/library/jsonviewer/src/main/res/values/strings.xml b/library/external/jsonviewer/src/main/res/values/strings.xml similarity index 100% rename from library/jsonviewer/src/main/res/values/strings.xml rename to library/external/jsonviewer/src/main/res/values/strings.xml diff --git a/library/jsonviewer/src/test/java/org/billcarsonfr/jsonviewer/ModelParseTest.kt b/library/external/jsonviewer/src/test/java/org/billcarsonfr/jsonviewer/ModelParseTest.kt similarity index 100% rename from library/jsonviewer/src/test/java/org/billcarsonfr/jsonviewer/ModelParseTest.kt rename to library/external/jsonviewer/src/test/java/org/billcarsonfr/jsonviewer/ModelParseTest.kt diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml index 992ab1c38c..4ff7aae750 100644 --- a/library/ui-strings/src/main/res/values/strings.xml +++ b/library/ui-strings/src/main/res/values/strings.xml @@ -1404,6 +1404,7 @@ Changes your avatar in this current room only On/Off markdown To fix Matrix Apps management + Open the developer tools screen Displays information about a user Markdown has been enabled. @@ -2219,6 +2220,7 @@ Prepends ¯\\_(ツ)_/¯ to a plain-text message Prepends ( ͡° ͜ʖ ͡°) to a plain-text message + Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message "Enable encryption" "Once enabled, encryption cannot be disabled." @@ -3244,6 +3246,7 @@ Verified · Last activity %1$s Unverified · Last activity %1$s + Unverified · Your current session Inactive for %1$d+ day (%2$s) @@ -3288,12 +3291,17 @@ No unverified sessions found. No inactive sessions found. Clear Filter + Sign out of this session Session details Application, device, and activity information. Session name Session ID Last activity IP address + Rename session + Session name + Custom session names can help you recognize your devices more easily. + Please be aware that session names are also visible to people you communicate with. %s\nis looking a little empty. diff --git a/library/ui-styles/build.gradle b/library/ui-styles/build.gradle index c85f26dbc4..ee5771d995 100644 --- a/library/ui-styles/build.gradle +++ b/library/ui-styles/build.gradle @@ -58,5 +58,5 @@ dependencies { // Pref theme implementation libs.androidx.preferenceKtx // dialpad dimen - implementation 'im.dlg:android-dialer:1.2.5' + implementation project(":library:external:dialpad") } diff --git a/library/ui-styles/src/debug/res/menu/menu_debug.xml b/library/ui-styles/src/debug/res/menu/menu_debug.xml index c58a29db8f..ac98ce8e2c 100644 --- a/library/ui-styles/src/debug/res/menu/menu_debug.xml +++ b/library/ui-styles/src/debug/res/menu/menu_debug.xml @@ -14,6 +14,7 @@ android:id="@+id/menuDebug2" android:icon="@drawable/ic_debug_icon" android:title="Send" - app:showAsAction="always" /> + app:showAsAction="always" + tools:ignore="AlwaysShowAction" /> - \ No newline at end of file + diff --git a/library/ui-styles/src/main/res/values/stylable_session_warning_info_view.xml b/library/ui-styles/src/main/res/values/stylable_session_warning_info_view.xml new file mode 100644 index 0000000000..6236b31f46 --- /dev/null +++ b/library/ui-styles/src/main/res/values/stylable_session_warning_info_view.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/library/ui-styles/src/main/res/values/styles_buttons.xml b/library/ui-styles/src/main/res/values/styles_buttons.xml index 702f427cc0..db78fcf338 100644 --- a/library/ui-styles/src/main/res/values/styles_buttons.xml +++ b/library/ui-styles/src/main/res/values/styles_buttons.xml @@ -41,6 +41,10 @@ 24sp + +