Source added
17
donations/app/build.gradle.kts
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
plugins {
|
||||
id("signal-sample-app")
|
||||
alias(libs.plugins.compose.compiler)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "org.signal.donations.app"
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "org.signal.donations.app"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":donations"))
|
||||
implementation(project(":core-util"))
|
||||
}
|
||||
26
donations/app/src/main/AndroidManifest.xml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.DeviceTransferTest">
|
||||
<activity android:name=".MainActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.android.gms.wallet.api.enabled"
|
||||
android:value="true" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
package org.signal.donations.app;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.google.android.gms.wallet.PaymentData;
|
||||
import com.google.android.gms.wallet.WalletConstants;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.core.util.money.FiatMoney;
|
||||
import org.signal.donations.GooglePayApi;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Currency;
|
||||
import java.util.Locale;
|
||||
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
|
||||
public class MainActivity extends AppCompatActivity implements GooglePayApi.PaymentRequestCallback {
|
||||
|
||||
private static final String TAG = Log.tag(MainActivity.class);
|
||||
|
||||
private View donateButton;
|
||||
|
||||
private GooglePayApi payApi;
|
||||
private Disposable isReadyToPayDisposable;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
donateButton = findViewById(R.id.donate_with_googlepay);
|
||||
donateButton.setVisibility(View.GONE);
|
||||
donateButton.setOnClickListener(v -> requestPayment());
|
||||
|
||||
payApi = new GooglePayApi(this, TestUtil.INSTANCE, new GooglePayApi.Configuration(WalletConstants.ENVIRONMENT_TEST));
|
||||
|
||||
isReadyToPayDisposable = payApi.queryIsReadyToPay().subscribe(this::presentGooglePayButton, this::presentException);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
payApi.onActivityResult(requestCode, resultCode, data, 1, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
isReadyToPayDisposable.dispose();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void presentGooglePayButton() {
|
||||
Log.d(TAG, "Pay is available, displaying button");
|
||||
donateButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private void presentException(@NonNull Throwable throwable) {
|
||||
Log.w(TAG, "Could not display pay button", throwable);
|
||||
Toast.makeText(this, "Could not display pay button", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
private void requestPayment() {
|
||||
donateButton.setClickable(false);
|
||||
|
||||
payApi.requestPayment(new FiatMoney(BigDecimal.valueOf(4.00), Currency.getInstance(Locale.getDefault())), "Test Purchase", 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(PaymentData paymentData) {
|
||||
Toast.makeText(this, "SUCCESS", Toast.LENGTH_SHORT).show();
|
||||
donateButton.setClickable(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull GooglePayApi.GooglePayException googlePayException) {
|
||||
Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show();
|
||||
donateButton.setClickable(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelled() {
|
||||
Toast.makeText(this, "CANCELLED", Toast.LENGTH_SHORT).show();
|
||||
donateButton.setClickable(true);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package org.signal.donations.app
|
||||
|
||||
import org.signal.donations.GooglePayApi
|
||||
|
||||
object TestUtil : GooglePayApi.Gateway {
|
||||
override fun getTokenizationSpecificationParameters(): Map<String, String> {
|
||||
return mapOf(
|
||||
"gateway" to "example",
|
||||
"gatewayMerchantId" to "exampleMerchantId"
|
||||
)
|
||||
}
|
||||
|
||||
override val allowedCardNetworks: List<String> = listOf(
|
||||
"AMEX",
|
||||
"DISCOVER",
|
||||
"INTERAC",
|
||||
"JCB",
|
||||
"MASTERCARD",
|
||||
"VISA"
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="85.84757"
|
||||
android:endY="92.4963"
|
||||
android:startX="42.9492"
|
||||
android:startY="49.59793"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0" />
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000" />
|
||||
</vector>
|
||||
171
donations/app/src/main/res/drawable/ic_launcher_background.xml
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
</vector>
|
||||
9
donations/app/src/main/res/drawable/ic_refresh_20.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="20dp"
|
||||
android:height="20dp"
|
||||
android:viewportWidth="20"
|
||||
android:viewportHeight="20">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M14.7,5.3A6.7,6.7 0,1 0,10 16.7a6.7,6.7 0,0 0,6.4 -5H14.7A5,5 0,1 1,10 5a4.9,4.9 0,0 1,3.5 1.5L10.8,9.2h5.9V3.3Z"/>
|
||||
</vector>
|
||||
13
donations/app/src/main/res/layout/activity_main.xml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<include
|
||||
android:id="@+id/donate_with_googlepay"
|
||||
layout="@layout/donate_with_googlepay_button" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
BIN
donations/app/src/main/res/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
donations/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
donations/app/src/main/res/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
donations/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
donations/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
donations/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
donations/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
donations/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
donations/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
donations/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
16
donations/app/src/main/res/values-night/themes.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.DeviceTransferTest" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
</resources>
|
||||
10
donations/app/src/main/res/values/colors.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFBB86FC</color>
|
||||
<color name="purple_500">#FF6200EE</color>
|
||||
<color name="purple_700">#FF3700B3</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
</resources>
|
||||
3
donations/app/src/main/res/values/strings.xml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<resources>
|
||||
<string name="app_name">DonationsTest</string>
|
||||
</resources>
|
||||
16
donations/app/src/main/res/values/themes.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.DeviceTransferTest" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
</resources>
|
||||
31
donations/lib/build.gradle.kts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
plugins {
|
||||
id("signal-library")
|
||||
id("kotlin-parcelize")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "org.signal.donations"
|
||||
|
||||
buildFeatures {
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":core-util"))
|
||||
|
||||
implementation(libs.kotlin.reflect)
|
||||
implementation(libs.jackson.module.kotlin)
|
||||
implementation(libs.jackson.core)
|
||||
|
||||
testImplementation(testLibs.robolectric.robolectric) {
|
||||
exclude(group = "com.google.protobuf", module = "protobuf-java")
|
||||
}
|
||||
|
||||
api(libs.google.play.services.wallet)
|
||||
api(libs.square.okhttp3)
|
||||
}
|
||||
5
donations/lib/src/main/AndroidManifest.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package org.signal.donations
|
||||
|
||||
import org.json.JSONObject
|
||||
|
||||
/**
|
||||
* Stripe payment source based off a manually entered credit card.
|
||||
*/
|
||||
class CreditCardPaymentSource(
|
||||
private val payload: JSONObject
|
||||
) : PaymentSource {
|
||||
override val type = PaymentSourceType.Stripe.CreditCard
|
||||
override fun parameterize(): JSONObject = payload
|
||||
override fun getTokenId(): String = parameterize().getString("id")
|
||||
override fun email(): String? = null
|
||||
}
|
||||
221
donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt
Normal file
|
|
@ -0,0 +1,221 @@
|
|||
package org.signal.donations
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import com.google.android.gms.common.api.ApiException
|
||||
import com.google.android.gms.tasks.Task
|
||||
import com.google.android.gms.wallet.AutoResolveHelper
|
||||
import com.google.android.gms.wallet.IsReadyToPayRequest
|
||||
import com.google.android.gms.wallet.PaymentData
|
||||
import com.google.android.gms.wallet.PaymentDataRequest
|
||||
import com.google.android.gms.wallet.PaymentsClient
|
||||
import com.google.android.gms.wallet.Wallet
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.signal.core.util.money.FiatMoney
|
||||
import java.util.Locale
|
||||
|
||||
/**
|
||||
* Entrypoint for Google Pay APIs
|
||||
*
|
||||
* @param activity The activity the Pay Client will attach itself to
|
||||
* @param gateway The payment gateway (Such as Stripe)
|
||||
*/
|
||||
class GooglePayApi(
|
||||
private val activity: Activity,
|
||||
private val gateway: Gateway,
|
||||
private val configuration: Configuration
|
||||
) {
|
||||
|
||||
private val paymentsClient: PaymentsClient
|
||||
|
||||
init {
|
||||
val walletOptions = Wallet.WalletOptions.Builder()
|
||||
.setEnvironment(configuration.walletEnvironment)
|
||||
.build()
|
||||
|
||||
paymentsClient = Wallet.getPaymentsClient(activity, walletOptions)
|
||||
}
|
||||
|
||||
fun queryIsReadyToPay(): Completable {
|
||||
return Companion.queryIsReadyToPay(activity, gateway, configuration)
|
||||
}
|
||||
|
||||
/**
|
||||
* Launches the Google Pay sheet via an Activity intent. It is up to the caller to pass
|
||||
* through the activity result to onActivityResult.
|
||||
*/
|
||||
fun requestPayment(price: FiatMoney, label: String, requestCode: Int) {
|
||||
val paymentDataRequest = getPaymentDataRequest(price, label)
|
||||
val request = PaymentDataRequest.fromJson(paymentDataRequest.toString())
|
||||
AutoResolveHelper.resolveTask(paymentsClient.loadPaymentData(request), activity, requestCode)
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the activity result for payment data and fires off the corresponding callback. Does nothing if
|
||||
* the request code is not the expected request code.
|
||||
*/
|
||||
fun onActivityResult(
|
||||
requestCode: Int,
|
||||
resultCode: Int,
|
||||
data: Intent?,
|
||||
expectedRequestCode: Int,
|
||||
paymentRequestCallback: PaymentRequestCallback
|
||||
) {
|
||||
if (requestCode != expectedRequestCode) {
|
||||
return
|
||||
}
|
||||
|
||||
when (resultCode) {
|
||||
Activity.RESULT_OK -> {
|
||||
data?.let { intent ->
|
||||
PaymentData.getFromIntent(intent)?.let { paymentRequestCallback.onSuccess(it) }
|
||||
} ?: paymentRequestCallback.onError(GooglePayException("No data returned from Google Pay"))
|
||||
}
|
||||
Activity.RESULT_CANCELED -> paymentRequestCallback.onCancelled()
|
||||
AutoResolveHelper.RESULT_ERROR -> {
|
||||
AutoResolveHelper.getStatusFromIntent(data)?.let {
|
||||
Log.w(TAG, "loadPaymentData failed with error code ${it.statusCode}: ${it.statusMessage}")
|
||||
paymentRequestCallback.onError(GooglePayException(it.statusMessage))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getPaymentDataRequest(price: FiatMoney, label: String): JSONObject {
|
||||
return baseRequest.apply {
|
||||
put("merchantInfo", merchantInfo)
|
||||
put("allowedPaymentMethods", JSONArray().put(cardPaymentMethod()))
|
||||
put("transactionInfo", getTransactionInfo(price, label))
|
||||
// TODO Donation receipts
|
||||
put("emailRequired", false)
|
||||
put("shippingAddressRequired", false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getTransactionInfo(price: FiatMoney, label: String): JSONObject {
|
||||
return JSONObject().apply {
|
||||
put("currencyCode", price.currency.currencyCode)
|
||||
put("countryCode", "US")
|
||||
put("totalPriceStatus", "FINAL")
|
||||
put("totalPrice", price.getDefaultPrecisionString(Locale.US))
|
||||
put("totalPriceLabel", label)
|
||||
put("checkoutOption", "COMPLETE_IMMEDIATE_PURCHASE")
|
||||
}
|
||||
}
|
||||
|
||||
private fun gatewayTokenizationSpecification(): JSONObject {
|
||||
return JSONObject().apply {
|
||||
put("type", "PAYMENT_GATEWAY")
|
||||
put("parameters", JSONObject(gateway.getTokenizationSpecificationParameters()))
|
||||
}
|
||||
}
|
||||
|
||||
private fun cardPaymentMethod(): JSONObject {
|
||||
val cardPaymentMethod = baseCardPaymentMethod(gateway)
|
||||
cardPaymentMethod.put("tokenizationSpecification", gatewayTokenizationSpecification())
|
||||
|
||||
return cardPaymentMethod
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = Log.tag(GooglePayApi::class.java)
|
||||
|
||||
private const val MERCHANT_NAME = "Signal"
|
||||
|
||||
private val merchantInfo: JSONObject =
|
||||
JSONObject().put("merchantName", MERCHANT_NAME)
|
||||
|
||||
private val allowedCardAuthMethods = JSONArray(listOf("PAN_ONLY", "CRYPTOGRAM_3DS"))
|
||||
|
||||
private val baseRequest = JSONObject().apply {
|
||||
put("apiVersion", 2)
|
||||
put("apiVersionMinor", 0)
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the Google Pay API to determine whether or not the device has Google Pay available and ready.
|
||||
*
|
||||
* @return A completable which, when it completes, indicates that Google Pay is available, or when it errors, indicates it is not.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun queryIsReadyToPay(
|
||||
context: Context,
|
||||
gateway: Gateway,
|
||||
configuration: Configuration
|
||||
): Completable = Completable.create { emitter ->
|
||||
val walletOptions = Wallet.WalletOptions.Builder()
|
||||
.setEnvironment(configuration.walletEnvironment)
|
||||
.build()
|
||||
|
||||
val paymentsClient = Wallet.getPaymentsClient(context, walletOptions)
|
||||
|
||||
try {
|
||||
val request: IsReadyToPayRequest = buildIsReadyToPayRequest(gateway)
|
||||
val task: Task<Boolean> = paymentsClient.isReadyToPay(request)
|
||||
task.addOnCompleteListener { completedTask ->
|
||||
if (!emitter.isDisposed) {
|
||||
try {
|
||||
val result: Boolean = completedTask.getResult(ApiException::class.java) ?: false
|
||||
if (result) {
|
||||
emitter.onComplete()
|
||||
} else {
|
||||
emitter.onError(Exception("Google Pay is not available."))
|
||||
}
|
||||
} catch (e: ApiException) {
|
||||
emitter.onError(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e: JSONException) {
|
||||
emitter.onError(e)
|
||||
}
|
||||
}.subscribeOn(Schedulers.io())
|
||||
|
||||
private fun buildIsReadyToPayRequest(gateway: Gateway): IsReadyToPayRequest {
|
||||
val isReadyToPayJson: JSONObject = baseRequest.apply {
|
||||
put("allowedPaymentMethods", JSONArray().put(baseCardPaymentMethod(gateway)))
|
||||
}
|
||||
|
||||
return IsReadyToPayRequest.fromJson(isReadyToPayJson.toString())
|
||||
}
|
||||
|
||||
private fun baseCardPaymentMethod(gateway: Gateway): JSONObject {
|
||||
return JSONObject().apply {
|
||||
val parameters = JSONObject().apply {
|
||||
put("allowedAuthMethods", allowedCardAuthMethods)
|
||||
put("allowedCardNetworks", JSONArray(gateway.allowedCardNetworks))
|
||||
put("billingAddressRequired", false)
|
||||
}
|
||||
|
||||
put("type", "CARD")
|
||||
put("parameters", parameters)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param walletEnvironment From WalletConstants
|
||||
*/
|
||||
data class Configuration(
|
||||
val walletEnvironment: Int
|
||||
)
|
||||
|
||||
interface Gateway {
|
||||
fun getTokenizationSpecificationParameters(): Map<String, String>
|
||||
val allowedCardNetworks: List<String>
|
||||
}
|
||||
|
||||
interface PaymentRequestCallback {
|
||||
fun onSuccess(paymentData: PaymentData)
|
||||
fun onError(googlePayException: GooglePayException)
|
||||
fun onCancelled()
|
||||
}
|
||||
|
||||
class GooglePayException(message: String?) : Exception(message)
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package org.signal.donations
|
||||
|
||||
import com.google.android.gms.wallet.PaymentData
|
||||
import org.json.JSONObject
|
||||
|
||||
class GooglePayPaymentSource(private val paymentData: PaymentData) : PaymentSource {
|
||||
override val type = PaymentSourceType.Stripe.GooglePay
|
||||
|
||||
override fun parameterize(): JSONObject {
|
||||
val jsonData = JSONObject(paymentData.toJson())
|
||||
val paymentMethodJsonData = jsonData.getJSONObject("paymentMethodData")
|
||||
return paymentMethodJsonData.getJSONObject("tokenizationData")
|
||||
}
|
||||
|
||||
override fun getTokenId(): String {
|
||||
val serializedToken = parameterize().getString("token").replace("\n", "")
|
||||
return JSONObject(serializedToken).getString("id")
|
||||
}
|
||||
|
||||
override fun email(): String? {
|
||||
val jsonData = JSONObject(paymentData.toJson())
|
||||
return if (jsonData.has("email")) {
|
||||
jsonData.getString("email")
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* Copyright 2023 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
package org.signal.donations
|
||||
|
||||
class IDEALPaymentSource(
|
||||
val idealData: StripeApi.IDEALData
|
||||
) : PaymentSource {
|
||||
override val type: PaymentSourceType = PaymentSourceType.Stripe.IDEAL
|
||||
|
||||
override fun email(): String? = null
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright 2024 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.donations
|
||||
|
||||
import org.signal.core.util.Serializer
|
||||
|
||||
enum class InAppPaymentType(val code: Int, val recurring: Boolean) {
|
||||
/**
|
||||
* Used explicitly for mapping DonationErrorSource. Writing this value
|
||||
* into an InAppPayment is an error.
|
||||
*/
|
||||
UNKNOWN(-1, false),
|
||||
|
||||
/**
|
||||
* This payment is for a gift badge
|
||||
*/
|
||||
ONE_TIME_GIFT(0, false),
|
||||
|
||||
/**
|
||||
* This payment is for a one-time donation
|
||||
*/
|
||||
ONE_TIME_DONATION(1, false),
|
||||
|
||||
/**
|
||||
* This payment is for a recurring donation
|
||||
*/
|
||||
RECURRING_DONATION(2, true),
|
||||
|
||||
/**
|
||||
* This payment is for a recurring backup payment
|
||||
*/
|
||||
RECURRING_BACKUP(3, true);
|
||||
|
||||
companion object : Serializer<InAppPaymentType, Int> {
|
||||
override fun serialize(data: InAppPaymentType): Int = data.code
|
||||
override fun deserialize(input: Int): InAppPaymentType = entries.first { it.code == input }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
/*
|
||||
* Copyright 2025 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.donations
|
||||
|
||||
class PayPalPaymentSource : PaymentSource {
|
||||
override val type: PaymentSourceType = PaymentSourceType.PayPal
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* Copyright 2025 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.donations
|
||||
|
||||
import org.json.JSONObject
|
||||
|
||||
/**
|
||||
* A PaymentSource, being something that can be used to perform a
|
||||
* transaction. See [PaymentSourceType].
|
||||
*/
|
||||
interface PaymentSource {
|
||||
val type: PaymentSourceType
|
||||
fun parameterize(): JSONObject = error("Unsupported by $type.")
|
||||
fun getTokenId(): String = error("Unsupported by $type.")
|
||||
fun email(): String? = error("Unsupported by $type.")
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
package org.signal.donations
|
||||
|
||||
sealed class PaymentSourceType {
|
||||
abstract val code: String
|
||||
open val isBankTransfer: Boolean = false
|
||||
|
||||
data object Unknown : PaymentSourceType() {
|
||||
override val code: String = Codes.UNKNOWN.code
|
||||
}
|
||||
|
||||
data object GooglePlayBilling : PaymentSourceType() {
|
||||
override val code: String = Codes.GOOGLE_PLAY_BILLING.code
|
||||
}
|
||||
|
||||
data object PayPal : PaymentSourceType() {
|
||||
override val code: String = Codes.PAY_PAL.code
|
||||
}
|
||||
|
||||
sealed class Stripe(
|
||||
override val code: String,
|
||||
val paymentMethod: String,
|
||||
override val isBankTransfer: Boolean
|
||||
) : PaymentSourceType() {
|
||||
/**
|
||||
* Credit card should happen instantaneously but can take up to 1 day to process.
|
||||
*/
|
||||
data object CreditCard : Stripe(Codes.CREDIT_CARD.code, "CARD", false)
|
||||
|
||||
/**
|
||||
* Google Pay should happen instantaneously but can take up to 1 day to process.
|
||||
*/
|
||||
data object GooglePay : Stripe(Codes.GOOGLE_PAY.code, "CARD", false)
|
||||
|
||||
/**
|
||||
* SEPA Debits can take up to 14 bank days to process.
|
||||
*/
|
||||
data object SEPADebit : Stripe(Codes.SEPA_DEBIT.code, "SEPA_DEBIT", true)
|
||||
|
||||
/**
|
||||
* iDEAL Bank transfers happen instantaneously for 1:1 transactions, but do not do so for subscriptions, as Stripe
|
||||
* will utilize SEPA under the hood.
|
||||
*/
|
||||
data object IDEAL : Stripe(Codes.IDEAL.code, "IDEAL", true)
|
||||
|
||||
fun hasDeclineCodeSupport(): Boolean = !this.isBankTransfer
|
||||
fun hasFailureCodeSupport(): Boolean = this.isBankTransfer
|
||||
}
|
||||
|
||||
private enum class Codes(val code: String) {
|
||||
UNKNOWN("unknown"),
|
||||
PAY_PAL("paypal"),
|
||||
CREDIT_CARD("credit_card"),
|
||||
GOOGLE_PAY("google_pay"),
|
||||
SEPA_DEBIT("sepa_debit"),
|
||||
IDEAL("ideal"),
|
||||
GOOGLE_PLAY_BILLING("google_play_billing")
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun fromCode(code: String?): PaymentSourceType {
|
||||
return when (Codes.entries.firstOrNull { it.code == code } ?: Codes.UNKNOWN) {
|
||||
Codes.UNKNOWN -> Unknown
|
||||
Codes.PAY_PAL -> PayPal
|
||||
Codes.CREDIT_CARD -> Stripe.CreditCard
|
||||
Codes.GOOGLE_PAY -> Stripe.GooglePay
|
||||
Codes.SEPA_DEBIT -> Stripe.SEPADebit
|
||||
Codes.IDEAL -> Stripe.IDEAL
|
||||
Codes.GOOGLE_PLAY_BILLING -> GooglePlayBilling
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package org.signal.donations
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import org.signal.core.util.logging.Log
|
||||
import java.io.IOException
|
||||
|
||||
internal object ResponseFieldLogger {
|
||||
|
||||
private val TAG = Log.tag(ResponseFieldLogger::class.java)
|
||||
|
||||
fun logFields(objectMapper: ObjectMapper, json: String?) {
|
||||
if (json == null) {
|
||||
Log.w(TAG, "Response body was null. No keys to print.")
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
val mapType = object : TypeReference<Map<String, Any>>() {}
|
||||
val map = objectMapper.readValue(json, mapType)
|
||||
|
||||
Log.w(TAG, "Map keys (${map.size}): ${map.keys.joinToString()}", true)
|
||||
} catch (e: IOException) {
|
||||
Log.w(TAG, "Failed to produce key map.", true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* Copyright 2023 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
package org.signal.donations
|
||||
|
||||
class SEPADebitPaymentSource(
|
||||
val sepaDebitData: StripeApi.SEPADebitData
|
||||
) : PaymentSource {
|
||||
override val type: PaymentSourceType = PaymentSourceType.Stripe.SEPADebit
|
||||
|
||||
override fun email(): String? = null
|
||||
}
|
||||
634
donations/lib/src/main/java/org/signal/donations/StripeApi.kt
Normal file
|
|
@ -0,0 +1,634 @@
|
|||
package org.signal.donations
|
||||
|
||||
import android.net.Uri
|
||||
import android.os.Parcelable
|
||||
import androidx.annotation.WorkerThread
|
||||
import com.fasterxml.jackson.databind.exc.InvalidDefinitionException
|
||||
import com.fasterxml.jackson.module.kotlin.jsonMapper
|
||||
import com.fasterxml.jackson.module.kotlin.kotlinModule
|
||||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import okio.ByteString.Companion.encodeUtf8
|
||||
import org.json.JSONObject
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.signal.core.util.money.FiatMoney
|
||||
import org.signal.donations.json.StripePaymentIntent
|
||||
import org.signal.donations.json.StripeSetupIntent
|
||||
import java.math.BigDecimal
|
||||
import java.util.Locale
|
||||
|
||||
class StripeApi(
|
||||
private val configuration: Configuration,
|
||||
private val paymentIntentFetcher: PaymentIntentFetcher,
|
||||
private val setupIntentHelper: SetupIntentHelper,
|
||||
private val okHttpClient: OkHttpClient
|
||||
) {
|
||||
|
||||
private val objectMapper = jsonMapper {
|
||||
addModule(kotlinModule())
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = Log.tag(StripeApi::class.java)
|
||||
|
||||
private val CARD_NUMBER_KEY = "card[number]"
|
||||
private val CARD_MONTH_KEY = "card[exp_month]"
|
||||
private val CARD_YEAR_KEY = "card[exp_year]"
|
||||
private val CARD_CVC_KEY = "card[cvc]"
|
||||
|
||||
const val RETURN_URL_SCHEME = "sgnlpay"
|
||||
private const val RETURN_URL_3DS = "$RETURN_URL_SCHEME://3DS"
|
||||
|
||||
const val RETURN_URL_IDEAL = "https://signaldonations.org/stripe/return/ideal"
|
||||
}
|
||||
|
||||
sealed class CreatePaymentIntentResult {
|
||||
data class AmountIsTooSmall(val amount: FiatMoney) : CreatePaymentIntentResult()
|
||||
data class AmountIsTooLarge(val amount: FiatMoney) : CreatePaymentIntentResult()
|
||||
data class CurrencyIsNotSupported(val currencyCode: String) : CreatePaymentIntentResult()
|
||||
data class Success(val paymentIntent: StripeIntentAccessor) : CreatePaymentIntentResult()
|
||||
}
|
||||
|
||||
data class CreateSetupIntentResult(val setupIntent: StripeIntentAccessor)
|
||||
|
||||
sealed class CreatePaymentSourceFromCardDataResult {
|
||||
data class Success(val paymentSource: PaymentSource) : CreatePaymentSourceFromCardDataResult()
|
||||
data class Failure(val reason: Throwable) : CreatePaymentSourceFromCardDataResult()
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
fun createSetupIntent(inAppPaymentType: InAppPaymentType, sourceType: PaymentSourceType.Stripe): CreateSetupIntentResult {
|
||||
return setupIntentHelper
|
||||
.fetchSetupIntent(inAppPaymentType, sourceType)
|
||||
.let { CreateSetupIntentResult(it) }
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
fun confirmSetupIntent(paymentSource: PaymentSource, setupIntent: StripeIntentAccessor): Secure3DSAction {
|
||||
val paymentMethodId = createPaymentMethodAndParseId(paymentSource)
|
||||
|
||||
val parameters = mutableMapOf(
|
||||
"client_secret" to setupIntent.intentClientSecret,
|
||||
"payment_method" to paymentMethodId,
|
||||
"return_url" to if (paymentSource is IDEALPaymentSource) RETURN_URL_IDEAL else RETURN_URL_3DS
|
||||
)
|
||||
|
||||
if (paymentSource.type.isBankTransfer) {
|
||||
parameters["mandate_data[customer_acceptance][type]"] = "online"
|
||||
parameters["mandate_data[customer_acceptance][online][infer_from_client]"] = "true"
|
||||
}
|
||||
|
||||
val (nextActionUri, returnUri) = postForm(StripePaths.getSetupIntentConfirmationPath(setupIntent.intentId), parameters).use { response ->
|
||||
getNextAction(response)
|
||||
}
|
||||
|
||||
return Secure3DSAction.from(nextActionUri, returnUri, setupIntent, paymentMethodId)
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
fun createPaymentIntent(price: FiatMoney, level: Long, sourceType: PaymentSourceType.Stripe): CreatePaymentIntentResult {
|
||||
@Suppress("CascadeIf")
|
||||
return if (Validation.isAmountTooSmall(price)) {
|
||||
CreatePaymentIntentResult.AmountIsTooSmall(price)
|
||||
} else if (Validation.isAmountTooLarge(price)) {
|
||||
CreatePaymentIntentResult.AmountIsTooLarge(price)
|
||||
} else {
|
||||
if (!Validation.supportedCurrencyCodes.contains(price.currency.currencyCode.uppercase(Locale.ROOT))) {
|
||||
CreatePaymentIntentResult.CurrencyIsNotSupported(price.currency.currencyCode)
|
||||
} else {
|
||||
paymentIntentFetcher
|
||||
.fetchPaymentIntent(price, level, sourceType)
|
||||
.let { CreatePaymentIntentResult.Success(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirm a PaymentIntent
|
||||
*
|
||||
* This method will create a PaymentMethod with the given PaymentSource and then confirm the
|
||||
* PaymentIntent.
|
||||
*
|
||||
* @return A Secure3DSAction
|
||||
*/
|
||||
@WorkerThread
|
||||
fun confirmPaymentIntent(paymentSource: PaymentSource, paymentIntent: StripeIntentAccessor): Secure3DSAction {
|
||||
val paymentMethodId = createPaymentMethodAndParseId(paymentSource)
|
||||
|
||||
val parameters = mutableMapOf(
|
||||
"client_secret" to paymentIntent.intentClientSecret,
|
||||
"payment_method" to paymentMethodId,
|
||||
"return_url" to if (paymentSource is IDEALPaymentSource) RETURN_URL_IDEAL else RETURN_URL_3DS
|
||||
)
|
||||
|
||||
if (paymentSource.type.isBankTransfer) {
|
||||
parameters["mandate_data[customer_acceptance][type]"] = "online"
|
||||
parameters["mandate_data[customer_acceptance][online][infer_from_client]"] = "true"
|
||||
}
|
||||
|
||||
val (nextActionUri, returnUri) = postForm(StripePaths.getPaymentIntentConfirmationPath(paymentIntent.intentId), parameters).use { response ->
|
||||
getNextAction(response)
|
||||
}
|
||||
|
||||
return Secure3DSAction.from(nextActionUri, returnUri, paymentIntent)
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the setup intent pointed to by the given accessor.
|
||||
*/
|
||||
fun getSetupIntent(stripeIntentAccessor: StripeIntentAccessor): StripeSetupIntent {
|
||||
return when (stripeIntentAccessor.objectType) {
|
||||
StripeIntentAccessor.ObjectType.SETUP_INTENT -> get(StripePaths.getSetupIntentPath(stripeIntentAccessor.intentId, stripeIntentAccessor.intentClientSecret)).use {
|
||||
val body = it.body?.string()
|
||||
try {
|
||||
objectMapper.readValue(body!!)
|
||||
} catch (e: InvalidDefinitionException) {
|
||||
Log.w(TAG, "Failed to parse JSON for StripeSetupIntent.")
|
||||
ResponseFieldLogger.logFields(objectMapper, body)
|
||||
throw StripeError.FailedToParseSetupIntentResponseError(e)
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to read value from JSON.", e, true)
|
||||
throw StripeError.FailedToParseSetupIntentResponseError(null)
|
||||
}
|
||||
}
|
||||
|
||||
else -> error("Unsupported type")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the payment intent pointed to by the given accessor.
|
||||
*/
|
||||
fun getPaymentIntent(stripeIntentAccessor: StripeIntentAccessor): StripePaymentIntent {
|
||||
return when (stripeIntentAccessor.objectType) {
|
||||
StripeIntentAccessor.ObjectType.PAYMENT_INTENT -> get(StripePaths.getPaymentIntentPath(stripeIntentAccessor.intentId, stripeIntentAccessor.intentClientSecret)).use {
|
||||
val body = it.body?.string()
|
||||
try {
|
||||
Log.d(TAG, "Reading StripePaymentIntent from JSON")
|
||||
objectMapper.readValue(body!!)
|
||||
} catch (e: InvalidDefinitionException) {
|
||||
Log.w(TAG, "Failed to parse JSON for StripePaymentIntent.")
|
||||
ResponseFieldLogger.logFields(objectMapper, body)
|
||||
throw StripeError.FailedToParsePaymentIntentResponseError(e)
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to read value from JSON.", e, true)
|
||||
throw StripeError.FailedToParsePaymentIntentResponseError(null)
|
||||
}
|
||||
}
|
||||
|
||||
else -> error("Unsupported type")
|
||||
}
|
||||
}
|
||||
|
||||
private fun getNextAction(response: Response): Pair<Uri, Uri> {
|
||||
val responseBody = response.body?.string()
|
||||
val bodyJson = responseBody?.let { JSONObject(it) }
|
||||
return if (bodyJson?.has("next_action") == true && !bodyJson.isNull("next_action")) {
|
||||
val nextAction = bodyJson.getJSONObject("next_action")
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.d(TAG, "[getNextAction] Next Action found:\n$nextAction")
|
||||
}
|
||||
|
||||
val redirectToUrl = nextAction.getJSONObject("redirect_to_url")
|
||||
val nextActionUri = redirectToUrl.getString("url")
|
||||
val returnUri = redirectToUrl.getString("return_url")
|
||||
|
||||
Uri.parse(nextActionUri) to Uri.parse(returnUri)
|
||||
} else {
|
||||
Uri.EMPTY to Uri.EMPTY
|
||||
}
|
||||
}
|
||||
|
||||
fun createPaymentSourceFromCardData(cardData: CardData): Single<CreatePaymentSourceFromCardDataResult> {
|
||||
return Single.fromCallable<CreatePaymentSourceFromCardDataResult> {
|
||||
CreatePaymentSourceFromCardDataResult.Success(createPaymentSourceFromCardDataSync(cardData))
|
||||
}.onErrorReturn {
|
||||
CreatePaymentSourceFromCardDataResult.Failure(it)
|
||||
}.subscribeOn(Schedulers.io())
|
||||
}
|
||||
|
||||
fun createPaymentSourceFromSEPADebitData(sepaDebitData: SEPADebitData): Single<PaymentSource> {
|
||||
return Single.just(SEPADebitPaymentSource(sepaDebitData))
|
||||
}
|
||||
|
||||
fun createPaymentSourceFromIDEALData(idealData: IDEALData): Single<PaymentSource> {
|
||||
return Single.just(IDEALPaymentSource(idealData))
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private fun createPaymentSourceFromCardDataSync(cardData: CardData): PaymentSource {
|
||||
val parameters: Map<String, String> = mutableMapOf(
|
||||
CARD_NUMBER_KEY to cardData.number,
|
||||
CARD_MONTH_KEY to cardData.month.toString(),
|
||||
CARD_YEAR_KEY to cardData.year.toString(),
|
||||
CARD_CVC_KEY to cardData.cvc
|
||||
)
|
||||
|
||||
postForm(StripePaths.getTokensPath(), parameters).use { response ->
|
||||
val body = response.body ?: throw StripeError.FailedToCreatePaymentSourceFromCardData
|
||||
return CreditCardPaymentSource(JSONObject(body.string()))
|
||||
}
|
||||
}
|
||||
|
||||
private fun createPaymentMethodAndParseId(paymentSource: PaymentSource): String {
|
||||
val paymentMethodResponse = when (paymentSource) {
|
||||
is SEPADebitPaymentSource -> createPaymentMethodForSEPADebit(paymentSource)
|
||||
is IDEALPaymentSource -> createPaymentMethodForIDEAL(paymentSource)
|
||||
is PayPalPaymentSource -> error("Stripe cannot interact with PayPal payment source.")
|
||||
else -> createPaymentMethodForToken(paymentSource)
|
||||
}
|
||||
|
||||
return paymentMethodResponse.use { response ->
|
||||
val body = response.body ?: throw StripeError.FailedToParsePaymentMethodResponseError
|
||||
val paymentMethodObject = body.string().replace("\n", "").let { JSONObject(it) }
|
||||
paymentMethodObject.getString("id")
|
||||
}
|
||||
}
|
||||
|
||||
private fun createPaymentMethodForSEPADebit(paymentSource: SEPADebitPaymentSource): Response {
|
||||
val parameters = mutableMapOf(
|
||||
"type" to "sepa_debit",
|
||||
"sepa_debit[iban]" to paymentSource.sepaDebitData.iban,
|
||||
"billing_details[email]" to paymentSource.sepaDebitData.email,
|
||||
"billing_details[name]" to paymentSource.sepaDebitData.name
|
||||
)
|
||||
|
||||
return postForm(StripePaths.getPaymentMethodsPath(), parameters)
|
||||
}
|
||||
|
||||
private fun createPaymentMethodForIDEAL(paymentSource: IDEALPaymentSource): Response {
|
||||
val parameters = mutableMapOf(
|
||||
"type" to "ideal",
|
||||
"billing_details[email]" to paymentSource.idealData.email,
|
||||
"billing_details[name]" to paymentSource.idealData.name
|
||||
)
|
||||
|
||||
return postForm(StripePaths.getPaymentMethodsPath(), parameters)
|
||||
}
|
||||
|
||||
private fun createPaymentMethodForToken(paymentSource: PaymentSource): Response {
|
||||
val tokenId = paymentSource.getTokenId()
|
||||
val parameters = mutableMapOf(
|
||||
"card[token]" to tokenId,
|
||||
"type" to "card"
|
||||
)
|
||||
|
||||
return postForm(StripePaths.getPaymentMethodsPath(), parameters)
|
||||
}
|
||||
|
||||
private fun get(endpoint: String): Response {
|
||||
val request = getRequestBuilder(endpoint).get().build()
|
||||
val response = okHttpClient.newCall(request).execute()
|
||||
return checkResponseForErrors(response)
|
||||
}
|
||||
|
||||
private fun postForm(endpoint: String, parameters: Map<String, String>): Response {
|
||||
val formBodyBuilder = FormBody.Builder()
|
||||
parameters.forEach { (k, v) ->
|
||||
formBodyBuilder.add(k, v)
|
||||
}
|
||||
|
||||
val request = getRequestBuilder(endpoint)
|
||||
.post(formBodyBuilder.build())
|
||||
.build()
|
||||
|
||||
val response = okHttpClient.newCall(request).execute()
|
||||
|
||||
return checkResponseForErrors(response)
|
||||
}
|
||||
|
||||
private fun getRequestBuilder(endpoint: String): Request.Builder {
|
||||
return Request.Builder()
|
||||
.url("${configuration.baseUrl}/$endpoint")
|
||||
.addHeader("Authorization", "Basic ${"${configuration.publishableKey}:".encodeUtf8().base64()}")
|
||||
}
|
||||
|
||||
private fun checkResponseForErrors(response: Response): Response {
|
||||
if (response.isSuccessful) {
|
||||
return response
|
||||
} else {
|
||||
val body = response.body?.string()
|
||||
|
||||
val errorCode = parseErrorCode(body)
|
||||
val declineCode = parseDeclineCode(body) ?: StripeDeclineCode.getFromCode(errorCode)
|
||||
val failureCode = parseFailureCode(body) ?: StripeFailureCode.getFromCode(errorCode)
|
||||
|
||||
if (failureCode is StripeFailureCode.Known) {
|
||||
throw StripeError.PostError.Failed(response.code, failureCode)
|
||||
} else if (declineCode is StripeDeclineCode.Known) {
|
||||
throw StripeError.PostError.Declined(response.code, declineCode)
|
||||
} else {
|
||||
throw StripeError.PostError.Generic(response.code, errorCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseErrorCode(body: String?): String? {
|
||||
if (body == null) {
|
||||
Log.d(TAG, "parseErrorCode: No body.", true)
|
||||
return null
|
||||
}
|
||||
|
||||
return try {
|
||||
JSONObject(body).getJSONObject("error").getString("code")
|
||||
} catch (e: Exception) {
|
||||
Log.d(TAG, "parseErrorCode: Failed to parse error.", e, true)
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseDeclineCode(body: String?): StripeDeclineCode? {
|
||||
if (body == null) {
|
||||
Log.d(TAG, "parseDeclineCode: No body.", true)
|
||||
return null
|
||||
}
|
||||
|
||||
return try {
|
||||
StripeDeclineCode.getFromCode(JSONObject(body).getJSONObject("error").getString("decline_code"))
|
||||
} catch (e: Exception) {
|
||||
Log.d(TAG, "parseDeclineCode: Failed to parse decline code.", null, true)
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseFailureCode(body: String?): StripeFailureCode? {
|
||||
if (body == null) {
|
||||
Log.d(TAG, "parseFailureCode: No body.", true)
|
||||
return null
|
||||
}
|
||||
|
||||
return try {
|
||||
StripeFailureCode.getFromCode(JSONObject(body).getJSONObject("error").getString("failure_code"))
|
||||
} catch (e: Exception) {
|
||||
Log.d(TAG, "parseFailureCode: Failed to parse failure code.", null, true)
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
object Validation {
|
||||
private val MAX_AMOUNT = BigDecimal(99_999_999)
|
||||
|
||||
fun isAmountTooLarge(fiatMoney: FiatMoney): Boolean {
|
||||
return fiatMoney.minimumUnitPrecisionString.toBigDecimal() > MAX_AMOUNT
|
||||
}
|
||||
|
||||
fun isAmountTooSmall(fiatMoney: FiatMoney): Boolean {
|
||||
return fiatMoney.minimumUnitPrecisionString.toBigDecimal() < BigDecimal(minimumIntegralChargePerCurrencyCode[fiatMoney.currency.currencyCode] ?: 50)
|
||||
}
|
||||
|
||||
private val minimumIntegralChargePerCurrencyCode: Map<String, Int> = mapOf(
|
||||
"USD" to 50,
|
||||
"AED" to 200,
|
||||
"AUD" to 50,
|
||||
"BGN" to 100,
|
||||
"BRL" to 50,
|
||||
"CAD" to 50,
|
||||
"CHF" to 50,
|
||||
"CZK" to 1500,
|
||||
"DKK" to 250,
|
||||
"EUR" to 50,
|
||||
"GBP" to 30,
|
||||
"HKD" to 400,
|
||||
"HUF" to 17500,
|
||||
"INR" to 50,
|
||||
"JPY" to 50,
|
||||
"MXN" to 10,
|
||||
"MYR" to 2,
|
||||
"NOK" to 300,
|
||||
"NZD" to 50,
|
||||
"PLN" to 200,
|
||||
"RON" to 200,
|
||||
"SEK" to 300,
|
||||
"SGD" to 50
|
||||
)
|
||||
|
||||
val supportedCurrencyCodes: List<String> = listOf(
|
||||
"USD",
|
||||
"AED",
|
||||
"AFN",
|
||||
"ALL",
|
||||
"AMD",
|
||||
"ANG",
|
||||
"AOA",
|
||||
"ARS",
|
||||
"AUD",
|
||||
"AWG",
|
||||
"AZN",
|
||||
"BAM",
|
||||
"BBD",
|
||||
"BDT",
|
||||
"BGN",
|
||||
"BIF",
|
||||
"BMD",
|
||||
"BND",
|
||||
"BOB",
|
||||
"BRL",
|
||||
"BSD",
|
||||
"BWP",
|
||||
"BZD",
|
||||
"CAD",
|
||||
"CDF",
|
||||
"CHF",
|
||||
"CLP",
|
||||
"CNY",
|
||||
"COP",
|
||||
"CRC",
|
||||
"CVE",
|
||||
"CZK",
|
||||
"DJF",
|
||||
"DKK",
|
||||
"DOP",
|
||||
"DZD",
|
||||
"EGP",
|
||||
"ETB",
|
||||
"EUR",
|
||||
"FJD",
|
||||
"FKP",
|
||||
"GBP",
|
||||
"GEL",
|
||||
"GIP",
|
||||
"GMD",
|
||||
"GNF",
|
||||
"GTQ",
|
||||
"GYD",
|
||||
"HKD",
|
||||
"HNL",
|
||||
"HRK",
|
||||
"HTG",
|
||||
"HUF",
|
||||
"IDR",
|
||||
"ILS",
|
||||
"INR",
|
||||
"ISK",
|
||||
"JMD",
|
||||
"JPY",
|
||||
"KES",
|
||||
"KGS",
|
||||
"KHR",
|
||||
"KMF",
|
||||
"KRW",
|
||||
"KYD",
|
||||
"KZT",
|
||||
"LAK",
|
||||
"LBP",
|
||||
"LKR",
|
||||
"LRD",
|
||||
"LSL",
|
||||
"MAD",
|
||||
"MDL",
|
||||
"MGA",
|
||||
"MKD",
|
||||
"MMK",
|
||||
"MNT",
|
||||
"MOP",
|
||||
"MRO",
|
||||
"MUR",
|
||||
"MVR",
|
||||
"MWK",
|
||||
"MXN",
|
||||
"MYR",
|
||||
"MZN",
|
||||
"NAD",
|
||||
"NGN",
|
||||
"NIO",
|
||||
"NOK",
|
||||
"NPR",
|
||||
"NZD",
|
||||
"PAB",
|
||||
"PEN",
|
||||
"PGK",
|
||||
"PHP",
|
||||
"PKR",
|
||||
"PLN",
|
||||
"PYG",
|
||||
"QAR",
|
||||
"RON",
|
||||
"RSD",
|
||||
"RUB",
|
||||
"RWF",
|
||||
"SAR",
|
||||
"SBD",
|
||||
"SCR",
|
||||
"SEK",
|
||||
"SGD",
|
||||
"SHP",
|
||||
"SLL",
|
||||
"SOS",
|
||||
"SRD",
|
||||
"STD",
|
||||
"SZL",
|
||||
"THB",
|
||||
"TJS",
|
||||
"TOP",
|
||||
"TRY",
|
||||
"TTD",
|
||||
"TWD",
|
||||
"TZS",
|
||||
"UAH",
|
||||
"UGX",
|
||||
"UYU",
|
||||
"UZS",
|
||||
"VND",
|
||||
"VUV",
|
||||
"WST",
|
||||
"XAF",
|
||||
"XCD",
|
||||
"XOF",
|
||||
"XPF",
|
||||
"YER",
|
||||
"ZAR",
|
||||
"ZMW"
|
||||
)
|
||||
}
|
||||
|
||||
class Gateway(private val configuration: Configuration) : GooglePayApi.Gateway {
|
||||
override fun getTokenizationSpecificationParameters(): Map<String, String> {
|
||||
return mapOf(
|
||||
"gateway" to "stripe",
|
||||
"stripe:version" to configuration.version,
|
||||
"stripe:publishableKey" to configuration.publishableKey
|
||||
)
|
||||
}
|
||||
|
||||
override val allowedCardNetworks: List<String> = listOf(
|
||||
"AMEX",
|
||||
"DISCOVER",
|
||||
"JCB",
|
||||
"MASTERCARD",
|
||||
"VISA"
|
||||
)
|
||||
}
|
||||
|
||||
data class Configuration(
|
||||
val publishableKey: String,
|
||||
val baseUrl: String = "https://api.stripe.com/v1",
|
||||
val version: String = "2018-10-31"
|
||||
)
|
||||
|
||||
interface PaymentIntentFetcher {
|
||||
@WorkerThread
|
||||
fun fetchPaymentIntent(
|
||||
price: FiatMoney,
|
||||
level: Long,
|
||||
sourceType: PaymentSourceType.Stripe
|
||||
): StripeIntentAccessor
|
||||
}
|
||||
|
||||
interface SetupIntentHelper {
|
||||
@WorkerThread
|
||||
fun fetchSetupIntent(
|
||||
inAppPaymentType: InAppPaymentType,
|
||||
sourceType: PaymentSourceType.Stripe
|
||||
): StripeIntentAccessor
|
||||
}
|
||||
|
||||
@Parcelize
|
||||
data class CardData(
|
||||
val number: String,
|
||||
val month: Int,
|
||||
val year: Int,
|
||||
val cvc: String
|
||||
) : Parcelable
|
||||
|
||||
@Parcelize
|
||||
data class SEPADebitData(
|
||||
val iban: String,
|
||||
val name: String,
|
||||
val email: String
|
||||
) : Parcelable
|
||||
|
||||
@Parcelize
|
||||
data class IDEALData(
|
||||
val name: String,
|
||||
val email: String
|
||||
) : Parcelable
|
||||
|
||||
sealed interface Secure3DSAction {
|
||||
data class ConfirmRequired(val uri: Uri, val returnUri: Uri, override val stripeIntentAccessor: StripeIntentAccessor, override val paymentMethodId: String?) : Secure3DSAction
|
||||
data class NotNeeded(override val paymentMethodId: String?, override val stripeIntentAccessor: StripeIntentAccessor) : Secure3DSAction
|
||||
|
||||
val paymentMethodId: String?
|
||||
val stripeIntentAccessor: StripeIntentAccessor
|
||||
|
||||
companion object {
|
||||
fun from(
|
||||
uri: Uri,
|
||||
returnUri: Uri,
|
||||
stripeIntentAccessor: StripeIntentAccessor,
|
||||
paymentMethodId: String? = null
|
||||
): Secure3DSAction {
|
||||
return if (uri == Uri.EMPTY) {
|
||||
NotNeeded(paymentMethodId, stripeIntentAccessor)
|
||||
} else {
|
||||
ConfirmRequired(uri, returnUri, stripeIntentAccessor, paymentMethodId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
package org.signal.donations
|
||||
|
||||
/**
|
||||
* Stripe Payment Processor decline codes
|
||||
*/
|
||||
sealed class StripeDeclineCode(val rawCode: String) {
|
||||
|
||||
data class Known(val code: Code) : StripeDeclineCode(code.code)
|
||||
data class Unknown(val code: String) : StripeDeclineCode(code)
|
||||
|
||||
fun isKnown(): Boolean = this is Known
|
||||
|
||||
enum class Code(val code: String) {
|
||||
AUTHENTICATION_REQUIRED("authentication_required"),
|
||||
APPROVE_WITH_ID("approve_with_id"),
|
||||
CALL_ISSUER("call_issuer"),
|
||||
CARD_NOT_SUPPORTED("card_not_supported"),
|
||||
CARD_VELOCITY_EXCEEDED("card_velocity_exceeded"),
|
||||
CURRENCY_NOT_SUPPORTED("currency_not_supported"),
|
||||
DO_NOT_HONOR("do_not_honor"),
|
||||
DO_NOT_TRY_AGAIN("do_not_try_again"),
|
||||
DUPLICATE_TRANSACTION("duplicate_transaction"),
|
||||
EXPIRED_CARD("expired_card"),
|
||||
FRAUDULENT("fraudulent"),
|
||||
GENERIC_DECLINE("generic_decline"),
|
||||
INCORRECT_NUMBER("incorrect_number"),
|
||||
INCORRECT_CVC("incorrect_cvc"),
|
||||
INSUFFICIENT_FUNDS("insufficient_funds"),
|
||||
INVALID_ACCOUNT("invalid_account"),
|
||||
INVALID_AMOUNT("invalid_amount"),
|
||||
INVALID_CVC("invalid_cvc"),
|
||||
INVALID_EXPIRY_MONTH("invalid_expiry_month"),
|
||||
INVALID_EXPIRY_YEAR("invalid_expiry_year"),
|
||||
INVALID_NUMBER("invalid_number"),
|
||||
ISSUER_NOT_AVAILABLE("issuer_not_available"),
|
||||
LOST_CARD("lost_card"),
|
||||
MERCHANT_BLACKLIST("merchant_blacklist"),
|
||||
NEW_ACCOUNT_INFORMATION_AVAILABLE("new_account_information_available"),
|
||||
NO_ACTION_TAKEN("no_action_taken"),
|
||||
NOT_PERMITTED("not_permitted"),
|
||||
PROCESSING_ERROR("processing_error"),
|
||||
REENTER_TRANSACTION("reenter_transaction"),
|
||||
RESTRICTED_CARD("restricted_card"),
|
||||
REVOCATION_OF_ALL_AUTHORIZATIONS("revocation_of_all_authorizations"),
|
||||
REVOCATION_OF_AUTHORIZATION("revocation_of_authorization"),
|
||||
SECURITY_VIOLATION("security_violation"),
|
||||
SERVICE_NOT_ALLOWED("service_not_allowed"),
|
||||
STOLEN_CARD("stolen_card"),
|
||||
STOP_PAYMENT_ORDER("stop_payment_order"),
|
||||
TRANSACTION_NOT_ALLOWED("transaction_not_allowed"),
|
||||
TRY_AGAIN_LATER("try_again_later"),
|
||||
WITHDRAWAL_COUNT_LIMIT_EXCEEDED("withdrawal_count_limit_exceeded")
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getFromCode(code: String?): StripeDeclineCode {
|
||||
if (code == null) {
|
||||
return Unknown("null")
|
||||
}
|
||||
|
||||
val typedCode: Code? = Code.entries.firstOrNull { it.code == code }
|
||||
return typedCode?.let { Known(typedCode) } ?: Unknown(code)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package org.signal.donations
|
||||
|
||||
import com.fasterxml.jackson.databind.exc.InvalidDefinitionException
|
||||
|
||||
sealed class StripeError(message: String) : Exception(message) {
|
||||
class FailedToParsePaymentIntentResponseError(invalidDefCause: InvalidDefinitionException?) : StripeError("Failed to parse payment intent response: ${invalidDefCause?.type} ${invalidDefCause?.property} ${invalidDefCause?.beanDescription}")
|
||||
class FailedToParseSetupIntentResponseError(invalidDefCause: InvalidDefinitionException?) : StripeError("Failed to parse setup intent response: ${invalidDefCause?.type} ${invalidDefCause?.property} ${invalidDefCause?.beanDescription}")
|
||||
object FailedToParsePaymentMethodResponseError : StripeError("Failed to parse payment method response")
|
||||
object FailedToCreatePaymentSourceFromCardData : StripeError("Failed to create payment source from card data")
|
||||
sealed class PostError(
|
||||
override val message: String
|
||||
) : StripeError(message) {
|
||||
class Generic(statusCode: Int, val errorCode: String?) : PostError("postForm failed with code: $statusCode errorCode: $errorCode")
|
||||
class Declined(statusCode: Int, val declineCode: StripeDeclineCode) : PostError("postForm failed with code: $statusCode declineCode: $declineCode")
|
||||
class Failed(statusCode: Int, val failureCode: StripeFailureCode) : PostError("postForm failed with code: $statusCode failureCode: $failureCode")
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Copyright 2023 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.donations
|
||||
|
||||
/**
|
||||
* Bank Transfer failure codes, as detailed here:
|
||||
* https://stripe.com/docs/payments/sepa-debit#failed-payments
|
||||
*/
|
||||
sealed class StripeFailureCode(val rawCode: String) {
|
||||
data class Known(val code: Code) : StripeFailureCode(code.code)
|
||||
data class Unknown(val code: String) : StripeFailureCode(code)
|
||||
|
||||
val isKnown get() = this is Known
|
||||
enum class Code(val code: String) {
|
||||
REFER_TO_CUSTOMER("refer_to_customer"),
|
||||
INSUFFICIENT_FUNDS("insufficient_funds"),
|
||||
DEBIT_DISPUTED("debit_disputed"),
|
||||
AUTHORIZATION_REVOKED("authorization_revoked"),
|
||||
DEBIT_NOT_AUTHORIZED("debit_not_authorized"),
|
||||
ACCOUNT_CLOSED("account_closed"),
|
||||
BANK_ACCOUNT_RESTRICTED("bank_account_restricted"),
|
||||
DEBIT_AUTHORIZATION_NOT_MATCH("debit_authorization_not_match"),
|
||||
RECIPIENT_DECEASED("recipient_deceased"),
|
||||
BRANCH_DOES_NOT_EXIST("branch_does_not_exist"),
|
||||
INCORRECT_ACCOUNT_HOLDER_NAME("incorrect_account_holder_name"),
|
||||
INVALID_ACCOUNT_NUMBER("invalid_account_number"),
|
||||
GENERIC_COULD_NOT_PROCESS("generic_could_not_process")
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getFromCode(code: String?): StripeFailureCode {
|
||||
if (code == null) {
|
||||
return Unknown("null")
|
||||
}
|
||||
|
||||
val typedCode: Code? = Code.entries.firstOrNull { it.code == code }
|
||||
return typedCode?.let { Known(typedCode) } ?: Unknown(code)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package org.signal.donations
|
||||
|
||||
import android.net.Uri
|
||||
import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
/**
|
||||
* An object which wraps the necessary information to access a SetupIntent or PaymentIntent
|
||||
* from the Stripe API
|
||||
*/
|
||||
@Parcelize
|
||||
data class StripeIntentAccessor(
|
||||
val objectType: ObjectType,
|
||||
val intentId: String,
|
||||
val intentClientSecret: String
|
||||
) : Parcelable {
|
||||
|
||||
enum class ObjectType {
|
||||
NONE,
|
||||
PAYMENT_INTENT,
|
||||
SETUP_INTENT
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
/**
|
||||
* noActionRequired is a safe default for when there was no 3DS required,
|
||||
* in order to continue a reactive payment chain.
|
||||
*/
|
||||
val NO_ACTION_REQUIRED = StripeIntentAccessor(ObjectType.NONE, "", "")
|
||||
|
||||
private const val KEY_PAYMENT_INTENT = "payment_intent"
|
||||
private const val KEY_PAYMENT_INTENT_CLIENT_SECRET = "payment_intent_client_secret"
|
||||
private const val KEY_SETUP_INTENT = "setup_intent"
|
||||
private const val KEY_SETUP_INTENT_CLIENT_SECRET = "setup_intent_client_secret"
|
||||
|
||||
fun fromUri(uri: String): StripeIntentAccessor {
|
||||
val parsedUri = Uri.parse(uri)
|
||||
return if (parsedUri.queryParameterNames.contains(KEY_PAYMENT_INTENT)) {
|
||||
StripeIntentAccessor(
|
||||
ObjectType.PAYMENT_INTENT,
|
||||
parsedUri.getQueryParameter(KEY_PAYMENT_INTENT)!!,
|
||||
parsedUri.getQueryParameter(KEY_PAYMENT_INTENT_CLIENT_SECRET)!!
|
||||
)
|
||||
} else {
|
||||
StripeIntentAccessor(
|
||||
ObjectType.SETUP_INTENT,
|
||||
parsedUri.getQueryParameter(KEY_SETUP_INTENT)!!,
|
||||
parsedUri.getQueryParameter(KEY_SETUP_INTENT_CLIENT_SECRET)!!
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright 2024 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.donations
|
||||
|
||||
/**
|
||||
* Endpoint generation class that assists in ensuring test code utilizes the same
|
||||
* paths for data access as production code.
|
||||
*/
|
||||
object StripePaths {
|
||||
|
||||
/**
|
||||
* Endpoint to retrieve data on the given payment intent
|
||||
*/
|
||||
fun getPaymentIntentPath(paymentIntentId: String, clientSecret: String): String {
|
||||
return "payment_intents/$paymentIntentId?client_secret=$clientSecret"
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint to confirm the given payment intent
|
||||
*/
|
||||
fun getPaymentIntentConfirmationPath(paymentIntentId: String): String {
|
||||
return "payment_intents/$paymentIntentId/confirm"
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint to retrieve data on the given setup intent
|
||||
*/
|
||||
fun getSetupIntentPath(setupIntentId: String, clientSecret: String): String {
|
||||
return "setup_intents/$setupIntentId?client_secret=$clientSecret&expand[0]=latest_attempt"
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint to confirm the given setup intent
|
||||
*/
|
||||
fun getSetupIntentConfirmationPath(setupIntentId: String): String {
|
||||
return "setup_intents/$setupIntentId/confirm"
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint to interact with payment methods
|
||||
*/
|
||||
fun getPaymentMethodsPath() = "payment_methods"
|
||||
|
||||
/**
|
||||
* Endpoint to interact with tokens
|
||||
*/
|
||||
fun getTokensPath() = "tokens"
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Copyright 2025 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.donations
|
||||
|
||||
import org.json.JSONObject
|
||||
|
||||
class TokenPaymentSource(
|
||||
override val type: PaymentSourceType,
|
||||
val parameters: String,
|
||||
val token: String,
|
||||
val email: String?
|
||||
) : PaymentSource {
|
||||
|
||||
override fun parameterize(): JSONObject = JSONObject(parameters)
|
||||
|
||||
override fun getTokenId(): String = token
|
||||
|
||||
override fun email(): String? = email
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package org.signal.donations.json
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator
|
||||
import com.fasterxml.jackson.annotation.JsonValue
|
||||
|
||||
/**
|
||||
* Stripe intent status, from:
|
||||
*
|
||||
* https://stripe.com/docs/api/setup_intents/object?lang=curl#setup_intent_object-status
|
||||
* https://stripe.com/docs/api/payment_intents/object?lang=curl#payment_intent_object-status
|
||||
*
|
||||
* Note: REQUIRES_CAPTURE is only ever valid for a SetupIntent
|
||||
*/
|
||||
enum class StripeIntentStatus(private val code: String) {
|
||||
REQUIRES_PAYMENT_METHOD("requires_payment_method"),
|
||||
REQUIRES_CONFIRMATION("requires_confirmation"),
|
||||
REQUIRES_ACTION("requires_action"),
|
||||
REQUIRES_CAPTURE("requires_capture"),
|
||||
PROCESSING("processing"),
|
||||
CANCELED("canceled"),
|
||||
SUCCEEDED("succeeded");
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
@JsonCreator
|
||||
fun fromCode(code: String): StripeIntentStatus = entries.first { it.code == code }
|
||||
}
|
||||
|
||||
fun canProceed(): Boolean {
|
||||
return this == PROCESSING || this == SUCCEEDED
|
||||
}
|
||||
|
||||
@JsonValue
|
||||
fun toValue(): String {
|
||||
return code
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package org.signal.donations.json
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
|
||||
/**
|
||||
* Represents a Stripe API PaymentIntent object.
|
||||
*
|
||||
* See: https://stripe.com/docs/api/payment_intents/object
|
||||
*/
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
data class StripePaymentIntent @JsonCreator constructor(
|
||||
@JsonProperty("id") val id: String,
|
||||
@JsonProperty("client_secret") val clientSecret: String,
|
||||
@JsonProperty("status") val status: StripeIntentStatus?,
|
||||
@JsonProperty("payment_method") val paymentMethod: String?
|
||||
)
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package org.signal.donations.json
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
|
||||
/**
|
||||
* Represents a Stripe API SetupIntent object.
|
||||
*
|
||||
* See: https://stripe.com/docs/api/setup_intents/object
|
||||
*/
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
data class StripeSetupIntent @JsonCreator constructor(
|
||||
@JsonProperty("id") val id: String,
|
||||
@JsonProperty("client_secret") val clientSecret: String,
|
||||
@JsonProperty("status") val status: StripeIntentStatus,
|
||||
@JsonProperty("payment_method") val paymentMethodId: String?,
|
||||
@JsonProperty("customer") val customer: String?
|
||||
)
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="228dp" android:height="38dp" android:viewportWidth="228" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M2.31643 30V9.952h6.412c2.10937 0 3.91997.4293 5.43197 1.288 1.5307.84 2.7067 2.016 3.528 3.528.84 1.512 1.26 3.248 1.26 5.208 0 1.9787-.42 3.724-1.26 5.236-.8213 1.4933-1.9973 2.6693-3.528 3.528-1.512.84-3.3226 1.26-5.43197 1.26h-6.412zm3.08-2.912h3.248c2.27737 0 4.04137-.6347 5.29197-1.904 1.2694-1.2693 1.904-3.0053 1.904-5.208s-.6346-3.9387-1.904-5.208c-1.2506-1.2693-3.0146-1.904-5.29197-1.904h-3.248v14.224zm23.17817 3.36c-1.4746 0-2.772-.336-3.892-1.008-1.12-.672-1.9973-1.5773-2.632-2.716-.6346-1.1387-.952-2.4267-.952-3.864 0-1.4187.3174-2.6973.952-3.836.6347-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4174-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9974 1.5867 2.632 2.744.6347 1.1387.952 2.4173.952 3.836 0 1.4373-.3173 2.7253-.952 3.864-.6346 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2134-.9427 1.624-1.652.4294-.728.644-1.596.644-2.604s-.2146-1.8667-.644-2.576c-.4106-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5213.196-2.212.588-.672.3733-1.2226.924-1.652 1.652-.4106.7093-.616 1.568-.616 2.576s.2054 1.876.616 2.604c.4294.7093.98 1.26 1.652 1.652.6907.3733 1.428.56 2.212.56zM38.8343 30V15.72h2.856v1.96h.168c.4107-.6907 1.0173-1.26 1.82-1.708.8213-.4667 1.7173-.7 2.688-.7 1.7547 0 3.0707.5227 3.948 1.568.8773 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2893-1.9973-.868-2.52-.5787-.5413-1.3347-.812-2.268-.812-.728 0-1.3627.2053-1.904.616-.5413.392-.9707.9147-1.288 1.568-.2987.6533-.448 1.3533-.448 2.1V30h-3.024zm20.8855.448c-1.0267 0-1.9414-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6906.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6534.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0266-.504 2.1466-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3734.5787-.9334 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4746-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3546-.616.532-1.2787.532-1.988-.4294-.2427-.9334-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1094.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zm21.8883 2.464c-1.0267 0-1.9413-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6907.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3733.5787-.9333 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3547-.616.532-1.2787.532-1.988-.4293-.2427-.9333-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zM93.2452 30V15.72h2.856v1.96h.168c.4107-.6907 1.008-1.26 1.792-1.708.784-.4667 1.652-.7 2.6038-.7 1.064 0 1.97.252 2.716.756.747.504 1.279 1.1387 1.596 1.904.467-.7467 1.102-1.372 1.904-1.876.803-.5227 1.783-.784 2.94-.784 1.68 0 2.931.5133 3.752 1.54.822 1.008 1.232 2.352 1.232 4.032V30h-2.996v-8.652c0-1.1387-.252-1.9693-.756-2.492-.485-.5413-1.166-.812-2.044-.812-.69 0-1.297.196-1.82.588-.522.3733-.933.8867-1.232 1.54-.28.6533-.42 1.3813-.42 2.184V30h-2.996v-8.652c0-1.1387-.252-1.9693-.756-2.492-.504-.5413-1.213-.812-2.1278-.812-.672 0-1.26.196-1.764.588-.504.392-.9053.9147-1.204 1.568-.28.6533-.42 1.3813-.42 2.184V30h-3.024zm32.8808.448c-1.101 0-2.053-.2333-2.856-.7-.784-.4853-1.363-1.036-1.736-1.652h-.168V30h-2.856V9.952h3.024v5.712l-.168 1.988h.168c.373-.616.952-1.1667 1.736-1.652.803-.4853 1.755-.728 2.856-.728 1.307 0 2.473.3267 3.5.98 1.027.6533 1.839 1.5493 2.436 2.688.616 1.1387.924 2.4453.924 3.92s-.308 2.7907-.924 3.948c-.597 1.1387-1.409 2.0347-2.436 2.688-1.027.6347-2.193.952-3.5.952zm-.448-2.772c.747 0 1.447-.196 2.1-.588.653-.392 1.185-.9427 1.596-1.652.411-.728.616-1.5867.616-2.576 0-.9893-.205-1.8387-.616-2.548-.411-.728-.943-1.288-1.596-1.68-.653-.392-1.353-.588-2.1-.588-.747 0-1.447.196-2.1.588-.653.392-1.185.952-1.596 1.68-.411.7093-.616 1.5587-.616 2.548 0 .9893.205 1.848.616 2.576.411.7093.943 1.26 1.596 1.652.653.392 1.353.588 2.1.588z" android:fillColor="#3c4043"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M184.529 9.44664v8.16616h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82685-1.776-1.24122-2.976-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.008V6.57217h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.34951 2.158 2.99393 2.158 4.93143 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM199.864 25.0602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.2949-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5935 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3266 4.413.9799v-.6869c0-1.0452-.415-1.9318-1.242-2.6616-.83-.7299-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0906 3.619-3.1358 6.476-3.1358zM227.463 13.9543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M172.373 18.4452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M159.454 31.5782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M151.901 20.7111c-.273-.8119-.422-1.678-.422-2.5721 0-.894.149-1.7601.422-2.572v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0345 0 2.1708.518 4.2205 1.433 6.0346l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M159.454 10.0196c1.982 0 3.759.6813 5.161 2.0159v.0019l3.84-3.83578C166.123 6.03271 163.082 4.7 159.454 4.7c-5.257 0-9.807 3.01446-12.021 7.4046l4.468 3.4624c1.065-3.1843 4.043-5.5474 7.553-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="228dp" android:height="38dp" android:viewportWidth="228" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M2.31643 30V9.952h6.412c2.10937 0 3.91997.4293 5.43197 1.288 1.5307.84 2.7067 2.016 3.528 3.528.84 1.512 1.26 3.248 1.26 5.208 0 1.9787-.42 3.724-1.26 5.236-.8213 1.4933-1.9973 2.6693-3.528 3.528-1.512.84-3.3226 1.26-5.43197 1.26h-6.412zm3.08-2.912h3.248c2.27737 0 4.04137-.6347 5.29197-1.904 1.2694-1.2693 1.904-3.0053 1.904-5.208s-.6346-3.9387-1.904-5.208c-1.2506-1.2693-3.0146-1.904-5.29197-1.904h-3.248v14.224zm23.17817 3.36c-1.4746 0-2.772-.336-3.892-1.008-1.12-.672-1.9973-1.5773-2.632-2.716-.6346-1.1387-.952-2.4267-.952-3.864 0-1.4187.3174-2.6973.952-3.836.6347-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4174-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9974 1.5867 2.632 2.744.6347 1.1387.952 2.4173.952 3.836 0 1.4373-.3173 2.7253-.952 3.864-.6346 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2134-.9427 1.624-1.652.4294-.728.644-1.596.644-2.604s-.2146-1.8667-.644-2.576c-.4106-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5213.196-2.212.588-.672.3733-1.2226.924-1.652 1.652-.4106.7093-.616 1.568-.616 2.576s.2054 1.876.616 2.604c.4294.7093.98 1.26 1.652 1.652.6907.3733 1.428.56 2.212.56zM38.8343 30V15.72h2.856v1.96h.168c.4107-.6907 1.0173-1.26 1.82-1.708.8213-.4667 1.7173-.7 2.688-.7 1.7547 0 3.0707.5227 3.948 1.568.8773 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2893-1.9973-.868-2.52-.5787-.5413-1.3347-.812-2.268-.812-.728 0-1.3627.2053-1.904.616-.5413.392-.9707.9147-1.288 1.568-.2987.6533-.448 1.3533-.448 2.1V30h-3.024zm20.8855.448c-1.0267 0-1.9414-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6906.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6534.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0266-.504 2.1466-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3734.5787-.9334 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4746-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3546-.616.532-1.2787.532-1.988-.4294-.2427-.9334-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1094.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zm21.8883 2.464c-1.0267 0-1.9413-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6907.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3733.5787-.9333 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3547-.616.532-1.2787.532-1.988-.4293-.2427-.9333-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zM93.2452 30V15.72h2.856v1.96h.168c.4107-.6907 1.008-1.26 1.792-1.708.784-.4667 1.652-.7 2.6038-.7 1.064 0 1.97.252 2.716.756.747.504 1.279 1.1387 1.596 1.904.467-.7467 1.102-1.372 1.904-1.876.803-.5227 1.783-.784 2.94-.784 1.68 0 2.931.5133 3.752 1.54.822 1.008 1.232 2.352 1.232 4.032V30h-2.996v-8.652c0-1.1387-.252-1.9693-.756-2.492-.485-.5413-1.166-.812-2.044-.812-.69 0-1.297.196-1.82.588-.522.3733-.933.8867-1.232 1.54-.28.6533-.42 1.3813-.42 2.184V30h-2.996v-8.652c0-1.1387-.252-1.9693-.756-2.492-.504-.5413-1.213-.812-2.1278-.812-.672 0-1.26.196-1.764.588-.504.392-.9053.9147-1.204 1.568-.28.6533-.42 1.3813-.42 2.184V30h-3.024zm32.8808.448c-1.101 0-2.053-.2333-2.856-.7-.784-.4853-1.363-1.036-1.736-1.652h-.168V30h-2.856V9.952h3.024v5.712l-.168 1.988h.168c.373-.616.952-1.1667 1.736-1.652.803-.4853 1.755-.728 2.856-.728 1.307 0 2.473.3267 3.5.98 1.027.6533 1.839 1.5493 2.436 2.688.616 1.1387.924 2.4453.924 3.92s-.308 2.7907-.924 3.948c-.597 1.1387-1.409 2.0347-2.436 2.688-1.027.6347-2.193.952-3.5.952zm-.448-2.772c.747 0 1.447-.196 2.1-.588.653-.392 1.185-.9427 1.596-1.652.411-.728.616-1.5867.616-2.576 0-.9893-.205-1.8387-.616-2.548-.411-.728-.943-1.288-1.596-1.68-.653-.392-1.353-.588-2.1-.588-.747 0-1.447.196-2.1.588-.653.392-1.185.952-1.596 1.68-.411.7093-.616 1.5587-.616 2.548 0 .9893.205 1.848.616 2.576.411.7093.943 1.26 1.596 1.652.653.392 1.353.588 2.1.588z" android:fillColor="#ffffff"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M184.529 9.34665v8.16615h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82684-1.776-1.24121-2.976-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.008V6.47218h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.3495 2.158 2.99392 2.158 4.93142 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM199.864 24.9602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.295-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5936 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3267 4.413.9799v-.6868c0-1.0453-.415-1.9319-1.242-2.6617-.83-.7298-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0905 3.619-3.1358 6.476-3.1358zM227.463 13.8543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M172.373 18.3452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M159.454 31.4782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M151.901 20.6111c-.273-.8119-.422-1.678-.422-2.572 0-.8941.149-1.7602.422-2.5721v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0346 0 2.1707.518 4.2204 1.433 6.0345l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M159.454 9.91964c1.982 0 3.759.68126 5.161 2.01586v.0019l3.84-3.83577c-2.332-2.16891-5.373-3.50162-9.001-3.50162-5.257 0-9.807 3.01446-12.021 7.40459l4.468 3.4624c1.065-3.1843 4.043-5.54736 7.553-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="242dp" android:height="38dp" android:viewportWidth="242" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M2.8641 30V9.952h6.412c2.1093 0 3.92.4293 5.432 1.288 1.5307.84 2.7067 2.016 3.528 3.528.84 1.512 1.26 3.248 1.26 5.208 0 1.9787-.42 3.724-1.26 5.236-.8213 1.4933-1.9973 2.6693-3.528 3.528-1.512.84-3.3227 1.26-5.432 1.26h-6.412zm3.08-2.912h3.248c2.2773 0 4.0413-.6347 5.292-1.904 1.2693-1.2693 1.904-3.0053 1.904-5.208s-.6347-3.9387-1.904-5.208c-1.2507-1.2693-3.0147-1.904-5.292-1.904h-3.248v14.224zm23.1782 3.36c-1.4747 0-2.772-.336-3.892-1.008-1.12-.672-1.9973-1.5773-2.632-2.716-.6347-1.1387-.952-2.4267-.952-3.864 0-1.4187.3173-2.6973.952-3.836.6347-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4173-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9973 1.5867 2.632 2.744.6347 1.1387.952 2.4173.952 3.836 0 1.4373-.3173 2.7253-.952 3.864-.6347 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2133-.9427 1.624-1.652.4293-.728.644-1.596.644-2.604s-.2147-1.8667-.644-2.576c-.4107-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5213.196-2.212.588-.672.3733-1.2227.924-1.652 1.652-.4107.7093-.616 1.568-.616 2.576s.2053 1.876.616 2.604c.4293.7093.98 1.26 1.652 1.652.6907.3733 1.428.56 2.212.56zM39.382 30V15.72h2.856v1.96h.168c.4106-.6907 1.0173-1.26 1.82-1.708.8213-.4667 1.7173-.7 2.688-.7 1.7546 0 3.0706.5227 3.948 1.568.8773 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2894-1.9973-.868-2.52-.5787-.5413-1.3347-.812-2.268-.812-.728 0-1.3627.2053-1.904.616-.5414.392-.9707.9147-1.288 1.568-.2987.6533-.448 1.3533-.448 2.1V30h-3.024zm23.0662.448c-1.4 0-2.6507-.3267-3.752-.98-1.1014-.6533-1.9694-1.5493-2.604-2.688-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.2986-2.6227.896-3.78.5973-1.1573 1.428-2.0813 2.492-2.772 1.0826-.7093 2.324-1.064 3.724-1.064 1.4746 0 2.7253.3173 3.752.952 1.0453.6347 1.8386 1.5027 2.38 2.604.5413 1.1013.812 2.3427.812 3.724 0 .2053-.0094.392-.028.56 0 .168-.0094.2987-.028.392h-11.032c.1493 1.4187.644 2.4827 1.484 3.192.8586.7093 1.8293 1.064 2.912 1.064.9706 0 1.7733-.2147 2.408-.644.6346-.448 1.1386-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.3894 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.8667.308-2.576.924-.7094.616-1.1854 1.4373-1.428 2.464h7.924c-.0374-.4853-.196-.9893-.476-1.512-.28-.5227-.7094-.9613-1.288-1.316-.56-.3733-1.2787-.56-2.156-.56zm-1.26-4.872l1.316-3.584h3.416l-2.24 3.584h-2.492zM72.3296 30V15.72h2.856v2.1h.168c.3174-.728.8587-1.3253 1.624-1.792.784-.4853 1.624-.728 2.52-.728.392 0 .7187.028.98.084.28.056.532.1213.756.196v3.136c-.3546-.1493-.7186-.2707-1.092-.364-.3546-.0933-.728-.14-1.12-.14-.7093 0-1.344.196-1.904.588-.5413.3733-.9706.8867-1.288 1.54-.3173.6347-.476 1.3347-.476 2.1V30h-3.024zm18.3735 0V15.72h2.856v1.96h.168c.4106-.6907 1.008-1.26 1.792-1.708.784-.4667 1.652-.7 2.604-.7 1.064 0 1.9689.252 2.7159.756.747.504 1.279 1.1387 1.596 1.904.467-.7467 1.101-1.372 1.904-1.876.803-.5227 1.783-.784 2.94-.784 1.68 0 2.931.5133 3.752 1.54.821 1.008 1.232 2.352 1.232 4.032V30h-2.996v-8.652c0-1.1387-.252-1.9693-.756-2.492-.485-.5413-1.167-.812-2.044-.812-.691 0-1.297.196-1.82.588-.523.3733-.933.8867-1.232 1.54-.28.6533-.42 1.3813-.42 2.184V30h-2.9959v-8.652c0-1.1387-.252-1.9693-.756-2.492-.504-.5413-1.2134-.812-2.128-.812-.672 0-1.26.196-1.764.588-.504.392-.9054.9147-1.204 1.568-.28.6533-.42 1.3813-.42 2.184V30h-3.024zm31.7889.448c-1.4 0-2.651-.3267-3.752-.98s-1.969-1.5493-2.604-2.688c-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.299-2.6227.896-3.78.597-1.1573 1.428-2.0813 2.492-2.772 1.083-.7093 2.324-1.064 3.724-1.064 1.475 0 2.725.3173 3.752.952 1.045.6347 1.839 1.5027 2.38 2.604.541 1.1013.812 2.3427.812 3.724 0 .2053-.009.392-.028.56 0 .168-.009.2987-.028.392H118.18c.149 1.4187.644 2.4827 1.484 3.192.859.7093 1.829 1.064 2.912 1.064.971 0 1.773-.2147 2.408-.644.635-.448 1.139-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.389 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.867.308-2.576.924-.709.616-1.185 1.4373-1.428 2.464h7.924c-.037-.4853-.196-.9893-.476-1.512-.28-.5227-.709-.9613-1.288-1.316-.56-.3733-1.279-.56-2.156-.56zm16.262 12.6c-1.288 0-2.455-.3173-3.5-.952-1.027-.6533-1.848-1.5493-2.464-2.688-.597-1.1573-.896-2.4733-.896-3.948s.299-2.7813.896-3.92c.616-1.1387 1.437-2.0347 2.464-2.688 1.045-.6533 2.212-.98 3.5-.98 1.101 0 2.044.2427 2.828.728.803.4853 1.391 1.036 1.764 1.652h.168l-.168-1.988V9.952h2.996V30h-2.828v-1.904h-.168c-.373.616-.961 1.1667-1.764 1.652-.784.4667-1.727.7-2.828.7zm.448-2.772c.747 0 1.447-.196 2.1-.588.672-.392 1.204-.9427 1.596-1.652.411-.728.616-1.5867.616-2.576 0-.9893-.205-1.8387-.616-2.548-.392-.728-.924-1.288-1.596-1.68-.653-.392-1.353-.588-2.1-.588-.747 0-1.447.196-2.1.588-.653.392-1.185.952-1.596 1.68-.411.7093-.616 1.5587-.616 2.548 0 .9893.205 1.848.616 2.576.411.7093.943 1.26 1.596 1.652.653.392 1.353.588 2.1.588z" android:fillColor="#3c4043"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M198.529 9.44664v8.16616h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82685-1.776-1.24122-2.976-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.008V6.57217h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.34951 2.158 2.99393 2.158 4.93143 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM213.864 25.0602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.2949-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5935 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3266 4.413.9799v-.6869c0-1.0452-.415-1.9318-1.242-2.6616-.83-.7299-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0906 3.619-3.1358 6.476-3.1358zM241.463 13.9543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M186.373 18.4452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M173.454 31.5782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M165.901 20.7111c-.273-.8119-.422-1.678-.422-2.5721 0-.894.149-1.7601.422-2.572v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0345 0 2.1708.518 4.2205 1.433 6.0346l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M173.454 10.0196c1.982 0 3.759.6813 5.161 2.0159v.0019l3.84-3.83578C180.123 6.03271 177.082 4.7 173.454 4.7c-5.257 0-9.807 3.01446-12.021 7.4046l4.468 3.4624c1.065-3.1843 4.043-5.5474 7.553-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="242dp" android:height="38dp" android:viewportWidth="242" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M2.8641 30V9.952h6.412c2.1093 0 3.92.4293 5.432 1.288 1.5307.84 2.7067 2.016 3.528 3.528.84 1.512 1.26 3.248 1.26 5.208 0 1.9787-.42 3.724-1.26 5.236-.8213 1.4933-1.9973 2.6693-3.528 3.528-1.512.84-3.3227 1.26-5.432 1.26h-6.412zm3.08-2.912h3.248c2.2773 0 4.0413-.6347 5.292-1.904 1.2693-1.2693 1.904-3.0053 1.904-5.208s-.6347-3.9387-1.904-5.208c-1.2507-1.2693-3.0147-1.904-5.292-1.904h-3.248v14.224zm23.1782 3.36c-1.4747 0-2.772-.336-3.892-1.008-1.12-.672-1.9973-1.5773-2.632-2.716-.6347-1.1387-.952-2.4267-.952-3.864 0-1.4187.3173-2.6973.952-3.836.6347-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4173-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9973 1.5867 2.632 2.744.6347 1.1387.952 2.4173.952 3.836 0 1.4373-.3173 2.7253-.952 3.864-.6347 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2133-.9427 1.624-1.652.4293-.728.644-1.596.644-2.604s-.2147-1.8667-.644-2.576c-.4107-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5213.196-2.212.588-.672.3733-1.2227.924-1.652 1.652-.4107.7093-.616 1.568-.616 2.576s.2053 1.876.616 2.604c.4293.7093.98 1.26 1.652 1.652.6907.3733 1.428.56 2.212.56zM39.382 30V15.72h2.856v1.96h.168c.4106-.6907 1.0173-1.26 1.82-1.708.8213-.4667 1.7173-.7 2.688-.7 1.7546 0 3.0706.5227 3.948 1.568.8773 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2894-1.9973-.868-2.52-.5787-.5413-1.3347-.812-2.268-.812-.728 0-1.3627.2053-1.904.616-.5414.392-.9707.9147-1.288 1.568-.2987.6533-.448 1.3533-.448 2.1V30h-3.024zm23.0662.448c-1.4 0-2.6507-.3267-3.752-.98-1.1014-.6533-1.9694-1.5493-2.604-2.688-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.2986-2.6227.896-3.78.5973-1.1573 1.428-2.0813 2.492-2.772 1.0826-.7093 2.324-1.064 3.724-1.064 1.4746 0 2.7253.3173 3.752.952 1.0453.6347 1.8386 1.5027 2.38 2.604.5413 1.1013.812 2.3427.812 3.724 0 .2053-.0094.392-.028.56 0 .168-.0094.2987-.028.392h-11.032c.1493 1.4187.644 2.4827 1.484 3.192.8586.7093 1.8293 1.064 2.912 1.064.9706 0 1.7733-.2147 2.408-.644.6346-.448 1.1386-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.3894 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.8667.308-2.576.924-.7094.616-1.1854 1.4373-1.428 2.464h7.924c-.0374-.4853-.196-.9893-.476-1.512-.28-.5227-.7094-.9613-1.288-1.316-.56-.3733-1.2787-.56-2.156-.56zm-1.26-4.872l1.316-3.584h3.416l-2.24 3.584h-2.492zM72.3296 30V15.72h2.856v2.1h.168c.3174-.728.8587-1.3253 1.624-1.792.784-.4853 1.624-.728 2.52-.728.392 0 .7187.028.98.084.28.056.532.1213.756.196v3.136c-.3546-.1493-.7186-.2707-1.092-.364-.3546-.0933-.728-.14-1.12-.14-.7093 0-1.344.196-1.904.588-.5413.3733-.9706.8867-1.288 1.54-.3173.6347-.476 1.3347-.476 2.1V30h-3.024zm18.3735 0V15.72h2.856v1.96h.168c.4106-.6907 1.008-1.26 1.792-1.708.784-.4667 1.652-.7 2.604-.7 1.064 0 1.9689.252 2.7159.756.747.504 1.279 1.1387 1.596 1.904.467-.7467 1.101-1.372 1.904-1.876.803-.5227 1.783-.784 2.94-.784 1.68 0 2.931.5133 3.752 1.54.821 1.008 1.232 2.352 1.232 4.032V30h-2.996v-8.652c0-1.1387-.252-1.9693-.756-2.492-.485-.5413-1.167-.812-2.044-.812-.691 0-1.297.196-1.82.588-.523.3733-.933.8867-1.232 1.54-.28.6533-.42 1.3813-.42 2.184V30h-2.9959v-8.652c0-1.1387-.252-1.9693-.756-2.492-.504-.5413-1.2134-.812-2.128-.812-.672 0-1.26.196-1.764.588-.504.392-.9054.9147-1.204 1.568-.28.6533-.42 1.3813-.42 2.184V30h-3.024zm31.7889.448c-1.4 0-2.651-.3267-3.752-.98s-1.969-1.5493-2.604-2.688c-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.299-2.6227.896-3.78.597-1.1573 1.428-2.0813 2.492-2.772 1.083-.7093 2.324-1.064 3.724-1.064 1.475 0 2.725.3173 3.752.952 1.045.6347 1.839 1.5027 2.38 2.604.541 1.1013.812 2.3427.812 3.724 0 .2053-.009.392-.028.56 0 .168-.009.2987-.028.392H118.18c.149 1.4187.644 2.4827 1.484 3.192.859.7093 1.829 1.064 2.912 1.064.971 0 1.773-.2147 2.408-.644.635-.448 1.139-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.389 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.867.308-2.576.924-.709.616-1.185 1.4373-1.428 2.464h7.924c-.037-.4853-.196-.9893-.476-1.512-.28-.5227-.709-.9613-1.288-1.316-.56-.3733-1.279-.56-2.156-.56zm16.262 12.6c-1.288 0-2.455-.3173-3.5-.952-1.027-.6533-1.848-1.5493-2.464-2.688-.597-1.1573-.896-2.4733-.896-3.948s.299-2.7813.896-3.92c.616-1.1387 1.437-2.0347 2.464-2.688 1.045-.6533 2.212-.98 3.5-.98 1.101 0 2.044.2427 2.828.728.803.4853 1.391 1.036 1.764 1.652h.168l-.168-1.988V9.952h2.996V30h-2.828v-1.904h-.168c-.373.616-.961 1.1667-1.764 1.652-.784.4667-1.727.7-2.828.7zm.448-2.772c.747 0 1.447-.196 2.1-.588.672-.392 1.204-.9427 1.596-1.652.411-.728.616-1.5867.616-2.576 0-.9893-.205-1.8387-.616-2.548-.392-.728-.924-1.288-1.596-1.68-.653-.392-1.353-.588-2.1-.588-.747 0-1.447.196-2.1.588-.653.392-1.185.952-1.596 1.68-.411.7093-.616 1.5587-.616 2.548 0 .9893.205 1.848.616 2.576.411.7093.943 1.26 1.596 1.652.653.392 1.353.588 2.1.588z" android:fillColor="#ffffff"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M198.529 9.34665v8.16615h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82684-1.776-1.24121-2.976-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.008V6.47218h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.3495 2.158 2.99392 2.158 4.93142 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM213.864 24.9602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.295-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5936 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3267 4.413.9799v-.6868c0-1.0453-.415-1.9319-1.242-2.6617-.83-.7298-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0905 3.619-3.1358 6.476-3.1358zM241.463 13.8543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M186.373 18.3452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M173.454 31.4782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M165.901 20.6111c-.273-.8119-.422-1.678-.422-2.572 0-.8941.149-1.7602.422-2.5721v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0346 0 2.1707.518 4.2204 1.433 6.0345l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M173.454 9.91964c1.982 0 3.759.68126 5.161 2.01586v.0019l3.84-3.83577c-2.332-2.16891-5.373-3.50162-9.001-3.50162-5.257 0-9.807 3.01446-12.021 7.40459l4.468 3.4624c1.065-3.1843 4.043-5.54736 7.553-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<vector android:width="266dp" android:height="38dp" android:viewportWidth="266" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M3.14847 30V9.952h4.144l5.85203 15.26h.168l5.88-15.26h4.144V30h-3.024V18.66l.168-3.556h-.168L14.4605 30h-2.436L6.17247 15.104h-.168l.168 3.556V30h-3.024zM29.3992 13.62c-.56 0-1.0453-.196-1.456-.588-.392-.4107-.588-.896-.588-1.456 0-.56.196-1.036.588-1.428.4107-.392.896-.588 1.456-.588.56 0 1.036.196 1.428.588.4107.392.616.868.616 1.428 0 .56-.2053 1.0453-.616 1.456-.392.392-.868.588-1.428.588zM27.8872 30V15.72h3.024V30h-3.024zm8.4513-4.144v-7.504h-2.492V15.72h2.492v-4.032h3.024v4.032h3.5v2.632h-3.5v6.86c0 .7093.14 1.2507.42 1.624.2987.3733.7933.56 1.484.56.3547 0 .6533-.0467.896-.14.2613-.0933.5227-.224.784-.392v2.94c-.3173.1307-.6533.2333-1.008.308-.3547.0747-.7747.112-1.26.112-1.3253 0-2.38-.3827-3.164-1.148-.784-.784-1.176-1.8573-1.176-3.22z" android:fillColor="#3c4043"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M94.5289 9.44664v8.16616h5.036c1.2001 0 2.1921-.4032 2.9761-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82685-1.776-1.24122-2.9761-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.0084V6.57217h7.9788c2.0277 0 3.7487.67569 5.1667 2.0252 1.439 1.34951 2.158 2.99393 2.158 4.93143 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.1667 1.9916h-4.9704v.0018zM109.864 25.0602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.2949-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5935 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3266 4.413.9799v-.6869c0-1.0452-.415-1.9318-1.242-2.6616-.83-.7299-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0906 3.619-3.1358 6.476-3.1358zM137.463 13.9543l-10.04 23.0611h-3.105l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M82.3729 18.4452c0-.9463-.0803-1.8591-.2317-2.7326H69.4536v5.1759h7.2669c-.3121 1.6872-1.2557 3.1227-2.687 4.084v3.3616h4.3369c2.5394-2.3406 4.0025-5.7993 4.0025-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M69.4536 31.5782c3.6307 0 6.6876-1.1909 8.9168-3.2441l-4.3369-3.3616c-1.2071.8119-2.7618 1.286-4.5799 1.286-3.5092 0-6.4877-2.363-7.5527-5.5473h-4.4678v3.4624c2.2143 4.3901 6.7642 7.4046 12.0205 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M61.9009 20.7111c-.2728-.8119-.4222-1.678-.4222-2.5721 0-.894.1494-1.7601.4222-2.572v-3.4625h-4.4677C56.5176 13.9188 56 15.9683 56 18.139c0 2.1708.5176 4.2205 1.4332 6.0346l4.4677-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M69.4536 10.0196c1.9826 0 3.7596.6813 5.161 2.0159v.0019l3.8399-3.83578C76.1226 6.03271 73.0824 4.7 69.4536 4.7c-5.2563 0-9.8062 3.01446-12.0205 7.4046l4.4678 3.4624c1.065-3.1843 4.0435-5.5474 7.5527-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
<path android:pathData="M155.972 30.448c-1.717 0-3.089-.3733-4.116-1.12-1.027-.7653-1.736-1.6707-2.128-2.716l2.716-1.176c.336.7653.821 1.3533 1.456 1.764.635.392 1.353.588 2.156.588.747 0 1.391-.1307 1.932-.392.541-.28.812-.728.812-1.344 0-.5973-.271-1.036-.812-1.316s-1.213-.5227-2.016-.728l-1.708-.392c-.691-.168-1.335-.4293-1.932-.784s-1.083-.812-1.456-1.372c-.373-.5787-.56-1.2507-.56-2.016 0-.84.252-1.568.756-2.184.504-.6347 1.167-1.12 1.988-1.456.84-.3547 1.745-.532 2.716-.532 1.325 0 2.483.2613 3.472.784 1.008.504 1.745 1.2693 2.212 2.296l-2.604 1.176c-.336-.6347-.775-1.0733-1.316-1.316-.523-.2613-1.101-.392-1.736-.392-.709 0-1.307.1493-1.792.448-.467.2987-.7.672-.7 1.12 0 .4853.205.868.616 1.148.429.28.952.504 1.568.672l2.072.504c1.419.3547 2.483.896 3.192 1.624.709.7093 1.064 1.5773 1.064 2.604 0 .9147-.261 1.7173-.784 2.408-.523.672-1.232 1.1947-2.128 1.568-.877.3547-1.857.532-2.94.532zm8.627 5.6V15.72h2.828v1.932h.168c.373-.616.952-1.1667 1.736-1.652.802-.4853 1.754-.728 2.856-.728 1.306 0 2.473.3267 3.5.98 1.026.6533 1.838 1.5493 2.436 2.688.616 1.1387.924 2.4453.924 3.92s-.308 2.7907-.924 3.948c-.598 1.1387-1.41 2.0347-2.436 2.688-1.027.6347-2.194.952-3.5.952-1.102 0-2.054-.2333-2.856-.7-.784-.4853-1.363-1.036-1.736-1.652h-.168l.168 1.988v5.964h-2.996zm7.14-8.372c.746 0 1.446-.196 2.1-.588.653-.392 1.185-.9427 1.596-1.652.41-.728.616-1.5867.616-2.576 0-.9893-.206-1.8387-.616-2.548-.411-.728-.943-1.288-1.596-1.68-.654-.392-1.354-.588-2.1-.588-.747 0-1.447.196-2.1.588-.654.392-1.186.952-1.596 1.68-.411.7093-.616 1.5587-.616 2.548 0 .9893.205 1.848.616 2.576.41.7093.942 1.26 1.596 1.652.653.392 1.353.588 2.1.588zm16.911 2.772c-1.4 0-2.651-.3267-3.752-.98-1.102-.6533-1.97-1.5493-2.604-2.688-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.298-2.6227.896-3.78.597-1.1573 1.428-2.0813 2.492-2.772 1.082-.7093 2.324-1.064 3.724-1.064 1.474 0 2.725.3173 3.752.952 1.045.6347 1.838 1.5027 2.38 2.604.541 1.1013.812 2.3427.812 3.724 0 .2053-.01.392-.028.56 0 .168-.01.2987-.028.392h-11.032c.149 1.4187.644 2.4827 1.484 3.192.858.7093 1.829 1.064 2.912 1.064.97 0 1.773-.2147 2.408-.644.634-.448 1.138-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.39 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.867.308-2.576.924-.71.616-1.186 1.4373-1.428 2.464h7.924c-.038-.4853-.196-.9893-.476-1.512-.28-.5227-.71-.9613-1.288-1.316-.56-.3733-1.279-.56-2.156-.56zM198.531 30V15.72h2.856v1.96h.168c.411-.6907 1.018-1.26 1.82-1.708.822-.4667 1.718-.7 2.688-.7 1.755 0 3.071.5227 3.948 1.568.878 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.289-1.9973-.868-2.52-.578-.5413-1.334-.812-2.268-.812-.728 0-1.362.2053-1.904.616-.541.392-.97.9147-1.288 1.568-.298.6533-.448 1.3533-.448 2.1V30h-3.024zm22.646.448c-1.288 0-2.454-.3173-3.5-.952-1.026-.6533-1.848-1.5493-2.464-2.688-.597-1.1573-.896-2.4733-.896-3.948s.299-2.7813.896-3.92c.616-1.1387 1.438-2.0347 2.464-2.688 1.046-.6533 2.212-.98 3.5-.98 1.102 0 2.044.2427 2.828.728.803.4853 1.391 1.036 1.764 1.652h.168l-.168-1.988V9.952h2.996V30h-2.828v-1.904h-.168c-.373.616-.961 1.1667-1.764 1.652-.784.4667-1.726.7-2.828.7zm.448-2.772c.747 0 1.447-.196 2.1-.588.672-.392 1.204-.9427 1.596-1.652.411-.728.616-1.5867.616-2.576 0-.9893-.205-1.8387-.616-2.548-.392-.728-.924-1.288-1.596-1.68-.653-.392-1.353-.588-2.1-.588-.746 0-1.446.196-2.1.588-.653.392-1.185.952-1.596 1.68-.41.7093-.616 1.5587-.616 2.548 0 .9893.206 1.848.616 2.576.411.7093.943 1.26 1.596 1.652.654.392 1.354.588 2.1.588zm17.39 2.772c-1.4 0-2.651-.3267-3.752-.98-1.102-.6533-1.97-1.5493-2.604-2.688-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.298-2.6227.896-3.78.597-1.1573 1.428-2.0813 2.492-2.772 1.082-.7093 2.324-1.064 3.724-1.064 1.474 0 2.725.3173 3.752.952 1.045.6347 1.838 1.5027 2.38 2.604.541 1.1013.812 2.3427.812 3.724 0 .2053-.01.392-.028.56 0 .168-.01.2987-.028.392h-11.032c.149 1.4187.644 2.4827 1.484 3.192.858.7093 1.829 1.064 2.912 1.064.97 0 1.773-.2147 2.408-.644.634-.448 1.138-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.39 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.867.308-2.576.924-.71.616-1.186 1.4373-1.428 2.464h7.924c-.038-.4853-.196-.9893-.476-1.512-.28-.5227-.71-.9613-1.288-1.316-.56-.3733-1.279-.56-2.156-.56zM248.896 30V15.72h2.856v1.96h.168c.411-.6907 1.017-1.26 1.82-1.708.821-.4667 1.717-.7 2.688-.7 1.755 0 3.071.5227 3.948 1.568.877 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.289-1.9973-.868-2.52-.579-.5413-1.335-.812-2.268-.812-.728 0-1.363.2053-1.904.616-.541.392-.971.9147-1.288 1.568-.299.6533-.448 1.3533-.448 2.1V30h-3.024z" android:fillColor="#3c4043"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<vector android:width="266dp" android:height="38dp" android:viewportWidth="266" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M3.14847 30V9.952h4.144l5.85203 15.26h.168l5.88-15.26h4.144V30h-3.024V18.66l.168-3.556h-.168L14.4605 30h-2.436L6.17247 15.104h-.168l.168 3.556V30h-3.024zM29.3992 13.62c-.56 0-1.0453-.196-1.456-.588-.392-.4107-.588-.896-.588-1.456 0-.56.196-1.036.588-1.428.4107-.392.896-.588 1.456-.588.56 0 1.036.196 1.428.588.4107.392.616.868.616 1.428 0 .56-.2053 1.0453-.616 1.456-.392.392-.868.588-1.428.588zM27.8872 30V15.72h3.024V30h-3.024zm8.4513-4.144v-7.504h-2.492V15.72h2.492v-4.032h3.024v4.032h3.5v2.632h-3.5v6.86c0 .7093.14 1.2507.42 1.624.2987.3733.7933.56 1.484.56.3547 0 .6533-.0467.896-.14.2613-.0933.5227-.224.784-.392v2.94c-.3173.1307-.6533.2333-1.008.308-.3547.0747-.7747.112-1.26.112-1.3253 0-2.38-.3827-3.164-1.148-.784-.784-1.176-1.8573-1.176-3.22z" android:fillColor="#ffffff"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M94.5289 9.34665v8.16615h5.036c1.2001 0 2.1921-.4032 2.9761-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82684-1.776-1.24121-2.9761-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.0084V6.47218h7.9788c2.0277 0 3.7487.67569 5.1667 2.0252 1.439 1.3495 2.158 2.99392 2.158 4.93142 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.1667 1.9916h-4.9704v.0018zM109.864 24.9602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.295-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5936 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3267 4.413.9799v-.6868c0-1.0453-.415-1.9319-1.242-2.6617-.83-.7298-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0905 3.619-3.1358 6.476-3.1358zM137.463 13.8543l-10.04 23.0611h-3.105l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M82.3729 18.3452c0-.9463-.0803-1.8591-.2317-2.7326H69.4536v5.1759h7.2669c-.3121 1.6872-1.2557 3.1227-2.687 4.084v3.3616h4.3369c2.5394-2.3406 4.0025-5.7993 4.0025-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M69.4536 31.4782c3.6307 0 6.6876-1.1909 8.9168-3.2441l-4.3369-3.3616c-1.2071.8119-2.7618 1.286-4.5799 1.286-3.5092 0-6.4877-2.363-7.5527-5.5473h-4.4678v3.4624c2.2143 4.3901 6.7642 7.4046 12.0205 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M61.9009 20.6111c-.2728-.8119-.4222-1.678-.4222-2.572 0-.8941.1494-1.7602.4222-2.5721v-3.4625h-4.4677C56.5176 13.8188 56 15.8683 56 18.0391c0 2.1707.5176 4.2204 1.4332 6.0345l4.4677-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M69.4536 9.91964c1.9826 0 3.7596.68126 5.161 2.01586v.0019l3.8399-3.83577c-2.3319-2.16891-5.3721-3.50162-9.0009-3.50162-5.2563 0-9.8062 3.01446-12.0205 7.40459l4.4678 3.4624c1.065-3.1843 4.0435-5.54736 7.5527-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
<path android:pathData="M155.972 30.448c-1.717 0-3.089-.3733-4.116-1.12-1.027-.7653-1.736-1.6707-2.128-2.716l2.716-1.176c.336.7653.821 1.3533 1.456 1.764.635.392 1.353.588 2.156.588.747 0 1.391-.1307 1.932-.392.541-.28.812-.728.812-1.344 0-.5973-.271-1.036-.812-1.316s-1.213-.5227-2.016-.728l-1.708-.392c-.691-.168-1.335-.4293-1.932-.784s-1.083-.812-1.456-1.372c-.373-.5787-.56-1.2507-.56-2.016 0-.84.252-1.568.756-2.184.504-.6347 1.167-1.12 1.988-1.456.84-.3547 1.745-.532 2.716-.532 1.325 0 2.483.2613 3.472.784 1.008.504 1.745 1.2693 2.212 2.296l-2.604 1.176c-.336-.6347-.775-1.0733-1.316-1.316-.523-.2613-1.101-.392-1.736-.392-.709 0-1.307.1493-1.792.448-.467.2987-.7.672-.7 1.12 0 .4853.205.868.616 1.148.429.28.952.504 1.568.672l2.072.504c1.419.3547 2.483.896 3.192 1.624.709.7093 1.064 1.5773 1.064 2.604 0 .9147-.261 1.7173-.784 2.408-.523.672-1.232 1.1947-2.128 1.568-.877.3547-1.857.532-2.94.532zm8.627 5.6V15.72h2.828v1.932h.168c.373-.616.952-1.1667 1.736-1.652.802-.4853 1.754-.728 2.856-.728 1.306 0 2.473.3267 3.5.98 1.026.6533 1.838 1.5493 2.436 2.688.616 1.1387.924 2.4453.924 3.92s-.308 2.7907-.924 3.948c-.598 1.1387-1.41 2.0347-2.436 2.688-1.027.6347-2.194.952-3.5.952-1.102 0-2.054-.2333-2.856-.7-.784-.4853-1.363-1.036-1.736-1.652h-.168l.168 1.988v5.964h-2.996zm7.14-8.372c.746 0 1.446-.196 2.1-.588.653-.392 1.185-.9427 1.596-1.652.41-.728.616-1.5867.616-2.576 0-.9893-.206-1.8387-.616-2.548-.411-.728-.943-1.288-1.596-1.68-.654-.392-1.354-.588-2.1-.588-.747 0-1.447.196-2.1.588-.654.392-1.186.952-1.596 1.68-.411.7093-.616 1.5587-.616 2.548 0 .9893.205 1.848.616 2.576.41.7093.942 1.26 1.596 1.652.653.392 1.353.588 2.1.588zm16.911 2.772c-1.4 0-2.651-.3267-3.752-.98-1.102-.6533-1.97-1.5493-2.604-2.688-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.298-2.6227.896-3.78.597-1.1573 1.428-2.0813 2.492-2.772 1.082-.7093 2.324-1.064 3.724-1.064 1.474 0 2.725.3173 3.752.952 1.045.6347 1.838 1.5027 2.38 2.604.541 1.1013.812 2.3427.812 3.724 0 .2053-.01.392-.028.56 0 .168-.01.2987-.028.392h-11.032c.149 1.4187.644 2.4827 1.484 3.192.858.7093 1.829 1.064 2.912 1.064.97 0 1.773-.2147 2.408-.644.634-.448 1.138-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.39 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.867.308-2.576.924-.71.616-1.186 1.4373-1.428 2.464h7.924c-.038-.4853-.196-.9893-.476-1.512-.28-.5227-.71-.9613-1.288-1.316-.56-.3733-1.279-.56-2.156-.56zM198.531 30V15.72h2.856v1.96h.168c.411-.6907 1.018-1.26 1.82-1.708.822-.4667 1.718-.7 2.688-.7 1.755 0 3.071.5227 3.948 1.568.878 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.289-1.9973-.868-2.52-.578-.5413-1.334-.812-2.268-.812-.728 0-1.362.2053-1.904.616-.541.392-.97.9147-1.288 1.568-.298.6533-.448 1.3533-.448 2.1V30h-3.024zm22.646.448c-1.288 0-2.454-.3173-3.5-.952-1.026-.6533-1.848-1.5493-2.464-2.688-.597-1.1573-.896-2.4733-.896-3.948s.299-2.7813.896-3.92c.616-1.1387 1.438-2.0347 2.464-2.688 1.046-.6533 2.212-.98 3.5-.98 1.102 0 2.044.2427 2.828.728.803.4853 1.391 1.036 1.764 1.652h.168l-.168-1.988V9.952h2.996V30h-2.828v-1.904h-.168c-.373.616-.961 1.1667-1.764 1.652-.784.4667-1.726.7-2.828.7zm.448-2.772c.747 0 1.447-.196 2.1-.588.672-.392 1.204-.9427 1.596-1.652.411-.728.616-1.5867.616-2.576 0-.9893-.205-1.8387-.616-2.548-.392-.728-.924-1.288-1.596-1.68-.653-.392-1.353-.588-2.1-.588-.746 0-1.446.196-2.1.588-.653.392-1.185.952-1.596 1.68-.41.7093-.616 1.5587-.616 2.548 0 .9893.206 1.848.616 2.576.411.7093.943 1.26 1.596 1.652.654.392 1.354.588 2.1.588zm17.39 2.772c-1.4 0-2.651-.3267-3.752-.98-1.102-.6533-1.97-1.5493-2.604-2.688-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.298-2.6227.896-3.78.597-1.1573 1.428-2.0813 2.492-2.772 1.082-.7093 2.324-1.064 3.724-1.064 1.474 0 2.725.3173 3.752.952 1.045.6347 1.838 1.5027 2.38 2.604.541 1.1013.812 2.3427.812 3.724 0 .2053-.01.392-.028.56 0 .168-.01.2987-.028.392h-11.032c.149 1.4187.644 2.4827 1.484 3.192.858.7093 1.829 1.064 2.912 1.064.97 0 1.773-.2147 2.408-.644.634-.448 1.138-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.39 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.867.308-2.576.924-.71.616-1.186 1.4373-1.428 2.464h7.924c-.038-.4853-.196-.9893-.476-1.512-.28-.5227-.71-.9613-1.288-1.316-.56-.3733-1.279-.56-2.156-.56zM248.896 30V15.72h2.856v1.96h.168c.411-.6907 1.017-1.26 1.82-1.708.821-.4667 1.717-.7 2.688-.7 1.755 0 3.071.5227 3.948 1.568.877 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.289-1.9973-.868-2.52-.579-.5413-1.335-.812-2.268-.812-.728 0-1.363.2053-1.904.616-.541.392-.971.9147-1.288 1.568-.299.6533-.448 1.3533-.448 2.1V30h-3.024z" android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="232dp" android:height="38dp" android:viewportWidth="232" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M3.85629 30V9.952h6.41201c2.1093 0 3.92.4293 5.432 1.288 1.5307.84 2.7067 2.016 3.528 3.528.84 1.512 1.26 3.248 1.26 5.208 0 1.9787-.42 3.724-1.26 5.236-.8213 1.4933-1.9973 2.6693-3.528 3.528-1.512.84-3.3227 1.26-5.432 1.26H3.85629zm3.08-2.912h3.24801c2.2773 0 4.0413-.6347 5.292-1.904 1.2693-1.2693 1.904-3.0053 1.904-5.208s-.6347-3.9387-1.904-5.208c-1.2507-1.2693-3.0147-1.904-5.292-1.904H6.93629v14.224zm23.17821 3.36c-1.4747 0-2.772-.336-3.892-1.008-1.12-.672-1.9974-1.5773-2.632-2.716-.6347-1.1387-.952-2.4267-.952-3.864 0-1.4187.3173-2.6973.952-3.836.6346-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4173-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9973 1.5867 2.632 2.744.6346 1.1387.952 2.4173.952 3.836 0 1.4373-.3174 2.7253-.952 3.864-.6347 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2133-.9427 1.624-1.652.4293-.728.644-1.596.644-2.604s-.2147-1.8667-.644-2.576c-.4107-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5214.196-2.212.588-.672.3733-1.2227.924-1.652 1.652-.4107.7093-.616 1.568-.616 2.576s.2053 1.876.616 2.604c.4293.7093.98 1.26 1.652 1.652.6906.3733 1.428.56 2.212.56zM40.3742 30V15.72h2.856v1.96h.168c.4106-.6907 1.0173-1.26 1.82-1.708.8213-.4667 1.7173-.7 2.688-.7 1.7546 0 3.0706.5227 3.948 1.568.8773 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2894-1.9973-.868-2.52-.5787-.5413-1.3347-.812-2.268-.812-.728 0-1.3627.2053-1.904.616-.5414.392-.9707.9147-1.288 1.568-.2987.6533-.448 1.3533-.448 2.1V30h-3.024zm20.8854.448c-1.0266 0-1.9413-.196-2.744-.588-.8026-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2614-1.8667.784-2.576.5414-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8854-.56 2.968-.56.896 0 1.68.084 2.352.252.6907.168 1.2134.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4186.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3733.5787-.9333 1.092-1.68 1.54-.7466.448-1.6426.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5974-.3733 1.064-.8587 1.4-1.456.3547-.616.532-1.2787.532-1.988-.4293-.2427-.9333-.4387-1.512-.588-.5786-.168-1.1946-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5226.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zM72.3648 30V15.72h2.856v2.1h.168c.3173-.728.8587-1.3253 1.624-1.792.784-.4853 1.624-.728 2.52-.728.392 0 .7187.028.98.084.28.056.532.1213.756.196v3.136c-.3547-.1493-.7187-.2707-1.092-.364-.3547-.0933-.728-.14-1.12-.14-.7093 0-1.344.196-1.904.588-.5413.3733-.9707.8867-1.288 1.54-.3173.6347-.476 1.3347-.476 2.1V30h-3.024zm24.9814.448c-1.4373 0-2.7066-.3267-3.808-.98-1.1013-.6533-1.9693-1.5493-2.604-2.688-.6346-1.1573-.952-2.464-.952-3.92s.3174-2.7533.952-3.892c.6347-1.1573 1.5027-2.0627 2.604-2.716 1.1014-.6533 2.3707-.98 3.808-.98 1.5867 0 2.9218.3547 4.0038 1.064 1.102.7093 1.886 1.6707 2.352 2.884l-2.744 1.12c-.653-1.5307-1.8758-2.296-3.6678-2.296-.784 0-1.5026.2053-2.156.616-.6533.392-1.176.952-1.568 1.68-.392.7093-.588 1.5493-.588 2.52 0 .9707.196 1.82.588 2.548.392.728.9147 1.288 1.568 1.68.6534.392 1.372.588 2.156.588.9147 0 1.6894-.2053 2.324-.616.6348-.4293 1.1298-1.008 1.4838-1.736l2.688 1.176c-.504 1.1387-1.306 2.0813-2.408 2.828-1.101.7467-2.4451 1.12-4.0318 1.12zm15.9158 0c-1.475 0-2.772-.336-3.892-1.008-1.12-.672-1.997-1.5773-2.632-2.716-.635-1.1387-.952-2.4267-.952-3.864 0-1.4187.317-2.6973.952-3.836.635-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.417-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.997 1.5867 2.632 2.744.635 1.1387.952 2.4173.952 3.836 0 1.4373-.317 2.7253-.952 3.864s-1.512 2.044-2.632 2.716c-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.213-.9427 1.624-1.652.429-.728.644-1.596.644-2.604s-.215-1.8667-.644-2.576c-.411-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.521.196-2.212.588-.672.3733-1.223.924-1.652 1.652-.411.7093-.616 1.568-.616 2.576s.205 1.876.616 2.604c.429.7093.98 1.26 1.652 1.652.691.3733 1.428.56 2.212.56zM123.522 30V15.72h2.856v1.96h.168c.41-.6907 1.017-1.26 1.82-1.708.821-.4667 1.717-.7 2.688-.7 1.754 0 3.07.5227 3.948 1.568.877 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.29-1.9973-.868-2.52-.579-.5413-1.335-.812-2.268-.812-.728 0-1.363.2053-1.904.616-.542.392-.971.9147-1.288 1.568-.299.6533-.448 1.3533-.448 2.1V30h-3.024z" android:fillColor="#3c4043"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M188.529 9.44664v8.16616h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82685-1.776-1.24122-2.976-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.008V6.57217h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.34951 2.158 2.99393 2.158 4.93143 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM203.864 25.0602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.2949-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5935 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3266 4.413.9799v-.6869c0-1.0452-.415-1.9318-1.242-2.6616-.83-.7299-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0906 3.619-3.1358 6.476-3.1358zM231.463 13.9543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M176.373 18.4452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M163.454 31.5782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M155.901 20.7111c-.273-.8119-.422-1.678-.422-2.5721 0-.894.149-1.7601.422-2.572v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0345 0 2.1708.518 4.2205 1.433 6.0346l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M163.454 10.0196c1.982 0 3.759.6813 5.161 2.0159v.0019l3.84-3.83578C170.123 6.03271 167.082 4.7 163.454 4.7c-5.257 0-9.807 3.01446-12.021 7.4046l4.468 3.4624c1.065-3.1843 4.043-5.5474 7.553-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="232dp" android:height="38dp" android:viewportWidth="232" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M3.85629 30V9.952h6.41201c2.1093 0 3.92.4293 5.432 1.288 1.5307.84 2.7067 2.016 3.528 3.528.84 1.512 1.26 3.248 1.26 5.208 0 1.9787-.42 3.724-1.26 5.236-.8213 1.4933-1.9973 2.6693-3.528 3.528-1.512.84-3.3227 1.26-5.432 1.26H3.85629zm3.08-2.912h3.24801c2.2773 0 4.0413-.6347 5.292-1.904 1.2693-1.2693 1.904-3.0053 1.904-5.208s-.6347-3.9387-1.904-5.208c-1.2507-1.2693-3.0147-1.904-5.292-1.904H6.93629v14.224zm23.17821 3.36c-1.4747 0-2.772-.336-3.892-1.008-1.12-.672-1.9974-1.5773-2.632-2.716-.6347-1.1387-.952-2.4267-.952-3.864 0-1.4187.3173-2.6973.952-3.836.6346-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4173-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9973 1.5867 2.632 2.744.6346 1.1387.952 2.4173.952 3.836 0 1.4373-.3174 2.7253-.952 3.864-.6347 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2133-.9427 1.624-1.652.4293-.728.644-1.596.644-2.604s-.2147-1.8667-.644-2.576c-.4107-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5214.196-2.212.588-.672.3733-1.2227.924-1.652 1.652-.4107.7093-.616 1.568-.616 2.576s.2053 1.876.616 2.604c.4293.7093.98 1.26 1.652 1.652.6906.3733 1.428.56 2.212.56zM40.3742 30V15.72h2.856v1.96h.168c.4106-.6907 1.0173-1.26 1.82-1.708.8213-.4667 1.7173-.7 2.688-.7 1.7546 0 3.0706.5227 3.948 1.568.8773 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2894-1.9973-.868-2.52-.5787-.5413-1.3347-.812-2.268-.812-.728 0-1.3627.2053-1.904.616-.5414.392-.9707.9147-1.288 1.568-.2987.6533-.448 1.3533-.448 2.1V30h-3.024zm20.8854.448c-1.0266 0-1.9413-.196-2.744-.588-.8026-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2614-1.8667.784-2.576.5414-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8854-.56 2.968-.56.896 0 1.68.084 2.352.252.6907.168 1.2134.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4186.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3733.5787-.9333 1.092-1.68 1.54-.7466.448-1.6426.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5974-.3733 1.064-.8587 1.4-1.456.3547-.616.532-1.2787.532-1.988-.4293-.2427-.9333-.4387-1.512-.588-.5786-.168-1.1946-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5226.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zM72.3648 30V15.72h2.856v2.1h.168c.3173-.728.8587-1.3253 1.624-1.792.784-.4853 1.624-.728 2.52-.728.392 0 .7187.028.98.084.28.056.532.1213.756.196v3.136c-.3547-.1493-.7187-.2707-1.092-.364-.3547-.0933-.728-.14-1.12-.14-.7093 0-1.344.196-1.904.588-.5413.3733-.9707.8867-1.288 1.54-.3173.6347-.476 1.3347-.476 2.1V30h-3.024zm24.9814.448c-1.4373 0-2.7066-.3267-3.808-.98-1.1013-.6533-1.9693-1.5493-2.604-2.688-.6346-1.1573-.952-2.464-.952-3.92s.3174-2.7533.952-3.892c.6347-1.1573 1.5027-2.0627 2.604-2.716 1.1014-.6533 2.3707-.98 3.808-.98 1.5867 0 2.9218.3547 4.0038 1.064 1.102.7093 1.886 1.6707 2.352 2.884l-2.744 1.12c-.653-1.5307-1.8758-2.296-3.6678-2.296-.784 0-1.5026.2053-2.156.616-.6533.392-1.176.952-1.568 1.68-.392.7093-.588 1.5493-.588 2.52 0 .9707.196 1.82.588 2.548.392.728.9147 1.288 1.568 1.68.6534.392 1.372.588 2.156.588.9147 0 1.6894-.2053 2.324-.616.6348-.4293 1.1298-1.008 1.4838-1.736l2.688 1.176c-.504 1.1387-1.306 2.0813-2.408 2.828-1.101.7467-2.4451 1.12-4.0318 1.12zm15.9158 0c-1.475 0-2.772-.336-3.892-1.008-1.12-.672-1.997-1.5773-2.632-2.716-.635-1.1387-.952-2.4267-.952-3.864 0-1.4187.317-2.6973.952-3.836.635-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.417-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.997 1.5867 2.632 2.744.635 1.1387.952 2.4173.952 3.836 0 1.4373-.317 2.7253-.952 3.864s-1.512 2.044-2.632 2.716c-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.213-.9427 1.624-1.652.429-.728.644-1.596.644-2.604s-.215-1.8667-.644-2.576c-.411-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.521.196-2.212.588-.672.3733-1.223.924-1.652 1.652-.411.7093-.616 1.568-.616 2.576s.205 1.876.616 2.604c.429.7093.98 1.26 1.652 1.652.691.3733 1.428.56 2.212.56zM123.522 30V15.72h2.856v1.96h.168c.41-.6907 1.017-1.26 1.82-1.708.821-.4667 1.717-.7 2.688-.7 1.754 0 3.07.5227 3.948 1.568.877 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.29-1.9973-.868-2.52-.579-.5413-1.335-.812-2.268-.812-.728 0-1.363.2053-1.904.616-.542.392-.971.9147-1.288 1.568-.299.6533-.448 1.3533-.448 2.1V30h-3.024z" android:fillColor="#ffffff"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M188.529 9.34665v8.16615h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82684-1.776-1.24121-2.976-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.008V6.47218h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.3495 2.158 2.99392 2.158 4.93142 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM203.864 24.9602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.295-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5936 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3267 4.413.9799v-.6868c0-1.0453-.415-1.9319-1.242-2.6617-.83-.7298-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0905 3.619-3.1358 6.476-3.1358zM231.463 13.8543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M176.373 18.3452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M163.454 31.4782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M155.901 20.6111c-.273-.8119-.422-1.678-.422-2.572 0-.8941.149-1.7602.422-2.5721v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0346 0 2.1707.518 4.2204 1.433 6.0345l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M163.454 9.91964c1.982 0 3.759.68126 5.161 2.01586v.0019l3.84-3.83577c-2.332-2.16891-5.373-3.50162-9.001-3.50162-5.257 0-9.807 3.01446-12.021 7.40459l4.468 3.4624c1.065-3.1843 4.043-5.54736 7.553-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="248dp" android:height="38dp" android:viewportWidth="248" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M1.49344 30l7.56-20.048h3.49996L20.1414 30h-3.388l-1.848-5.152H6.72944L4.88144 30h-3.388zm8.484-14.14l-2.212 6.132h6.10396l-2.212-6.132-.756-2.296h-.168l-.75596 2.296zM22.6335 30V15.72h2.856v1.96h.168c.4107-.6907 1.0174-1.26 1.82-1.708.8214-.4667 1.7174-.7 2.688-.7 1.7547 0 3.0707.5227 3.948 1.568.8774 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2893-1.9973-.868-2.52-.5786-.5413-1.3346-.812-2.268-.812-.728 0-1.3626.2053-1.904.616-.5413.392-.9706.9147-1.288 1.568-.2986.6533-.448 1.3533-.448 2.1V30h-3.024zm16.5422 0V15.72h2.856v1.96h.168c.4107-.6907 1.0174-1.26 1.82-1.708.8214-.4667 1.7174-.7 2.688-.7 1.7547 0 3.0707.5227 3.948 1.568.8774 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2893-1.9973-.868-2.52-.5786-.5413-1.3346-.812-2.268-.812-.728 0-1.3626.2053-1.904.616-.5413.392-.9706.9147-1.288 1.568-.2986.6533-.448 1.3533-.448 2.1V30h-3.024zm23.0662.448c-1.4 0-2.6507-.3267-3.752-.98-1.1013-.6533-1.9693-1.5493-2.604-2.688-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.2987-2.6227.896-3.78.5973-1.1573 1.428-2.0813 2.492-2.772 1.0827-.7093 2.324-1.064 3.724-1.064 1.4747 0 2.7253.3173 3.752.952 1.0453.6347 1.8387 1.5027 2.38 2.604.5413 1.1013.812 2.3427.812 3.724 0 .2053-.0093.392-.028.56 0 .168-.0093.2987-.028.392h-11.032c.1493 1.4187.644 2.4827 1.484 3.192.8587.7093 1.8293 1.064 2.912 1.064.9707 0 1.7733-.2147 2.408-.644.6347-.448 1.1387-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.3893 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.8667.308-2.576.924-.7093.616-1.1853 1.4373-1.428 2.464h7.924c-.0373-.4853-.196-.9893-.476-1.512-.28-.5227-.7093-.9613-1.288-1.316-.56-.3733-1.2787-.56-2.156-.56zm11.1233 8.008v-7.504h-2.492V15.72h2.492v-4.032h3.024v4.032h3.5v2.632h-3.5v6.86c0 .7093.14 1.2507.42 1.624.2987.3733.7934.56 1.484.56.3547 0 .6534-.0467.896-.14.2614-.0933.5227-.224.784-.392v2.94c-.3173.1307-.6533.2333-1.008.308-.3546.0747-.7746.112-1.26.112-1.3253 0-2.38-.3827-3.164-1.148-.784-.784-1.176-1.8573-1.176-3.22zm13.9321 4.592c-1.0267 0-1.9413-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6907.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3733.5787-.9333 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3547-.616.532-1.2787.532-1.988-.4293-.2427-.9333-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zm16.8767 8.512c-1.251 0-2.334-.2053-3.248-.616-.896-.392-1.6243-.9053-2.1843-1.54-.56-.616-.9613-1.2507-1.204-1.904l2.8003-1.176c.298.7467.774 1.3533 1.428 1.82.672.4853 1.474.728 2.408.728 1.306 0 2.333-.392 3.08-1.176.765-.784 1.148-1.8947 1.148-3.332v-1.372h-.168c-.448.672-1.074 1.2133-1.876 1.624-.784.392-1.68.588-2.688.588-1.214 0-2.324-.308-3.332-.924-1.0083-.616-1.8203-1.4747-2.4363-2.576-.616-1.12-.924-2.4267-.924-3.92 0-1.512.308-2.8187.924-3.92.616-1.12 1.428-1.988 2.4363-2.604 1.008-.616 2.118-.924 3.332-.924 1.008 0 1.904.2053 2.688.616.802.4107 1.428.952 1.876 1.624h.168V15.72h2.884v13.524c0 1.5493-.308 2.8653-.924 3.948-.598 1.0827-1.428 1.904-2.492 2.464s-2.296.84-3.696.84zm.028-9.1c.746 0 1.437-.1773 2.072-.532.634-.3733 1.148-.9053 1.54-1.596.392-.7093.588-1.5587.588-2.548 0-1.0267-.196-1.8853-.588-2.576-.392-.7093-.906-1.2413-1.54-1.596-.635-.3547-1.326-.532-2.072-.532-.747 0-1.447.1867-2.1.56-.635.3547-1.148.8773-1.54 1.568-.392.6907-.588 1.5493-.588 2.576 0 1.008.196 1.8667.588 2.576.392.6907.905 1.2133 1.54 1.568.653.3547 1.353.532 2.1.532zm17.309 3.052c-1.4 0-2.651-.3267-3.752-.98s-1.969-1.5493-2.604-2.688c-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.299-2.6227.896-3.78.597-1.1573 1.428-2.0813 2.492-2.772 1.083-.7093 2.324-1.064 3.724-1.064 1.475 0 2.725.3173 3.752.952 1.045.6347 1.839 1.5027 2.38 2.604.541 1.1013.812 2.3427.812 3.724 0 .2053-.009.392-.028.56 0 .168-.009.2987-.028.392h-11.032c.149 1.4187.644 2.4827 1.484 3.192.859.7093 1.829 1.064 2.912 1.064.971 0 1.773-.2147 2.408-.644.635-.448 1.139-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.389 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.867.308-2.576.924-.709.616-1.185 1.4373-1.428 2.464h7.924c-.037-.4853-.196-.9893-.476-1.512-.28-.5227-.709-.9613-1.288-1.316-.56-.3733-1.279-.56-2.156-.56zm16.828 4.76v-2.576h13.664v2.576h-13.664z" android:fillColor="#3c4043"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M204.529 9.44664v8.16616h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82685-1.776-1.24122-2.976-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.008V6.57217h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.34951 2.158 2.99393 2.158 4.93143 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM219.864 25.0602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.2949-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5935 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3266 4.413.9799v-.6869c0-1.0452-.415-1.9318-1.242-2.6616-.83-.7299-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0906 3.619-3.1358 6.476-3.1358zM247.463 13.9543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M192.373 18.4452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M179.454 31.5782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M171.901 20.7111c-.273-.8119-.422-1.678-.422-2.5721 0-.894.149-1.7601.422-2.572v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0345 0 2.1708.518 4.2205 1.433 6.0346l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M179.454 10.0196c1.982 0 3.759.6813 5.161 2.0159v.0019l3.84-3.83578C186.123 6.03271 183.082 4.7 179.454 4.7c-5.257 0-9.807 3.01446-12.021 7.4046l4.468 3.4624c1.065-3.1843 4.043-5.5474 7.553-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="248dp" android:height="38dp" android:viewportWidth="248" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M1.49344 30l7.56-20.048h3.49996L20.1414 30h-3.388l-1.848-5.152H6.72944L4.88144 30h-3.388zm8.484-14.14l-2.212 6.132h6.10396l-2.212-6.132-.756-2.296h-.168l-.75596 2.296zM22.6335 30V15.72h2.856v1.96h.168c.4107-.6907 1.0174-1.26 1.82-1.708.8214-.4667 1.7174-.7 2.688-.7 1.7547 0 3.0707.5227 3.948 1.568.8774 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2893-1.9973-.868-2.52-.5786-.5413-1.3346-.812-2.268-.812-.728 0-1.3626.2053-1.904.616-.5413.392-.9706.9147-1.288 1.568-.2986.6533-.448 1.3533-.448 2.1V30h-3.024zm16.5422 0V15.72h2.856v1.96h.168c.4107-.6907 1.0174-1.26 1.82-1.708.8214-.4667 1.7174-.7 2.688-.7 1.7547 0 3.0707.5227 3.948 1.568.8774 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2893-1.9973-.868-2.52-.5786-.5413-1.3346-.812-2.268-.812-.728 0-1.3626.2053-1.904.616-.5413.392-.9706.9147-1.288 1.568-.2986.6533-.448 1.3533-.448 2.1V30h-3.024zm23.0662.448c-1.4 0-2.6507-.3267-3.752-.98-1.1013-.6533-1.9693-1.5493-2.604-2.688-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.2987-2.6227.896-3.78.5973-1.1573 1.428-2.0813 2.492-2.772 1.0827-.7093 2.324-1.064 3.724-1.064 1.4747 0 2.7253.3173 3.752.952 1.0453.6347 1.8387 1.5027 2.38 2.604.5413 1.1013.812 2.3427.812 3.724 0 .2053-.0093.392-.028.56 0 .168-.0093.2987-.028.392h-11.032c.1493 1.4187.644 2.4827 1.484 3.192.8587.7093 1.8293 1.064 2.912 1.064.9707 0 1.7733-.2147 2.408-.644.6347-.448 1.1387-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.3893 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.8667.308-2.576.924-.7093.616-1.1853 1.4373-1.428 2.464h7.924c-.0373-.4853-.196-.9893-.476-1.512-.28-.5227-.7093-.9613-1.288-1.316-.56-.3733-1.2787-.56-2.156-.56zm11.1233 8.008v-7.504h-2.492V15.72h2.492v-4.032h3.024v4.032h3.5v2.632h-3.5v6.86c0 .7093.14 1.2507.42 1.624.2987.3733.7934.56 1.484.56.3547 0 .6534-.0467.896-.14.2614-.0933.5227-.224.784-.392v2.94c-.3173.1307-.6533.2333-1.008.308-.3546.0747-.7746.112-1.26.112-1.3253 0-2.38-.3827-3.164-1.148-.784-.784-1.176-1.8573-1.176-3.22zm13.9321 4.592c-1.0267 0-1.9413-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6907.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3733.5787-.9333 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3547-.616.532-1.2787.532-1.988-.4293-.2427-.9333-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zm16.8767 8.512c-1.251 0-2.334-.2053-3.248-.616-.896-.392-1.6243-.9053-2.1843-1.54-.56-.616-.9613-1.2507-1.204-1.904l2.8003-1.176c.298.7467.774 1.3533 1.428 1.82.672.4853 1.474.728 2.408.728 1.306 0 2.333-.392 3.08-1.176.765-.784 1.148-1.8947 1.148-3.332v-1.372h-.168c-.448.672-1.074 1.2133-1.876 1.624-.784.392-1.68.588-2.688.588-1.214 0-2.324-.308-3.332-.924-1.0083-.616-1.8203-1.4747-2.4363-2.576-.616-1.12-.924-2.4267-.924-3.92 0-1.512.308-2.8187.924-3.92.616-1.12 1.428-1.988 2.4363-2.604 1.008-.616 2.118-.924 3.332-.924 1.008 0 1.904.2053 2.688.616.802.4107 1.428.952 1.876 1.624h.168V15.72h2.884v13.524c0 1.5493-.308 2.8653-.924 3.948-.598 1.0827-1.428 1.904-2.492 2.464s-2.296.84-3.696.84zm.028-9.1c.746 0 1.437-.1773 2.072-.532.634-.3733 1.148-.9053 1.54-1.596.392-.7093.588-1.5587.588-2.548 0-1.0267-.196-1.8853-.588-2.576-.392-.7093-.906-1.2413-1.54-1.596-.635-.3547-1.326-.532-2.072-.532-.747 0-1.447.1867-2.1.56-.635.3547-1.148.8773-1.54 1.568-.392.6907-.588 1.5493-.588 2.576 0 1.008.196 1.8667.588 2.576.392.6907.905 1.2133 1.54 1.568.653.3547 1.353.532 2.1.532zm17.309 3.052c-1.4 0-2.651-.3267-3.752-.98s-1.969-1.5493-2.604-2.688c-.616-1.1387-.924-2.436-.924-3.892 0-1.3627.299-2.6227.896-3.78.597-1.1573 1.428-2.0813 2.492-2.772 1.083-.7093 2.324-1.064 3.724-1.064 1.475 0 2.725.3173 3.752.952 1.045.6347 1.839 1.5027 2.38 2.604.541 1.1013.812 2.3427.812 3.724 0 .2053-.009.392-.028.56 0 .168-.009.2987-.028.392h-11.032c.149 1.4187.644 2.4827 1.484 3.192.859.7093 1.829 1.064 2.912 1.064.971 0 1.773-.2147 2.408-.644.635-.448 1.139-.9987 1.512-1.652l2.492 1.204c-.616 1.12-1.456 2.0347-2.52 2.744-1.064.6907-2.389 1.036-3.976 1.036zm-.14-12.6c-1.008 0-1.867.308-2.576.924-.709.616-1.185 1.4373-1.428 2.464h7.924c-.037-.4853-.196-.9893-.476-1.512-.28-.5227-.709-.9613-1.288-1.316-.56-.3733-1.279-.56-2.156-.56zm16.828 4.76v-2.576h13.664v2.576h-13.664z" android:fillColor="#ffffff"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M204.529 9.34665v8.16615h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82684-1.776-1.24121-2.976-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.008V6.47218h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.3495 2.158 2.99392 2.158 4.93142 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM219.864 24.9602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.295-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5936 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3267 4.413.9799v-.6868c0-1.0453-.415-1.9319-1.242-2.6617-.83-.7298-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0905 3.619-3.1358 6.476-3.1358zM247.463 13.8543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M192.373 18.3452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M179.454 31.4782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M171.901 20.6111c-.273-.8119-.422-1.678-.422-2.572 0-.8941.149-1.7602.422-2.5721v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0346 0 2.1707.518 4.2204 1.433 6.0345l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M179.454 9.91964c1.982 0 3.759.68126 5.161 2.01586v.0019l3.84-3.83577c-2.332-2.16891-5.373-3.50162-9.001-3.50162-5.257 0-9.807 3.01446-12.021 7.40459l4.468 3.4624c1.065-3.1843 4.043-5.54736 7.553-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<vector android:width="242dp" android:height="38dp" android:viewportWidth="242" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M3.3555 30V9.952h3.08v17.136h8.624V30H3.3555zm19.1237.448c-1.0267 0-1.9414-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6906.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6534.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0266-.504 2.1466-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3734.5787-.9334 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4746-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3546-.616.532-1.2787.532-1.988-.4294-.2427-.9334-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1094.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zM33.5843 30V9.952h3.024v5.488l-.168 2.24h.168c.392-.6907.9893-1.26 1.792-1.708.8213-.4667 1.7267-.7 2.716-.7 1.7733 0 3.108.532 4.004 1.596.896 1.0453 1.344 2.4173 1.344 4.116V30h-2.996v-8.624c0-1.1573-.308-1.9973-.924-2.52-.5973-.5413-1.3347-.812-2.212-.812-.728 0-1.372.2053-1.932.616-.56.4107-.9987.952-1.316 1.624-.3173.6533-.476 1.3533-.476 2.1V30h-3.024zm18.3602-16.38c-.56 0-1.0453-.196-1.456-.588-.392-.4107-.588-.896-.588-1.456 0-.56.196-1.036.588-1.428.4107-.392.896-.588 1.456-.588.56 0 1.036.196 1.428.588.4107.392.616.868.616 1.428 0 .56-.2053 1.0453-.616 1.456-.392.392-.868.588-1.428.588zm-2.716 22.708c-.5786 0-1.1013-.0653-1.568-.196V33.22c.1867.112.4014.196.644.252.224.0747.448.112.672.112.5414 0 .9147-.168 1.12-.504.224-.3173.336-.784.336-1.4V15.72h3.024v15.988c0 1.6427-.4013 2.8187-1.204 3.528-.8026.728-1.8106 1.092-3.024 1.092zm14.8633-5.88c-1.4747 0-2.772-.336-3.892-1.008-1.12-.672-1.9973-1.5773-2.632-2.716-.6347-1.1387-.952-2.4267-.952-3.864 0-1.4187.3173-2.6973.952-3.836.6347-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4173-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9973 1.5867 2.632 2.744.6347 1.1387.952 2.4173.952 3.836 0 1.4373-.3173 2.7253-.952 3.864-.6347 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2133-.9427 1.624-1.652.4293-.728.644-1.596.644-2.604s-.2147-1.8667-.644-2.576c-.4107-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5213.196-2.212.588-.672.3733-1.2227.924-1.652 1.652-.4107.7093-.616 1.568-.616 2.576s.2053 1.876.616 2.604c.4293.7093.98 1.26 1.652 1.652.6907.3733 1.428.56 2.212.56zM76.0875 13.62c-.56 0-1.0453-.196-1.456-.588-.392-.4107-.588-.896-.588-1.456 0-.56.196-1.036.588-1.428.4107-.392.896-.588 1.456-.588.56 0 1.036.196 1.428.588.4107.392.616.868.616 1.428 0 .56-.2053 1.0453-.616 1.456-.392.392-.868.588-1.428.588zM74.5755 30V15.72h3.024V30h-3.024zm8.4513-4.144v-7.504h-2.492V15.72h2.492v-4.032h3.024v4.032h3.5v2.632h-3.5v6.86c0 .7093.14 1.2507.42 1.624.2987.3733.7933.56 1.484.56.3547 0 .6533-.0467.896-.14.2613-.0933.5227-.224.784-.392v2.94c-.3173.1307-.6533.2333-1.008.308-.3547.0747-.7747.112-1.26.112-1.3253 0-2.38-.3827-3.164-1.148-.784-.784-1.176-1.8573-1.176-3.22zm13.932 4.592c-1.0266 0-1.9413-.196-2.744-.588-.8026-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2614-1.8667.784-2.576.5414-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8854-.56 2.968-.56.896 0 1.68.084 2.352.252.6912.168 1.2132.3453 1.5682.532V20.9c0-.9333-.336-1.68-1.008-2.24-.6722-.56-1.5402-.84-2.6042-.84-.728 0-1.4186.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.0722 0 3.6682.5133 4.7882 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.373.5787-.933 1.092-1.6802 1.54-.7466.448-1.6426.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5972-.3733 1.0642-.8587 1.4002-1.456.355-.616.532-1.2787.532-1.988-.429-.2427-.933-.4387-1.5122-.588-.5786-.168-1.1946-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5226.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644z" android:fillColor="#3c4043"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M156.529 9.44664v8.16616h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82685-1.776-1.24122-2.976-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.008V6.57217h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.34951 2.158 2.99393 2.158 4.93143 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM171.864 25.0602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.2949-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5935 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3266 4.413.9799v-.6869c0-1.0452-.415-1.9318-1.242-2.6616-.83-.7299-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0906 3.619-3.1358 6.476-3.1358zM199.463 13.9543l-10.04 23.0611h-3.105l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M144.373 18.4452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M131.454 31.5782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M123.901 20.7111c-.273-.8119-.422-1.678-.422-2.5721 0-.894.149-1.7601.422-2.572v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0345 0 2.1708.518 4.2205 1.433 6.0346l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M131.454 10.0196c1.982 0 3.759.6813 5.161 2.0159v.0019l3.84-3.83578C138.123 6.03271 135.082 4.7 131.454 4.7c-5.257 0-9.807 3.01446-12.021 7.4046l4.468 3.4624c1.065-3.1843 4.043-5.5474 7.553-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
<path android:pathData="M212.792 30V9.952h3.024V30h-3.024zm6.917 0V9.952h3.024V30h-3.024zm11.233.448c-1.027 0-1.942-.196-2.744-.588-.803-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.261-1.8667.784-2.576.541-.728 1.26-1.2787 2.156-1.652.896-.3733 1.885-.56 2.968-.56.896 0 1.68.084 2.352.252.69.168 1.213.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.419.168-2.072.504-.654.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.026-.504 2.146-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.374.5787-.934 1.092-1.68 1.54-.747.448-1.643.672-2.688.672zm.532-2.464c.784 0 1.474-.1867 2.072-.56.597-.3733 1.064-.8587 1.4-1.456.354-.616.532-1.2787.532-1.988-.43-.2427-.934-.4387-1.512-.588-.579-.168-1.195-.252-1.848-.252-1.232 0-2.11.252-2.632.756-.523.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644z" android:fillColor="#3c4043"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<vector android:width="242dp" android:height="38dp" android:viewportWidth="242" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M3.3555 30V9.952h3.08v17.136h8.624V30H3.3555zm19.1237.448c-1.0267 0-1.9414-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6906.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6534.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0266-.504 2.1466-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3734.5787-.9334 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4746-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3546-.616.532-1.2787.532-1.988-.4294-.2427-.9334-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1094.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zM33.5843 30V9.952h3.024v5.488l-.168 2.24h.168c.392-.6907.9893-1.26 1.792-1.708.8213-.4667 1.7267-.7 2.716-.7 1.7733 0 3.108.532 4.004 1.596.896 1.0453 1.344 2.4173 1.344 4.116V30h-2.996v-8.624c0-1.1573-.308-1.9973-.924-2.52-.5973-.5413-1.3347-.812-2.212-.812-.728 0-1.372.2053-1.932.616-.56.4107-.9987.952-1.316 1.624-.3173.6533-.476 1.3533-.476 2.1V30h-3.024zm18.3602-16.38c-.56 0-1.0453-.196-1.456-.588-.392-.4107-.588-.896-.588-1.456 0-.56.196-1.036.588-1.428.4107-.392.896-.588 1.456-.588.56 0 1.036.196 1.428.588.4107.392.616.868.616 1.428 0 .56-.2053 1.0453-.616 1.456-.392.392-.868.588-1.428.588zm-2.716 22.708c-.5786 0-1.1013-.0653-1.568-.196V33.22c.1867.112.4014.196.644.252.224.0747.448.112.672.112.5414 0 .9147-.168 1.12-.504.224-.3173.336-.784.336-1.4V15.72h3.024v15.988c0 1.6427-.4013 2.8187-1.204 3.528-.8026.728-1.8106 1.092-3.024 1.092zm14.8633-5.88c-1.4747 0-2.772-.336-3.892-1.008-1.12-.672-1.9973-1.5773-2.632-2.716-.6347-1.1387-.952-2.4267-.952-3.864 0-1.4187.3173-2.6973.952-3.836.6347-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4173-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9973 1.5867 2.632 2.744.6347 1.1387.952 2.4173.952 3.836 0 1.4373-.3173 2.7253-.952 3.864-.6347 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2133-.9427 1.624-1.652.4293-.728.644-1.596.644-2.604s-.2147-1.8667-.644-2.576c-.4107-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5213.196-2.212.588-.672.3733-1.2227.924-1.652 1.652-.4107.7093-.616 1.568-.616 2.576s.2053 1.876.616 2.604c.4293.7093.98 1.26 1.652 1.652.6907.3733 1.428.56 2.212.56zM76.0875 13.62c-.56 0-1.0453-.196-1.456-.588-.392-.4107-.588-.896-.588-1.456 0-.56.196-1.036.588-1.428.4107-.392.896-.588 1.456-.588.56 0 1.036.196 1.428.588.4107.392.616.868.616 1.428 0 .56-.2053 1.0453-.616 1.456-.392.392-.868.588-1.428.588zM74.5755 30V15.72h3.024V30h-3.024zm8.4513-4.144v-7.504h-2.492V15.72h2.492v-4.032h3.024v4.032h3.5v2.632h-3.5v6.86c0 .7093.14 1.2507.42 1.624.2987.3733.7933.56 1.484.56.3547 0 .6533-.0467.896-.14.2613-.0933.5227-.224.784-.392v2.94c-.3173.1307-.6533.2333-1.008.308-.3547.0747-.7747.112-1.26.112-1.3253 0-2.38-.3827-3.164-1.148-.784-.784-1.176-1.8573-1.176-3.22zm13.932 4.592c-1.0266 0-1.9413-.196-2.744-.588-.8026-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2614-1.8667.784-2.576.5414-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8854-.56 2.968-.56.896 0 1.68.084 2.352.252.6912.168 1.2132.3453 1.5682.532V20.9c0-.9333-.336-1.68-1.008-2.24-.6722-.56-1.5402-.84-2.6042-.84-.728 0-1.4186.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.0722 0 3.6682.5133 4.7882 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.373.5787-.933 1.092-1.6802 1.54-.7466.448-1.6426.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5972-.3733 1.0642-.8587 1.4002-1.456.355-.616.532-1.2787.532-1.988-.429-.2427-.933-.4387-1.5122-.588-.5786-.168-1.1946-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5226.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644z" android:fillColor="#ffffff"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M156.529 9.34665v8.16615h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82684-1.776-1.24121-2.976-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.008V6.47218h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.3495 2.158 2.99392 2.158 4.93142 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM171.864 24.9602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.295-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5936 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3267 4.413.9799v-.6868c0-1.0453-.415-1.9319-1.242-2.6617-.83-.7298-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0905 3.619-3.1358 6.476-3.1358zM199.463 13.8543l-10.04 23.0611h-3.105l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M144.373 18.3452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M131.454 31.4782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M123.901 20.6111c-.273-.8119-.422-1.678-.422-2.572 0-.8941.149-1.7602.422-2.5721v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0346 0 2.1707.518 4.2204 1.433 6.0345l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M131.454 9.91964c1.982 0 3.759.68126 5.161 2.01586v.0019l3.84-3.83577c-2.332-2.16891-5.373-3.50162-9.001-3.50162-5.257 0-9.807 3.01446-12.021 7.40459l4.468 3.4624c1.065-3.1843 4.043-5.54736 7.553-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
<path android:pathData="M212.792 30V9.952h3.024V30h-3.024zm6.917 0V9.952h3.024V30h-3.024zm11.233.448c-1.027 0-1.942-.196-2.744-.588-.803-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.261-1.8667.784-2.576.541-.728 1.26-1.2787 2.156-1.652.896-.3733 1.885-.56 2.968-.56.896 0 1.68.084 2.352.252.69.168 1.213.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.419.168-2.072.504-.654.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.026-.504 2.146-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.374.5787-.934 1.092-1.68 1.54-.747.448-1.643.672-2.688.672zm.532-2.464c.784 0 1.474-.1867 2.072-.56.597-.3733 1.064-.8587 1.4-1.456.354-.616.532-1.2787.532-1.988-.43-.2427-.934-.4387-1.512-.588-.579-.168-1.195-.252-1.848-.252-1.232 0-2.11.252-2.632.756-.523.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644z" android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
BIN
donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image.9.png
Executable file
|
After Width: | Height: | Size: 979 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 282 B |
|
After Width: | Height: | Size: 642 B |
|
After Width: | Height: | Size: 700 B |
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="220dp" android:height="38dp" android:viewportWidth="220" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M3.39456 30V9.952h6.412c2.10934 0 3.92004.4293 5.43204 1.288 1.5306.84 2.7066 2.016 3.528 3.528.84 1.512 1.26 3.248 1.26 5.208 0 1.9787-.42 3.724-1.26 5.236-.8214 1.4933-1.9974 2.6693-3.528 3.528-1.512.84-3.3227 1.26-5.43204 1.26h-6.412zm3.08-2.912h3.248c2.27734 0 4.04134-.6347 5.29204-1.904 1.2693-1.2693 1.904-3.0053 1.904-5.208s-.6347-3.9387-1.904-5.208c-1.2507-1.2693-3.0147-1.904-5.29204-1.904h-3.248v14.224zm23.17824 3.36c-1.4747 0-2.772-.336-3.892-1.008-1.12-.672-1.9974-1.5773-2.632-2.716-.6347-1.1387-.952-2.4267-.952-3.864 0-1.4187.3173-2.6973.952-3.836.6346-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4173-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9973 1.5867 2.632 2.744.6346 1.1387.952 2.4173.952 3.836 0 1.4373-.3174 2.7253-.952 3.864-.6347 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2133-.9427 1.624-1.652.4293-.728.644-1.596.644-2.604s-.2147-1.8667-.644-2.576c-.4107-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5214.196-2.212.588-.672.3733-1.2227.924-1.652 1.652-.4107.7093-.616 1.568-.616 2.576s.2053 1.876.616 2.604c.4293.7093.98 1.26 1.652 1.652.6906.3733 1.428.56 2.212.56zM39.9124 30V15.72h2.856v1.96h.168c.4107-.6907 1.0174-1.26 1.82-1.708.8214-.4667 1.7174-.7 2.688-.7 1.7547 0 3.0707.5227 3.948 1.568.8774 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2893-1.9973-.868-2.52-.5786-.5413-1.3346-.812-2.268-.812-.728 0-1.3626.2053-1.904.616-.5413.392-.9706.9147-1.288 1.568-.2986.6533-.448 1.3533-.448 2.1V30h-3.024zm20.8855.448c-1.0267 0-1.9413-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6907.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3733.5787-.9333 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3547-.616.532-1.2787.532-1.988-.4293-.2427-.9333-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zm24.0163 2.464c-1.4373 0-2.7066-.3267-3.808-.98-1.1013-.6533-1.9693-1.5493-2.604-2.688-.6346-1.1573-.952-2.464-.952-3.92s.3174-2.7533.952-3.892c.6347-1.1573 1.5027-2.0627 2.604-2.716 1.1014-.6533 2.3707-.98 3.808-.98 1.5867 0 2.9214.3547 4.004 1.064 1.1014.7093 1.8854 1.6707 2.352 2.884l-2.744 1.12c-.6533-1.5307-1.876-2.296-3.668-2.296-.784 0-1.5026.2053-2.156.616-.6533.392-1.176.952-1.568 1.68-.392.7093-.588 1.5493-.588 2.52 0 .9707.196 1.82.588 2.548.392.728.9147 1.288 1.568 1.68.6534.392 1.372.588 2.156.588.9147 0 1.6894-.2053 2.324-.616.6347-.4293 1.1294-1.008 1.484-1.736l2.688 1.176c-.504 1.1387-1.3066 2.0813-2.408 2.828-1.1013.7467-2.4453 1.12-4.032 1.12zm15.9158 0c-1.4745 0-2.7719-.336-3.8919-1.008-1.12-.672-1.9973-1.5773-2.632-2.716-.6346-1.1387-.952-2.4267-.952-3.864 0-1.4187.3174-2.6973.952-3.836.6347-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4174-1.008 3.8919-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.997 1.5867 2.632 2.744.635 1.1387.952 2.4173.952 3.836 0 1.4373-.317 2.7253-.952 3.864s-1.512 2.044-2.632 2.716c-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.213-.9427 1.624-1.652.429-.728.644-1.596.644-2.604s-.215-1.8667-.644-2.576c-.411-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5212.196-2.2119.588-.672.3733-1.2226.924-1.652 1.652-.4106.7093-.616 1.568-.616 2.576s.2054 1.876.616 2.604c.4294.7093.98 1.26 1.652 1.652.6907.3733 1.4279.56 2.2119.56zM111.522 30V15.72h2.856v1.96h.168c.41-.6907 1.017-1.26 1.82-1.708.821-.4667 1.717-.7 2.688-.7 1.754 0 3.07.5227 3.948 1.568.877 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.29-1.9973-.868-2.52-.579-.5413-1.335-.812-2.268-.812-.728 0-1.363.2053-1.904.616-.542.392-.971.9147-1.288 1.568-.299.6533-.448 1.3533-.448 2.1V30h-3.024z" android:fillColor="#3c4043"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M176.529 9.44664v8.16616h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82685-1.776-1.24122-2.976-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.008V6.57217h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.34951 2.158 2.99393 2.158 4.93143 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM191.864 25.0602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.2949-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5935 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3266 4.413.9799v-.6869c0-1.0452-.415-1.9318-1.242-2.6616-.83-.7299-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0906 3.619-3.1358 6.476-3.1358zM219.463 13.9543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M164.373 18.4452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M151.454 31.5782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M143.901 20.7111c-.273-.8119-.422-1.678-.422-2.5721 0-.894.149-1.7601.422-2.572v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0345 0 2.1708.518 4.2205 1.433 6.0346l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M151.454 10.0196c1.982 0 3.759.6813 5.161 2.0159v.0019l3.84-3.83578C158.123 6.03271 155.082 4.7 151.454 4.7c-5.257 0-9.807 3.01446-12.021 7.4046l4.468 3.4624c1.065-3.1843 4.043-5.5474 7.553-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="220dp" android:height="38dp" android:viewportWidth="220" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:pathData="M3.39456 30V9.952h6.412c2.10934 0 3.92004.4293 5.43204 1.288 1.5306.84 2.7066 2.016 3.528 3.528.84 1.512 1.26 3.248 1.26 5.208 0 1.9787-.42 3.724-1.26 5.236-.8214 1.4933-1.9974 2.6693-3.528 3.528-1.512.84-3.3227 1.26-5.43204 1.26h-6.412zm3.08-2.912h3.248c2.27734 0 4.04134-.6347 5.29204-1.904 1.2693-1.2693 1.904-3.0053 1.904-5.208s-.6347-3.9387-1.904-5.208c-1.2507-1.2693-3.0147-1.904-5.29204-1.904h-3.248v14.224zm23.17824 3.36c-1.4747 0-2.772-.336-3.892-1.008-1.12-.672-1.9974-1.5773-2.632-2.716-.6347-1.1387-.952-2.4267-.952-3.864 0-1.4187.3173-2.6973.952-3.836.6346-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4173-1.008 3.892-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.9973 1.5867 2.632 2.744.6346 1.1387.952 2.4173.952 3.836 0 1.4373-.3174 2.7253-.952 3.864-.6347 1.1387-1.512 2.044-2.632 2.716-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.2133-.9427 1.624-1.652.4293-.728.644-1.596.644-2.604s-.2147-1.8667-.644-2.576c-.4107-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5214.196-2.212.588-.672.3733-1.2227.924-1.652 1.652-.4107.7093-.616 1.568-.616 2.576s.2053 1.876.616 2.604c.4293.7093.98 1.26 1.652 1.652.6906.3733 1.428.56 2.212.56zM39.9124 30V15.72h2.856v1.96h.168c.4107-.6907 1.0174-1.26 1.82-1.708.8214-.4667 1.7174-.7 2.688-.7 1.7547 0 3.0707.5227 3.948 1.568.8774 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.2893-1.9973-.868-2.52-.5786-.5413-1.3346-.812-2.268-.812-.728 0-1.3626.2053-1.904.616-.5413.392-.9706.9147-1.288 1.568-.2986.6533-.448 1.3533-.448 2.1V30h-3.024zm20.8855.448c-1.0267 0-1.9413-.196-2.744-.588-.8027-.4107-1.428-.98-1.876-1.708-.448-.728-.672-1.5587-.672-2.492 0-1.008.2613-1.8667.784-2.576.5413-.728 1.26-1.2787 2.156-1.652.896-.3733 1.8853-.56 2.968-.56.896 0 1.68.084 2.352.252.6907.168 1.2133.3453 1.568.532V20.9c0-.9333-.336-1.68-1.008-2.24-.672-.56-1.54-.84-2.604-.84-.728 0-1.4187.168-2.072.504-.6533.3173-1.176.756-1.568 1.316l-2.072-1.596c.616-.8587 1.428-1.5307 2.436-2.016 1.0267-.504 2.1467-.756 3.36-.756 2.072 0 3.668.5133 4.788 1.54 1.12 1.008 1.68 2.4267 1.68 4.256V30h-2.94v-1.764h-.168c-.3733.5787-.9333 1.092-1.68 1.54-.7467.448-1.6427.672-2.688.672zm.532-2.464c.784 0 1.4747-.1867 2.072-.56.5973-.3733 1.064-.8587 1.4-1.456.3547-.616.532-1.2787.532-1.988-.4293-.2427-.9333-.4387-1.512-.588-.5787-.168-1.1947-.252-1.848-.252-1.232 0-2.1093.252-2.632.756-.5227.4853-.784 1.0827-.784 1.792 0 .672.252 1.2227.756 1.652s1.176.644 2.016.644zm24.0163 2.464c-1.4373 0-2.7066-.3267-3.808-.98-1.1013-.6533-1.9693-1.5493-2.604-2.688-.6346-1.1573-.952-2.464-.952-3.92s.3174-2.7533.952-3.892c.6347-1.1573 1.5027-2.0627 2.604-2.716 1.1014-.6533 2.3707-.98 3.808-.98 1.5867 0 2.9214.3547 4.004 1.064 1.1014.7093 1.8854 1.6707 2.352 2.884l-2.744 1.12c-.6533-1.5307-1.876-2.296-3.668-2.296-.784 0-1.5026.2053-2.156.616-.6533.392-1.176.952-1.568 1.68-.392.7093-.588 1.5493-.588 2.52 0 .9707.196 1.82.588 2.548.392.728.9147 1.288 1.568 1.68.6534.392 1.372.588 2.156.588.9147 0 1.6894-.2053 2.324-.616.6347-.4293 1.1294-1.008 1.484-1.736l2.688 1.176c-.504 1.1387-1.3066 2.0813-2.408 2.828-1.1013.7467-2.4453 1.12-4.032 1.12zm15.9158 0c-1.4745 0-2.7719-.336-3.8919-1.008-1.12-.672-1.9973-1.5773-2.632-2.716-.6346-1.1387-.952-2.4267-.952-3.864 0-1.4187.3174-2.6973.952-3.836.6347-1.1573 1.512-2.072 2.632-2.744 1.12-.672 2.4174-1.008 3.8919-1.008 1.456 0 2.744.336 3.864 1.008 1.12.672 1.997 1.5867 2.632 2.744.635 1.1387.952 2.4173.952 3.836 0 1.4373-.317 2.7253-.952 3.864s-1.512 2.044-2.632 2.716c-1.12.672-2.408 1.008-3.864 1.008zm0-2.772c.784 0 1.512-.1867 2.184-.56.672-.392 1.213-.9427 1.624-1.652.429-.728.644-1.596.644-2.604s-.215-1.8667-.644-2.576c-.411-.728-.952-1.2787-1.624-1.652-.672-.392-1.4-.588-2.184-.588-.784 0-1.5212.196-2.2119.588-.672.3733-1.2226.924-1.652 1.652-.4106.7093-.616 1.568-.616 2.576s.2054 1.876.616 2.604c.4294.7093.98 1.26 1.652 1.652.6907.3733 1.4279.56 2.2119.56zM111.522 30V15.72h2.856v1.96h.168c.41-.6907 1.017-1.26 1.82-1.708.821-.4667 1.717-.7 2.688-.7 1.754 0 3.07.5227 3.948 1.568.877 1.0453 1.316 2.4267 1.316 4.144V30h-2.996v-8.624c0-1.1573-.29-1.9973-.868-2.52-.579-.5413-1.335-.812-2.268-.812-.728 0-1.363.2053-1.904.616-.542.392-.971.9147-1.288 1.568-.299.6533-.448 1.3533-.448 2.1V30h-3.024z" android:fillColor="#ffffff"/>
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M176.529 9.34665v8.16615h5.036c1.2 0 2.192-.4032 2.976-1.2096.806-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.403-2.0364-1.209-2.8428-.784-.82684-1.776-1.24121-2.976-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.008V6.47218h7.978c2.028 0 3.749.67569 5.167 2.0252 1.439 1.3495 2.158 2.99392 2.158 4.93142 0 1.9822-.719 3.6379-2.158 4.965-1.396 1.3289-3.119 1.9916-5.167 1.9916h-4.97v.0018zM191.864 24.9602c0 .784.333 1.4373.998 1.9599s1.444.7839 2.338.7839c1.265 0 2.391-.4686 3.384-1.4036.992-.937 1.487-2.0364 1.487-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.222 0-2.24.295-3.057.8829-.817.5878-1.226 1.3141-1.226 2.1857zm3.892-11.6285c2.224 0 3.979.5936 5.266 1.7807 1.286 1.1871 1.928 2.8147 1.928 4.8828v9.8647h-2.877v-2.2212h-.131c-1.243 1.829-2.9 2.7438-4.97 2.7438-1.766 0-3.244-.5226-4.431-1.5679-1.188-1.0452-1.782-2.3518-1.782-3.9197 0-1.6556.626-2.9717 1.879-3.9515 1.254-.9799 2.927-1.4708 5.02-1.4708 1.786 0 3.258.3267 4.413.9799v-.6868c0-1.0453-.415-1.9319-1.242-2.6617-.83-.7298-1.798-1.0938-2.91-1.0938-1.68 0-3.008.7074-3.989 2.1241l-2.65-1.6668c1.461-2.0905 3.619-3.1358 6.476-3.1358zM219.463 13.8543l-10.039 23.0611h-3.106l3.728-8.069-6.606-14.9921h3.27l4.774 11.4979h.066l4.643-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M164.373 18.3452c0-.9463-.08-1.8591-.232-2.7326h-12.687v5.1759h7.266c-.312 1.6872-1.255 3.1227-2.687 4.084v3.3616h4.337c2.54-2.3406 4.003-5.7993 4.003-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M151.454 31.4782c3.63 0 6.687-1.1909 8.916-3.2441l-4.337-3.3616c-1.207.8119-2.761 1.286-4.579 1.286-3.51 0-6.488-2.363-7.553-5.5473h-4.468v3.4624c2.214 4.3901 6.764 7.4046 12.021 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M143.901 20.6111c-.273-.8119-.422-1.678-.422-2.572 0-.8941.149-1.7602.422-2.5721v-3.4625h-4.468c-.915 1.8143-1.433 3.8638-1.433 6.0346 0 2.1707.518 4.2204 1.433 6.0345l4.468-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M151.454 9.91964c1.982 0 3.759.68126 5.161 2.01586v.0019l3.84-3.83577c-2.332-2.16891-5.373-3.50162-9.001-3.50162-5.257 0-9.807 3.01446-12.021 7.40459l4.468 3.4624c1.065-3.1843 4.043-5.54736 7.553-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="236dp" android:height="38dp" android:viewportWidth="236" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M38.5289 9.44664v8.16616h5.036c1.1996 0 2.1916-.4032 2.9764-1.2096.8054-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.4036-2.0364-1.209-2.8428-.7848-.82685-1.7768-1.24122-2.9764-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.0084V6.57217h7.9788c2.0276 0 3.7485.67569 5.1666 2.0252 1.439 1.34951 2.1582 2.99393 2.1582 4.93143 0 1.9822-.7194 3.6379-2.1582 4.965-1.3958 1.3289-3.1186 1.9916-5.1666 1.9916h-4.9704v.0018zM53.8642 25.0602c0 .784.3326 1.4373.998 1.9599.665.5226 1.4442.7839 2.3376.7839 1.2648 0 2.3915-.4686 3.3837-1.4036.9924-.937 1.4874-2.0364 1.4874-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.2218 0-2.2402.2949-3.0568.8829-.8167.5878-1.2259 1.3141-1.2259 2.1857zm3.8922-11.6285c2.2236 0 3.9782.5935 5.2658 1.7807 1.2856 1.1871 1.9282 2.8147 1.9282 4.8828v9.8647H62.073v-2.2212h-.131c-1.2426 1.829-2.9 2.7438-4.9702 2.7438-1.7658 0-3.2439-.5226-4.4306-1.5679-1.1882-1.0452-1.7824-2.3518-1.7824-3.9197 0-1.6556.6258-2.9717 1.8796-3.9515 1.2538-.9799 2.9264-1.4708 5.0192-1.4708 1.7861 0 3.2586.3266 4.4133.9799v-.6869c0-1.0452-.4148-1.9318-1.2424-2.6616-.8298-.7299-1.7977-1.0938-2.9095-1.0938-1.6799 0-3.0082.7074-3.9892 2.1241l-2.6499-1.6668c1.4613-2.0906 3.6195-3.1358 6.4765-3.1358zM81.4629 13.9543L71.4233 37.0154h-3.1058l3.728-8.069-6.6056-14.9921h3.27l4.7742 11.4979h.0654l4.6434-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M26.3729 18.4452c0-.9463-.0803-1.8591-.2317-2.7326H13.4536v5.1759h7.2669c-.3121 1.6872-1.2557 3.1227-2.687 4.084v3.3616h4.3369c2.5394-2.3406 4.0025-5.7993 4.0025-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M13.4536 31.5782c3.6307 0 6.6876-1.1909 8.9168-3.2441l-4.3369-3.3616c-1.2071.8119-2.7618 1.286-4.5799 1.286-3.50915 0-6.48766-2.363-7.55274-5.5473H1.43311v3.4624c2.21425 4.3901 6.76422 7.4046 12.02049 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M5.90095 20.7111c-.27281-.8119-.4223-1.678-.4223-2.5721 0-.894.14949-1.7601.4223-2.572v-3.4625H1.43319C.517594 13.9188 0 15.9683 0 18.139c0 2.1708.517594 4.2205 1.43319 6.0346l4.46776-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M13.4536 10.0196c1.9826 0 3.7596.6813 5.161 2.0159v.0019l3.8399-3.83578C20.1226 6.03271 17.0824 4.7 13.4536 4.7c-5.25627 0-9.80624 3.01446-12.02049 7.4046l4.46775 3.4624c1.06508-3.1843 4.04359-5.5474 7.55274-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
<path android:pathData="M95.212 11.576l.252 2.436c3.024-.644 10.164-1.316 13.16-1.652-2.576 1.54-5.236 5.096-5.236 9.464 0 6.244 5.908 9.016 11.088 9.212l.812-2.324c-4.564-.168-9.66-1.904-9.66-7.364 0-3.332 2.436-7.588 6.412-8.876 1.428-.42 3.892-.448 5.488-.448v-2.24c-1.876.084-4.508.252-7.56.504-5.152.42-10.444.952-12.264 1.148-.532.056-1.428.112-2.492.14zm18.284 3.892l-1.428.616c.84 1.148 1.652 2.604 2.296 3.948l1.428-.672c-.588-1.232-1.652-2.968-2.296-3.892zm3.052-1.176l-1.372.644c.868 1.176 1.68 2.548 2.352 3.92l1.456-.7c-.644-1.232-1.764-2.94-2.436-3.864zm8.84-3.668h19.768v3.108h1.988V8.804H136.28v-2.24h-2.044v2.24h-10.78v4.928h1.932v-3.108zm10.248 14.14v2.856h-7.056v-2.856h7.056zm1.932 4.48V23.14H126.62v7.504h1.96v-1.4h8.988zm10.052-9.716h-4.172l.84-1.176c-2.1-1.12-5.908-2.492-9.072-3.304l.252-.504h8.68v-1.68H136c.14-.588.224-1.204.308-1.876h-1.932c-.084.7-.196 1.316-.336 1.876h-7.588v1.68h6.86c-1.148 1.82-3.388 2.828-7.98 3.444.336.364.812 1.092.952 1.54 4.088-.616 6.524-1.568 7.98-3.136 2.884.784 6.244 2.044 8.344 3.136h-19.6v1.876h18.508v8.344c0 .392-.084.476-.532.532-.476 0-2.016 0-3.696-.056.224.56.532 1.344.644 1.876 2.156 0 3.612.028 4.508-.28.896-.308 1.148-.868 1.148-2.016v-8.4h4.032v-1.876zM157.888 6.76c-1.596 4.34-4.256 8.596-7.112 11.312.392.476 1.036 1.568 1.288 2.044.952-.98 1.932-2.128 2.828-3.388v15.344h2.072V13.508c1.148-1.932 2.128-4.004 2.968-6.104l-2.044-.644zm18.34 6.02h-3.556V6.9h-2.1v5.88h-11.284v2.072h11.284V29.3c0 .644-.252.812-.868.868-.672.028-2.968.028-5.32-.056.308.56.7 1.512.812 2.044 3.024.028 4.9 0 5.992-.336 1.036-.308 1.484-.952 1.484-2.52V14.852h3.556V12.78zm-9.184 11.788c-.896-1.708-2.744-4.62-4.2-6.776l-1.792.84c1.428 2.24 3.22 5.236 4.06 6.972l1.932-1.036zm28.412-16.744h-2.548c.028.224.14 1.036.168 1.764.028.392.056 1.064.056 1.848-4.172.056-9.436.224-12.544.28l.056 2.156c3.5-.252 8.26-.448 12.516-.476.028.98.028 1.988.028 2.828-.56-.196-1.176-.308-1.876-.308-2.66 0-4.928 2.1-4.928 4.872 0 3.052 2.24 4.676 4.592 4.676.952 0 1.764-.252 2.436-.756-1.12 2.548-3.696 4.116-7.42 4.956l1.876 1.848c6.524-1.96 8.372-6.16 8.372-9.94 0-1.4-.308-2.632-.896-3.584-.028-1.288-.056-3.024-.056-4.62h.392c4.088 0 6.636.056 8.204.14l.028-2.072c-1.344 0-4.788-.028-8.204-.028h-.42c0-.756.028-1.4.028-1.82.028-.364.084-1.456.14-1.764zm-6.972 12.936c0-1.82 1.372-2.968 2.828-2.968 1.092 0 2.044.532 2.492 1.764.252 2.66-.812 3.976-2.464 3.976-1.568 0-2.856-1.036-2.856-2.772zm27.964 6.3c0-.98.98-1.792 2.24-1.792 2.128 0 3.528 1.596 3.752 3.808-.7.112-1.456.168-2.268.168-2.184 0-3.724-.84-3.724-2.184zm-3.584-17.696l.084 2.324c.588-.084 1.232-.14 1.848-.168 1.484-.084 7.084-.336 8.568-.392-1.428 1.26-4.928 4.2-6.496 5.488-1.624 1.372-5.208 4.368-7.532 6.272l1.596 1.652c3.556-3.612 6.048-5.6 10.724-5.6 3.64 0 6.272 2.072 6.272 4.816 0 2.296-1.26 3.92-3.5 4.788-.336-2.66-2.212-4.956-5.712-4.956-2.604 0-4.312 1.708-4.312 3.64 0 2.324 2.324 3.976 6.132 3.976 5.936 0 9.632-2.912 9.632-7.42 0-3.78-3.332-6.58-7.98-6.58-1.26 0-2.604.14-3.892.588 2.184-1.82 5.992-5.068 7.392-6.132.504-.42 1.064-.784 1.568-1.148l-1.288-1.624c-.28.084-.672.168-1.512.224-1.484.14-8.148.364-9.604.364-.56 0-1.344-.028-1.988-.112z" android:fillColor="#3c4043"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="236dp" android:height="38dp" android:viewportWidth="236" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M38.5289 9.34665v8.16615h5.036c1.1996 0 2.1916-.4032 2.9764-1.2096.8054-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.4036-2.0364-1.209-2.8428-.7848-.82684-1.7768-1.24121-2.9764-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.0084V6.47218h7.9788c2.0276 0 3.7485.67569 5.1666 2.0252 1.439 1.3495 2.1582 2.99392 2.1582 4.93142 0 1.9822-.7194 3.6379-2.1582 4.965-1.3958 1.3289-3.1186 1.9916-5.1666 1.9916h-4.9704v.0018zM53.8642 24.9602c0 .784.3326 1.4373.998 1.9599.665.5226 1.4442.7839 2.3376.7839 1.2648 0 2.3915-.4686 3.3837-1.4036.9924-.937 1.4874-2.0364 1.4874-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.2218 0-2.2402.295-3.0568.8829-.8167.5878-1.2259 1.3141-1.2259 2.1857zm3.8922-11.6285c2.2236 0 3.9782.5936 5.2658 1.7807 1.2856 1.1871 1.9282 2.8147 1.9282 4.8828v9.8647H62.073v-2.2212h-.131c-1.2426 1.829-2.9 2.7438-4.9702 2.7438-1.7658 0-3.2439-.5226-4.4306-1.5679-1.1882-1.0452-1.7824-2.3518-1.7824-3.9197 0-1.6556.6258-2.9717 1.8796-3.9515 1.2538-.9799 2.9264-1.4708 5.0192-1.4708 1.7861 0 3.2586.3267 4.4133.9799v-.6868c0-1.0453-.4148-1.9319-1.2424-2.6617-.8298-.7298-1.7977-1.0938-2.9095-1.0938-1.6799 0-3.0082.7074-3.9892 2.1241l-2.6499-1.6668c1.4613-2.0905 3.6195-3.1358 6.4765-3.1358zM81.4629 13.8543L71.4233 36.9154h-3.1058l3.728-8.069-6.6056-14.9921h3.27l4.7742 11.4979h.0654l4.6434-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M26.3729 18.3452c0-.9463-.0803-1.8591-.2317-2.7326H13.4536v5.1759h7.2669c-.3121 1.6872-1.2557 3.1227-2.687 4.084v3.3616h4.3369c2.5394-2.3406 4.0025-5.7993 4.0025-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M13.4536 31.4782c3.6307 0 6.6876-1.1909 8.9168-3.2441l-4.3369-3.3616c-1.2071.8119-2.7618 1.286-4.5799 1.286-3.50915 0-6.48766-2.363-7.55274-5.5473H1.43311v3.4624c2.21425 4.3901 6.76422 7.4046 12.02049 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M5.90095 20.6111c-.27281-.8119-.4223-1.678-.4223-2.572 0-.8941.14949-1.7602.4223-2.5721v-3.4625H1.43319C.517594 13.8188 0 15.8683 0 18.0391c0 2.1707.517594 4.2204 1.43319 6.0345l4.46776-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M13.4536 9.91964c1.9826 0 3.7596.68126 5.161 2.01586v.0019l3.8399-3.83577c-2.3319-2.16891-5.3721-3.50162-9.0009-3.50162-5.25627 0-9.80624 3.01446-12.02049 7.40459l4.46775 3.4624c1.06508-3.1843 4.04359-5.54736 7.55274-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
<path android:pathData="M95.212 11.576l.252 2.436c3.024-.644 10.164-1.316 13.16-1.652-2.576 1.54-5.236 5.096-5.236 9.464 0 6.244 5.908 9.016 11.088 9.212l.812-2.324c-4.564-.168-9.66-1.904-9.66-7.364 0-3.332 2.436-7.588 6.412-8.876 1.428-.42 3.892-.448 5.488-.448v-2.24c-1.876.084-4.508.252-7.56.504-5.152.42-10.444.952-12.264 1.148-.532.056-1.428.112-2.492.14zm18.284 3.892l-1.428.616c.84 1.148 1.652 2.604 2.296 3.948l1.428-.672c-.588-1.232-1.652-2.968-2.296-3.892zm3.052-1.176l-1.372.644c.868 1.176 1.68 2.548 2.352 3.92l1.456-.7c-.644-1.232-1.764-2.94-2.436-3.864zm8.84-3.668h19.768v3.108h1.988V8.804H136.28v-2.24h-2.044v2.24h-10.78v4.928h1.932v-3.108zm10.248 14.14v2.856h-7.056v-2.856h7.056zm1.932 4.48V23.14H126.62v7.504h1.96v-1.4h8.988zm10.052-9.716h-4.172l.84-1.176c-2.1-1.12-5.908-2.492-9.072-3.304l.252-.504h8.68v-1.68H136c.14-.588.224-1.204.308-1.876h-1.932c-.084.7-.196 1.316-.336 1.876h-7.588v1.68h6.86c-1.148 1.82-3.388 2.828-7.98 3.444.336.364.812 1.092.952 1.54 4.088-.616 6.524-1.568 7.98-3.136 2.884.784 6.244 2.044 8.344 3.136h-19.6v1.876h18.508v8.344c0 .392-.084.476-.532.532-.476 0-2.016 0-3.696-.056.224.56.532 1.344.644 1.876 2.156 0 3.612.028 4.508-.28.896-.308 1.148-.868 1.148-2.016v-8.4h4.032v-1.876zM157.888 6.76c-1.596 4.34-4.256 8.596-7.112 11.312.392.476 1.036 1.568 1.288 2.044.952-.98 1.932-2.128 2.828-3.388v15.344h2.072V13.508c1.148-1.932 2.128-4.004 2.968-6.104l-2.044-.644zm18.34 6.02h-3.556V6.9h-2.1v5.88h-11.284v2.072h11.284V29.3c0 .644-.252.812-.868.868-.672.028-2.968.028-5.32-.056.308.56.7 1.512.812 2.044 3.024.028 4.9 0 5.992-.336 1.036-.308 1.484-.952 1.484-2.52V14.852h3.556V12.78zm-9.184 11.788c-.896-1.708-2.744-4.62-4.2-6.776l-1.792.84c1.428 2.24 3.22 5.236 4.06 6.972l1.932-1.036zm28.412-16.744h-2.548c.028.224.14 1.036.168 1.764.028.392.056 1.064.056 1.848-4.172.056-9.436.224-12.544.28l.056 2.156c3.5-.252 8.26-.448 12.516-.476.028.98.028 1.988.028 2.828-.56-.196-1.176-.308-1.876-.308-2.66 0-4.928 2.1-4.928 4.872 0 3.052 2.24 4.676 4.592 4.676.952 0 1.764-.252 2.436-.756-1.12 2.548-3.696 4.116-7.42 4.956l1.876 1.848c6.524-1.96 8.372-6.16 8.372-9.94 0-1.4-.308-2.632-.896-3.584-.028-1.288-.056-3.024-.056-4.62h.392c4.088 0 6.636.056 8.204.14l.028-2.072c-1.344 0-4.788-.028-8.204-.028h-.42c0-.756.028-1.4.028-1.82.028-.364.084-1.456.14-1.764zm-6.972 12.936c0-1.82 1.372-2.968 2.828-2.968 1.092 0 2.044.532 2.492 1.764.252 2.66-.812 3.976-2.464 3.976-1.568 0-2.856-1.036-2.856-2.772zm27.964 6.3c0-.98.98-1.792 2.24-1.792 2.128 0 3.528 1.596 3.752 3.808-.7.112-1.456.168-2.268.168-2.184 0-3.724-.84-3.724-2.184zm-3.584-17.696l.084 2.324c.588-.084 1.232-.14 1.848-.168 1.484-.084 7.084-.336 8.568-.392-1.428 1.26-4.928 4.2-6.496 5.488-1.624 1.372-5.208 4.368-7.532 6.272l1.596 1.652c3.556-3.612 6.048-5.6 10.724-5.6 3.64 0 6.272 2.072 6.272 4.816 0 2.296-1.26 3.92-3.5 4.788-.336-2.66-2.212-4.956-5.712-4.956-2.604 0-4.312 1.708-4.312 3.64 0 2.324 2.324 3.976 6.132 3.976 5.936 0 9.632-2.912 9.632-7.42 0-3.78-3.332-6.58-7.98-6.58-1.26 0-2.604.14-3.892.588 2.184-1.82 5.992-5.068 7.392-6.132.504-.42 1.064-.784 1.568-1.148l-1.288-1.624c-.28.084-.672.168-1.512.224-1.484.14-8.148.364-9.604.364-.56 0-1.344-.028-1.988-.112z" android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="180dp" android:height="38dp" android:viewportWidth="180" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M38.5289 9.44664v8.16616h5.036c1.1996 0 2.1916-.4032 2.9764-1.2096.8054-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.4036-2.0364-1.209-2.8428-.7848-.82685-1.7768-1.24122-2.9764-1.24122h-5.036v.00186zm0 11.04056v9.4727h-3.0084V6.57217h7.9788c2.0276 0 3.7485.67569 5.1666 2.0252 1.439 1.34951 2.1582 2.99393 2.1582 4.93143 0 1.9822-.7194 3.6379-2.1582 4.965-1.3958 1.3289-3.1186 1.9916-5.1666 1.9916h-4.9704v.0018zM53.8642 25.0602c0 .784.3326 1.4373.998 1.9599.665.5226 1.4442.7839 2.3376.7839 1.2648 0 2.3915-.4686 3.3837-1.4036.9924-.937 1.4874-2.0364 1.4874-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.2218 0-2.2402.2949-3.0568.8829-.8167.5878-1.2259 1.3141-1.2259 2.1857zm3.8922-11.6285c2.2236 0 3.9782.5935 5.2658 1.7807 1.2856 1.1871 1.9282 2.8147 1.9282 4.8828v9.8647H62.073v-2.2212h-.131c-1.2426 1.829-2.9 2.7438-4.9702 2.7438-1.7658 0-3.2439-.5226-4.4306-1.5679-1.1882-1.0452-1.7824-2.3518-1.7824-3.9197 0-1.6556.6258-2.9717 1.8796-3.9515 1.2538-.9799 2.9264-1.4708 5.0192-1.4708 1.7861 0 3.2586.3266 4.4133.9799v-.6869c0-1.0452-.4148-1.9318-1.2424-2.6616-.8298-.7299-1.7977-1.0938-2.9095-1.0938-1.6799 0-3.0082.7074-3.9892 2.1241l-2.6499-1.6668c1.4613-2.0906 3.6195-3.1358 6.4765-3.1358zM81.4629 13.9543L71.4233 37.0154h-3.1058l3.728-8.069-6.6056-14.9921h3.27l4.7742 11.4979h.0654l4.6434-11.4979h3.27z" android:fillColor="#5f6368" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M26.3729 18.4452c0-.9463-.0803-1.8591-.2317-2.7326H13.4536v5.1759h7.2669c-.3121 1.6872-1.2557 3.1227-2.687 4.084v3.3616h4.3369c2.5394-2.3406 4.0025-5.7993 4.0025-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M13.4536 31.5782c3.6307 0 6.6876-1.1909 8.9168-3.2441l-4.3369-3.3616c-1.2071.8119-2.7618 1.286-4.5799 1.286-3.50915 0-6.48766-2.363-7.55274-5.5473H1.43311v3.4624c2.21425 4.3901 6.76422 7.4046 12.02049 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M5.90095 20.7111c-.27281-.8119-.4223-1.678-.4223-2.5721 0-.894.14949-1.7601.4223-2.572v-3.4625H1.43319C.517594 13.9188 0 15.9683 0 18.139c0 2.1708.517594 4.2205 1.43319 6.0346l4.46776-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M13.4536 10.0196c1.9826 0 3.7596.6813 5.161 2.0159v.0019l3.8399-3.83578C20.1226 6.03271 17.0824 4.7 13.4536 4.7c-5.25627 0-9.80624 3.01446-12.02049 7.4046l4.46775 3.4624c1.06508-3.1843 4.04359-5.5474 7.55274-5.5474z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
<path android:pathData="M107 27.088v-4.732h8.036v-1.848H99.58v-4.06h14.868V8.804H97.256v1.876h14.952v3.92H97.312v7.756h7.364v4.732h-10.22v1.876h22.82v-1.876H107zm21.861-17.416v1.848h9.436c-.476 5.964-3.836 10.78-10.584 14l1.232 1.876c8.344-4.088 11.676-10.472 11.676-17.724h-11.76zm16.828-2.716v25.116h2.296V6.956h-2.296zm25.33 9.996h-12.46v-3.696h12.46v3.696zm2.296-8.988h-2.296v3.444h-12.46V7.964h-2.268v10.864h17.024V7.964zm2.884 13.888h-22.792V23.7h10.192v8.4h2.296v-8.4h10.304v-1.848z" android:fillColor="#3c4043"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<vector android:width="180dp" android:height="38dp" android:viewportWidth="180" android:viewportHeight="38" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<group>
|
||||
<group>
|
||||
<path android:pathData="M38.5289 9.34665v8.16615h5.036c1.1996 0 2.1916-.4032 2.9764-1.2096.8054-.8044 1.209-1.7638 1.209-2.8744 0-1.0882-.4036-2.0364-1.209-2.8428-.7848-.82684-1.7768-1.24121-2.9764-1.24121h-5.036v.00186zm0 11.04055v9.4727h-3.0084V6.47218h7.9788c2.0276 0 3.7485.67569 5.1666 2.0252 1.439 1.3495 2.1582 2.99392 2.1582 4.93142 0 1.9822-.7194 3.6379-2.1582 4.965-1.3958 1.3289-3.1186 1.9916-5.1666 1.9916h-4.9704v.0018zM53.8642 24.9602c0 .784.3326 1.4373.998 1.9599.665.5226 1.4442.7839 2.3376.7839 1.2648 0 2.3915-.4686 3.3837-1.4036.9924-.937 1.4874-2.0364 1.4874-3.2982-.938-.741-2.246-1.1106-3.924-1.1106-1.2218 0-2.2402.295-3.0568.8829-.8167.5878-1.2259 1.3141-1.2259 2.1857zm3.8922-11.6285c2.2236 0 3.9782.5936 5.2658 1.7807 1.2856 1.1871 1.9282 2.8147 1.9282 4.8828v9.8647H62.073v-2.2212h-.131c-1.2426 1.829-2.9 2.7438-4.9702 2.7438-1.7658 0-3.2439-.5226-4.4306-1.5679-1.1882-1.0452-1.7824-2.3518-1.7824-3.9197 0-1.6556.6258-2.9717 1.8796-3.9515 1.2538-.9799 2.9264-1.4708 5.0192-1.4708 1.7861 0 3.2586.3267 4.4133.9799v-.6868c0-1.0453-.4148-1.9319-1.2424-2.6617-.8298-.7298-1.7977-1.0938-2.9095-1.0938-1.6799 0-3.0082.7074-3.9892 2.1241l-2.6499-1.6668c1.4613-2.0905 3.6195-3.1358 6.4765-3.1358zM81.4629 13.8543L71.4233 36.9154h-3.1058l3.728-8.069-6.6056-14.9921h3.27l4.7742 11.4979h.0654l4.6434-11.4979h3.27z" android:fillColor="#ffffff" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
<group>
|
||||
<path android:pathData="M26.3729 18.3452c0-.9463-.0803-1.8591-.2317-2.7326H13.4536v5.1759h7.2669c-.3121 1.6872-1.2557 3.1227-2.687 4.084v3.3616h4.3369c2.5394-2.3406 4.0025-5.7993 4.0025-9.8889z" android:fillColor="#4285f4" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M13.4536 31.4782c3.6307 0 6.6876-1.1909 8.9168-3.2441l-4.3369-3.3616c-1.2071.8119-2.7618 1.286-4.5799 1.286-3.50915 0-6.48766-2.363-7.55274-5.5473H1.43311v3.4624c2.21425 4.3901 6.76422 7.4046 12.02049 7.4046z" android:fillColor="#34a853" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M5.90095 20.6111c-.27281-.8119-.4223-1.678-.4223-2.572 0-.8941.14949-1.7602.4223-2.5721v-3.4625H1.43319C.517594 13.8188 0 15.8683 0 18.0391c0 2.1707.517594 4.2204 1.43319 6.0345l4.46776-3.4625z" android:fillColor="#fabb05" android:fillType="evenOdd"/>
|
||||
<path android:pathData="M13.4536 9.91964c1.9826 0 3.7596.68126 5.161 2.01586v.0019l3.8399-3.83577c-2.3319-2.16891-5.3721-3.50162-9.0009-3.50162-5.25627 0-9.80624 3.01446-12.02049 7.40459l4.46775 3.4624c1.06508-3.1843 4.04359-5.54736 7.55274-5.54736z" android:fillColor="#e94235" android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</group>
|
||||
<path android:pathData="M107 27.088v-4.732h8.036v-1.848H99.58v-4.06h14.868V8.804H97.256v1.876h14.952v3.92H97.312v7.756h7.364v4.732h-10.22v1.876h22.82v-1.876H107zm21.861-17.416v1.848h9.436c-.476 5.964-3.836 10.78-10.584 14l1.232 1.876c8.344-4.088 11.676-10.472 11.676-17.724h-11.76zm16.828-2.716v25.116h2.296V6.956h-2.296zm25.33 9.996h-12.46v-3.696h12.46v3.696zm2.296-8.988h-2.296v3.444h-12.46V7.964h-2.268v10.864h17.024V7.964zm2.884 13.888h-22.792V23.7h10.192v8.4h2.296v-8.4h10.304v-1.848z" android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
BIN
donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image.9.png
Executable file
|
After Width: | Height: | Size: 439 B |
|
After Width: | Height: | Size: 571 B |
|
After Width: | Height: | Size: 484 B |
|
After Width: | Height: | Size: 174 B |
|
After Width: | Height: | Size: 240 B |
|
After Width: | Height: | Size: 250 B |
|
After Width: | Height: | Size: 1 KiB |
|
After Width: | Height: | Size: 508 B |
|
After Width: | Height: | Size: 432 B |
|
After Width: | Height: | Size: 219 B |
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="#1f000000">
|
||||
<item>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item
|
||||
android:state_enabled="false"
|
||||
android:state_focused="true"
|
||||
android:drawable="@drawable/googlepay_button_background_image_focused" />
|
||||
<item
|
||||
android:state_enabled="false"
|
||||
android:drawable="@drawable/googlepay_button_background_image" />
|
||||
<!-- Skipping state_pressed="true" because the ripple effect is sufficient feedback -->
|
||||
<item
|
||||
android:state_focused="true"
|
||||
android:drawable="@drawable/googlepay_button_background_image_focused" />
|
||||
<item
|
||||
android:drawable="@drawable/googlepay_button_background_image" />
|
||||
</selector>
|
||||
</item>
|
||||
</ripple>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="#1f000000">
|
||||
<item>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item
|
||||
android:state_enabled="false"
|
||||
android:state_focused="true"
|
||||
android:drawable="@drawable/googlepay_button_no_shadow_background_image_focused" />
|
||||
<item
|
||||
android:state_enabled="false"
|
||||
android:drawable="@drawable/googlepay_button_no_shadow_background_image" />
|
||||
<!-- Skipping state_pressed="true" because the ripple effect is sufficient feedback -->
|
||||
<item
|
||||
android:state_focused="true"
|
||||
android:drawable="@drawable/googlepay_button_no_shadow_background_image_focused" />
|
||||
<item
|
||||
android:drawable="@drawable/googlepay_button_no_shadow_background_image" />
|
||||
</selector>
|
||||
</item>
|
||||
</ripple>
|
||||