{"id":48356803,"url":"https://github.com/decentralised-dataexchange/bb-consent-android-privacy-dashboard","last_synced_at":"2026-04-05T11:33:38.726Z","repository":{"id":188903806,"uuid":"679654620","full_name":"decentralised-dataexchange/bb-consent-android-privacy-dashboard","owner":"decentralised-dataexchange","description":"This repository hosts source code for the reference implementation of the GovStack Consent Building Block Android Privacy Dashboard towards individuals.","archived":false,"fork":false,"pushed_at":"2024-05-22T13:56:35.000Z","size":498,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-22T15:04:25.796Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/decentralised-dataexchange.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-17T10:18:35.000Z","updated_at":"2024-05-22T13:56:39.000Z","dependencies_parsed_at":"2023-08-17T12:11:16.072Z","dependency_job_id":"c098d202-20cf-44ec-b058-021cc0ed8823","html_url":"https://github.com/decentralised-dataexchange/bb-consent-android-privacy-dashboard","commit_stats":null,"previous_names":["decentralised-dataexchange/bb-consent-android-privacy-dashboard"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/decentralised-dataexchange/bb-consent-android-privacy-dashboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fbb-consent-android-privacy-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fbb-consent-android-privacy-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fbb-consent-android-privacy-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fbb-consent-android-privacy-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/decentralised-dataexchange","download_url":"https://codeload.github.com/decentralised-dataexchange/bb-consent-android-privacy-dashboard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fbb-consent-android-privacy-dashboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31434624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T08:13:15.228Z","status":"ssl_error","status_checked_at":"2026-04-05T08:13:11.839Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-05T11:33:38.160Z","updated_at":"2026-04-05T11:33:38.716Z","avatar_url":"https://github.com/decentralised-dataexchange.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n    GovStack Consent BB Privacy Dashboard (Android SDK)\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"/../../commits/\" title=\"Last Commit\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/decentralised-dataexchange/bb-consent-android-privacy-dashboard?style=flat\"\u003e\u003c/a\u003e\n    \u003ca href=\"/../../issues\" title=\"Open Issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/decentralised-dataexchange/bb-consent-android-privacy-dashboard?style=flat\"\u003e\u003c/a\u003e\n    \u003ca href=\"./LICENSE\" title=\"License\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-yellowgreen?style=flat\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#about\"\u003eAbout\u003c/a\u003e •\n  \u003ca href=\"#about\"\u003eConfiguration\u003c/a\u003e •\n  \u003ca href=\"#about\"\u003eIntegration\u003c/a\u003e •\n  \u003ca href=\"#release-status\"\u003eRelease Status\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e •\n  \u003ca href=\"#licensing\"\u003eLicensing\u003c/a\u003e\n\u003c/p\u003e\n\n## About\n\nThis repository hosts source code for the reference implementation of the GovStack Consent Building Block Privacy Dashboard towards individuals.\n\n## Release Status\n\nReleased. Refer to the [wiki page](https://github.com/decentralised-dataexchange/bb-consent-docs/wiki/wps-and-deliverables) for the latest status of the deliverables.\n\n## Installation\n\nGradle:\n```gradle\ndependencies {\n  implementation 'com.github.decentralised-dataexchange:bb-consent-android-privacy-dashboard:\u003clatest release\u003e'\n}\n```\n\nMaven:\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.decentralised-dataexchange\u003c/groupId\u003e\n    \u003cartifactId\u003ebb-consent-android-privacy-dashboard\u003c/artifactId\u003e\n    \u003cversion\u003e\u003clatest release\u003e\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Initialisation\n\n#### Privacy Dasboard\nWe can initiate the privacy dashboard by calling the below.\n```\nPrivacyDashboard.showPrivacyDashboard().withApiKey(\u003cAPI key\u003e)\n                .withUserId(\u003cUser ID\u003e)\n                .withBaseUrl(\u003cBase URL\u003e).start(this)\n```\nWe can also show the privacy dashboard with `accessToken`. For that use the below\n```\n.withAccessToken(\u003caccessToken\u003e)\n```\n\u003e **_Note:_** If we have `accessToken` then no need to pass `API key` and `User ID`\n\nTo set the language we just need to add the following before the `start(this)`\n```\n.withLocale(\u003clanguage code\u003e)\n```\n\nTo enable user requests we just need to add the following before the `start(this)`\n```\n.enableUserRequest()\n```\n\nTo enable Ask me we just need to add the following before the `start(this)`\n```\n.enableAskMe()\n```\n\n## Supported Functions\n\n#### Data Sharing UI\n\nRegister activity for result to get the response back from the Data sharing UI\n```\nvar resultLauncher =\n        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -\u003e\n            if (result.resultCode == Activity.RESULT_OK) {\n                val data: Intent? = result.data\n                if (data != null) {\n                    Log.d(\"Data Agreement Record\", data.getStringExtra(\"data_agreement_record\") ?: \"\")\n                }\n            }\n        }\n```\nTo initiate the Data sharing UI\n```\n val intent = DataSharingUI.showDataSharingUI()\n                .withApiKey(\u003cAPI key\u003e)\n                .withUserId(\u003cUser ID)\n                .withDataAgreementId(\u003cData Agreement ID\u003e)\n                .withThirdPartyApplication(\u003cThird party application name\u003e,\u003cThird party application logo\u003e)\n                .withBaseUrl(\u003cBase URL\u003e)\n                .get(this)\n\nresultLauncher.launch(intent)\n```\nWe can also show the privacy dashboard with `accessToken`. For that use the below\n```\n.withAccessToken(\u003caccessToken\u003e)\n```\n\u003e **_Note:_** If we have `accessToken` then no need to pass `API key` and `User ID`\n\nTo set the secondary button's text. Use the following before the `start(this)`\n```\n.secondaryButtonText(\u003cButton text\u003e)\n```\nIn response, it will return a json string as follows. `Null` if the process failed\n```\n        {\n            \"id\": \"********************\",\n            \"dataAgreementId\": \"********************\",\n            \"dataAgreementRevisionId\": \"********************\",\n            \"dataAgreementRevisionHash\": \"*******************************\",\n            \"individualId\": \"********************\",\n            \"optIn\": Boolean,\n            \"state\": \"*********\",\n            \"signatureId\": \"\"\n        }\n```\n#### Opt-in to Data Agreement\nThis function is used to provide the 3PP developer to opt-in to a data agreement.\n```\n PrivacyDashboard.optInToDataAgreement(\n                            dataAgreementId = \u003cData argeement ID\u003e,\n                            baseUrl = \u003cbaseUrl\u003e,\n                            apiKey = \u003capiKey\u003e,\n                            userId = \u003cuserId\u003e\n                        )\n```\nWe can also use `accessToken` to opt-in to data agreement. For that use\n```\naccessToken = \u003cAccess token\u003e\n```\n\u003e **_Note:_** If we have `accessToken` then no need to pass `API key` and `User ID`\n\nIn response, it will return a json string as follows. `Null` if the process failed\n```\n        {\n            \"id\": \"********************\",\n            \"dataAgreementId\": \"********************\",\n            \"dataAgreementRevisionId\": \"********************\",\n            \"dataAgreementRevisionHash\": \"*******************************\",\n            \"individualId\": \"********************\",\n            \"optIn\": Boolean,\n            \"state\": \"*********\",\n            \"signatureId\": \"\"\n        }\n```\n#### Fetch Data Agreement\nThis function is used to fetch the data agreement using `dataAgreementId`\n```\n  PrivacyDashboard.getDataAgreement(\n                            dataAgreementId = \u003cdataAgreementID\u003e,\n                            baseUrl = \u003cbaseUrl\u003e,\n                            apiKey = \u003capiKey\u003e,\n                            userId = \u003cuserId\u003e\n                        )\n```\nWe can also use `accessToken` to opt-in to data agreement. For that use\n```\naccessToken = \u003cAccess token\u003e\n```\n\u003e **_Note:_** If we have `accessToken` then no need to pass `API key` and `User ID`\n\nIn response, it will return a json string.\n#### Show data agreement policy\nTo show data agreement policy, fetch the data agreement with the above API, pass the response in this\n```\nPrivacyDashboard.showDataAgreementPolicy()\n                        .withDataAgreement(\u003cdataAgreementResponse\u003e)\n                        .withLocale(\"en\")\n                        .start(this)\n```\n#### Individual Functions\n##### To Create an Individual\n```\nPrivacyDashboard.createAnIndividual(\n                            baseUrl = \u003cbaseUrl\u003e,\n                            apiKey = \u003capiKey\u003e,\n                        )\n```\nthere is also optional fields to pass `name`, `email` and `phone`\n##### To fetch an Individual\n```\nPrivacyDashboard.fetchTheIndividual(\n                            baseUrl = \u003cbaseUrl\u003e,\n                            apiKey = \u003capiKey\u003e,\n                            individualId = \u003cIndividual id\u003e\n                        )\n```\n##### To update an Individual\n```\nPrivacyDashboard.updateTheIndividual(\n                            baseUrl = \u003cbaseUrl\u003e,\n                            apiKey = \u003capiKey\u003e,\n                            name = \u003cname\u003e,\n                            email = \u003cemail\u003e,\n                            phone = \u003cphone\u003e,\n                            individualId = \u003cIndividual id\u003e\n                        )\n```\n##### To fetch all individuals\n```\nPrivacyDashboard.updateTheIndividual(\n                            baseUrl = \u003cbaseUrl\u003e,\n                            apiKey = \u003capiKey\u003e,\n                            offset = \u003coffset(Int)\u003e,\n                            limit = \u003climit(Int)\u003e\n                        )\n```\n\n## Release Status\n\nRefer to the [wiki page](https://github.com/decentralised-dataexchange/bb-consent-docs/wiki/wps-and-deliverables) for the latest status of the deliverables. \n\n## Other resources\n\n* Wiki - https://github.com/decentralised-dataexchange/consent-dev-docs/wiki\n\n## Contributing\n\nFeel free to improve the plugin and send us a pull request. If you find any problems, please create an issue in this repo.\n\n## Licensing\nCopyright (c) 2023-25 LCubed AB (iGrant.io), Sweden\n\nLicensed under the Apache 2.0 License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n\nUnless 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.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecentralised-dataexchange%2Fbb-consent-android-privacy-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdecentralised-dataexchange%2Fbb-consent-android-privacy-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecentralised-dataexchange%2Fbb-consent-android-privacy-dashboard/lists"}