Commit a0600595 authored by stopcovid@lunabee.com's avatar stopcovid@lunabee.com
Browse files

Update to 3.6.1

- DCC fav widget
parent 020ef07a
......@@ -44,6 +44,7 @@
<dimen name="badge_size">8dp</dimen>
<dimen name="qr_code_size">140dp</dimen>
<dimen name="qr_code_widget_size">80dp</dimen>
<dimen name="qr_code_widget_dcc_size">200dp</dimen>
<dimen name="qr_code_fullscreen_size">240dp</dimen>
<dimen name="loading_elevation">40dp</dimen>
......@@ -69,6 +70,7 @@
<dimen name="title_widget_min_font_size">5sp</dimen>
<dimen name="widget_2_row_min_height">35dp</dimen>
<dimen name="widget_3_row_min_height">180dp</dimen>
<dimen name="widget_4_column_min_width">100dp</dimen>
<dimen name="widget_main_figure_font_size">25sp</dimen>
<dimen name="widget_second_figure_font_size">20sp</dimen>
......
......@@ -67,4 +67,10 @@
<style name="Theme.Base.StopCovid.ForceLight" />
<!-- No darkmode because of the qrCode-->
<style name="Theme.StopCovid.DccWidget" parent="Theme.StopCovid.Base.Widget">
<item name="widgetBackgroundColor">@android:color/white</item>
<item name="android:textColor">@android:color/black</item>
</style>
</resources>
......@@ -143,4 +143,16 @@
<item name="android:background">@color/color_black_15</item>
</style>
<style name="Widget.StopCovid.Widget.TextView.Info" parent="Widget.MaterialComponents.TextView">
<item name="android:textSize">@dimen/caption_font_size</item>
<item name="android:textAlignment">center</item>
</style>
<!-- No darkmode because of the qrCode-->
<style name="Widget.StopCovid.DccWidget.Divider" parent="">
<item name="android:layout_height">@dimen/divider_height</item>
<item name="android:layout_width">match_parent</item>
<item name="android:background">@color/color_black_15</item>
</style>
</resources>
\ No newline at end of file
......@@ -45,8 +45,8 @@ android {
applicationId "fr.gouv.android.stopcovid"
minSdkVersion 21
targetSdkVersion 30
versionCode 324
versionName "3.6.0"
versionCode 326
versionName "3.6.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
......
......@@ -137,8 +137,9 @@
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
<receiver
android:name="com.lunabeestudio.stopcovid.widgetshomescreen.AttestationWidget"
android:name="com.lunabeestudio.stopcovid.widgetshomescreen.DccWidget"
android:enabled="true"
android:exported="false">
<intent-filter>
......@@ -147,11 +148,11 @@
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/attestation_widget_info" />
android:resource="@xml/dcc_widget_info" />
</receiver>
<receiver
android:name="com.lunabeestudio.stopcovid.widgetshomescreen.ProximityWidget"
android:name="com.lunabeestudio.stopcovid.widgetshomescreen.KeyFiguresWidget"
android:enabled="true"
android:exported="false">
<intent-filter>
......@@ -160,22 +161,36 @@
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/proximity_widget_info" />
android:resource="@xml/key_figures_widget_info" />
</receiver>
<receiver
android:name="com.lunabeestudio.stopcovid.widgetshomescreen.KeyFiguresWidget"
android:name="com.lunabeestudio.stopcovid.widgetshomescreen.AttestationWidget"
android:enabled="true"
android:exported="true">
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/key_figures_widget_info" />
android:resource="@xml/attestation_widget_info" />
</receiver>
<receiver
android:name="com.lunabeestudio.stopcovid.widgetshomescreen.ProximityWidget"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/proximity_widget_info" />
</receiver>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.share"
......
......@@ -74,6 +74,8 @@ object Constants {
const val NEW_CERTIFICATE_SHORTCUT_URI: String = "tousanticovid://attestations//new_attestation"
const val PROXIMITY_FRAGMENT_URI: String = "tousanticovid://proximity/"
const val UNIVERSAL_QRCODE_SHORTCUT_URI: String = "tousanticovid://universalQRCode/"
const val WALLET_CERTIFICATE_SHORTCUT_URI: String = "tousanticovid://walletCertificate/list"
const val DCC_FULLSCREEN_SHORTCUT_URI: String = "tousanticovid://dccFullScreen/"
}
object Android {
......
......@@ -59,6 +59,9 @@ import com.lunabeestudio.stopcovid.extension.robertManager
import com.lunabeestudio.stopcovid.extension.showAlertRiskLevelChanged
import com.lunabeestudio.stopcovid.manager.DeeplinkManager
import com.lunabeestudio.stopcovid.manager.RisksLevelManager
import com.lunabeestudio.stopcovid.manager.WalletManager
import com.lunabeestudio.stopcovid.model.EuropeanCertificate
import com.lunabeestudio.stopcovid.widgetshomescreen.DccWidget
import kotlinx.coroutines.delay
import java.util.Locale
......@@ -104,6 +107,17 @@ class MainActivity : BaseActivity() {
}
showLanguageDialogIfNeeded()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
setupAppShortcuts()
}
WalletManager.walletCertificateLiveData.observe(this) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
setupAppShortcuts()
}
DccWidget.updateWidget(applicationContext)
}
}
override fun onResume() {
......@@ -117,10 +131,6 @@ class MainActivity : BaseActivity() {
RisksLevelManager.getCurrentLevel(robertManager().atRiskStatus?.riskLevel),
)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
setupAppShortcuts()
}
}
private fun handleIntent(intent: Intent?) {
......@@ -237,8 +247,9 @@ class MainActivity : BaseActivity() {
ContextCompat.getSystemService(this, ShortcutManager::class.java)?.let { shortcutManager ->
val curfewCertificateShortcut = createCurfewCertificateShortcut()
val universalQrCodeShortcut = createUniversalQrCodeShortcut()
val favDccShortcut = createFavDccShortcut()
shortcutManager.setDynamicShortcuts(listOfNotNull(curfewCertificateShortcut, universalQrCodeShortcut))
shortcutManager.setDynamicShortcuts(listOfNotNull(curfewCertificateShortcut, universalQrCodeShortcut, favDccShortcut))
}
}
......@@ -265,6 +276,30 @@ class MainActivity : BaseActivity() {
}
}
@RequiresApi(Build.VERSION_CODES.N_MR1)
private fun createFavDccShortcut(): ShortcutInfo? {
val favCertificate = WalletManager.walletCertificateLiveData.value?.filter {
(it as? EuropeanCertificate)?.isFavorite == true
}?.firstOrNull() ?: return null
val builder = ShortcutInfo.Builder(this, FAV_DCC_SHORTCUT_ID)
builder.setShortLabel(strings["walletController.favoriteCertificateSection.title"] ?: "Mon certificat favori")
builder.setLongLabel(strings["walletController.favoriteCertificateSection.title"] ?: "Mon certificat favori")
val url: String = Constants.Url.DCC_FULLSCREEN_SHORTCUT_URI + favCertificate.id
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(url)
)
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
builder
.setIcon(Icon.createWithResource(this, R.drawable.ic_filled_heart))
.setIntent(intent)
return builder.build()
}
@RequiresApi(Build.VERSION_CODES.N_MR1)
private fun createUniversalQrCodeShortcut(): ShortcutInfo {
val builder = ShortcutInfo.Builder(this, UNIVERSAL_QRCODE_SHORTCUT_ID)
......@@ -355,5 +390,6 @@ class MainActivity : BaseActivity() {
companion object {
private const val CURFEW_CERTIFICATE_SHORTCUT_ID: String = "curfewCertificateShortcut"
private const val UNIVERSAL_QRCODE_SHORTCUT_ID: String = "universalQRCodeShortcut"
private const val FAV_DCC_SHORTCUT_ID: String = "favDccShortcut"
}
}
......@@ -154,6 +154,11 @@ class WalletCertificateFragment : MainFragment() {
spannedText = spannedSubtitle
identifier = text.hashCode().toLong()
}
items += captionItem {
val widgetInfoText = strings["walletController.favoriteCertificateSection.widget"]
text = widgetInfoText
identifier = text.hashCode().toLong()
}
}
viewModel.favoriteCertificates?.forEach { certificate ->
items += codeItemFromWalletDocument(certificate)
......
......@@ -32,7 +32,7 @@ object WalletManager {
fun initialize(
lifecycleOwner: LifecycleOwner,
localKeystoreDataSource: LocalKeystoreDataSource,
localKeystoreDataSource: LocalKeystoreDataSource
) {
migrateCertificates(localKeystoreDataSource)
localKeystoreDataSource.rawWalletCertificatesLiveData.observe(lifecycleOwner) { rawWalletList ->
......@@ -112,7 +112,8 @@ object WalletManager {
if (key != null) {
walletCertificate.verifyKey(key)
} else if ((walletCertificate as? EuropeanCertificate)?.greenCertificate?.isFrench == true) {
} else if ((walletCertificate as? EuropeanCertificate)?.greenCertificate?.isFrench == true
|| walletCertificate !is EuropeanCertificate) {
// Only check French certificates
throw WalletCertificateNoKeyError()
}
......
......@@ -17,6 +17,7 @@ import com.lunabeestudio.stopcovid.coreui.manager.StringsManager
import com.lunabeestudio.stopcovid.extension.robertManager
import com.lunabeestudio.stopcovid.service.ProximityService
import com.lunabeestudio.stopcovid.widgetshomescreen.AttestationWidget
import com.lunabeestudio.stopcovid.widgetshomescreen.DccWidget
import com.lunabeestudio.stopcovid.widgetshomescreen.KeyFiguresWidget
import com.lunabeestudio.stopcovid.widgetshomescreen.ProximityWidget
import kotlinx.coroutines.DelicateCoroutinesApi
......@@ -40,6 +41,7 @@ class UpgradeReceiver : BroadcastReceiver() {
ProximityWidget.updateWidget(context)
AttestationWidget.updateWidget(context)
KeyFiguresWidget.updateWidget(context)
DccWidget.updateWidget(context)
}
} catch (t: Throwable) {
// Keychain may not be fully initialized
......
......@@ -70,11 +70,11 @@ class WalletViewModel(
}
fun toggleFavorite(
walletCertificate: EuropeanCertificate,
walletCertificate: EuropeanCertificate
) {
WalletManager.toggleFavorite(
keystoreDataSource,
walletCertificate,
walletCertificate
)
}
}
......
package com.lunabeestudio.stopcovid.widgetshomescreen
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* Authors
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Created by Lunabee Studio / Date - 2021/26/7 - for the TOUS-ANTI-COVID project
*/
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.widget.RemoteViews
import com.google.zxing.BarcodeFormat
import com.journeyapps.barcodescanner.BarcodeEncoder
import com.lunabeestudio.domain.model.RawWalletCertificate
import com.lunabeestudio.framework.local.LocalCryptoManager
import com.lunabeestudio.framework.local.datasource.SecureKeystoreDataSource
import com.lunabeestudio.stopcovid.Constants
import com.lunabeestudio.stopcovid.R
import com.lunabeestudio.stopcovid.coreui.extension.toDimensSize
import com.lunabeestudio.stopcovid.coreui.manager.StringsManager
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
class DccWidget : AppWidgetProvider() {
@OptIn(DelicateCoroutinesApi::class)
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
GlobalScope.launch(Dispatchers.Main) {
// load strings and on startup
if (StringsManager.strings.isNullOrEmpty()) {
StringsManager.initialize(context)
}
appWidgetIds.forEach { appWidgetId ->
updateDccWidget(context, appWidgetManager, appWidgetId)
}
}
}
/**
* Function updating the widget
*/
private fun updateDccWidget(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int) {
val views: RemoteViews?
val cryptoManager = LocalCryptoManager(context)
val favCertificate = SecureKeystoreDataSource(context, cryptoManager).rawWalletCertificates?.firstOrNull { it.isFavorite }
if (favCertificate != null) {
views = RemoteViews(context.packageName, R.layout.dcc_widget)
val qrBitmap = generateBarcodeFromCertificate(favCertificate, context)
views.apply {
setImageViewBitmap(R.id.dccQrCodeImageView, qrBitmap)
setTextViewText(R.id.titleWidgetTextView, StringsManager.strings["walletController.favoriteCertificateSection.title"])
setTextViewText(
R.id.captionQrCodeTextView,
StringsManager.strings["widget.dcc.full"] ?: "Appuyez pour passer en plein écran"
)
}
val uriIntent: String = Constants.Url.DCC_FULLSCREEN_SHORTCUT_URI + favCertificate.id
setIntent(context, views, uriIntent)
} else {
views = RemoteViews(context.packageName, R.layout.dcc_widget_no_fav_widget)
views.apply {
setTextViewText(
R.id.infoTextView,
StringsManager.strings["widget.dcc.empty"]
?: "Ajoutez ici votre certificat favori en appuyant sur l’icône ❤️ sur le certificat (au format européen) souhaité."
)
setTextViewText(R.id.titleWidgetTextView, StringsManager.strings["app.name"])
}
val uriIntent: String = Constants.Url.WALLET_CERTIFICATE_SHORTCUT_URI
setIntent(context, views, uriIntent)
}
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views)
}
fun generateBarcodeFromCertificate(certificate: RawWalletCertificate, context: Context): Bitmap {
val barcodeEncoder = BarcodeEncoder()
val qrSize = R.dimen.qr_code_widget_dcc_size.toDimensSize(context).toInt()
return barcodeEncoder.encodeBitmap(
certificate.value,
BarcodeFormat.QR_CODE,
qrSize,
qrSize
)
}
/**
* set the intent of the click on widget with the uri
* @param uriIntent is the deeplink of the fragment in the main_graph
*/
private fun setIntent(context: Context, views: RemoteViews, uriIntent: String) {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(uriIntent)
)
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
views.setOnClickPendingIntent(R.id.dccWidgetLayout, pendingIntent)
}
companion object {
/**
* Is used for asking the widget to update himself
*/
fun updateWidget(context: Context) {
val intent = Intent(context, DccWidget::class.java)
intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
val ids = AppWidgetManager.getInstance(context)
.getAppWidgetIds(
ComponentName(
context,
DccWidget::class.java
)
)
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
context.sendBroadcast(intent)
}
}
}
\ No newline at end of file
......@@ -84,7 +84,7 @@ class KeyFiguresWidget : AppWidgetProvider() {
// Set title widget
views.setTextViewText(
R.id.titleWidgetTextView,
strings["widget.figures.title"] ?: "TousAntiCovid: Chiffres clés"
strings["home.infoSection.keyFigures"]
)
// Highlighted Figures
displayHighlightedFigure(strings, numberFormat, views, context)
......
<?xml version="1.0" encoding="utf-8"?>
<!--
~ This Source Code Form is subject to the terms of the Mozilla Public
~ License, v. 2.0. If a copy of the MPL was not distributed with this
~ file, You can obtain one at https://mozilla.org/MPL/2.0/.
~
~ Authors
~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Created by Lunabee Studio / Date - 2021/26/7 - for the TOUS-ANTI-COVID project
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="105dp"
android:height="36dp"
android:viewportWidth="105"
android:viewportHeight="36">
<group>
<path
android:fillColor="#0D0090"
android:fillType="evenOdd"
android:pathData="M6.9 11.01c2.23 0 3.68-1.66 3.68-3.94c0-2.3-1.45-3.95-3.68-3.95c-1.53 0-2.7 0.67-3.58 1.97L3.29 5.07v4l0.03-0.03C4.2 10.34 5.37 11 6.9 11zM0 0.51h3.3v0.94C4.32 0.52 5.64 0 7.35 0C11.51 0 14 3.25 14 7.07c0 3.81-2.49 7.06-6.64 7.06c-1.7 0-3.03-0.52-4.07-1.46V20H0V0.52z"/>
<path
android:fillColor="#0D0090"
android:fillType="evenOdd"
android:pathData="M21.25 11.38c1.53 0 2.63-0.78 3.32-1.83V7.77l-3.19 0.54c-1.44 0.23-2 0.8-2 1.62c0 0.83 0.72 1.45 1.87 1.45zM16 10.05c0-1.98 1.58-3.5 4.5-3.96l4.07-0.67V5.1c0-1.37-1.07-2.24-2.6-2.24c-1.3 0-2.4 0.54-3.02 1.54l-2.52-1.83C17.63 0.97 19.64 0 22.08 0C25.99 0 28 2.24 28 5.1v8.38h-3.43v-1.2C23.71 13.3 22.13 14 20.55 14c-2.7 0-4.55-1.5-4.55-3.94z"/>
<path
android:fillColor="#0D0090"
android:fillType="evenOdd"
android:pathData="M32.15 9.6c0.8 1 1.74 1.72 2.97 1.72c1.02 0 1.58-0.56 1.58-1.34c0-2.26-6-1.3-6-6C30.7 1.7 32.6 0 35.26 0c2 0 3.78 0.95 4.73 2.21l-2.17 1.96c-0.67-0.85-1.51-1.5-2.54-1.5c-0.97 0-1.48 0.47-1.48 1.19c0 2.21 6.01 1.31 6.01 5.92C39.77 12.5 37.6 14 35.17 14c-2.3 0-3.94-0.93-5.17-2.4l2.15-2z"/>
<path
android:fillColor="#0D0090"
android:fillType="evenOdd"
android:pathData="M44.15 9.6c0.8 1 1.74 1.72 2.97 1.72c1.02 0 1.58-0.56 1.58-1.34c0-2.26-6-1.3-6-6C42.7 1.7 44.6 0 47.26 0c2 0 3.78 0.95 4.73 2.21l-2.17 1.96c-0.67-0.85-1.51-1.5-2.54-1.5c-0.97 0-1.48 0.47-1.48 1.19c0 2.21 6.01 1.31 6.01 5.92C51.77 12.5 49.6 14 47.17 14c-2.3 0-3.94-0.93-5.17-2.4l2.15-2z"/>
<path
android:fillColor="#0D0090"
android:fillType="evenOdd"
android:pathData="M57 13h48V0H57v13z"/>
<path
android:fillColor="#FFF"
android:fillType="evenOdd"
android:pathData="M66.17 8.27L67 8.84C66.41 9.54 65.48 10 64.33 10C62.35 10 61 8.62 61 7s1.35-3 3.33-3c1.15 0 2.08 0.46 2.67 1.16l-0.83 0.58c-0.4-0.52-1.04-0.86-1.84-0.86c-1.31 0-2.26 0.94-2.26 2.12c0 1.2 0.95 2.12 2.26 2.12c0.8 0 1.44-0.34 1.84-0.85z"/>
<path
android:fillColor="#FFF"
android:fillType="evenOdd"
android:pathData="M74 7c0 1.62-1.22 3-3 3c-1.79 0-3-1.38-3-3s1.21-3 3-3c1.78 0 3 1.38 3 3zm-0.97 0c0-1.2-0.84-2.12-2.03-2.12S68.96 5.82 68.96 7c0 1.2 0.85 2.12 2.04 2.12S73.03 8.18 73.03 7z"/>
<path
android:fillColor="#FFF"
android:fillType="evenOdd"
android:pathData="M75.05 4L77 8.98L78.95 4H80l-2.35 6h-1.3L74 4h1.05z"/>
<path
android:fillColor="#FFF"
android:fillType="evenOdd"
android:pathData="M81 10h1V4h-1v6z"/>
<path
android:fillColor="#FFF"
android:fillType="evenOdd"
android:pathData="M84 4h2.55C88.6 4 90 5.38 90 7s-1.4 3-3.45 3H84V4zm1.07 0.9v4.2h1.49c1.35 0 2.33-0.93 2.33-2.1s-0.98-2.1-2.33-2.1h-1.5z"/>
<path
android:fillColor="#FFF"
android:fillType="evenOdd"
android:pathData="M91 8h2V7h-2v1z"/>
<path
android:fillColor="#FFF"
android:fillType="evenOdd"
android:pathData="M94.02 4.96l-1.51 0.8L92 5.09L94.03 4H95v6h-0.98V4.96z"/>
<path
android:fillColor="#FFF"
android:fillType="evenOdd"
android:pathData="M96 9.05l0.8-0.54c0.36 0.44 0.76 0.68 1.35 0.68c1.06 0 1.7-0.74 1.77-2.02c-0.46 0.37-1.04 0.58-1.75 0.58c-1.28 0-2.13-0.8-2.13-1.82c0-1.05 0.87-1.93 2.4-1.93c1.64 0 2.56 1 2.56 2.93c0 1.81-0.92 3.07-2.84 3.07c-1.05 0-1.71-0.4-2.16-0.95zm2.34-2.1c0.62 0 1.17-0.22 1.55-0.66c-0.16-1.07-0.72-1.48-1.49-1.48c-0.8 0-1.29 0.47-1.29 1.09c0 0.6 0.5 1.05 1.23 1.05z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M1.15 31.6c0.8 1 1.74 1.72 2.97 1.72c1.02 0 1.58-0.56 1.58-1.34c0-2.26-6.01-1.3-6.01-6c0-2.28 1.92-3.98 4.58-3.98c2 0 3.78 0.95 4.73 2.21l-2.17 1.96c-0.67-0.85-1.51-1.5-2.54-1.5c-0.97 0-1.48 0.47-1.48 1.19c0 2.21 6.01 1.31 6.01 5.92C8.77 34.5 6.6 36 4.17 36c-2.3 0-3.94-0.93-5.17-2.4l2.15-2z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M16.25 33.38c1.53 0 2.63-0.78 3.32-1.83v-1.78l-3.19 0.54c-1.44 0.23-2 0.8-2 1.62c0 0.83 0.72 1.45 1.87 1.45zM11 32.05c0-1.98 1.58-3.5 4.5-3.96l4.07-0.67V27.1c0-1.37-1.07-2.24-2.6-2.24c-1.3 0-2.4 0.54-3.02 1.54l-2.52-1.83c1.2-1.6 3.21-2.57 5.65-2.57c3.91 0 5.92 2.24 5.92 5.1v8.38h-3.43v-1.2C18.71 35.3 17.13 36 15.55 36c-2.7 0-4.55-1.5-4.55-3.94z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M26 22.53h3.5v1.07c0.96-0.9 2.26-1.6 4.1-1.6c3 0 5.4 2 5.4 5.98V36h-3.55v-7.88c0-1.8-1.02-2.91-2.73-2.91c-1.76 0-2.7 1.14-3.22 2V36H26V22.53z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M42.46 36h3.08V22.7h-3.08V36zM42 18.19C42 17 42.92 16 44.01 16c1.1 0 1.99 1 1.99 2.19s-0.9 2.19-1.99 2.19c-1.09 0-2.01-1-2.01-2.19z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M50.5 25.43H48v-3.08h2.5V19h3.39v3.35h4.08v3.08H53.9v5.42c0 1.48 0.8 2.07 2.12 2.07c0.93 0 1.54-0.1 1.99-0.3v2.96C57.34 35.87 56.54 36 55.43 36c-3.34 0-4.94-1.89-4.94-5.15v-5.42z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M65.25 33.38c1.53 0 2.63-0.78 3.32-1.83v-1.78l-3.19 0.54c-1.44 0.23-2 0.8-2 1.62c0 0.83 0.72 1.45 1.87 1.45zM60 32.05c0-1.98 1.58-3.5 4.5-3.96l4.07-0.67V27.1c0-1.37-1.07-2.24-2.6-2.24c-1.3 0-2.4 0.54-3.02 1.54l-2.52-1.83c1.2-1.6 3.21-2.57 5.65-2.57c3.91 0 5.92 2.24 5.92 5.1v8.38h-3.43v-1.2C67.71 35.3 66.13 36 64.55 36c-2.7 0-4.55-1.5-4.55-3.94z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M75.46 36h3.08V22.7h-3.08V36zM75 18.19C75 17 75.92 16 77.01 16c1.1 0 1.99 1 1.99 2.19s-0.9 2.19-1.99 2.19c-1.09 0-2.01-1-2.01-2.19z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M83 22.27h3.34v1.36c0.87-0.92 2-1.63 3.5-1.63c0.45 0 0.84 0.08 1.16 0.2v3.61c-0.42-0.1-0.87-0.19-1.47-0.19c-1.64 0-2.69 0.93-3.19 1.77V36H83V22.27z"/>
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M95.59 27.2h5.9c-0.05-1.29-1.01-2.47-2.76-2.47c-1.6 0-2.7 0.77-3.14 2.47zm3.69 8.8C94.63 36 92 32.78 92 29c0-3.84 2.44-7 6.73-7c3.64 0 6.04 2.42 6.04 5.82c0 0.72-0.1 1.41-0.21 1.85h-9.18c0.2 2.13 1.72 3.4 3.95 3.4c1.43 0 2.6-0.62 3.3-1.55l2.37 1.86C103.78 35 101.75 36 99.28 36z"/>
</group>
</vector>
\ No newline at end of file
......@@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="22">
<path
android:fillColor="?colorControlNormal"
android:fillColor="@color/color_indigo"
android:pathData="M12.2032,21.7466C12.3415,21.7466 12.4982,21.7059 12.6731,21.6245C12.8481,21.5431 13.017,21.4495 13.1797,21.3438C15.3363,19.9603 17.2081,18.5056 18.795,16.9797C20.3819,15.4539 21.6107,13.8873 22.4815,12.28C23.3523,10.6728 23.7876,9.0472 23.7876,7.4033C23.7876,6.3617 23.6188,5.4075 23.2811,4.5408C22.9433,3.6741 22.4774,2.9233 21.8834,2.2886C21.2893,1.6538 20.5955,1.1635 19.8021,0.8176C19.0086,0.4718 18.1561,0.2988 17.2447,0.2988C16.1054,0.2988 15.1084,0.5877 14.254,1.1655C13.3995,1.7433 12.7159,2.5124 12.2032,3.4727C11.6905,2.5205 11.0049,1.7535 10.1463,1.1716C9.2877,0.5898 8.2929,0.2988 7.1617,0.2988C6.2421,0.2988 5.3855,0.4718 4.5921,0.8176C3.7986,1.1635 3.1049,1.6538 2.5108,2.2886C1.9167,2.9233 1.4528,3.6741 1.1192,4.5408C0.7855,5.4075 0.6187,6.3617 0.6187,7.4033C0.6187,9.0472 1.0521,10.6728 1.9188,12.28C2.7854,13.8873 4.0143,15.4539 5.6053,16.9797C7.1963,18.5056 9.066,19.9603 11.2144,21.3438C11.3772,21.4495 11.5481,21.5431 11.7271,21.6245C11.9061,21.7059 12.0648,21.7466 12.2032,21.7466Z" />
</vector>
<!--
~ This Source Code Form is subject to the terms of the Mozilla Public
~ License, v. 2.0. If a copy of the MPL was not distributed with this
~ file, You can obtain one at https://mozilla.org/MPL/2.0/.
~
~ Authors
~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Created by Lunabee Studio / Date - 2021/24/5 - for the TOUS-ANTI-COVID project
-->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dccWidgetLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_widget"
android:clickable="true"
android:focusable="true"
android:theme="@style/Theme.StopCovid.DccWidget"
android:paddingBottom="@dimen/spacing_large">
<LinearLayout
android:id="@+id/titleLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_medium"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/logoImageView"
android:layout_width="@dimen/logo_proximity_widget_size"
android:layout_height="@dimen/logo_proximity_widget_size"
android:importantForAccessibility="no"
android:src="@mipmap/ic_launcher" />