Repository for the dgca verifier android app.

Overview

EU Digital COVID Certificate Verifier App - Android

AboutDevelopmentDocumentationSupportContributeContributorsLicensing

About

This repository contains the source code of the EU Digital COVID Certificate Verifier App for Android.

The DGC Verifier Apps are responsible for scanning and verifying DGCs using public keys from national backend servers. Offline verification is supported, if the latest public keys are present in the app's key store. Consequently, once up-to-date keys have been downloaded, the verification works without active internet connection.

Development

Prerequisites

  • For development, the latest version of Android Studio is required. The latest version can be downloaded from here.
  • Android SDK version 26+

Build

Whether you cloned or downloaded the 'zipped' sources you will either find the sources in the chosen checkout-directory or get a zip file with the source code, which you can expand to a folder of your choice.

In order to successfully build and run the project, you must have also downloaded the corresponding core repository from here. Both projects should be at the same folder level as eachother which would look something like

android-app
|___dgca-verifier-app-android
|___dgca-app-core-android

Android Studio based build

This project uses the Gradle build system. To build this project, use the gradlew build command or use "Run" in Android Studio.

Documentation

  • TODO: Link to documentation

Support and feedback

The following channels are available for discussions, feedback, and support requests:

Type Channel
Issues
Other requests

How to contribute

Contribution and feedback is encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our Contribution Guidelines. By participating in this project, you agree to abide by its Code of Conduct at all times.

Contributors

Our commitment to open source means that we are enabling -in fact encouraging- all interested parties to contribute and become part of its developer community.

Licensing

Copyright (C) 2021 T-Systems International GmbH and all other contributors

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 https://www.apache.org/licenses/LICENSE-2.0.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, 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.

Comments
  • Certificate Verification Fails

    Certificate Verification Fails

    Describe the bug

    I am generating the QR Code using the WEB frontend template application. Upon scanning the QR Code with the Verifier App, I am consistently getting an error "Verification failed: failed to load certificate"

    Expected behaviour

    Verification should be successfull.

    Steps to reproduce the issue

    1. Installed DGC Issuer Service, DGC Verifier Service.
    2. Uploaded all required certificates, including the signed DSC and configured them accordingly in the services layer.
    3. Modified the BASE_URL in the Android application : File: NetworkModule.kt as to point to my verifier service
    4. Compiled and run on Android
    5. Scan the QR Code as generated by the Web Frontend Template application
    6. Displays invalid on screen, and Android Studio Logs shows D/VerificationViewModel$decode: Verification failed: failed to load certificate

    Upon some debugging, I have found a discrepancy which might/might not be the cause of the invalid result.

    In the file: VerificationViewModel.kt

    Notice the 2 bold Debug Lines I've added.

                    schemaValidator.validate(coseData.cbor, verificationResult)
                    greenCertificate = cborService.decode(coseData.cbor, verificationResult)
                    **Timber.d("DEBUG Verification Result: %s", verificationResult)**
                    val certificate = verifierRepository.getCertificate(kid.toBase64())
                    **Timber.d("DEBUG KID: %s" ,kid.toBase64())**
                    if (certificate == null) {
                        Timber.d("Verification failed: failed to load certificate")
                        return@withContext
                    }
    

    and their output:

    D/VerificationViewModel$decode: DEBUG Verification Result: VerificationResult: 
        base45Decoded: true 
        valSuitePrefix: HC1: 
        zlibDecoded: true 
        coseVerified: false 
        cborDecoded: true 
        isSchemaValid: true
    

    D/VerificationViewModel$decode: DEBUG KID: 2Ga7nn3--CU=

    Firstly, notice that coseVerified = false , Looking into the android core library, file: DefaultCoseSerivce.kt, I noticed that the verificationResult.Verified is hard coded to false, without any opporunity to set it to true within the decode function

        override fun decode(input: ByteArray, verificationResult: VerificationResult): CoseData? {
            **verificationResult.coseVerified = false**
            return try {
                val messageObject = CBORObject.DecodeFromBytes(input)
                val content = messageObject[2].GetByteString()
                val rgbProtected = messageObject[0].GetByteString()
                val key = HeaderKeys.KID.AsCBOR()
                var kid = CBORObject.DecodeFromBytes(rgbProtected).get(key)
                // Kid in unprotected header
                if (kid == null) {
                    kid = messageObject[1].get(key)
                }
                val kidByteString = kid.GetByteString()
                CoseData(content, kidByteString)
    
            } catch (e: Throwable) {
                null
            }
        }
    

    Secondly ,the KID

    I have noticed that the KID is presented in the debug log as follows: 2Ga7nn3--CU=

    however, in the verifier service, it's presented like this: 2Ga7nn3++CU=

    notice the "--" vs "++" difference.

    and for completeness sake, the DSC follows:

    	{
    		"kid": "2Ga7nn3++CU=",
    		"timestamp": "2021-05-12T12:28:38+02:00",
    		"country": "CY",
    		"certificateType": "DSC",
    		"thumbprint": "d866bb9e7dfef8255345678cb5722057084424331c7efd8c0eced9b52739c09f",
    		"signature": "MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCAMIICbDCCAhKgAwIBAgIURWuo6N0RLfrkJ/DaZO0KYr6fRu0wCgYIKoZIzj0EAwIwgZMxCzAJBgNVBAYTAkNZMRAwDgYDVQQIDAdOaWNvc2lhMRAwDgYDVQQHDAdOaWNvc2lhMS0wKwYDVQQKDCROYXRpb25hbCBlSGVhbHRoIEF1dGhvcml0eSBvZiBDeXBydXMxFjAUBgNVBAsMDUlUIERlcGFydG1lbnQxGTAXBgNVBAMMEFVQTE9BRF9ER0NfQ1lfMDEwHhcNMjEwNTEwMDcwMzI3WhcNMjMwNTEwMDcwMzI3WjCBkzELMAkGA1UEBhMCQ1kxEDAOBgNVBAgMB05pY29zaWExEDAOBgNVBAcMB05pY29zaWExLTArBgNVBAoMJE5hdGlvbmFsIGVIZWFsdGggQXV0aG9yaXR5IG9mIEN5cHJ1czEWMBQGA1UECwwNSVQgRGVwYXJ0bWVudDEZMBcGA1UEAwwQVVBMT0FEX0RHQ19DWV8wMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCFf0s8yXh7oSXaZKrGFEp8M6Jf8r/EjgLtNmZ07wJuCYDtnlDSJme43ERrsC5gzGQ491N5kPT65vDl1qylqO7GjQjBAMA8GA1UdEwEB/wQFMAMCAQAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBQ/y+7LCYF6CqZGkM/ecYc10XB14zAKBggqhkjOPQQDAgNIADBFAiB+N59qtZwkqmWc/3Dl5gZMpbVrr8+u0+FY9MEQgBUsDAIhAL+NzoJpvG+waRjAN2eZ7d+TB6OlhuRrPp2Ed1LN94iWAAAxggH+MIIB+gIBATCBrDCBkzELMAkGA1UEBhMCQ1kxEDAOBgNVBAgMB05pY29zaWExEDAOBgNVBAcMB05pY29zaWExLTArBgNVBAoMJE5hdGlvbmFsIGVIZWFsdGggQXV0aG9yaXR5IG9mIEN5cHJ1czEWMBQGA1UECwwNSVQgRGVwYXJ0bWVudDEZMBcGA1UEAwwQVVBMT0FEX0RHQ19DWV8wMQIURWuo6N0RLfrkJ/DaZO0KYr6fRu0wCwYJYIZIAWUDBAIBoIHkMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIxMDUxMjEwMjQ1N1owLwYJKoZIhvcNAQkEMSIEINhmu559/vglU0VnjLVyIFcIRCQzHH79jA7O2bUnOcCfMHkGCSqGSIb3DQEJDzFsMGowCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBFjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMAoGCCqGSM49BAMCBEYwRAIgCb+nI9Prsvylmsmdfn8n2ySopLnCVLbKd38900PZO/MCIHF2lA4OEyFBiCoHqzW8pY5a7FaSi8ZMzcOKh3bGgdjEAAAAAAAA",
    		"rawData": "MIICHjCCAcQCFDtxKq28G7KiGukkC62ELU4BBvBbMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJDWTEQMA4GA1UECAwHTmljb3NpYTEQMA4GA1UEBwwHTmljb3NpYTEtMCsGA1UECgwkTmF0aW9uYWwgZUhlYWx0aCBBdXRob3JpdHkgb2YgQ3lwcnVzMRYwFAYDVQQLDA1JVCBEZXBhcnRtZW50MRcwFQYDVQQDDA5DU0NBX0RHQ19DWV8wMTAeFw0yMTA1MTIxMDIzMDZaFw0yMzA1MDIxMDIzMDZaMIGQMQswCQYDVQQGEwJDWTEQMA4GA1UECAwHTmljb3NpYTEQMA4GA1UEBwwHTmljb3NpYTEtMCsGA1UECgwkTmF0aW9uYWwgZUhlYWx0aCBBdXRob3JpdHkgb2YgQ3lwcnVzMRYwFAYDVQQLDA1JVCBEZXBhcnRtZW50MRYwFAYDVQQDDA1EU0NfREdDX0NZXzAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPybvhD4bGNlyPCpz9aiIpnB09ceGEc4z1l5Q8CoQ3sMvXHM3n7+3zX4K7V16VNI09bH1rmCttVRtO8cN/JpG/TAKBggqhkjOPQQDAgNIADBFAiAufANVRuChmYz8oMJgjlFuNMlT3C5zys/gESMgrbdS8AIhAPLA6P1SJL7TdkbjtyRIqpvz1M+m9NJP919tcZ7xoJjP"
    	},
    

    Technical details

    Hosted on Kubernetes, using Nginx Ingress Reverse Proxy, Centos 7

    bug 
    opened by psavva 15
  • [Android] QR-Codes of type TEST with

    [Android] QR-Codes of type TEST with "TEST Result = Detected" are evaluated as cryptographically invalid.

    Describe the bug

    QR-Code of type TEST with TEST Result = Detected are evaluated as cryptographically invalid.

    Expected behaviour

    QR-Code of type TEST with TEST Result = Detected should evaluate to invalid with reason "Test result positive" and the affected part of the dataset incl. "test result = DETECTED" should be shown.

    Steps to reproduce the issue

    Scan a QR-Code of Type Test with TEST RESULT = DETECTED

    Technical details

    Galaxy XCover 4, Modellnummer: SM-G390F, Android-Version: 9,

    Possible Fix

    Additional context

    bug 
    opened by RalicaY 11
  • [Android] If a non-must field is left empty in the Issuance Web App, the produced QR-Code is always shown as invalid by the verifier App

    [Android] If a non-must field is left empty in the Issuance Web App, the produced QR-Code is always shown as invalid by the verifier App

    Describe the bug

    If an optional field is omitted (it is NULL value) the issuer app generates a QR-Code which is always shown as invalid by the verifier app.

    For example, a test certificate with negative result and a valid signature, but the name has been left blank.

    A sample QR Code and the data to generate it is attached,

    Expected behaviour

    A valid certificate should be shown as valid also when optional fields are left empty.

    Steps to reproduce the issue

    Technical details

    not_detected

    Possible Fix

    Additional context

    bug 
    opened by RalicaY 11
  • In case of a failed verification (RED), the app should only display the reason for the fail

    In case of a failed verification (RED), the app should only display the reason for the fail

    Describe the bug

    Despite a failed verification, the verifier app shows the certificate data set and no reason for failure is shown.

    Expected behaviour

    In case of a failed verification (RED), the app should only display the reason for the fail.

    Steps to reproduce the issue

    1. Open verifier app;
    2. Scan a QR-Code for an invalid certificate.

    Technical details

    Galaxy XCover 4, Modellnummer: SM-G390F, Android-Version: 9, Verifier App 1.0.0

    Possible Fix

    Additional context

    bug 
    opened by RalicaY 10
  • endpoint return 404 error

    endpoint return 404 error

    Describe the bug

    The endpoint https://dgca-businessrule-service-eu-acc.cfapps.eu10.hana.ondemand.com/rules is returning 404 error. The endpoint are declared in file dgca-verifier-app-android/app/src/acc/assets/verifier-context.jsonc The APP is not working because it hasn't the certificates.

    Expected behaviour

    Return the json response with all the country rules

    Steps to reproduce the issue

    Open the browser Navigate to https://dgca-businessrule-service-eu-acc.cfapps.eu10.hana.ondemand.com/rules

    Technical details

    Any

    Possible Fix

    Fix the endpoint

    bug 
    opened by ricci69 9
  • [Android] Signing certifiate expiration date time does not supercede the expiration date time of the green certificate

    [Android] Signing certifiate expiration date time does not supercede the expiration date time of the green certificate

    Describe the bug

    In order to check, that when the signing certificate expiration datetime supersedes the expiration datetime in the Green certificate, the app returns INVALID we have created the following QR-Code with chronologically valid certificate but with an expired DSC Certificate.

    Attached JSON file and QR Code.

    Nevertheless, scanning this QR Code with the Verifier app returns VALID.

    Expected behaviour

    Expected is a RED screen saying the Certificate is INVALID.

    Steps to reproduce the issue

    Technical details

    Verifier 1.1.5-tst signing_expiration_supercedes_certificate_expiration signing_expiration_supercedes_certificate_expiration_json

    Galaxy XCover 4, Android 9

    Possible Fix

    Additional context

    bug 
    opened by RalicaY 9
  • Just beep and nothing displayed when scanning real Czech DGCA QR codes

    Just beep and nothing displayed when scanning real Czech DGCA QR codes

    Describe the bug

    Scanning real QR code from valid certificates issued by Czech Republic just beeps and does not display anything useful

    Expected behaviour

    Green checkmark and/or some details that the certificate is OK or is not OK should be displayed.

    Steps to reproduce the issue

    Get any valid certificate either from antigen, PCR test or vaccination from ocko.uzis.cz in PDF format and scan the QR code.

    Technical details

    • Host Machine OS (Windows/Linux/Mac): Android 10 / MIUI

    Additional context

    Xiaomi RedMi Note 8T, Android 10, dark mode activated, version 1.0.3-acc

    bug 
    opened by brozkeff 9
  • [Android Verifier App] Local Delete Workflow for Expired Revocations on Verifier App does Not Start Automatically

    [Android Verifier App] Local Delete Workflow for Expired Revocations on Verifier App does Not Start Automatically

    Local Delete Workflow for Expired Revocations on Verifier App does not start automatically even after more than 24 hours offline (internet switched off) although according to the specification ( (Verfier Workflow, Spec. Chapter 1.3 "Delete expired revocation entries") it should take place.

    Describe the bug

    1. Verifier was newly installed on 28.02.2022 at 11:40 -> Then, we scanned and the following certificate was shown correctly as revoked;
    2. 28.02.2022 at 11:41 we switched OFF the internet on the verifier device;
    3. We waited 24 hours and in the meantime the revocation entry for the given certificate has already expired. ( 'expires': '2022-03-01T09:30:00Z')
    4. Then (after more than 24 hours) 01.03.2022 at 12:40 (internet still switched OFF) we scanned again the same certificate --> certificate was incorrectly still shown as revoked. (Expectation was that it would be shown valid).

    Expected behaviour:

    Verifier should locally recognize certificate as valid within 24 hours (Verfier Workflow, Spec. Chapter 1.3 "Delete expired revocation entries")

    Technical Details:

    Verifier for Android, Version 1.2.4-tst (36) VAC_Batch13

    https://user-images.githubusercontent.com/76050122/156176141-723fd181-360b-4b65-ae39-c5ab2b8ea4cd.mp4

    2nd Prio - Medium 
    opened by RalicaY 8
  • Scanning Austrian testing and vaccination certificate fails with signature error

    Scanning Austrian testing and vaccination certificate fails with signature error

    Describe the bug

    I scanned two certificates issued by the Austrian health portal https://gesundheit.gv.at

    • One for a rapid-test I took 2 hours ago and
    • one for a vaccination done two weeks ago.

    Yes I know, the cert for the vaccination is still invalid, because it was only two weeks ago. But the validation does not fail because of the date, but because the signature can't be verfied.

    The validation of the test-certificate also failed with the errormessage "Verification Failed"

    I did a bit of debugging. I can see, that the QR code is correctly decoded, ie information like my Name and information about the test/vaccine are correct. But the following lines of code return an error (VerifcationViewModel.kt, line 109)

    val certificates = verifierRepository.getCertificatesBy(kid.toBase64())
    if (certificates.isEmpty()) {
        Timber.d("Verification failed: failed to load certificate")
        return@withContext
    }
    

    Ie, getCertificatesBy(kid) does return an empty collection.

    Expected behaviour

    • The rapid-test should be accepted (it shows up ok on the official austrian verification webapps https://qr.gv.at and https://greencheck.gv.at)

    • The vaccination should be marked as invalid, but not because of a signature failure, but because of the date.

    Steps to reproduce the issue

    Scan an austrian certificate

    Technical details

    HTC U11 life running, Android 10, compiled with lastest Android Studio on Windows 10

    Additional Information

    That should be the certificated used for verification in https://qr.gv.at

    -----BEGIN CERTIFICATE-----
    MIIB7zCCAZagAwIBAgIKAXnM+L47fmBcezAKBggqhkjOPQQDAjBEMQswCQYDVQQG
    EwJBVDEPMA0GA1UECgwGQk1TR1BLMQwwCgYDVQQFEwMwMDExFjAUBgNVBAMMDUFU
    IERHQyBDU0NBIDEwHhcNMjEwNjAyMTM0NTI0WhcNMjMwNjAyMTM0NTI0WjBGMQsw
    CQYDVQQGEwJBVDEPMA0GA1UECgwGQk1TR1BLMQ8wDQYDVQQFEwYwMDEwMDExFTAT
    BgNVBAMMDEFUIERHQyBEU0MgMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGBN
    uKiCpnXH0VlIdk6pJZH2ep8jQaV+FR3izMXxZfK5EPGZLtG3Jx+TmV3JJErfrSrP
    hRmfbSidVbTQ5nnZS+ujbjBsMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQUNs2s
    mrjBhuR5Bqxl6teE1x1o2ycwHwYDVR0jBBgwFoAUHyKsHGUWKbTBmLNjb7/dCZ27
    e3swGgYDVR0QBBMwEYEPMjAyMTEyMTYxNDQ1MjRaMAoGCCqGSM49BAMCA0cAMEQC
    IDjXHnyzq3sTisMX1uY8xQ2ZqCRL2xmxtYOPhSZ9ZacYAiAqHUMOC7WNgq4h28n3
    1WLc1mMPAYauWslSEwnXC79AGw==
    -----END CERTIFICATE-----
    

    I also tested the QR Codes from the testdata repository with the official austrian webapps. They can't be verfied ...

    bug 
    opened by wiggisser 8
  • When not set family and given name in issuance web, app shows NULL NULL in the top

    When not set family and given name in issuance web, app shows NULL NULL in the top

    Environment Issuance Web Portal https://issuance-dgca-test.cfapps.eu10.hana.ondemand.com/ Android Phone Verifier App 1.0.3.-tst https://github.com/eu-digital-green-certificates/dgca-wallet-app-android/releases/tag/1.0.3

    ## Steps to reproduce the issue

    1. Click on Record Vaccination Certification

    2. Fill out all mandatory fields

    3. Dont fill out family and given name image

    4. Klick on NEXT

    5. Scan certificate by Verifier App (app-tst-release-signed-1.0.3.apk)

    Actual result: App display NULL NULL in the top left corner image

    Expected result: App should display nothing or standardised names

    bug 
    opened by kerstin-oppermann-tsi 7
  • No option for triggering manual sync of public keys

    No option for triggering manual sync of public keys

    Describe the bug

    There is no way for Android Verifier App to trigger the manual synchronisation of public key as it is in the iOS Verifier App.

    Expected behaviour

    The same behaviour should be implemented for both Verifier App versions -- iOS and Android.

    Steps to reproduce the issue

    Technical details

    Galaxy XCover 4, Modellnummer: SM-G390F, Android-Version: 9, Verifier App 1.0.0

    Possible Fix

    Additional context

    bug 
    opened by RalicaY 7
  • Valid but no content displayed

    Valid but no content displayed

    Describe the bug

    Expected behaviour

    Steps to reproduce the issue

    Technical details

    • Host Machine OS (Windows/Linux/Mac):

    Possible Fix

    Additional context

    bug 2nd Prio - Medium 
    opened by RalicaY 0
  • App does not start

    App does not start

    I am trying to start the application, I have followed all the steps of the documentation but I am getting this error:

    **FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':dgc-sdk:compileDebugJavaWithJavac'.

    Compilation failed; see the compiler error output for details.

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Get more help at https://help.gradle.org

    BUILD FAILED in 8s 67 actionable tasks: 1 executed, 66 up-to-date**

    Thanks to those who will help me

    bug 
    opened by andreaaas 0
  • NFC specification

    NFC specification

    Since the technical specification doesn't say that the NFC data should be ZLIB encoded, wouldn't the correct storage that the app reads be the CWT directly binary encoded (no Base45 and zlib)?

    See Electronic Health Certificates 2021-04-18 section 4.1 and 4.2. I believe NFC falls under 4.1

    question 
    opened by craftbyte 4
  • White Space Trimming of the DCC Json payload

    White Space Trimming of the DCC Json payload

    Some countries (GR so far) have produced Payloads which include trailing spaces within the json payload values.

    eg: space "mp": "EU/1/20/1528 " Notice the empty space after the 1528.

    1000s of such certificates are uncovered by foreigners causing invalidations,

    Recommendation is to trim all whitespaces when executing business rules validations in the verifier apps

    bug 
    opened by psavva 10
  • Android SDK 30 - November 1 Mandatory - External Links Issue

    Android SDK 30 - November 1 Mandatory - External Links Issue

    Links do not work after SDK 30

    Fix is required to add in the AndroidManifest.xml:

        <queries>
            <intent>
                <action android:name="android.intent.action.VIEW" />
                <data android:scheme="http" />
            </intent>
        </queries>
    
    
    bug 
    opened by psavva 0
Releases(1.3.1)
Owner
Official GitHub Organization of the EU Digital COVID Certificates (EUDCC) project, previously known as the EU Digital Green Certificates (DGC).
null
:movie_camera: Movie discovery app showcasing Android best practices with Google's recommended architecture: MVVM + Repository + Offline support + Android Architecture Components + Paging library & Retrofit2.

Popular Movies Stage 1 + Stage 2 Discover the most popular and top rated movies playing. Movies data fetched using themoviedb.org API. ✨ Screenshots M

Yassin AJDI 189 Nov 26, 2022
Repository for the Android app core module.

EU Digital COVID Certificate App Core - Android About • Development • Documentation • Support • Contribute • Contributors • Licensing About This repos

null 35 May 31, 2022
Kurly-assignment - Search GitHub Repository App For Android

Search GitHub Repository App Outline Github 내의 수많은 리포지토리를 키워드를 통해 검색할 수 있습니다. Ho

Minjeong Kim 0 Jan 5, 2022
🦁 A Disney app using transformation motions based on MVVM (ViewModel, Coroutines, Flow, LiveData, Room, Repository, Koin) architecture.

DisneyMotions A demo Disney app using transformation motions based on MVVM architecture. The motion system is included in the 1.2.0-alpha05 released m

Jaewoong Eum 1.4k Dec 16, 2022
This repository stores the code for the open-sourced donation app that we built for the @AndronixApp

This repository stores the code for the open-sourced donation app that we built for the [Andronix App](https://andronix.app). What Tech has been used?

Prakhar Shukla 8 Oct 10, 2022
An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly.

An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly. The main aim of this repository is to help students who are learning Android Development or preparing for an Android Developer role-based job.

Mimo Patra 15 Dec 29, 2022
repository for training UI of Android apps

AndroidUITrain repository for training UI of Android apps 定義されたcolor resourceの意味 使われている部分 color resource 名 ブランド追加ボタンの黒 zozo_black (微妙に真っ黒ではなかった) 画面上部の

みっちゃん 9 Dec 26, 2022
Git history is an android application that simply tracks GitHub repository's issues.

Git History About Git history is an android application that simply tracks GitHub repository's issues. You can search for user and get all public repo

Aditya Sutar 0 Oct 17, 2021
Repository ini berguna untuk menyimpan kode yang dibutuhkan untuk membuat sebuah Aplikasi Kalkulator di Android.

AndroidCalculator Repository ini berguna untuk menyimpan kode yang dibutuhkan untuk membuat sebuah Aplikasi Kalkulator di Android. Repository ini memi

Bryan Yehuda Mannuel 1 Jan 2, 2022
Repository ini berguna untuk menyimpan kode yang dibutuhkan untuk membuat sebuah Aplikasi Android yang bisa melakukan Create, Read, Update, dan Delete sederhana ke dalam Database.

AndroidCRUD Repository ini berguna untuk menyimpan kode yang dibutuhkan untuk membuat sebuah Aplikasi Android yang bisa melakukan Create, Read, Update

Bryan Yehuda Mannuel 1 Jan 2, 2022
Repository ini berguna untuk menyimpan kode yang dibutuhkan untuk membuat sebuah Aplikasi Android yang memiliki ListView yang menggunakan Custom Adapter dan Mengambil data dari Database secara CRUD.

AndroidListView Repository ini berguna untuk menyimpan kode yang dibutuhkan untuk membuat sebuah Aplikasi Android yang memiliki ListView yang mengguna

Bryan Yehuda Mannuel 1 Jan 2, 2022
Usages of Factory Method for Data Source Layer (Local/Remote - Repository) with DI & MVVM [Android].

Usages of Factory Method for Data Source Layer (Local/Remote - Repository) with DI & MVVM [Android] Stacks: MVVVM DI (Hilt) Factory Method (Design Pat

Romman Sabbir 4 Aug 9, 2022
Juara Android - Repository Google Code Lab, JuaraAndroid Event

Juara Android - Repository Google Code Lab, JuaraAndroid Event

Caravan Codes 3 Aug 6, 2022
A single repository to learn the basics of Android in Kotlin without all the fluff.

Android-Concepts-Reference-Kotlin A single repository to learn the basics of Android in Kotlin without all the fluff. How to use this repository Each

Duart Breedt 11 Nov 23, 2022
❤️ A sample Marvel heroes application based on MVVM (ViewModel, Coroutines, LiveData, Room, Repository, Koin) architecture.

MarvelHeroes MarvelHeroes is a demo application based on modern Android application tech-stacks and MVVM architecture. Fetching data from the network

Jaewoong Eum 1.2k Dec 19, 2022
Github search repository api를 사용합니다.

GithubSearch ✔️ Description Github API 중 search repository api를 사용하였으며, 레포지토리를 검색할 수 있습니다. star 개수를 기준으로 내림차순하여 인기있는 레포지토리부터 볼 수 있습니다. ?? GIF ?? Used

huijiny 1 Mar 3, 2022
Repository for solving Advent of Code in Kotlin.

Advent of Code 2021 Repository for solving Advent of Code in Kotlin. Getting started Running Project is already setup with gradle. To run the app: Nav

Felix Ebert 2 Dec 5, 2021
(Coroutine, Flow(+StateFlow), Hilt, JetPack, MVVM, Repository Pattern, Retrofit2 & OkHttp3, Moshi, Glide, Timber, Material-Components)

(Coroutine, Flow(+StateFlow), Hilt, JetPack, MVVM, Repository Pattern, Retrofit2 & OkHttp3, Moshi, Glide, Timber, Material-Components)

훈성 2 Nov 15, 2022
Repository contains structures and methods to execute linear algebra operations (matrix multiplication etc)

LinearAlgebra Repository contains structures and methods to execute linear algebra operations (matrix multiplication etc) Matrix class Matrix implemen

null 0 Apr 27, 2022